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