From 61fa7d1fd6cb97430df28610e8c10d4d6cd59d61 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Sat, 20 Oct 2018 15:33:20 +0200 Subject: appveyor-clear.py: script to delete old builds Large artifacts may be accumulated and at the moment hits the 50GB limit. Deleting them one by one is cumbersome, so here is a way to automate it. Motivation: https://code.wireshark.org/review/30268 --- appveyor-clear.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 appveyor-clear.py diff --git a/appveyor-clear.py b/appveyor-clear.py new file mode 100755 index 0000000..a247eac --- /dev/null +++ b/appveyor-clear.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +""" +Clears the build history, removing all but the last 100 builds. Usage: + +Go to https://ci.appveyor.com/api-keys for an account-specific (v1) token. Then: + + export APPVEYOR_TOKEN=... + ./appveyor-clear.py Lekensteyn/wireshark + +Other options exist, use ./appveyor-clear.py --help to see them all. +""" + +import argparse +import os +import sys +import requests + +parser = argparse.ArgumentParser() +parser.add_argument("--token", default=os.environ.get("APPVEYOR_TOKEN"), + help="v1 API token (defaults to APPVEYOR_TOKEN environment variable). See " + "https://ci.appveyor.com/api-keys") +parser.add_argument("--max-builds", type=int, default=100, + help="Maximum number of recent builds to keep") +parser.add_argument("--dry-run", action="store_true", + help="Do not actually delete builds") +parser.add_argument("project", + help="Account name plus project slug (e.g. Lekensteyn/wireshark)") + +base = "https://ci.appveyor.com/api" +history_url = "%s/projects/{project}/history?recordsNumber=1000" % base +build_url = "%s/builds/{buildId}" % base + +args = parser.parse_args() +if not args.token: + parser.error("Missing APPVEYOR_TOKEN environment variable") +if args.token.startswith("v2."): + parser.error("Only a v1 token is supported") + +headers = { + "Authorization": "Bearer %s" % args.token, +} +# Retrieve builds for the project +r = requests.get(history_url.format(project=args.project), headers=headers) +r.raise_for_status() # Does the project exist? +builds = r.json()["builds"] +count = len(builds) +builds = builds[args.max_builds:] +if not builds: + print("Found %d builds, nothing to remove" % count) +else: + print("About to remove %d builds" % len(builds)) + for build in builds: + print("Removing %d %s" % (build["buildId"], build["message"])) + if not args.dry_run: + r = requests.delete(build_url.format(buildId=build["buildId"]), + headers=headers) + r.raise_for_status() # If this fails, perhaps token is invalid. -- cgit v1.2.1