[4.0] Fix possible segfault switching between read/write windows #4691
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: "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: [ubuntu18, 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 | |
mkdir build | |
cd build | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -GNinja .. | |
ninja | |
tar -pc -C .. --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: 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 | |
# jammy's boost 1.74 can stumble on an EXDEV via copy_file_range() it doesn't have a fallback for; re-eval once moving to std::filesystem | |
export TMPDIR="$PWD/tmp" | |
mkdir -p $TMPDIR | |
zstdcat build.tar.zst | tar x | |
cd build | |
ctest --output-on-failure -j $(nproc) -LE "(nonparallelizable_tests|long_running_tests)" | |
np-tests: | |
name: NP Tests | |
needs: [d, Build] | |
if: always() && needs.Build.result == 'success' | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu18, 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 | |
- 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: [ubuntu18, 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 | |
- 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 |