Skip to content

Bazel Cache Cleanup #445

Bazel Cache Cleanup

Bazel Cache Cleanup #445

name: Bazel Cache Cleanup
on:
workflow_dispatch: {}
schedule:
- cron: '0 * * * *'
permissions:
packages: write
jobs:
clean:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/github-script@v8
with:
script: |
const package_type = "container";
const package_name = "sbb-angular/bazel-cache";
const org = "sbb-design-systems";
const chunkSize = 25;
for (let i = 0; i < 40; i++) {
const response = await octokit.rest.packages.getAllPackageVersionsForPackageOwnedByOrg({
package_type,
package_name,
org,
per_page: 100
});
if (
response.status !== 200 ||
!response.data.length ||
parseInt(response.headers["x-ratelimit-remaining"] ?? "0") < 1000
) {
break;
}
console.log(
`${new Date().toLocaleTimeString("de-CH")} Remaining requests: ${
response.headers["x-ratelimit-remaining"]
} (Until ${new Date(
parseInt(response.headers["x-ratelimit-reset"] ?? "0") * 1000
).toLocaleString()})`
);
for (let i = 0; i < 100 / chunkSize; i++) {
const chunk = response.data.slice(i * chunkSize, i * chunkSize + chunkSize);
await Promise.all(
chunk.map(async (version) => {
console.log(
`${new Date().toLocaleTimeString("de-CH")} Deleting version ${
version.metadata?.container?.tags?.[0] ?? version.name
}...`
);
try {
await octokit.rest.packages.deletePackageVersionForOrg({
package_type,
package_name,
org,
package_version_id: version.id,
});
} catch (error) {
console.error(
`${new Date().toLocaleTimeString(
"de-CH"
)} Failed to delete version ${
version.metadata?.container?.tags?.[0] ?? version.name
}:`
);
}
})
);
}
}