From b073926a459e1da26aa9355e2327fa846d3c4857 Mon Sep 17 00:00:00 2001 From: Cristovao Cordeiro Date: Mon, 31 Jul 2023 17:38:49 +0200 Subject: [PATCH] ci: promote snap to candidate on every release (#255) --- .github/workflows/snap.yml | 61 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snap.yml b/.github/workflows/snap.yml index dc3cc9fe..78a6a5bd 100644 --- a/.github/workflows/snap.yml +++ b/.github/workflows/snap.yml @@ -1,6 +1,13 @@ name: Pebble snap -on: [pull_request] +on: + pull_request: + branches: [master] + release: + types: [published] + +env: + SNAP_NAME: pebble jobs: build: @@ -27,6 +34,8 @@ jobs: test: runs-on: ubuntu-latest needs: [build] + outputs: + pebble-version: ${{ steps.install-pebble.outputs.version }} steps: - uses: actions/download-artifact@v3 @@ -34,12 +43,58 @@ jobs: name: ${{ needs.build.outputs.pebble-snap }} - name: Install the Pebble snap + id: install-pebble run: | + set -ex # Install the Pebble snap from the artifact built in the previous job sudo snap install --dangerous --classic ${{ needs.build.outputs.pebble-snap }} # Make sure Pebble is installed - pebble version + echo "version=$(pebble version --client)" >> "$GITHUB_OUTPUT" - name: Run smoke test - run: pebble enter exec echo Hello | grep Hello + run: pebble enter --create-dirs exec echo Hello | grep Hello + + promote: + if: ${{ github.event_name == 'release' }} + runs-on: ubuntu-latest + needs: [test] + strategy: + fail-fast: false + matrix: + arch: [amd64, arm64, ppc64el, armhf, s390x] + env: + TRACK: latest + DEFAULT_RISK: edge + TO_RISK: candidate + steps: + - name: Install Snapcraft + run: sudo snap install snapcraft --classic + + - name: Wait for ${{ needs.test.outputs.pebble-version }} to be released + env: + SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }} + run: | + while ! `snapcraft status ${{ env.SNAP_NAME }} --track ${{ env.TRACK }} --arch ${{ matrix.arch }} \ + | grep "${{ env.DEFAULT_RISK }}" \ + | awk -F' ' '{print $2}' \ + | grep -Fxq "${{ needs.test.outputs.pebble-version }}"`; do + echo "[${{ matrix.arch }}] Waiting for ${{ needs.test.outputs.pebble-version }} \ + to be released to ${{ env.TRACK }}/${{ env.DEFAULT_RISK }}..." + sleep 10 + done + + # It would be easier to use `snapcraft promote`, but there's an error when trying + # to avoid the prompt with the "--yes" option: + # > 'latest/edge' is not a valid set value for --from-channel when using --yes. + - name: Promote ${{ needs.test.outputs.pebble-version }} (${{ matrix.arch }}) to ${{ env.TO_RISK }} + env: + SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }} + run: | + revision="$(snapcraft status ${{ env.SNAP_NAME }} \ + --track ${{ env.TRACK }} --arch ${{ matrix.arch }} \ + | grep "${{ env.DEFAULT_RISK }}" | awk -F' ' '{print $3}')" + + snapcraft release ${{ env.SNAP_NAME }} \ + $revision \ + ${{ env.TRACK }}/${{ env.TO_RISK }}