From 4ee3c1493aec801c9b1e6737e51c877b3e03dc79 Mon Sep 17 00:00:00 2001 From: Callahan Date: Thu, 25 Jul 2024 08:18:05 -0500 Subject: [PATCH] tests: add spread tests for validation-sets (#4924) Adds a spread test for `edit-validation-sets` and `list-validation-sets`. Signed-off-by: Callahan Kovacs Co-authored-by: Alex Lowe --- .github/workflows/spread.yml | 4 +- spread.yaml | 9 ++++ .../store => store/basic-workflow}/task.yaml | 8 +--- tests/spread/store/validation-sets/editor.sh | 12 ++++++ tests/spread/store/validation-sets/task.yaml | 41 +++++++++++++++++++ 5 files changed, 66 insertions(+), 8 deletions(-) rename tests/spread/{general/store => store/basic-workflow}/task.yaml (91%) create mode 100755 tests/spread/store/validation-sets/editor.sh create mode 100644 tests/spread/store/validation-sets/task.yaml diff --git a/.github/workflows/spread.yml b/.github/workflows/spread.yml index 4bcfaa18e8..b6ae331d1b 100644 --- a/.github/workflows/spread.yml +++ b/.github/workflows/spread.yml @@ -110,10 +110,12 @@ jobs: name: Run spread env: SPREAD_GOOGLE_KEY: ${{ secrets.SPREAD_GOOGLE_KEY }} + SNAPCRAFT_ASSERTION_KEY: "${{ secrets.SNAPCRAFT_ASSERTION_KEY }}" SNAPCRAFT_STORE_CREDENTIALS_STAGING: "${{ secrets.SNAPCRAFT_STORE_CREDENTIALS_STAGING }}" SNAPCRAFT_STORE_CREDENTIALS_STAGING_CANDID: "${{ secrets.SNAPCRAFT_STORE_CREDENTIALS_STAGING_CANDID }}" SNAPCRAFT_STORE_CREDENTIALS_STAGING_LEGACY: "${{ secrets.SNAPCRAFT_STORE_CREDENTIALS_STAGING_LEGACY }}" - run: spread google:ubuntu-22.04-64:tests/spread/general/store + run: | + spread google:ubuntu-22.04-64:tests/spread/store/ - name: Discard spread workers if: always() diff --git a/spread.yaml b/spread.yaml index 4ebd722482..039ef727b3 100644 --- a/spread.yaml +++ b/spread.yaml @@ -377,6 +377,15 @@ suites: sudo apt-get install git sudo apt-mark auto git + tests/spread/store/: + summary: tests of store-related snapcraft commands + manual: true + environment: + STORE_DASHBOARD_URL: https://dashboard.staging.snapcraft.io + STORE_API_URL: https://api.staging.snapcraft.io + STORE_UPLOAD_URL: https://storage.staging.snapcraftcontent.com + UBUNTU_ONE_SSO_URL: https://login.staging.ubuntu.com + docs/howto/code/: summary: tests how-to guides from the docs systems: diff --git a/tests/spread/general/store/task.yaml b/tests/spread/store/basic-workflow/task.yaml similarity index 91% rename from tests/spread/general/store/task.yaml rename to tests/spread/store/basic-workflow/task.yaml index 2a41cf3f47..c6035c2bcf 100644 --- a/tests/spread/general/store/task.yaml +++ b/tests/spread/store/basic-workflow/task.yaml @@ -1,6 +1,4 @@ -summary: Test the store workflow - -manual: true +summary: Test the store workflow to register, upload, and release a snap environment: # use a core22 snap with components but no component hooks @@ -9,10 +7,6 @@ environment: SNAPCRAFT_STORE_CREDENTIALS/ubuntu_one: "$(HOST: echo ${SNAPCRAFT_STORE_CREDENTIALS_STAGING})" SNAPCRAFT_STORE_CREDENTIALS/legacy: "$(HOST: echo ${SNAPCRAFT_STORE_CREDENTIALS_STAGING_LEGACY})" SNAPCRAFT_STORE_CREDENTIALS/candid: "$(HOST: echo ${SNAPCRAFT_STORE_CREDENTIALS_STAGING_CANDID})" - STORE_DASHBOARD_URL: https://dashboard.staging.snapcraft.io - STORE_API_URL: https://api.staging.snapcraft.io - STORE_UPLOAD_URL: https://storage.staging.snapcraftcontent.com - UBUNTU_ONE_SSO_URL: https://login.staging.ubuntu.com prepare: | if [[ -z "$SNAPCRAFT_STORE_CREDENTIALS" ]]; then diff --git a/tests/spread/store/validation-sets/editor.sh b/tests/spread/store/validation-sets/editor.sh new file mode 100755 index 0000000000..a38c96be47 --- /dev/null +++ b/tests/spread/store/validation-sets/editor.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +validation_set_file="$1" + +# flip-flop between two valid revisions of `test-snapcraft-assertions` in the staging store: 1 and 2 +if grep -q "^ revision:.*1" "$validation_set_file"; then + (( revision=2 )) +else + (( revision=1 )) +fi + +sed -i "s/ revision:.*/ revision: $revision/g" "$validation_set_file" diff --git a/tests/spread/store/validation-sets/task.yaml b/tests/spread/store/validation-sets/task.yaml new file mode 100644 index 0000000000..277ee9d8e1 --- /dev/null +++ b/tests/spread/store/validation-sets/task.yaml @@ -0,0 +1,41 @@ +summary: test the validation-set commands + +environment: + SNAPCRAFT_ASSERTION_KEY: "$(HOST: echo ${SNAPCRAFT_ASSERTION_KEY})" + SNAPCRAFT_STORE_CREDENTIALS: "$(HOST: echo ${SNAPCRAFT_STORE_CREDENTIALS_STAGING})" + +prepare: | + if [[ -z "$SNAPCRAFT_STORE_CREDENTIALS" ]]; then + ERROR "No credentials set in env SNAPCRAFT_STORE_CREDENTIALS" + fi + + if [[ -z "$SNAPCRAFT_ASSERTION_KEY" ]]; then + ERROR "No gpg key set in env SNAPCRAFT_ASSERTION_KEY" + fi + + # setup snap gpg dir + mkdir -p "$HOME/.snap/gnupg" + chmod 700 "$HOME/.snap/gnupg" + + # import a registered key + echo "$SNAPCRAFT_ASSERTION_KEY" | base64 --decode > store-key.txt + gpg --homedir "$HOME/.snap/gnupg" --import store-key.txt + rm -f store-key.txt + + snap install yq + +execute: | + # ensure snapcraft is logged in and can access the store + snapcraft whoami + + # snapcraft will use a fake file editor + export EDITOR="$PWD/editor.sh" + + snapcraft edit-validation-sets "$(snapcraft whoami | yq .id)" testset 1 --key-name testspreadkey + + snapcraft list-validation-sets | MATCH testset + +restore: | + rm -rf "$HOME/.snap/gnupg" + + snap remove --purge yq