# .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: pvData # Trigger on pushes and PRs to any branch on: push: paths-ignore: - .appveyor.yml pull_request: env: SETUP_PATH: .ci-local:.ci EPICS_TEST_IMPRECISE_TIMING: YES EPICS_TEST_TIMEOUT: 300 # 5 min jobs: native: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} # Set environment variables from matrix parameters env: # NB: PVA modules build against both BASE 7.0 and 3.15 BASE: ${{ matrix.base }} 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: - name: "7.0 Ub gcc c++20 Werror" base: "7.0" os: ubuntu-latest cmp: gcc configuration: default # 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 -fstack-protector-strong -Wformat -Werror -Werror=format-security -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=stringop-overread -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3' CMD_LDFLAGS=-Wl,-z,relro" - name: "7.0 Ub gcc C++11, static" base: "7.0" os: ubuntu-latest cmp: gcc configuration: static extra: "CMD_CXXFLAGS=-std=c++11" - name: "7.0 Ub gcc u-char" base: "7.0" os: ubuntu-latest cmp: gcc configuration: static extra: "CMD_CFLAGS=-funsigned-char CMD_CXXFLAGS=-funsigned-char" - name: "7.0 Ub clang" base: "7.0" os: ubuntu-latest cmp: clang configuration: default - name: "7.0 Ub clang C++11" base: "7.0" os: ubuntu-latest cmp: clang configuration: default extra: "CMD_CXXFLAGS=-std=c++11" - name: "7.0 MacOS clang" base: "7.0" os: macos-latest cmp: clang configuration: default # Cross builds - name: "3.15 Ub-22 gcc + MinGW" base: "3.15" os: ubuntu-22.04 cmp: gcc configuration: default cross: "windows-x64-mingw" - name: "7.0 Ub gcc + linux-aarch64" base: "7.0" os: ubuntu-latest cmp: gcc configuration: default cross: "linux-aarch64" - name: "7.0 Ub gcc + linux-arm gnueabi" base: "7.0" os: ubuntu-latest cmp: gcc configuration: default cross: "linux-arm@arm-linux-gnueabi" - name: "7.0 Ub gcc + linux-arm gnueabihf" base: "7.0" os: ubuntu-latest cmp: gcc configuration: default cross: "linux-arm@arm-linux-gnueabihf" - name: "7.0 Ub gcc + MinGW" base: "7.0" os: ubuntu-latest cmp: gcc configuration: default cross: "windows-x64-mingw" - name: "7.0 Ub gcc + MinGW, static" base: "7.0" os: ubuntu-latest cmp: gcc configuration: static cross: "windows-x64-mingw" - name: "7.0 Ub-22 gcc + RT-4.9 pc386" base: "7.0" os: ubuntu-22.04 cmp: gcc configuration: default cross: "RTEMS-pc386-qemu@4.9" - name: "7.0 Ub-22 gcc + RT-4.10 pc386" base: "7.0" os: ubuntu-22.04 cmp: gcc configuration: default cross: "RTEMS-pc386-qemu@4.10" test: NO - name: "7.0 Ub-22 gcc + RT-5.1 pc686" base: "7.0" os: ubuntu-22.04 cmp: gcc configuration: default cross: "RTEMS-pc686-qemu@5" - name: "7.0 Ub-22 gcc + RT-5.1 beatnik,zynq_a9,uC5282" base: "7.0" os: ubuntu-22.04 cmp: gcc configuration: default cross: "RTEMS-beatnik@5:RTEMS-xilinx_zynq_a9_qemu@5:RTEMS-uC5282@5" test: NO # Windows builds - name: "7.0 Win-22 MSC-22" base: "7.0" os: windows-2022 cmp: vs2022 configuration: default - name: "7.0 Win-22 MSC-22 static" base: "7.0" os: windows-2022 cmp: vs2022 configuration: static - name: "7.0 Win-22 MSC-22 debug" base: "7.0" os: windows-2022 cmp: vs2022 configuration: debug extra: "CMD_CXXFLAGS=-analyze" - name: "7.0 Win-22 MinGW" base: "7.0" os: windows-2022 cmp: gcc configuration: default steps: - uses: actions/checkout@v4 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@v4 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: BASE: ${{ matrix.base }} 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: "7.0 CentOS-8 gcc" base: "7.0" image: centos:8 cmp: gcc configuration: default - name: "7.0 Rocky-9 gcc" base: "7.0" image: rockylinux:9 cmp: gcc configuration: default - name: "7.0 Fedora-33 gcc" base: "7.0" image: fedora:33 cmp: gcc configuration: default - name: "7.0 Fedora gcc" base: "7.0" image: fedora:latest cmp: gcc configuration: default steps: - name: "Fix repo URLs on CentOS-8" # centos:8 is frozen, repos are in the vault if: matrix.image=='centos:8' run: | sed -i -e "s|mirrorlist=|#mirrorlist=|" \ -e "s|#baseurl=http://mirror|baseurl=http://vault|" \ /etc/yum.repos.d/CentOS-Linux-{BaseOS,AppStream,Extras,Plus}.repo - name: "Redhat setup" run: | dnf -y install python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple git --version || dnf -y install git python3 --version - uses: actions/checkout@v4 with: submodules: true - name: Automatic core dumper analysis uses: mdavidsaver/ci-core-dumper@master - name: Prepare and compile dependencies run: python3 .ci/cue.py prepare - name: Build main module run: python3 .ci/cue.py build - name: Run main module tests run: python3 .ci/cue.py -T 20M test - name: Upload tapfiles Artifact if: ${{ always() }} uses: actions/upload-artifact@v4 with: name: tapfiles ${{ matrix.name }} path: '**/O.*/*.tap' if-no-files-found: ignore - name: Collect and show test results if: ${{ always() }} run: python3 .ci/cue.py -T 5M test-results