ci: add cache clearing to PR merges (#874)

* ci: add cache clearing to PR merges

* some renaming

* small change to force cache

* add manual run option
This commit is contained in:
Clement Tsang 2022-11-06 03:44:02 -05:00 committed by GitHub
parent 29bc0b67ba
commit 7ae8e66a3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 87 additions and 3 deletions

View file

@ -6,7 +6,7 @@
# - FreeBSD (x86_64)
# - macOS (aarch64)
name: "Build Releases"
name: "build releases"
on:
workflow_dispatch:

26
.github/workflows/clear-pr-cache.yml vendored Normal file
View file

@ -0,0 +1,26 @@
# Simple job to clear the cache used by a PR when it is closed/merged.
name: "clear PR cache"
on:
workflow_dispatch:
inputs:
id:
description: "Which id to clear:"
required: false
pull_request:
types:
- closed
jobs:
clear-cache:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- run: |
if [[ -z "${{ github.event.inputs.id }}" ]]; then
python ./scripts/clear_cache.py ${{ github.event.pull_request.number }}
else
python ./scripts/clear_cache.py ${{ github.event.inputs.id }}
fi

View file

@ -1,6 +1,6 @@
# Small CI workflow to test if mkdocs documentation can be successfully built.
name: test-docs
name: test docs
on:
workflow_dispatch:
pull_request:

58
scripts/clear_cache.py Normal file
View file

@ -0,0 +1,58 @@
#!/bin/python3
# A simple script to clean caches matching a PR ID.
#
# Expects a GitHub token in the environment variables as GITHUB_TOKEN.
import os
import json
import sys
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
URL = "https://api.github.com/repos/ClementTsang/bottom/actions/caches"
def cache_list_request(key):
request = Request(URL, method="GET")
request.add_header("Accept", "application/vnd.github+json")
request.add_header("Authorization", "Bearer {}".format(key))
return request
def delete_cache_request(key, id):
request = Request("{}/{}".format(URL, id), method="DELETE")
request.add_header("Accept", "application/vnd.github+json")
request.add_header("Authorization", "Bearer {}".format(key))
return request
def main():
args = sys.argv
env = os.environ
key = env["GITHUB_TOKEN"]
pr_id = args[1]
ref = "refs/pull/{}/merge".format(pr_id)
with urlopen(cache_list_request(key)) as response:
response = json.load(response)
caches = response["actions_caches"]
for cache in caches:
if cache["ref"] == ref:
id = cache["id"]
try:
print("Deleting ID {}...".format(id))
urlopen(delete_cache_request(key, id))
except HTTPError as e:
print("HTTPError with delete, error code {}.".format(e.code))
except URLError as _:
print("URLError with delete.")
else:
print("Successfully deleted cache ID {}!".format(id))
if __name__ == "__main__":
main()

View file

@ -347,7 +347,7 @@ pub fn update_data(app: &mut App) {
{
let data = &app.converted_data.cpu_data;
for cpu in app.cpu_state.widget_states.values_mut() {
cpu.update_table(data)
cpu.update_table(data);
}
}
{