Add core24 to the workflow matrix #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Test | |
| on: | |
| pull_request: | |
| jobs: | |
| generate-matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| build_matrix: ${{ steps.matrix.outputs.build_matrix }} | |
| docker_test_matrix: ${{ steps.matrix.outputs.docker_test_matrix }} | |
| steps: | |
| - name: Generate Build Matrix | |
| id: matrix | |
| run: | | |
| #PLATFORMS=(linux/arm/v7 linux/arm64) # linux/s390x) | |
| PLATFORMS=(linux/arm/v7) | |
| #BASES=(core core18 core20 core22 core24) | |
| BASES=(core22 core24) | |
| BUILD_MATRIX= | |
| DOCKER_TEST_MATRIX= | |
| for base in ${BASES[@]}; do | |
| channel=latest/stable | |
| runner=ubuntu-latest | |
| case $base in | |
| core) | |
| os=xenial | |
| channel=4.x/stable | |
| experimenal=true | |
| runner=ubuntu-20.04 | |
| ;; | |
| core18) | |
| os=bionic | |
| channel=5.x/stable | |
| ;; | |
| core20) | |
| os=focal | |
| ;; | |
| core22) | |
| os=jammy | |
| ;; | |
| core24) | |
| os=noble | |
| ;; | |
| esac | |
| for platform in ${PLATFORMS[@]}; do | |
| [ "$platform" = "linux/386" ] && [ "$base" != "core" ] && [ "$base" != "core18" ] && continue | |
| [ "$platform" = "linux/s390" ] && ( [ "$base" = "core" ] || [ "$base" = "core18" ] ) && continue | |
| experimental=false | |
| [ "$platform" = "linux/s390" ] && experimental=true | |
| BUILD_MATRIX="${BUILD_MATRIX:+$BUILD_MATRIX,}{\"platform\":\"$platform\",\"base\":{\"snap\":\"$base\",\"os\":\"$os\"},\"experimental\":\"$experimental\"}" | |
| DOCKER_TEST_MATRIX="${DOCKER_TEST_MATRIX:+$DOCKER_TEST_MATRIX,}{\"platform\":\"$platform\",\"channel\":\"$channel\",\"base\":\"$base\",\"runner\":\"$runner\",\"experimental\":$experimental}" | |
| done | |
| done | |
| echo "build_matrix={\"include\":[$BUILD_MATRIX]}" >> $GITHUB_OUTPUT | |
| echo "docker_test_matrix={\"include\":[$DOCKER_TEST_MATRIX]}" >> $GITHUB_OUTPUT | |
| build: | |
| name: Build PR | |
| runs-on: ${{ matrix.base.os != 'jammy' && 'ubuntu-latest' || 'ubuntu-22.04' }} | |
| needs: generate-matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.generate-matrix.outputs.build_matrix) }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| # see https://github.com/tonistiigi/binfmt/issues/215 | |
| image: ${{ matrix.base.os != 'jammy' && 'tonistiigi/binfmt:master' || 'tonistiigi/binfmt:qemu-v7.0.0-28' }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| platforms: ${{ matrix.platform }} | |
| tags: test-image | |
| push: false | |
| outputs: type=docker,dest=test-image.tar | |
| build-args: | |
| BASE_OS=${{ matrix.base.os }} | |
| - name: Save container image | |
| id: save_image | |
| run: | | |
| echo image_name="$(echo "${{matrix.base.snap}}-${{matrix.platform}}.tar" | sed 's|/|_|g')" >> $GITHUB_OUTPUT | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.save_image.outputs.image_name }} | |
| path: ./test-image.tar | |
| test-build-snap-docker: | |
| name: Test Build Snap with Docker | |
| runs-on: ${{matrix.runner}} | |
| needs: [ generate-matrix, build ] | |
| continue-on-error: ${{ matrix.experimental }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.generate-matrix.outputs.docker_test_matrix) }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| # see https://github.com/tonistiigi/binfmt/issues/215 | |
| image: 'tonistiigi/binfmt:master' | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Enable Docker experimental | |
| run: | | |
| echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json > /dev/null | |
| sudo systemctl restart docker | |
| - name: Load container image | |
| id: load_image | |
| run: | | |
| echo image_name="$(echo "${{matrix.base}}-${{matrix.platform}}.tar" | sed 's|/|_|g')" >> $GITHUB_OUTPUT | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ steps.load_image.outputs.image_name }} | |
| path: ./artifacts | |
| - name: Test build a Snap | |
| id: build | |
| run: | | |
| docker image load -i ./artifacts/test-image.tar | |
| docker run --rm --tty --privileged \ | |
| --platform "${{ matrix.platform }}" \ | |
| --env USE_SNAPCRAFT_CHANNEL="${{ matrix.channel }}" \ | |
| --volume "$GITHUB_WORKSPACE/tests/${{ matrix.base }}":"/data" \ | |
| --workdir "/data" \ | |
| test-image snapcraft | |
| test-set-channel-docker: | |
| name: Test Set Channel with Docker | |
| runs-on: ${{matrix.runner}} | |
| needs: [ generate-matrix, build ] | |
| continue-on-error: ${{ matrix.experimental }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.generate-matrix.outputs.docker_test_matrix) }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| # see https://github.com/tonistiigi/binfmt/issues/215 | |
| image: 'tonistiigi/binfmt:master' | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Enable Docker experimental | |
| run: | | |
| echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json > /dev/null | |
| sudo systemctl restart docker | |
| - name: Load container image | |
| id: load_image | |
| run: | | |
| echo image_name="$(echo "${{matrix.base}}-${{matrix.platform}}.tar" | sed 's|/|_|g')" >> $GITHUB_OUTPUT | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ steps.load_image.outputs.image_name }} | |
| path: ./artifacts | |
| - name: Test changing channel | |
| run: | | |
| docker image load -i ./artifacts/test-image.tar | |
| USE_SNAPCRAFT_CHANNEL="$(echo -n ${{ matrix.channel }} | sed -e 's/stable/candidate/')" | |
| echo ::group | |
| docker run --rm --tty --privileged \ | |
| --platform "${{ matrix.platform }}" \ | |
| --env USE_SNAPCRAFT_CHANNEL="$USE_SNAPCRAFT_CHANNEL" \ | |
| test-image snap info snapcraft --color=never 2>&1 | tee output.txt | |
| echo ::endgroup | |
| CHANNEL="$(cat output.txt | \ | |
| tr '\r\n' '\n' | \ | |
| awk 'BEGIN { FS = ":" }; /^tracking:/ { gsub(/ /, "", $2); print $2 }' | |
| )" | |
| echo "Snapcraft channel in use: $CHANNEL" | |
| [ -n "$CHANNEL" ] && [ "$CHANNEL" = "$USE_SNAPCRAFT_CHANNEL" ] | |
| test-failure-docker: | |
| name: Test Failures with Docker (expected) | |
| runs-on: ${{matrix.runner}} | |
| needs: [ generate-matrix, build ] | |
| continue-on-error: ${{ matrix.experimental }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.generate-matrix.outputs.docker_test_matrix) }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| # see https://github.com/tonistiigi/binfmt/issues/215 | |
| image: 'tonistiigi/binfmt:master' | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Enable Docker experimental | |
| run: | | |
| echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json > /dev/null | |
| sudo systemctl restart docker | |
| - name: Load container image | |
| id: load_image | |
| run: | | |
| echo image_name="$(echo "${{matrix.base}}-${{matrix.platform}}.tar" | sed 's|/|_|g')" >> $GITHUB_OUTPUT | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ steps.load_image.outputs.image_name }} | |
| path: ./artifacts | |
| - name: Test failure to build a Snap | |
| id: build | |
| run: | | |
| docker image load -i ./artifacts/test-image.tar | |
| sed -Ei 's/command: bin\/hello/command: bin\/does-not-exist/' tests/${{ matrix.base }}/snap/snapcraft.yaml | |
| if docker run --rm --tty --privileged \ | |
| --platform "${{ matrix.platform }}" \ | |
| --env USE_SNAPCRAFT_CHANNEL="${{ matrix.channel }}" \ | |
| --volume "$GITHUB_WORKSPACE/tests/${{ matrix.base }}":"/data" \ | |
| --workdir "/data" \ | |
| test-image snapcraft | |
| then | |
| echo "Snapcraft build should have failed" | |
| exit 1 | |
| fi |