summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2022-11-06 03:44:02 -0500
committerGitHub <noreply@github.com>2022-11-06 03:44:02 -0500
commit7ae8e66a3a43d126e95d0ce977be93ed4e4949f6 (patch)
tree7f1a55bf27aeed38758cfb146603cc4df0d9f458 /scripts
parent29bc0b67bae1598cae1fa5202dae3999c7c05f69 (diff)
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
Diffstat (limited to 'scripts')
-rw-r--r--scripts/clear_cache.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/clear_cache.py b/scripts/clear_cache.py
new file mode 100644
index 00000000..167a12de
--- /dev/null
+++ b/scripts/clear_cache.py
@@ -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()