62 lines
1.7 KiB
YAML
62 lines
1.7 KiB
YAML
name: Clear cache
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
jobs:
|
|
clear-cache:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Clear cache
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const opts = {
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
};
|
|
|
|
const cache_list = await github.rest.actions.getActionsCacheList({
|
|
per_page: 1,
|
|
...opts,
|
|
});
|
|
const per_page = 100;
|
|
const pages = Math.ceil(cache_list.data.total_count / per_page);
|
|
|
|
const total_count = cache_list.data.total_count;
|
|
let deleted = 0;
|
|
const _id = setInterval(() => {
|
|
console.log(`${deleted}/${total_count}`);
|
|
}, 500);
|
|
|
|
let promises = [];
|
|
for (let page = 1; page <= pages; page++) {
|
|
const cache_page = await github.rest.actions.getActionsCacheList({
|
|
per_page,
|
|
page,
|
|
...opts,
|
|
});
|
|
for (const cache of cache_page.data.actions_caches) {
|
|
promises.push(
|
|
github.rest.actions
|
|
.deleteActionsCacheById({
|
|
cache_id: cache.id,
|
|
...opts,
|
|
})
|
|
.then(() => (deleted += 1))
|
|
);
|
|
}
|
|
await Promise.all(promises);
|
|
promises = [];
|
|
|
|
// wait 60 seconds every 4 pages (secondary rate limit)
|
|
if (page % 4 === 0) {
|
|
await new Promise(f => setTimeout(f, 60_000));
|
|
}
|
|
}
|
|
|
|
clearInterval(_id);
|