From 6d73a44ddad8f85fdd29b2ab5202742b98155f37 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Wed, 18 May 2016 12:51:06 +0100 Subject: [PATCH] Squashed 'tools/' changes from f9aa081..7a66090 7a66090 Add publish-site from weave e5af286 GC scope integration test VMs git-subtree-dir: tools git-subtree-split: 7a660904a67c9ba664850388192506506b88e4ce --- publish-site | 50 ++++++++++++++++++++++++++++++++++++++++++++++ scheduler/app.yaml | 2 ++ scheduler/main.py | 29 +++++++++++++++++++-------- 3 files changed, 73 insertions(+), 8 deletions(-) create mode 100755 publish-site diff --git a/publish-site b/publish-site new file mode 100755 index 000000000..4d0984b92 --- /dev/null +++ b/publish-site @@ -0,0 +1,50 @@ +#!/bin/bash + +set -e +set -o pipefail + +: ${PRODUCT:=} + +fatal() { + echo "$@" >&2 + exit 1 +} + +if [ ! -d .git ] ; then + fatal "Current directory is not a git clone" +fi + +if [ -z "${PRODUCT}" ]; then + fatal "Must specify PRODUCT" +fi + +if ! BRANCH=$(git symbolic-ref --short HEAD) || [ -z "$BRANCH" ] ; then + fatal "Could not determine branch" +fi + +case "$BRANCH" in + issues/*) + VERSION="${BRANCH#issues/}" + TAGS="$VERSION" + ;; + *) + if echo "$BRANCH" | grep -qE '^[0-9]+\.[0-9]+' ; then + DESCRIBE=$(git describe --match 'v*') + if ! VERSION=$(echo "$DESCRIBE" | grep -oP '(?<=^v)[0-9]+\.[0-9]+\.[0-9]+') ; then + fatal "Could not infer latest $BRANCH version from $DESCRIBE" + fi + TAGS="$VERSION latest" + else + VERSION="$BRANCH" + TAGS="$VERSION" + fi + ;; +esac + +for TAG in $TAGS ; do + echo ">>> Publishing $PRODUCT $VERSION to $1/docs/$PRODUCT/$TAG" + wordepress \ + --url "$1" --user "$2" --password "$3" \ + --product "$PRODUCT" --version "$VERSION" --tag "$TAG" \ + publish site +done diff --git a/scheduler/app.yaml b/scheduler/app.yaml index 8bc59f004..21f5f0527 100644 --- a/scheduler/app.yaml +++ b/scheduler/app.yaml @@ -11,3 +11,5 @@ handlers: libraries: - name: webapp2 version: latest +- name: ssl + version: latest diff --git a/scheduler/main.py b/scheduler/main.py index e7bd9d964..f509f0e1f 100644 --- a/scheduler/main.py +++ b/scheduler/main.py @@ -15,13 +15,10 @@ app = flask.Flask('scheduler') app.debug = True # We use exponential moving average to record -# test run times. Higher alpha discounts historic +# test run times. Higher alpha discounts historic # observations faster. alpha = 0.3 -PROJECT = 'positive-cocoa-90213' -ZONE = 'us-central1-a' - class Test(ndb.Model): total_run_time = ndb.FloatProperty(default=0.) # Not total, but a EWMA total_runs = ndb.IntegerProperty(default=0) @@ -77,12 +74,28 @@ def schedule(test_run, shard_count, shard): NAME_RE = re.compile(r'^host(?P\d+)-(?P\d+)-(?P\d+)$') +PROJECTS = [ + ('weaveworks/weave', 'positive-cocoa-90213', 'us-central1-a'), + ('weaveworks/scope', 'scope-integration-tests', 'us-central1-a'), +] + @app.route('/tasks/gc') def gc(): # Get list of running VMs, pick build id out of VM name credentials = GoogleCredentials.get_application_default() compute = discovery.build('compute', 'v1', credentials=credentials) - instances = compute.instances().list(project=PROJECT, zone=ZONE).execute() + + for repo, project, zone in PROJECTS: + gc_project(compute, repo, project, zone) + + return "Done" + +def gc_project(compute, repo, project, zone): + logging.info("GCing %s, %s, %s", repo, project, zone) + instances = compute.instances().list(project=project, zone=zone).execute() + if 'items' not in instances: + return + host_by_build = collections.defaultdict(list) for instance in instances['items']: matches = NAME_RE.match(instance['name']) @@ -92,7 +105,7 @@ def gc(): logging.info("Running VMs by build: %r", host_by_build) # Get list of builds, filter down to runnning builds - result = urlfetch.fetch('https://circleci.com/api/v1/project/weaveworks/weave', + result = urlfetch.fetch('https://circleci.com/api/v1/project/%s' % repo, headers={'Accept': 'application/json'}) assert result.status_code == 200 builds = json.loads(result.content) @@ -107,6 +120,6 @@ def gc(): for name in names: stopped.append(name) logging.info("Stopping VM %s", name) - compute.instances().delete(project=PROJECT, zone=ZONE, instance=name).execute() + compute.instances().delete(project=project, zone=zone, instance=name).execute() - return (flask.json.jsonify(running=list(running), stopped=stopped), 200) + return