From 0d2d477fd1c583fd19409a7d86b5d406266d7dab Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Wed, 5 Nov 2025 13:19:45 +0100 Subject: [PATCH] Implement the skipArchiveExport in the post-package-update triggers. --- .../admin/actions/package_publisher_set.dart | 2 +- .../actions/publisher_package_remove.dart | 2 +- app/lib/package/api_export/api_exporter.dart | 34 ++++++++++++------- app/lib/package/backend.dart | 12 +++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/app/lib/admin/actions/package_publisher_set.dart b/app/lib/admin/actions/package_publisher_set.dart index dea56ccd55..97d42747d6 100644 --- a/app/lib/admin/actions/package_publisher_set.dart +++ b/app/lib/admin/actions/package_publisher_set.dart @@ -48,7 +48,7 @@ final packagePublisherSet = AdminAction( triggerPackagePostUpdates( packageName, skipReanalysis: true, - skipVersionsExport: true, + skipArchiveExport: true, ); if (currentPublisherId != null) { await purgePublisherCache(publisherId: currentPublisherId); diff --git a/app/lib/admin/actions/publisher_package_remove.dart b/app/lib/admin/actions/publisher_package_remove.dart index 32cf530468..df28aeb3ee 100644 --- a/app/lib/admin/actions/publisher_package_remove.dart +++ b/app/lib/admin/actions/publisher_package_remove.dart @@ -63,7 +63,7 @@ If the publisher has no members, the package will end up without uploaders. triggerPackagePostUpdates( packageName, skipReanalysis: true, - skipVersionsExport: true, + skipArchiveExport: true, ); await purgePublisherCache(publisherId: currentPublisherId); return { diff --git a/app/lib/package/api_export/api_exporter.dart b/app/lib/package/api_export/api_exporter.dart index 26df0c6b63..9503bb6c81 100644 --- a/app/lib/package/api_export/api_exporter.dart +++ b/app/lib/package/api_export/api_exporter.dart @@ -203,10 +203,14 @@ final class ApiExporter { /// /// When [forceDelete] is set, the age threshold limit for stray files is /// ignored, they will be deleted even if they were updated recently. + /// + /// When [skipArchives] is set, skip the archive-related exports + /// (e.g. public or canonical buckets). Future synchronizePackage( String package, { bool forceWrite = false, bool forceDelete = false, + bool skipArchives = false, }) async { _log.info('synchronizePackage("$package")'); @@ -229,21 +233,25 @@ final class ApiExporter { skipCache: true, // Skipping the cache when fetching security advisories ); - final versions = await packageBackend.tarballStorage - .listVersionsInCanonicalBucket(package); + if (!skipArchives) { + final versions = await packageBackend.tarballStorage + .listVersionsInCanonicalBucket(package); - // Remove versions that are not exposed in the public API. - versions.removeWhere( - (version, _) => !versionListing.versions.any((v) => v.version == version), - ); + // Remove versions that are not exposed in the public API. + versions.removeWhere( + (version, _) => + !versionListing.versions.any((v) => v.version == version), + ); + + await _api + .package(package) + .synchronizeTarballs( + versions, + forceWrite: forceWrite, + forceDelete: forceDelete, + ); + } - await _api - .package(package) - .synchronizeTarballs( - versions, - forceWrite: forceWrite, - forceDelete: forceDelete, - ); await _api .package(package) .advisories diff --git a/app/lib/package/backend.dart b/app/lib/package/backend.dart index 6a7734c620..8f28c39f70 100644 --- a/app/lib/package/backend.dart +++ b/app/lib/package/backend.dart @@ -567,7 +567,7 @@ class PackageBackend { ), ); }); - triggerPackagePostUpdates(package, skipVersionsExport: true); + triggerPackagePostUpdates(package, skipArchiveExport: true); } /// Updates [options] on [package]/[version], assuming the current user @@ -929,7 +929,7 @@ class PackageBackend { triggerPackagePostUpdates( packageName, skipReanalysis: true, - skipVersionsExport: true, + skipArchiveExport: true, ); return rs; } @@ -2446,10 +2446,8 @@ class _VersionTransactionDataAcccess { /// Skip triggering a new export to the CDN bucket. bool skipExport = false, - /// Skip only the version-related exports to the CDN bucket, keeps the - /// package-related operations. - /// TODO: implement this in API exporter. - bool skipVersionsExport = false, + /// Skip only the archive-related exports to the CDN bucket. + bool skipArchiveExport = false, /// Pass the force-deletion flag to the package export operation. bool exportForceDelete = false, @@ -2476,7 +2474,7 @@ class _VersionTransactionDataAcccess { () => apiExporter.synchronizePackage( package, forceDelete: exportForceDelete, - // TODO: implement and use [skipVersionsExport] + skipArchives: skipArchiveExport, ), ), ];