Skip to content

Commit 4df76f5

Browse files
authored
Exporting the per-package RSS/atom feed with the rest of exported APIs. (#8707)
1 parent 19625e0 commit 4df76f5

File tree

17 files changed

+93
-18
lines changed

17 files changed

+93
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Important changes to data models, configuration, and migrations between each
22
AppEngine version, listed here to ease deployment and troubleshooting.
33

44
## Next Release (replace with git tag when deployed)
5+
* Note: after the release we should update the load balancer rules to also include the `/api/packages/<package>/feed.atom` URLs.
56

67
## `20250403t085600-all`
78
* Bump runtimeVersion to `2025.04.01`.

app/lib/admin/actions/moderate_package.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ Note: the action may take a longer time to complete as the public archive bucket
7979
return pkg;
8080
});
8181

82+
// make sure visibility cache is updated immediately
83+
await purgePackageCache(package);
84+
8285
// sync exported API(s)
8386
await apiExporter?.synchronizePackage(package, forceDelete: true);
8487

app/lib/admin/actions/moderate_package_versions.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ Set the moderated flag on a package version (updating the flag and the timestamp
112112
return v;
113113
});
114114

115+
// make sure visibility cache is updated immediately
116+
await purgePackageCache(package);
117+
115118
// sync exported API(s)
116119
await apiExporter?.synchronizePackage(package, forceDelete: true);
117120

app/lib/frontend/handlers/atom_feed.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Future<shelf.Response> allPackagesAtomFeedhandler(shelf.Request request) async {
3232
);
3333
}
3434

35-
/// Handles requests for `/packages/<package>/feed.atom`
35+
/// Handles requests for `/api/packages/<package>/feed.atom`
3636
Future<shelf.Response> packageAtomFeedhandler(
3737
shelf.Request request,
3838
String package,

app/lib/frontend/handlers/pubapi.client.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,13 @@ class PubApiClient {
132132
));
133133
}
134134

135+
Future<List<int>> packageAtomFeed(String package) async {
136+
return await _client.requestBytes(
137+
verb: 'get',
138+
path: '/api/packages/$package/feed.atom',
139+
);
140+
}
141+
135142
Future<_i5.PublisherInfo> createPublisher(String publisherId) async {
136143
return _i5.PublisherInfo.fromJson(await _client.requestJson(
137144
verb: 'post',

app/lib/frontend/handlers/pubapi.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:_pub_shared/data/package_api.dart';
99
import 'package:_pub_shared/data/publisher_api.dart';
1010
import 'package:_pub_shared/data/task_api.dart';
1111
import 'package:api_builder/api_builder.dart';
12+
import 'package:pub_dev/frontend/handlers/atom_feed.dart';
1213
import 'package:shelf/shelf.dart';
1314
import 'package:shelf_router/shelf_router.dart';
1415

@@ -215,6 +216,11 @@ class PubApi {
215216
) async =>
216217
await packageBackend.inviteUploader(package, invite);
217218

219+
/// Renders the Atom XML feed for the package.
220+
@EndPoint.get('/api/packages/<package>/feed.atom')
221+
Future<Response> packageAtomFeed(Request request, String package) =>
222+
packageAtomFeedhandler(request, package);
223+
218224
// ****
219225
// **** Publisher API
220226
// ****

app/lib/frontend/handlers/pubapi.g.dart

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/lib/frontend/handlers/routes.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,6 @@ class PubSiteService {
176176
Future<Response> packageVersions(Request request, String package) =>
177177
packageVersionsListHandler(request, package);
178178

179-
/// Renders the Atom XML feed for the package.
180-
@Route.get('/packages/<package>/feed.atom')
181-
Future<Response> packageAtomFeed(Request request, String package) =>
182-
packageAtomFeedhandler(request, package);
183-
184179
@Route.get('/packages/<package>')
185180
Future<Response> package(Request request, String package) =>
186181
packageVersionHandlerHtml(request, package);

app/lib/frontend/handlers/routes.g.dart

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/lib/package/api_export/api_exporter.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ final class ApiExporter {
244244
versionListing,
245245
forceWrite: forceWrite,
246246
);
247+
await _api.package(package).feedAtomFile.write(
248+
await buildPackageAtomFeedContent(package),
249+
forceWrite: forceWrite,
250+
);
247251
}
248252

249253
/// Scan for updates from packages until [abort] is resolved, or [claim]

0 commit comments

Comments
 (0)