# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts # (see: https://github.com/epics-base/ci-scripts) # This is YAML - indentation levels are crucial # Workflow name, shared by all branches name: Base # Trigger on pushes and PRs to any branch on: push: paths-ignore: - 'documentation/*' - 'startup/*' - '.appveyor/*' - '.tools/*' - '.lgtm.yml' - '.gitattributes' - '**/*.html' - '**/*.md' pull_request: paths-ignore: - 'documentation/*' - 'startup/*' - '.appveyor/*' - '.tools/*' - '.lgtm.yml' - '.gitattributes' - '**/*.html' - '**/*.md' env: SETUP_PATH: .ci-local:.ci BASE: SELF EPICS_TEST_IMPRECISE_TIMING: YES jobs: native: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} # Set environment variables from matrix parameters env: CMP: ${{ matrix.cmp }} BCFG: ${{ matrix.configuration }} CI_CROSS_TARGETS: ${{ matrix.cross }} EXTRA: ${{ matrix.extra }} TEST: ${{ matrix.test }} strategy: fail-fast: false matrix: # Job names also name artifacts, character limitations apply include: - os: ubuntu-22.04 cmp: gcc-12 name: "Ub-22 gcc-12 c++20 Werror" # Turn all warnings into errors, # except for those we could not fix (yet). # Remove respective -Wno-error=... flag once it is fixed. extra: "CMD_CXXFLAGS=-std=c++20 CMD_CPPFLAGS='-fdiagnostics-color -Werror -Wno-error=deprecated-declarations -Wno-error=stringop-truncation -Wno-error=restrict -Wno-error=sizeof-pointer-memaccess -Wno-error=nonnull -Wno-error=dangling-pointer -Wno-error=format-overflow -Wno-error=format-security -Wno-error=stringop-overread'" - os: ubuntu-20.04 cmp: gcc configuration: default cross: "windows-x64-mingw" name: "Ub-20 gcc-9 + MinGW" - os: ubuntu-20.04 cmp: gcc configuration: static cross: "windows-x64-mingw" name: "Ub-20 gcc-9 + MinGW, static" - os: ubuntu-20.04 cmp: gcc configuration: static extra: "CMD_CXXFLAGS=-std=c++11" name: "Ub-20 gcc-9 C++11, static" - os: ubuntu-20.04 cmp: gcc configuration: static extra: "CMD_CFLAGS=-funsigned-char CMD_CXXFLAGS=-funsigned-char" name: "Ub-20 gcc-9 unsigned char" - os: ubuntu-20.04 cmp: clang configuration: default name: "Ub-20 clang-10" - os: ubuntu-20.04 cmp: clang configuration: default extra: "CMD_CXXFLAGS=-std=c++11" name: "Ub-20 clang-10 C++11" - os: ubuntu-20.04 cmp: gcc configuration: default cross: "RTEMS-pc686-qemu@5" name: "Ub-20 gcc-9 + RT-5.1 pc686" - os: ubuntu-20.04 cmp: gcc configuration: default cross: "RTEMS-beatnik@5" test: NO name: "Ub-20 gcc-9 + RT-5.1 beatnik" - os: ubuntu-20.04 cmp: gcc configuration: default cross: "RTEMS-xilinx_zynq_a9_qemu@5" test: NO name: "Ub-20 gcc-9 + RT-5.1 xilinx_zynq_a9_qemu" - os: ubuntu-20.04 cmp: gcc configuration: default cross: "RTEMS-uC5282@5" test: NO name: "Ub-20 gcc-9 + RT-5.1 uC5282" - os: ubuntu-20.04 cmp: gcc configuration: default name: "Ub-20 gcc-9 + RT-4.10" cross: "RTEMS-pc386-qemu@4.10" test: NO - os: ubuntu-20.04 cmp: gcc configuration: default name: "Ub-20 gcc-9 + RT-4.9" cross: "RTEMS-pc386-qemu@4.9" - os: macos-latest cmp: clang configuration: default name: "MacOS clang-12" - os: windows-2019 cmp: vs2019 configuration: debug name: "Win2019 MSC-19" extra: "CMD_CXXFLAGS=-analysis" - os: windows-2019 cmp: vs2019 configuration: static-debug name: "Win2019 MSC-19, static" extra: "CMD_CXXFLAGS=-analysis" - os: windows-2019 cmp: vs2019 configuration: debug name: "Win2019 MSC-19, debug" - os: windows-2019 cmp: gcc configuration: default name: "Win2019 mingw" # Cross builds - os: ubuntu-latest cmp: gcc configuration: default name: "Cross linux-aarch64" cross: linux-aarch64 - os: ubuntu-latest cmp: gcc configuration: default name: "Cross linux-arm gnueabi" cross: linux-arm@arm-linux-gnueabi - os: ubuntu-latest cmp: gcc configuration: default name: "Cross linux-arm gnueabihf" cross: linux-arm@arm-linux-gnueabihf steps: - uses: actions/checkout@v3 with: submodules: true - name: Automatic core dumper analysis uses: mdavidsaver/ci-core-dumper@master - name: "apt-get install" run: | sudo apt-get update sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb if: runner.os == 'Linux' - name: Prepare and compile dependencies run: python .ci/cue.py prepare - name: Build main module run: python .ci/cue.py build - name: Run main module tests run: python .ci/cue.py -T 60M test - name: Upload tapfiles Artifact if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: tapfiles ${{ matrix.name }} path: '**/O.*/*.tap' if-no-files-found: ignore - name: Collect and show test results if: ${{ always() }} run: python .ci/cue.py -T 5M test-results docker: name: ${{ matrix.name }} runs-on: ubuntu-latest container: image: ${{ matrix.image }} # Set environment variables from matrix parameters env: CMP: ${{ matrix.cmp }} BCFG: ${{ matrix.configuration }} EXTRA: ${{ matrix.extra }} TEST: ${{ matrix.test }} strategy: fail-fast: false matrix: # Job names also name artifacts, character limitations apply include: - name: "CentOS-7" image: centos:7 cmp: gcc configuration: default - name: "Fedora-33" image: fedora:33 cmp: gcc configuration: default - name: "Fedora-latest" image: fedora:latest cmp: gcc configuration: default steps: - name: "Build newer Git" # actions/checkout@v2 wants git >=2.18 # centos:7 has 1.8 if: matrix.image=='centos:7' run: | yum -y install curl make gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker curl https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.29.0.tar.gz | tar -xz cd git-* make -j2 prefix=/usr/local all make prefix=/usr/local install cd .. rm -rf git-* type -a git git --version - name: "Redhat setup" run: | dnfyum() { dnf -y "$@" || yum -y "$@" return $? } dnfyum install python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple git --version || dnfyum install git # rather than just bite the bullet and link python3 -> python, # people would rather just break all existing scripts... [ -e /usr/bin/python ] || ln -sf python3 /usr/bin/python python --version - uses: actions/checkout@v3 with: submodules: true - name: Automatic core dumper analysis uses: mdavidsaver/ci-core-dumper@master - name: Prepare and compile dependencies run: python .ci/cue.py prepare - name: Build main module run: python .ci/cue.py build - name: Run main module tests run: python .ci/cue.py -T 20M test - name: Upload tapfiles Artifact if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: tapfiles ${{ matrix.name }} path: '**/O.*/*.tap' if-no-files-found: ignore - name: Collect and show test results if: ${{ always() }} run: python .ci/cue.py -T 5M test-results