From 6a2cc1c36cc4d6bec119f004d7091f51390cf6fa Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 25 Dec 2023 21:56:02 +0000 Subject: [PATCH] Configure CI using ci-scripts for GHA and Appveyor --- .appveyor.yml | 93 +++++++++++++ .ci | 1 + .ci-local/default.set | 14 ++ .github/workflows/ci-scripts-build.yml | 174 +++++++++++++++++++++++++ .gitmodules | 3 + 5 files changed, 285 insertions(+) create mode 100644 .appveyor.yml create mode 160000 .ci create mode 100644 .ci-local/default.set create mode 100644 .github/workflows/ci-scripts-build.yml create mode 100644 .gitmodules diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..41e459d --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,93 @@ +# .appveyor.yml for use with EPICS Base ci-scripts +# (see: https://github.com/epics-base/ci-scripts) + +# This is YAML - indentation levels are crucial + +cache: + - C:\Users\appveyor\.tools + +#---------------------------------# +# repository cloning # +#---------------------------------# + +init: + # Set autocrlf to make batch files work + - git config --global core.autocrlf true + +clone_depth: 5 + +# Build Configurations: dll/static, regular/debug +configuration: + - dynamic + - static + - dynamic-debug + - static-debug + +# Default OS Image +image: Visual Studio 2019 + +# Environment variables: compiler toolchain, base version, setup file, ... +environment: + # common / default variables for all jobs + SETUP_PATH: .ci-local:.ci + + matrix: + - BASE: 3.15 + CMP: vs2019 + - BASE: 7.0 + CMP: vs2019 + - BASE: 7.0 + CMP: gcc + - BASE: 7.0 + CMP: vs2017 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + +# Platform: processor architecture +platform: + - x64 + +#---------------------------------# +# building & testing # +#---------------------------------# + +install: + - cmd: git submodule update --init --recursive + - cmd: pip install git+https://github.com/mdavidsaver/ci-core-dumper#egg=ci-core-dumper + - cmd: python .ci/cue.py prepare + +build_script: + - cmd: python .ci/cue.py build + +test_script: + - cmd: python -m ci_core_dumper install + - cmd: python .ci/cue.py -T 20M test + +on_finish: + - ps: Get-ChildItem *.tap -Recurse -Force | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name } + - cmd: python .ci/cue.py -T 5M test-results + +on_failure: + - cmd: python -m ci_core_dumper report + +#---------------------------------# +# debugging # +#---------------------------------# + +## if you want to connect by remote desktop to a failed build, uncomment these lines +## note that you will need to connect within the usual build timeout limit (60 minutes) +## so you may want to adjust the build matrix above to just build the one of interest + +#on_failure: +# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) +# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + +#---------------------------------# +# notifications # +#---------------------------------# + +notifications: + - provider: Email + to: + - core-talk@aps.anl.gov + on_build_success: false + - provider: GitHubPullRequest diff --git a/.ci b/.ci new file mode 160000 index 0000000..130e88b --- /dev/null +++ b/.ci @@ -0,0 +1 @@ +Subproject commit 130e88b7095812da93e423c602651e30f39da11a diff --git a/.ci-local/default.set b/.ci-local/default.set new file mode 100644 index 0000000..8aad835 --- /dev/null +++ b/.ci-local/default.set @@ -0,0 +1,14 @@ +# EPICS Base +BASE_DIRNAME=base +BASE_REPONAME=epics-base +BASE_REPOOWNER=epics-base +BASE_VARNAME=EPICS_BASE +BASE_RECURSIVE=NO + +MODULES=PVDATA PVACCESS + +PVDATA_REPONAME=pvDataCPP +PVDATA_REPOOWNER=epics-base + +PVACCESS_REPONAME=pvAccessCPP +PVACCESS_REPOOWNER=epics-base diff --git a/.github/workflows/ci-scripts-build.yml b/.github/workflows/ci-scripts-build.yml new file mode 100644 index 0000000..52f122e --- /dev/null +++ b/.github/workflows/ci-scripts-build.yml @@ -0,0 +1,174 @@ +# .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 + +# Set the 'name:' properties to values that work for you (pvxs) + +name: Base + +# Trigger on pushes and PRs to any branch +on: + push: + paths-ignore: + - '.*.yml' + - 'documentation/*' + - '**/*.md' + pull_request: + paths-ignore: + - '.*.yml' + - 'documentation/*' + - '**/*.md' + +env: + SETUP_PATH: .ci-local:.ci + EPICS_TEST_IMPRECISE_TIMING: YES + +jobs: + build-base: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + # Set environment variables from matrix parameters + env: + BASE: ${{ matrix.base }} + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + WINE: ${{ matrix.wine }} + RTEMS: ${{ matrix.rtems }} + RTEMS_TARGET: ${{ matrix.rtems_target }} + EXTRA: ${{ matrix.extra }} + TEST: ${{ matrix.test }} + strategy: + fail-fast: false + matrix: + # Job names also name artifacts, character limitations apply + include: + - os: ubuntu-20.04 + cmp: gcc + configuration: default + base: "3.15" + wine: "64" + name: "3.15 Ub-20 gcc-9 + MinGW" + + - os: ubuntu-20.04 + cmp: gcc + configuration: default + base: "7.0" + wine: "64" + name: "7.0 Ub-20 gcc-9 + MinGW" + + - os: ubuntu-20.04 + cmp: gcc + configuration: static + base: "7.0" + wine: "64" + name: "7.0 Ub-20 gcc-9 + MinGW, static" + + - os: ubuntu-20.04 + cmp: gcc + configuration: static + base: "7.0" + extra: "CMD_CXXFLAGS=-std=c++11" + name: "7.0 Ub-20 gcc-9 C++11, static" + + - os: ubuntu-20.04 + cmp: clang + configuration: default + base: "7.0" + name: "7.0 Ub-20 clang-10" + + - os: ubuntu-20.04 + cmp: clang + configuration: default + base: "7.0" + extra: "CMD_CXXFLAGS=-std=c++11" + name: "7.0 Ub-20 clang-10 C++11" + + - os: ubuntu-20.04 + cmp: gcc + configuration: default + base: "7.0" + rtems: "5" + rtems_target: RTEMS-pc686-qemu + test: NO + name: "7.0 Ub-20 gcc-9 + RT-5.1 pc686" + + - os: ubuntu-20.04 + cmp: gcc + configuration: default + base: "7.0" + rtems: "4.10" + rtems_target: RTEMS-pc386-qemu + test: NO + name: "7.0 Ub-20 gcc-9 + RT-4.10" + + - os: ubuntu-20.04 + cmp: gcc + configuration: default + base: "7.0" + rtems: "4.9" + rtems_target: RTEMS-pc386-qemu + name: "7.0 Ub-20 gcc-9 + RT-4.9" + + - os: macos-latest + cmp: clang + configuration: default + base: "7.0" + name: "7.0 MacOS clang-12" + + - os: windows-2019 + cmp: vs2019 + configuration: default + base: "7.0" + name: "7.0 Win2019 MSC-19" + + - os: windows-2019 + cmp: vs2019 + configuration: static + base: "7.0" + name: "7.0 Win2019 MSC-19, static" + + - os: windows-2019 + cmp: vs2019 + configuration: debug + base: "7.0" + name: "7.0 Win2019 MSC-19, debug" + + - os: windows-2019 + cmp: gcc + configuration: default + base: "7.0" + name: "7.0 Win2019 mingw" + + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Cache Dependencies + uses: actions/cache@v2 + with: + path: ~/.cache + key: ${{ matrix.base }}/${{ matrix.os }}/${{ matrix.cmp }}/${{ matrix.configuration }}/${{ matrix.wine }}${{ matrix.rtems }}/${{ matrix.rtems_target }}/${{ matrix.extra }} + - name: Automatic core dump 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 20M test + - name: Upload tapfiles Artifact + if: ${{ always() }} + uses: actions/upload-artifact@v2 + 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 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..cfa3a70 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule ".ci"] + path = .ci + url = https://github.com/epics-base/ci-scripts