From fb60f05880d8d3e0a9a64e4121b487837cbaa545 Mon Sep 17 00:00:00 2001 From: Katy Bowman Date: Mon, 6 Nov 2023 11:57:28 -0500 Subject: [PATCH] chore: add direwolf automation (#2527) * chore: add bash script for direwolf test run * chore: add direwolf github workflow * fix: syntax corrections --- .github/workflows/direwolf.yml | 60 ++++++++++++++++++++++++++++++++++ scripts/direwolf-test-run | 43 ++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 .github/workflows/direwolf.yml create mode 100755 scripts/direwolf-test-run diff --git a/.github/workflows/direwolf.yml b/.github/workflows/direwolf.yml new file mode 100644 index 0000000000..f1797166cf --- /dev/null +++ b/.github/workflows/direwolf.yml @@ -0,0 +1,60 @@ +name: Run CLI Direwolf Tests + +on: + workflow_dispatch: + inputs: + releaseChannel: + type: choice + description: Channel to run the Direwolf tests against + required: true + options: + - stable + - beta + - alpha + direwolfEnvironment: + type: choice + description: Direwolf environment + required: false + options: + - production + - staging + default: staging + + workflow_call: + inputs: + releaseChannel: + type: string + description: Channel to run the Direwolf tests against + required: true + default: stable + direwolfEnvironment: + type: string + description: Direwolf environment + required: false + default: staging + +jobs: + run-direwolf-tests: + name: Run Direwolf CLI tests + runs-on: pub-hk-ubuntu-22.04-small + timeout-minutes: 20 + environment: direwolf + steps: + - name: set direwolf environment UUID + run: | + direwolf_UUID=${{ secrets.DIREWOLF_CLOUD_UUID_STAGING }} + if [[ ${{ inputs.direwolfEnvironment }} == 'production' ]] + then direwolf_UUID=${{ secrets.DIREWOLF_CLOUD_UUID_PRODUCTION }} + fi + echo "DIREWOLF_CLOUD_UUID=direwolf_UUID" >> $GITHUB_ENV + - uses: actions/checkout@v3 + - name: Install jq + run: | + sudo apt-get update + sudo apt-get install -y awscli jq + - name: run direwolf suite + run: ./scripts/direwolf-test-run + env: + HEROKU_CLI_VERSION: ${{ inputs.releaseChannel }} + DIREWOLF_TOKEN: ${{ secrets.DEV_TOOLING_DIREWOLF_TOKEN }} + DIREWOLF_CLOUD_UUID: ${{ env.DIREWOLF_CLOUD_UUID }} diff --git a/scripts/direwolf-test-run b/scripts/direwolf-test-run new file mode 100755 index 0000000000..3dbe44bf17 --- /dev/null +++ b/scripts/direwolf-test-run @@ -0,0 +1,43 @@ +#!/bin/bash + +set -euo pipefail + +DIREWOLF_SUITE="cli" + +# default CLI version is stable +HEROKU_CLI_VERSION=${HEROKU_CLI_VERSION:="stable"} + +DIREWOLF_URL="https://$DIREWOLF_TOKEN@direwolf-api.herokai.com" + +POST_BODY=$(jq --null-input \ + --arg cloud "$DIREWOLF_CLOUD_UUID" \ + --arg suite "$DIREWOLF_SUITE" \ + --arg env "$HEROKU_CLI_VERSION" \ + '{"cloud": { "id": $cloud }, "suite": { "label": $suite }, "env": { "HEROKU_CLI_VERSION": $env }}') + +echo "Enqueuing: $POST_BODY" + +RUN_INFO=$(curl -sf $DIREWOLF_URL/runs \ + -H "Content-Type: application/json" \ + -d "${POST_BODY}") + +RUN_ID=$(echo $RUN_INFO | jq -r '.id') +RUN_URL="https://direwolf.herokai.com/dashboard?run=$RUN_ID" +echo "Enqueued: $RUN_URL" + +echo -n "Running: ..." +RUN_STATE="running" +while [[ $RUN_STATE == "running" ]]; do + echo -n "." + RUN_INFO=$(curl -sf $DIREWOLF_URL/runs/$RUN_ID) + RUN_STATE=$(echo $RUN_INFO | jq -r '.state') + sleep 10 +done +echo " done" +echo "Result: $RUN_STATE" +echo "Details:" +curl -sf $DIREWOLF_URL/runs/$RUN_ID/results | \ + jq -r '.[] | .state + "\t\t" + .class + ": " + .label' | \ + sort + +[[ $RUN_STATE == "passed" ]] || exit 1 \ No newline at end of file