tests: divide spread into fundamental/non-fundamental #32693
Workflow file for this run
This file contains 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: Tests | |
on: | |
pull_request: | |
branches: [ "master", "release/**", "core-snap-security-release/**", "security-release/**" ] | |
push: | |
branches: [ "master", "release/**", "core-snap-security-release/**", "security-release/**" ] | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
snap-builds: | |
uses: ./.github/workflows/snap-builds.yaml | |
with: | |
runs-on: ${{ matrix.runs-on }} | |
toolchain: ${{ matrix.toolchain }} | |
variant: ${{ matrix.variant }} | |
strategy: | |
matrix: | |
runs-on: | |
- '["ubuntu-22.04"]' | |
# Tags to identify the self-hosted runners to use from | |
# internal runner collection. See internal self-hosted | |
# runners doc for the complete list of options. | |
- '["self-hosted", "Linux", "jammy", "ARM64", "large"]' | |
toolchain: | |
- default | |
- FIPS | |
variant: | |
# test version is a build of snapd with test keys and should | |
# only be installed by test runners. The pristine versions | |
# are the build that should be installed by human users. | |
- pristine | |
- test | |
# Exclude building everything for ARM but the version for testing | |
# to keep the number of builds down as we currently don't have a | |
# clear need for these excluded builds. | |
exclude: | |
- runs-on: '["self-hosted", "Linux", "jammy", "ARM64", "large"]' | |
toolchain: FIPS | |
- runs-on: '["self-hosted", "Linux", "jammy", "ARM64", "large"]' | |
variant: pristine | |
cache-build-deps: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Download Debian dependencies | |
run: | | |
sudo apt clean | |
sudo apt update | |
sudo apt build-dep -d -y ${{ github.workspace }} | |
# for indent | |
sudo apt install texinfo autopoint | |
- name: Copy dependencies | |
run: | | |
sudo tar cvf cached-apt.tar /var/cache/apt | |
- name: upload Debian dependencies | |
uses: actions/upload-artifact@v4 | |
with: | |
name: debian-dependencies | |
path: ./cached-apt.tar | |
static-checks: | |
uses: ./.github/workflows/static-checks.yaml | |
needs: [cache-build-deps] | |
with: | |
runs-on: ubuntu-latest | |
gochannel: ${{ matrix.gochannel }} | |
strategy: | |
# we cache successful runs so it's fine to keep going | |
fail-fast: false | |
matrix: | |
gochannel: | |
- 1.18 | |
- latest/stable | |
branch-static-checks: | |
runs-on: ubuntu-latest | |
needs: [cache-build-deps] | |
if: github.ref != 'refs/heads/master' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
# needed for git commit history | |
fetch-depth: 0 | |
- name: check-branch-ubuntu-daily-spread | |
run: | | |
# Compare the daily system in master and in the current branch | |
wget -q -O test_master.yaml https://raw.githubusercontent.com/snapcore/snapd/master/.github/workflows/test.yaml | |
system_daily="$(yq '.jobs.spread-fundamental.strategy.matrix.include.[] | select(.group == "ubuntu-daily") | .systems' test_master.yaml)" | |
current_daily="$(yq '.jobs.spread-fundamental.strategy.matrix.include.[] | select(.group == "ubuntu-daily") | .systems' .github/workflows/test.yaml)" | |
test "$system_daily" == "$current_daily" | |
shell: bash | |
unit-tests: | |
uses: ./.github/workflows/unit-tests.yaml | |
needs: [static-checks] | |
name: "unit-tests default ${{ matrix.gochannel }}" | |
with: | |
runs-on: ubuntu-22.04 | |
gochannel: ${{ matrix.gochannel }} | |
skip-coverage: ${{ matrix.gochannel == 'latest/stable' }} | |
strategy: | |
# we cache successful runs so it's fine to keep going | |
fail-fast: false | |
matrix: | |
gochannel: | |
- 1.18 | |
- latest/stable | |
# TODO run unit tests of C code | |
unit-tests-special: | |
uses: ./.github/workflows/unit-tests.yaml | |
needs: [static-checks] | |
name: "unit-tests (${{ matrix.gochannel }} ${{ matrix.test-case.go-build-tags }} | |
${{ matrix.test-case.go-test-race && ' test-race' || ''}} | |
${{ matrix.test-case.snapd-debug && ' snapd-debug' || ''}})" | |
with: | |
runs-on: ubuntu-22.04 | |
gochannel: ${{ matrix.gochannel }} | |
skip-coverage: ${{ matrix.gochannel == 'latest/stable' || matrix.test-case.skip-coverage }} | |
go-build-tags: ${{ matrix.test-case.go-build-tags }} | |
go-test-race: ${{ matrix.test-case.go-test-race }} | |
snapd-debug: ${{ matrix.test-case.snapd-debug }} | |
strategy: | |
# we cache successful runs so it's fine to keep going | |
fail-fast: false | |
matrix: | |
gochannel: | |
- 1.18 | |
- latest/stable | |
test-case: | |
- { go-build-tags: snapd_debug, skip-coverage: false, snapd-debug: true, go-test-race: false} | |
- { go-build-tags: withbootassetstesting, skip-coverage: false, snapd-debug: false, go-test-race: false} | |
- { go-build-tags: nosecboot, skip-coverage: false, snapd-debug: false, go-test-race: false} | |
- { go-build-tags: faultinject, skip-coverage: false, snapd-debug: false, go-test-race: false} | |
- { go-build-tags: snapdusergo, skip-coverage: false, snapd-debug: false, go-test-race: false} | |
- { go-build-tags: "", skip-coverage: true, snapd-debug: false, go-test-race: true } | |
unit-tests-cross-distro: | |
uses: ./.github/workflows/unit-tests-cross-distro.yaml | |
needs: [static-checks] | |
with: | |
runs-on: ubuntu-latest | |
distro: ${{ matrix.distro }} | |
strategy: | |
fail-fast: false | |
matrix: | |
distro: | |
# TODO add arch? | |
- fedora:latest | |
- opensuse/tumbleweed | |
code-coverage: | |
needs: [unit-tests, unit-tests-special] | |
runs-on: ubuntu-20.04 | |
env: | |
GOPATH: ${{ github.workspace }} | |
# Set PATH to ignore the load of magic binaries from /usr/local/bin And | |
# to use the go snap automatically. Note that we install go from the | |
# snap in a step below. Without this we get the GitHub-controlled latest | |
# version of go. | |
PATH: /snap/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${{ github.workspace }}/bin | |
GOROOT: "" | |
steps: | |
- name: Download the coverage files | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: coverage-files-* | |
path: .coverage/ | |
merge-multiple: true | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
# uploading to codecov occasionally fails, so continue running the test | |
# workflow regardless of the upload | |
continue-on-error: true | |
with: | |
fail_ci_if_error: true | |
flags: unittests | |
name: codecov-umbrella | |
files: .coverage/coverage-*.cov | |
verbose: true | |
spread-fundamental: | |
uses: ./.github/workflows/spread-tests.yaml | |
needs: [unit-tests, snap-builds] | |
name: "spread ${{ matrix.group }}" | |
with: | |
# Github doesn't support passing sequences as parameters. | |
# Instead here we create a json array and pass it as a string. | |
# Then in the spread workflow it turns it into a sequence | |
# using the fromJSON expression. | |
runs-on: '["self-hosted", "spread-enabled"]' | |
group: ${{ matrix.group }} | |
backend: ${{ matrix.backend }} | |
systems: ${{ matrix.systems }} | |
tasks: ${{ matrix.tasks }} | |
rules: ${{ matrix.rules }} | |
is-fundamental: true | |
strategy: | |
# FIXME: enable fail-fast mode once spread can cancel an executing job. | |
# Disable fail-fast mode as it doesn't function with spread. It seems | |
# that cancelling tasks requires short, interruptible actions and | |
# interrupting spread, notably, does not work today. As such disable | |
# fail-fast while we tackle that problem upstream. | |
fail-fast: false | |
matrix: | |
include: | |
- group: 'debian-req (fundamental)' | |
backend: google-distro-1 | |
systems: 'debian-11-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'fedora (fundamental)' | |
backend: openstack | |
systems: 'fedora-40-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-focal (fundamental)' | |
backend: google | |
systems: 'ubuntu-20.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-noble (fundamental)' | |
backend: google | |
systems: 'ubuntu-24.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-no-lts (fundamental)' | |
backend: google | |
systems: 'ubuntu-24.10-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-core-20 (fundamental)' | |
backend: google-core | |
systems: 'ubuntu-core-20-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-core-24 (fundamental)' | |
backend: google-core | |
systems: 'ubuntu-core-24-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
spread-not-fundamental: | |
uses: ./.github/workflows/spread-tests.yaml | |
needs: [unit-tests, snap-builds, spread-fundamental] | |
name: "spread ${{ matrix.group }}" | |
with: | |
# Github doesn't support passing sequences as parameters. | |
# Instead here we create a json array and pass it as a string. | |
# Then in the spread workflow it turns it into a sequence | |
# using the fromJSON expression. | |
runs-on: '["self-hosted", "spread-enabled"]' | |
group: ${{ matrix.group }} | |
backend: ${{ matrix.backend }} | |
systems: ${{ matrix.systems }} | |
tasks: ${{ matrix.tasks }} | |
rules: ${{ matrix.rules }} | |
strategy: | |
# FIXME: enable fail-fast mode once spread can cancel an executing job. | |
# Disable fail-fast mode as it doesn't function with spread. It seems | |
# that cancelling tasks requires short, interruptible actions and | |
# interrupting spread, notably, does not work today. As such disable | |
# fail-fast while we tackle that problem upstream. | |
fail-fast: false | |
matrix: | |
include: | |
- group: amazon-linux | |
backend: google-distro-1 | |
systems: 'amazon-linux-2-64 amazon-linux-2023-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: arch-linux | |
backend: google-distro-2 | |
systems: 'arch-linux-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: centos | |
backend: openstack | |
systems: 'centos-9-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: debian-not-req | |
backend: google-distro-1 | |
systems: 'debian-12-64 debian-sid-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: fedora | |
backend: openstack | |
systems: 'fedora-41-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: opensuse | |
backend: google-distro-2 | |
systems: 'opensuse-15.5-64 opensuse-15.6-64 opensuse-tumbleweed-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-trusty | |
backend: google | |
systems: 'ubuntu-14.04-64' | |
tasks: 'tests/smoke/ tests/main/canonical-livepatch tests/main/canonical-livepatch-14.04' | |
rules: 'trusty' | |
- group: ubuntu-xenial-bionic | |
backend: google | |
systems: 'ubuntu-16.04-64 ubuntu-18.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-jammy | |
backend: google | |
systems: 'ubuntu-22.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-daily' | |
backend: google | |
systems: 'ubuntu-25.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: 'ubuntu-core-18' | |
backend: google-core | |
systems: 'ubuntu-core-18-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-core-22 | |
backend: google-core | |
systems: 'ubuntu-core-22-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-arm64 | |
backend: google-arm | |
systems: 'ubuntu-20.04-arm-64 ubuntu-core-22-arm-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-secboot | |
backend: google | |
systems: 'ubuntu-secboot-20.04-64' | |
tasks: 'tests/...' | |
rules: 'main' | |
- group: ubuntu-fips | |
backend: google-pro | |
systems: 'ubuntu-fips-22.04-64' | |
tasks: 'tests/fips/...' | |
rules: 'main' | |
- group: nested-ubuntu-18.04 | |
backend: google-nested | |
systems: 'ubuntu-18.04-64' | |
tasks: 'tests/nested/...' | |
rules: 'nested' | |
- group: nested-ubuntu-20.04 | |
backend: google-nested | |
systems: 'ubuntu-20.04-64' | |
tasks: 'tests/nested/...' | |
rules: 'nested' | |
- group: nested-ubuntu-22.04 | |
backend: google-nested | |
systems: 'ubuntu-22.04-64' | |
tasks: 'tests/nested/...' | |
rules: 'nested' | |
- group: nested-ubuntu-24.04 | |
backend: google-nested | |
systems: 'ubuntu-24.04-64' | |
tasks: 'tests/nested/...' | |
rules: 'nested' |