diff --git a/README.md b/README.md index 48a1db1..ea9a237 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ ![Version][badge.version] ![Travis status][badge.travis] ![AppVeyor status][badge.appveyor] +![GitHub Actions status][badge.gh-actions] # Continuous Integration for EPICS Modules @@ -58,12 +59,12 @@ levels as the example files. ### [Travis-CI](https://travis-ci.org/) - Five parallel runners on Linux/Windows (one runner on MacOS) - - Use different compilers (gcc, clang) - - Use different gcc versions - - Cross-compile for Windows 32bit and 64bit using MinGW and WINE - - Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) + - Ubuntu 12/14/16/18, MacOS 10.13, Windows Server v1809 + - Compile natively on Linux (different versions of gcc, clang) - Compile natively on MacOS (clang) - Compile natively on Windows (gcc/MinGW, Visual Studio 2017) + - Cross-compile for Windows 32bit and 64bit using MinGW and WINE + - Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Built dependencies are cached (for faster builds). See specific @@ -72,8 +73,8 @@ for more details. ### [AppVeyor](https://www.appveyor.com/) - One parallel runner (all builds are sequential) - - Use different compilers (Visual Studio, gcc/MinGW) - - Use different Visual Studio versions: \ + - Windows Server 2012/2016/2019 + - Compile using gcc/MinGW or different Visual Studio versions: \ 2008, 2010, 2012, 2013, 2015, 2017, 2019 - Compile for Windows 32bit and 64bit - No useful caching available. @@ -82,15 +83,30 @@ See specific **[ci-scripts on AppVeyor README](appveyor/README.md)** for more details. +### [GitHub Actions](https://github.com/) + - 20 parallel runners on Linux/Windows (5 runners on MacOS) + - Ubuntu 16/18/20, MacOS 10.15, Windows Server 2016/2019 + - Compile natively on Linux (gcc, clang) + - Compile natively on MacOS (clang) + - Compile natively on Windows (gcc/MinGW, Visual Studio 2017 & 2019) + - Cross-compile for Windows 32bit and 64bit using MinGW and WINE + - Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) + - Caching not supported by ci-scripts yet. + +See specific +**[ci-scripts on GitHub Actions README](gh-actions/README.md)** +for more details. + ## How to Use the CI-Scripts - 1. Get an account on a supported CI service provider platform. + 1. Get an account on a supported CI service provider platform (e.g. [Travis-CI](https://travis-ci.org/), - [AppVeyor](https://www.appveyor.com/), ...) + [AppVeyor](https://www.appveyor.com/), ...). + GitHub Actions does not require a separate account. (More details in the specific README of the subdirectory.) - 2. In your Support Module, add this ci-scripts repository + 2. In your module, add this ci-scripts repository as a Git Submodule (name suggestion: `.ci`). ```bash git submodule add https://github.com/epics-base/ci-scripts .ci @@ -405,6 +421,7 @@ in file LICENSE that is included with this distribution. [badge.version]: https://badge.fury.io/gh/epics-base%2Fci-scripts.svg [badge.travis]: https://travis-ci.org/epics-base/ci-scripts.svg?branch=master [badge.appveyor]: https://ci.appveyor.com/api/projects/status/8b578alg974axvux?svg=true +[badge.gh-actions]: https://github.com/epics-base/ci-scripts/workflows/ci-scripts%20build/test/badge.svg [reddit.bash]: https://www.reddit.com/r/bash/comments/393oqv/why_is_the_version_of_bash_included_in_os_x_so_old/ diff --git a/appveyor/README.md b/appveyor/README.md index e4005f3..1e0d40d 100644 --- a/appveyor/README.md +++ b/appveyor/README.md @@ -3,8 +3,8 @@ ## Features - One parallel runner (all builds are sequential) - - Use different compilers (Visual Studio, gcc/MinGW) - - Use different Visual Studio versions: \ + - Windows Server 2012/2016/2019 + - Compile using gcc/MinGW or different Visual Studio versions: \ 2008, 2010, 2012, 2013, 2015, 2017, 2019 - Compile for Windows 32bit and 64bit - No useful caching available. diff --git a/github-actions/README.md b/github-actions/README.md new file mode 100644 index 0000000..77ab32d --- /dev/null +++ b/github-actions/README.md @@ -0,0 +1,57 @@ +# GitHub Actions Scripts for EPICS Modules + +## Features + + - 20 parallel runners on Linux/Windows (5 runners on MacOS) + - Ubuntu 16/18/20, MacOS 10.15, Windows Server 2016/2019 + - Compile natively on Linux (gcc, clang) + - Compile natively on MacOS (clang) + - Compile natively on Windows (gcc/MinGW, Visual Studio 2017 & 2019) + - Cross-compile for Windows 32bit and 64bit using MinGW and WINE + - Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) + - Caching not supported yet. + +## How to Use these Scripts + + 1. Add the ci-scripts respository as a Git Submodule + (see [README](../README.md) one level above). + + 2. Add settings files defining which dependencies in which versions + you want to build against + (see [README](../README.md) one level above). + + 3. Create a GitHub Actions configuration by copying one of the workflow + examples into the directory `.github/workflows` of your module. + ```bash + $ mkdir -p .github/workflows + $ cp .ci/github-actions/ci-scripts-build.yml.example-full .github/workflows/ci-scripts-build.yml + ``` + + 4. Edit the workflow configuration to include the build jobs you want + GitHub Actions to run. + + Build jobs are specified in the `jobs: : strategy:` + declaration. The `matrix:` element specifies the axes as configuration + parameters with their lists of values, + `env:` (on the build level) controls the setting of environment variables + (which can be matrix parameters). + The `runs-on:` setting specifies the image (operating system) of the + runner. + The `name:` is what shows up in the web interface for the workflow, + builds and jobs, and the elements under `steps:` describe the actions + executed for each job of the matrix. + + Please check the comments in the examples for more hints, and the + [GitHub Actions documentation](https://help.github.com/en/actions) + for a lot more options and details. + + 5. Push your changes and click on the `Actions` tab of your GitHub repository + page to see your build results. + +## Caches + +GitHub Actions provides caching of dependencies. + +However, since their cache restore and create algorithm is fundamentally +different from those used by Travis and AppVeyor, this will require some +more changes in ci-scripts to work. Be patient. diff --git a/github-actions/ci-scripts-build.yml.example-full b/github-actions/ci-scripts-build.yml.example-full new file mode 100644 index 0000000..412a6b6 --- /dev/null +++ b/github-actions/ci-scripts-build.yml.example-full @@ -0,0 +1,155 @@ +# .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 (MYMODULE) + +name: MYMODULE ci-scripts build + +# Trigger on pushes and PRs to any branch +on: [push, pull_request] + +env: + SETUP_PATH: .ci-local:.ci + SET: test01 + CMP: gcc + # For the sequencer on Linux/Windows/MacOS + APT: re2c + CHOCO: re2c + BREW: re2c + +jobs: + build-linux: + name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + # Set environment variables from matrix parameters + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04] + cmp: [gcc, clang] + configuration: [default, static, debug, static-debug] + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results + + build-macos: + name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + # Set environment variables from matrix parameters + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + strategy: + fail-fast: false + matrix: + os: [macos-10.15] + cmp: [clang] + # No static builds on MacOS + configuration: [default, debug] + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results + + build-windows: + name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + strategy: + fail-fast: false + matrix: + os: [windows-2019, windows-2016] + cmp: [gcc, vs2019, vs2017] + configuration: [default, static, debug, static-debug] + # Available: vs2017/windows-2016 and vs2019/windows-2019 + exclude: + - os: windows-2019 + cmp: vs2017 + - os: windows-2016 + cmp: vs2019 + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results + + # Same setup and toolchain as on Travis. + # Needs Base >= 3.15 to compile, EPICS 7 to also run the tests on qemu + build-rtems: + name: RTEMS${{ matrix.rtems }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + RTEMS: ${{ matrix.rtems }} + APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64 qemu-system-x86 + strategy: + fail-fast: false + matrix: + os: [ubuntu-18.04] + cmp: [gcc] + configuration: [default, static, debug, static-debug] + rtems: ["4.9", "4.10"] + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results + + # The WINE cross builds are of somewhat limited use, + # as there are native gcc/MinGW builds available on GitHub Actions + build-wine: + name: WINE${{ matrix.wine }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + WINE: ${{ matrix.wine }} + APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64 + strategy: + fail-fast: false + matrix: + os: [ubuntu-18.04] + cmp: [gcc] + configuration: [default, static, debug, static-debug] + wine: [32, 64] + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results diff --git a/github-actions/ci-scripts-build.yml.example-mini b/github-actions/ci-scripts-build.yml.example-mini new file mode 100644 index 0000000..6c20072 --- /dev/null +++ b/github-actions/ci-scripts-build.yml.example-mini @@ -0,0 +1,43 @@ +# .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 + +name: MYMODULE ci-scripts build + +# Trigger on pushes and PRs to any branch +on: [push, pull_request] + +env: + SETUP_PATH: .ci-local:.ci + SET: test01 + CMP: gcc + +jobs: + build-linux: + name: ${{ matrix.base }} / ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }} + # Set environment variables from matrix parameters + env: + CMP: ${{ matrix.cmp }} + BCFG: ${{ matrix.configuration }} + BASE: ${{ matrix.base }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04, ubuntu-18.04] + cmp: [gcc] + configuration: [default, static] + base: ["7.0", "3.15"] + steps: + - uses: actions/checkout@v2 + - name: Prepare and compile dependencies + run: python cue.py prepare + - name: Build main module + run: python cue.py build + - name: Run main module tests + run: python cue.py test + - name: Collect and show test results + run: python cue.py test-results