added unit tests for garbage io #5
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: "Build & Test" | |
on: | |
push: | |
branches: | |
- main | |
- "release/*" | |
pull_request: | |
workflow_dispatch: | |
permissions: | |
packages: read | |
contents: read | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
d: | |
name: Discover Platforms | |
runs-on: ubuntu-latest | |
outputs: | |
missing-platforms: ${{steps.discover.outputs.missing-platforms}} | |
p: ${{steps.discover.outputs.platforms}} | |
steps: | |
- name: Discover Platforms | |
id: discover | |
uses: AntelopeIO/discover-platforms-action@v1 | |
with: | |
platform-file: .cicd/platforms.json | |
password: ${{secrets.GITHUB_TOKEN}} | |
package-name: builders | |
build-platforms: | |
name: Build Platforms | |
needs: d | |
if: needs.d.outputs.missing-platforms != '[]' | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: ${{fromJSON(needs.d.outputs.missing-platforms)}} | |
runs-on: ["self-hosted", "enf-x86-beefy"] | |
permissions: | |
packages: write | |
contents: read | |
steps: | |
- name: Login to Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{github.repository_owner}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
- name: Build and push | |
uses: docker/build-push-action@v3 | |
with: | |
push: true | |
tags: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}} | |
file: ${{fromJSON(needs.d.outputs.p)[matrix.platform].dockerfile}} | |
Build: | |
needs: [d, build-platforms] | |
if: always() && needs.d.result == 'success' && (needs.build-platforms.result == 'success' || needs.build-platforms.result == 'skipped') | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu20, ubuntu22] | |
runs-on: ["self-hosted", "enf-x86-beefy"] | |
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Build | |
id: build | |
run: | | |
# https://github.com/actions/runner/issues/2033 | |
chown -R $(id -u):$(id -g) $PWD | |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -GNinja | |
cmake --build build | |
tar -pc --exclude "*.o" build | zstd --long -T0 -9 > build.tar.zst | |
- name: Upload builddir | |
uses: AntelopeIO/upload-artifact-large-chunks-action@v1 | |
with: | |
name: ${{matrix.platform}}-build | |
path: build.tar.zst | |
dev-package: | |
name: Build leap-dev package | |
needs: [d, Build] | |
if: always() && needs.Build.result == 'success' | |
runs-on: ubuntu-latest | |
container: ${{fromJSON(needs.d.outputs.p)['ubuntu20'].image}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Download builddir | |
uses: actions/download-artifact@v3 | |
with: | |
name: ubuntu20-build | |
- name: Build dev package | |
run: | | |
zstdcat build.tar.zst | tar x | |
cd build | |
cpack | |
- name: Install dev package | |
run: | | |
apt update && apt upgrade -y | |
apt install -y ./build/leap_*.deb ./build/leap-dev*.deb | |
- name: Test using TestHarness | |
run: | | |
python3 -c "from TestHarness import Cluster" | |
- name: Upload dev package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: leap-dev-ubuntu20-amd64 | |
path: build/leap-dev*.deb | |
tests: | |
name: Tests | |
needs: [d, Build] | |
if: always() && needs.Build.result == 'success' | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu20, ubuntu22] | |
runs-on: ["self-hosted", "enf-x86-hightier"] | |
container: | |
image: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}} | |
options: --security-opt seccomp=unconfined | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download builddir | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{matrix.platform}}-build | |
- name: Run Parallel Tests | |
run: | | |
# https://github.com/actions/runner/issues/2033 -- need this because of full version label test looking at git revs | |
chown -R $(id -u):$(id -g) $PWD | |
zstdcat build.tar.zst | tar x | |
cd build | |
ctest --output-on-failure -j $(nproc) -LE "(nonparallelizable_tests|long_running_tests)" --timeout 420 | |
np-tests: | |
name: NP Tests | |
needs: [d, Build] | |
if: always() && needs.Build.result == 'success' | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu20, ubuntu22] | |
runs-on: ["self-hosted", "enf-x86-midtier"] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download builddir | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{matrix.platform}}-build | |
- name: Run tests in parallel containers | |
uses: ./.github/actions/parallel-ctest-containers | |
with: | |
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}} | |
error-log-paths: '["build/etc", "build/var", "build/leap-ignition-wd", "build/TestLogs"]' | |
log-tarball-prefix: ${{matrix.platform}} | |
tests-label: nonparallelizable_tests | |
test-timeout: 420 | |
- name: Upload logs from failed tests | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: ${{matrix.platform}}-np-logs | |
path: '*-logs.tar.gz' | |
lr-tests: | |
name: LR Tests | |
needs: [d, Build] | |
if: always() && needs.Build.result == 'success' | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu20, ubuntu22] | |
runs-on: ["self-hosted", "enf-x86-lowtier"] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download builddir | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{matrix.platform}}-build | |
- name: Run tests in parallel containers | |
uses: ./.github/actions/parallel-ctest-containers | |
with: | |
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}} | |
error-log-paths: '["build/etc", "build/var", "build/leap-ignition-wd", "build/TestLogs"]' | |
log-tarball-prefix: ${{matrix.platform}} | |
tests-label: long_running_tests | |
test-timeout: 1800 | |
- name: Upload logs from failed tests | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: ${{matrix.platform}}-lr-logs | |
path: '*-logs.tar.gz' | |
all-passing: | |
name: All Required Tests Passed | |
needs: [dev-package, tests, np-tests] | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- if: needs.dev-package.result != 'success' || needs.tests.result != 'success' || needs.np-tests.result != 'success' | |
run: false |