From 1043d4287e41f1369fe19e771fa7c5567d4468c9 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 09:40:23 +0000 Subject: [PATCH 01/36] Adding a GitHub workflow to trigger a GitHub CI build, as an experiment. --- .github/workflows/c-cpp.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/c-cpp.yml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 0000000000..3b95118f2c --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,27 @@ +# .github/workflows/c-cpp.yml +# +# GitHub CI +# +# Adapted from + +name: C/C++ CI + +on: + push: + branches: [ $default-branch ] + pull_request: + branches: [ $default-branch ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: configure + run: ./configure + - name: make + run: make + - name: make test + run: make test From f7e3de4295b08cf34ab6b4bbb8effc0c043d1097 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 09:40:42 +0000 Subject: [PATCH 02/36] Disabling Travis CI on this branch while experimenting with GitHub CI. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 001d1674e1..af7a38e27d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ # Some branches don't need builds. Add them here to avoid using build # resources and unnecessary build messages. See # . -if: NOT branch IN (branch/2023-01-07/pull-request-merge-procedure) +if: NOT branch IN (branch/2023-01-11/github-ci) # The main build matrix for POSIX-like systems. language: c # see . From 598ca3e271a2ca27a747f3fa5ae179646f190222 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 12:43:43 +0000 Subject: [PATCH 03/36] Possibly removing condition that the workflow only works on the default (master) branch. --- .github/workflows/c-cpp.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 3b95118f2c..bf6db79352 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -7,10 +7,8 @@ name: C/C++ CI on: - push: - branches: [ $default-branch ] - pull_request: - branches: [ $default-branch ] + push + pull_request jobs: build: From 0e5a067bd1a18ac217908173de90ddd485a3619e Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 12:47:24 +0000 Subject: [PATCH 04/36] Fixing YAML syntax. --- .github/workflows/c-cpp.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index bf6db79352..f67a837cfb 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -7,8 +7,8 @@ name: C/C++ CI on: - push - pull_request + - push + - pull_request jobs: build: From 46bf2f7b402a51d95a13b200e8612dfcfcfa3001 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:08:31 +0000 Subject: [PATCH 05/36] Extending job to run on macOS using a build matrix. --- .github/workflows/c-cpp.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f67a837cfb..b716fc74d5 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -12,8 +12,10 @@ on: jobs: build: - - runs-on: ubuntu-latest + # See . + strategy: + matrix: + os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v3 From 5561cdf692c6d95d92551ae613a2fb737e1c91ef Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:11:19 +0000 Subject: [PATCH 06/36] Using the matrix output as input to the job's runs-on parameter. --- .github/workflows/c-cpp.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index b716fc74d5..d628faa77c 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -17,6 +17,8 @@ jobs: matrix: os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: - uses: actions/checkout@v3 - name: configure From 6d3fc4bf5eb50e2ceb8083b0cf007be341d557af Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:31:42 +0000 Subject: [PATCH 07/36] Adding a Windows build to GitHub CI. --- .github/workflows/c-cpp.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index d628faa77c..8802afe83f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -11,7 +11,7 @@ on: - pull_request jobs: - build: + build-posix: # See . strategy: matrix: @@ -27,3 +27,15 @@ jobs: run: make - name: make test run: make test + + build-windows: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: make + run: | + cd code + nmake /f w3i6mv.nmk + shell: cmd From d6b1347847223dde5f09e5514e13cbcb4c9a80aa Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:35:06 +0000 Subject: [PATCH 08/36] Visual Studio tools aren't in CMD in GitHub CI by default. Try using the shim we made for Travis CI. --- .github/workflows/c-cpp.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 8802afe83f..62fafd7223 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -35,7 +35,5 @@ jobs: steps: - uses: actions/checkout@v3 - name: make - run: | - cd code - nmake /f w3i6mv.nmk + run: code\w3i6mv.bat shell: cmd From 1f65c8b33b69fbf58d7fe71468c1766ea9e022b8 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:42:25 +0000 Subject: [PATCH 09/36] Trying a path to Visual Studio environment documented by GitHub . --- .github/workflows/c-cpp.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 62fafd7223..3f3faba084 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -35,5 +35,9 @@ jobs: steps: - uses: actions/checkout@v3 - name: make - run: code\w3i6mv.bat + # Using path to Visual Studio documented at . + run: | + C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat x64 + cd code + nmake /f w3i6mv.nmk shell: cmd From a538a5ec11cc9c29ff9cfd1e3cad9dfcb6f05102 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:44:37 +0000 Subject: [PATCH 10/36] Quoting path to Visual Studio environment to try to get CMD to run it in GitHub CI. --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 3f3faba084..1e743388e8 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -37,7 +37,7 @@ jobs: - name: make # Using path to Visual Studio documented at . run: | - C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat x64 + "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 cd code nmake /f w3i6mv.nmk shell: cmd From 36eea75c6c2bfc7d24e79ccaa8d0409710b1d0fc Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 13:46:53 +0000 Subject: [PATCH 11/36] GitHub CI's CMD exited right after the first line, so perhaps the run script is secretly a batch file and needs to use "call". --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 1e743388e8..eb387ce0ad 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -37,7 +37,7 @@ jobs: - name: make # Using path to Visual Studio documented at . run: | - "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 cd code nmake /f w3i6mv.nmk shell: cmd From ebaad532660c0ddf26706561daa7051df71e21d3 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 11 Jan 2023 15:48:50 +0000 Subject: [PATCH 12/36] Moving Linux, macOS, and Windows builds to Github CI. --- .travis.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index f6a8e5380d..cf99e943ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,9 @@ if: NOT branch IN (branch/2023-01-11/github-ci) language: c # see . os: - freebsd - - linux - - osx + # Linux and macOS moved to GitHub CI. See .github/workflows/c-cpp.yml. + # - linux + # - osx # See "include" section for Windows arch: - amd64 @@ -24,11 +25,12 @@ script: matrix: # Extra build jobs to add to the matrix - include: - - os: windows - arch: amd64 - compiler: clang # This is a lie since we invoke MV (Microsoft C) - script: MSYS2_ARG_CONV_EXCL='*' cmd /c 'code\w3i6mv.bat' + # Windows moved to GitHub CI. See .github/workflows/c-cpp.yml. + # include: + # - os: windows + # arch: amd64 + # compiler: clang # This is a lie since we invoke MV (Microsoft C) + # script: MSYS2_ARG_CONV_EXCL='*' cmd /c 'code\w3i6mv.bat' # Specific combinations to exclude from the matrix exclude: - os: osx From ce05f9a5f91d365078733824d1a15d9280325033 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Fri, 13 Jan 2023 03:52:51 +0000 Subject: [PATCH 13/36] Re-enabling arm64 builds, because GitHub CI does not provide them. --- .travis.yml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index cf99e943ac..f5a5f0b63c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,12 +10,12 @@ if: NOT branch IN (branch/2023-01-11/github-ci) language: c # see . os: - freebsd - # Linux and macOS moved to GitHub CI. See .github/workflows/c-cpp.yml. - # - linux - # - osx + - linux + - osx # See "include" section for Windows arch: - - amd64 + # Most amd64 builds moved to GitHub CI. See .github/workflows/c-cpp.yml. + # - amd64 - arm64 compiler: - clang @@ -25,12 +25,19 @@ script: matrix: # Extra build jobs to add to the matrix - # Windows moved to GitHub CI. See .github/workflows/c-cpp.yml. - # include: - # - os: windows - # arch: amd64 - # compiler: clang # This is a lie since we invoke MV (Microsoft C) - # script: MSYS2_ARG_CONV_EXCL='*' cmd /c 'code\w3i6mv.bat' + include: + # GitHub CI does not provide FreeBSD . + - os: freebsd + arch: amd64 + compiler: clang + - os: freebsd + arch: amd64 + compiler: gcc + # Windows moved to GitHub CI. See .github/workflows/c-cpp.yml. + # - os: windows + # arch: amd64 + # compiler: clang # This is a lie since we invoke MV (Microsoft C) + # script: MSYS2_ARG_CONV_EXCL='*' cmd /c 'code\w3i6mv.bat' # Specific combinations to exclude from the matrix exclude: - os: osx From 840b50df58fbc28364fe89f05c1a02c5f97af5c2 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Fri, 13 Jan 2023 03:57:25 +0000 Subject: [PATCH 14/36] Explicitly excluding macOS on amd64 after observing it was included in . --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index f5a5f0b63c..fbc4ebe7ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,6 +42,10 @@ matrix: exclude: - os: osx compiler: gcc + # Travis includes this even though we don't ask for it in the + # matrix, perhaps because it's the only macOS arch they support. + - os: osx + arch: amd64 notifications: email: From c958598da4d90140085fc76f3604755fe7280957 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Fri, 13 Jan 2023 04:00:31 +0000 Subject: [PATCH 15/36] Another attempt to suppress macOS on amd64, after observing it was still attempted in . --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index fbc4ebe7ff..56ac2d83f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,11 @@ language: c # see . os: - freebsd - linux - - osx + # If you include macOS here, Travis launches a redundant build on + # amd64, even though we specify arm64. Perhaps it's because they + # don't support macOS on arm64. When they do, try uncommenting + # this. + # - osx # See "include" section for Windows arch: # Most amd64 builds moved to GitHub CI. See .github/workflows/c-cpp.yml. @@ -42,10 +46,6 @@ matrix: exclude: - os: osx compiler: gcc - # Travis includes this even though we don't ask for it in the - # matrix, perhaps because it's the only macOS arch they support. - - os: osx - arch: amd64 notifications: email: From 59c8974c11997aa873969ab96c0c88c367cf1976 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sat, 14 Jan 2023 20:43:10 +0000 Subject: [PATCH 16/36] Adding test targets to GitHub CI on Windows. --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index eb387ce0ad..0e45cbe334 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -39,5 +39,5 @@ jobs: run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 cd code - nmake /f w3i6mv.nmk + nmake /f w3i6mv.nmk all testci testansi testpollnone shell: cmd From ff63810f14c7f02729464d5776b80ed12773d45f Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 10:45:39 +0000 Subject: [PATCH 17/36] Add workflow_dispatch trigger to workflow so that it can be started manually. --- .github/workflows/c-cpp.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 0e45cbe334..5ab80fa7fa 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -9,6 +9,9 @@ name: C/C++ CI on: - push - pull_request + # Also run when triggered manually + # + - workflow_dispatch jobs: build-posix: From 92d2d5cd7ca4756bca0c216b69f190e1c8cf409e Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 12:47:03 +0000 Subject: [PATCH 18/36] Adding tool scripts to kick off CI builds on Travis CI and GitHub. --- tool/github-ci-kick | 117 ++++++++++++++++++++++++++++++++++++++++++++ tool/travis-ci-kick | 117 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100755 tool/github-ci-kick create mode 100755 tool/travis-ci-kick diff --git a/tool/github-ci-kick b/tool/github-ci-kick new file mode 100755 index 0000000000..63c7dce898 --- /dev/null +++ b/tool/github-ci-kick @@ -0,0 +1,117 @@ +#!/bin/sh +# tool/github-ci-kick -- kick off a build at GitHub CI +# Richard Brooksby, Ravenbrook Limited, 2023-01-15 +# +# Copyright (c) 2023 Ravenbrook Limited. See end of file for license. +# +# This shell script uses the GitHub REST API to kick off a build on +# the GitHub CI servers [GITHUB]. The build will be run using the +# GitHub CI configuration at the commit (in +# .github/workflows/c-cpp.yml). +# +# See also tool/travis-ci-kick. +# +# You can achieve the same thing using the GitHub CLI, if you have +# that installed +# . +# This script is intended to help with automation and so avoids +# depending on that. [There's a hidden policy implied here. RB +# 2023-01-15] +# +# To get a token for this script for the Ravenbrook MPS repo at +# GitHub, first see +# +# but overlay these details: +# +# 1. In "Resource owner" choose "Ravenbrook". You must be a member of +# the GitHub Ravenbrook organisation. +# +# 2. In "Repository access" choose "Only select repositories" and the +# "Ravenbrook/mps" repository. +# +# 3. In "Permissions" expand "Repository permissions" and under +# "Actions" choose "Read-only". +# +# NOTE: This script could use the GitHub CLI, but that would require +# it to be installed by the user. +# +# TODO: Convert to Python for use from Windows? +# +# TODO: Make -t optional by getting AUTH-TOKEN from somewhere (secure). + +set -e # exit on error + +# defaults +branch="master" +org="Ravenbrook" +repo="mps" + +usage() { + echo 1>&2 "Usage: ${0} [-o ORG] [-r REPO] [-b BRANCH] -t AUTH-TOKEN" + exit 1 +} + +while getopts c:b:r:t: flag; do + case "${flag}" in + b) branch="${OPTARG}";; + o) org="${OPTARG}";; + r) repo="${OPTARG}";; + t) auth="${OPTARG}";; + *) usage;; + esac +done + +test -z "${auth}" && usage + +curl --silent --show-error \ + --request POST --data @- \ + --header "Accept: application/vnd.github+json" \ + --header "Authorization: Bearer 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"\ + --header "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/${org}/${repo}/actions/workflows/c-cpp.yml/dispatches" \ + <<-EOF +{ + "ref": "${branch}" +} +EOF + + +# A. REFERENCES +# +# [GitHub] "Create a workflow dispatch event"; . +# +# +# B. DOCUMENT HISTORY +# +# 2023-01-15 RB Created. +# +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2023 Ravenbrook Limited . +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# $Id$ diff --git a/tool/travis-ci-kick b/tool/travis-ci-kick new file mode 100755 index 0000000000..64d5b5c7d1 --- /dev/null +++ b/tool/travis-ci-kick @@ -0,0 +1,117 @@ +#!/bin/sh +# tool/travis-ci-kick -- kick off a build at Travis CI +# Richard Brooksby, Ravenbrook Limited, 2023-01-15 +# +# Copyright (c) 2023 Ravenbrook Limited. See end of file for license. +# +# This shell script uses the Travis CI REST API V3 to kick off a build +# on the Travis CI servers. The build will be run using the Travis CI +# configuration at the commit (in .travis.yml). +# +# See also tool/github-ci-kick. +# +# To get a token for this script, visit +# and copy your token +# from "API authentication". +# +# TODO: Extend this script to take MPS platform codes and kick off the +# appropriate build, overriding the (possibly nonexistent) Travis Ci +# config. See [TRAVIS]. +# +# TODO: Convert to Python for use from Windows? +# +# TODO: Make -t optional by getting AUTH-TOKEN from somewhere (secure). + +set -e # exit on error + +# defaults +branch="master" +org="Ravenbrook" +repo="mps" + +usage() { + echo 1>&2 "Usage: ${0} [-o ORG] [-r REPO] [-b BRANCH] [-c COMMIT-SHA] -t AUTH-TOKEN" + exit 1 +} + +while getopts c:b:r:t: flag; do + case "${flag}" in + c) commit="${OPTARG}";; + b) branch="${OPTARG}";; + o) org="${OPTARG}";; + r) repo="${OPTARG}";; + t) auth="${OPTARG}";; + *) usage;; + esac +done + +test -z "${auth}" && usage + +# If the field "sha" is omitted, Travis CI builds the tip of the +# branch [TRAVIS]. +if test -z "${commit}"; then + cat <<-EOF +{ + "request": { + "branch":"${branch}" + } +} +EOF +else + cat <. +# +# +# B. DOCUMENT HISTORY +# +# 2023-01-15 RB Created. +# +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2023 Ravenbrook Limited . +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# $Id$ From a48233b41aa76a808da91db721e106f86c148940 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 12:57:41 +0000 Subject: [PATCH 19/36] Oops. Deleting literal token and replacing with parameter. Also correcting the permissions required on the token. --- tool/github-ci-kick | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tool/github-ci-kick b/tool/github-ci-kick index 63c7dce898..8285693a9f 100755 --- a/tool/github-ci-kick +++ b/tool/github-ci-kick @@ -30,7 +30,7 @@ # "Ravenbrook/mps" repository. # # 3. In "Permissions" expand "Repository permissions" and under -# "Actions" choose "Read-only". +# "Actions" choose "Read and write". # # NOTE: This script could use the GitHub CLI, but that would require # it to be installed by the user. @@ -66,7 +66,7 @@ test -z "${auth}" && usage curl --silent --show-error \ --request POST --data @- \ --header "Accept: application/vnd.github+json" \ - --header "Authorization: Bearer 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"\ + --header "Authorization: Bearer ${auth}"\ --header "X-GitHub-Api-Version: 2022-11-28" \ "https://api.github.com/repos/${org}/${repo}/actions/workflows/c-cpp.yml/dispatches" \ <<-EOF From 01175c6799681bcda48b5ea381c69da2459b7c1c Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 13:16:34 +0000 Subject: [PATCH 20/36] Renaming the c-cpp workflow to build-and-test, which expresses better its intention. --- .github/workflows/{c-cpp.yml => build-and-test.yml} | 6 +++--- .travis.yml | 2 +- tool/github-ci-kick | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) rename .github/workflows/{c-cpp.yml => build-and-test.yml} (91%) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/build-and-test.yml similarity index 91% rename from .github/workflows/c-cpp.yml rename to .github/workflows/build-and-test.yml index 5ab80fa7fa..46880674cf 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/build-and-test.yml @@ -1,15 +1,15 @@ -# .github/workflows/c-cpp.yml +# .github/workflows/build-and-test.yml # # GitHub CI # # Adapted from -name: C/C++ CI +name: build and test on: - push - pull_request - # Also run when triggered manually + # Also run when triggered manually, e.g. by tool/github-ci-kick # - workflow_dispatch diff --git a/.travis.yml b/.travis.yml index 56ac2d83f5..e123891ddc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ os: # - osx # See "include" section for Windows arch: - # Most amd64 builds moved to GitHub CI. See .github/workflows/c-cpp.yml. + # Most amd64 builds moved to GitHub CI. See .github/workflows/build-and-test.yml. # - amd64 - arm64 compiler: diff --git a/tool/github-ci-kick b/tool/github-ci-kick index 8285693a9f..b313da20cb 100755 --- a/tool/github-ci-kick +++ b/tool/github-ci-kick @@ -7,7 +7,7 @@ # This shell script uses the GitHub REST API to kick off a build on # the GitHub CI servers [GITHUB]. The build will be run using the # GitHub CI configuration at the commit (in -# .github/workflows/c-cpp.yml). +# .github/workflows/build-and-test.yml). # # See also tool/travis-ci-kick. # @@ -68,7 +68,7 @@ curl --silent --show-error \ --header "Accept: application/vnd.github+json" \ --header "Authorization: Bearer ${auth}"\ --header "X-GitHub-Api-Version: 2022-11-28" \ - "https://api.github.com/repos/${org}/${repo}/actions/workflows/c-cpp.yml/dispatches" \ + "https://api.github.com/repos/${org}/${repo}/actions/workflows/build-and-test.yml/dispatches" \ <<-EOF { "ref": "${branch}" From 6bf2447b01f92a1b87b968d67f197ddda4c9f668 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 13:17:05 +0000 Subject: [PATCH 21/36] Adding TODO note about kicking off other CI actions. --- tool/github-ci-kick | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tool/github-ci-kick b/tool/github-ci-kick index b313da20cb..dc4b090fdf 100755 --- a/tool/github-ci-kick +++ b/tool/github-ci-kick @@ -9,6 +9,9 @@ # GitHub CI configuration at the commit (in # .github/workflows/build-and-test.yml). # +# TODO: What about other workflows such as rst-check.yml? Perhaps +# this script should kick them all. +# # See also tool/travis-ci-kick. # # You can achieve the same thing using the GitHub CLI, if you have From b420b85d948bd3751cb53a0a6be197a0cde40118 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 13:34:00 +0000 Subject: [PATCH 22/36] Adding explicit build for LII6LL. --- .github/workflows/build-and-test.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 46880674cf..bd4d27a1a1 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -31,7 +31,23 @@ jobs: - name: make test run: make test - build-windows: + # Both GCC and Clang are available on GitHub's runner + # + # and the autoconf configure script prefers GCC, so we must build + # LI*LL explicitly. + # TODO: Might be better using . + + LII6LL: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: make + run: make -C code -f lii6ll.gmk + - name: make test + # TODO: List of tests copied from Makefile.in. Deduplicate! + run: make -C code -f lii6ll.gmk testci testratio testscheme + + W3I6MV: runs-on: windows-latest From 44378f16476dd4f06ea2e0fbf6ff19830e63965f Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 13:55:31 +0000 Subject: [PATCH 23/36] Attempt to persuade the build matrix to use environment dimension to persuade configure script to use Clang. --- .github/workflows/build-and-test.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index bd4d27a1a1..1c1cb3821a 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -3,6 +3,10 @@ # GitHub CI # # Adapted from +# +# TODO: Exclude certain branches. +# +# TODO: Regular builds of version branches. See . name: build and test @@ -19,6 +23,15 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest] + include: + - env: + CC: gcc + - env: + CC: clang + exclude: + - os: macos-latest + env: + CC: gcc runs-on: ${{ matrix.os }} From 528e67de3147a77bd736be7fe8a8124b63d391bb Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 13:58:36 +0000 Subject: [PATCH 24/36] Second attempt to include environment in the build matrix. --- .github/workflows/build-and-test.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 1c1cb3821a..f13e4621f6 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -23,15 +23,9 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest] - include: - - env: - CC: gcc - - env: - CC: clang - exclude: - - os: macos-latest - env: - CC: gcc + env: + - CC: gcc + - CC: clang runs-on: ${{ matrix.os }} From f80929665a9846dfd7ef17f56549a3052c15192d Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 14:07:44 +0000 Subject: [PATCH 25/36] Third attempt to use environment variables to select the compiler. --- .github/workflows/build-and-test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index f13e4621f6..7e1b51ede2 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -26,13 +26,17 @@ jobs: env: - CC: gcc - CC: clang + exclude: + - os: macos-latest + env: + - CC: gcc runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: configure - run: ./configure + run: CC=${{ matrix.env.cc }} ./configure - name: make run: make - name: make test From 2aeee8fdbdf8fd25838d820dc30ed3edeb8b1002 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 14:10:05 +0000 Subject: [PATCH 26/36] Fourth attempt to use environment variables to select the compiler. --- .github/workflows/build-and-test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 7e1b51ede2..0bf84419d8 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -26,10 +26,10 @@ jobs: env: - CC: gcc - CC: clang - exclude: - - os: macos-latest - env: - - CC: gcc + exclude: + - os: macos-latest + env: + - CC: gcc runs-on: ${{ matrix.os }} From 086eca693f5320303d32b523b50594ce5c932cb6 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 14:18:08 +0000 Subject: [PATCH 27/36] Attempt to add custom dimension to the build matrix to simplify and exclude XC*GC correctly. --- .github/workflows/build-and-test.yml | 29 ++++++---------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 0bf84419d8..3cb3b899c0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -18,47 +18,30 @@ on: - workflow_dispatch jobs: + build-posix: + # See . strategy: matrix: os: [ubuntu-latest, macos-latest] - env: - - CC: gcc - - CC: clang + compiler: [clang, gcc] exclude: - os: macos-latest - env: - - CC: gcc + compiler: gcc runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: configure - run: CC=${{ matrix.env.cc }} ./configure + run: CC=${{ matrix.compiler }} ./configure - name: make run: make - name: make test run: make test - # Both GCC and Clang are available on GitHub's runner - # - # and the autoconf configure script prefers GCC, so we must build - # LI*LL explicitly. - # TODO: Might be better using . - - LII6LL: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: make - run: make -C code -f lii6ll.gmk - - name: make test - # TODO: List of tests copied from Makefile.in. Deduplicate! - run: make -C code -f lii6ll.gmk testci testratio testscheme - - W3I6MV: + build-windows: runs-on: windows-latest From 559c0650e5f2497fa1eeac4409eccfddb3e84ece Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 14:25:06 +0000 Subject: [PATCH 28/36] Tidying up and cross-referencing the Travis CI config for missing platforms. --- .github/workflows/build-and-test.yml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 3cb3b899c0..ef8a53828d 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -19,12 +19,15 @@ on: jobs: - build-posix: + posix: # See . strategy: matrix: + # FreeBSD is built using Travis CI. See .travis.yml. os: [ubuntu-latest, macos-latest] + # GitHub runners are only available on x86_64. + # arm64 is built using Travis CI. See .travis.yml. compiler: [clang, gcc] exclude: - os: macos-latest @@ -34,22 +37,18 @@ jobs: steps: - uses: actions/checkout@v3 - - name: configure - run: CC=${{ matrix.compiler }} ./configure - - name: make - run: make - - name: make test - run: make test + - run: CC=${{ matrix.compiler }} ./configure + - run: make + - run: make test - build-windows: + windows: runs-on: windows-latest steps: - uses: actions/checkout@v3 - - name: make - # Using path to Visual Studio documented at . - run: | + # Using path to Visual Studio documented at . + - run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 cd code nmake /f w3i6mv.nmk all testci testansi testpollnone From 6a97cbf3312b18c23781a4db6ee5b6283aa5f23e Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 14:48:14 +0000 Subject: [PATCH 29/36] Discovered that design.mps.test is not referenced from the CI configs and is now inconsistent with them. Cross-referenced, added FIXME notes to update documentation. --- .github/workflows/build-and-test.yml | 6 ++++-- .travis.yml | 3 +++ design/tests.txt | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index ef8a53828d..9d0578ca66 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,6 +1,8 @@ -# .github/workflows/build-and-test.yml +# .github/workflows/build-and-test.yml -- GitHub CI build and test configuration for the MPS # -# GitHub CI +# See design.mps.test.ci.github. [FIXME: Not yet written! RB 2023-01-15] +# +# [GitHub CI] "About continuous integration"; . # # Adapted from # diff --git a/.travis.yml b/.travis.yml index e123891ddc..bdfc8721b5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,7 @@ # .travis.yml -- Travis CI configuration for the MPS +# +# See design.mps.test.ci.travis. [FIXME: Currently out of date! RB 2023-01-15] +# # $Id$ # Some branches don't need builds. Add them here to avoid using build diff --git a/design/tests.txt b/design/tests.txt index 4613447bd4..5e923adc75 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -278,6 +278,9 @@ Continuous integration _`.ci`: The MPS uses the following systems for continuous integration: +.. FIXME: Update to be consistent with .travis.tml and + .github/workflows/build-and-test.yml. + _`.ci.travis`: The commercial Travis_ continuous integration service runs ``./configure && make install && make test`` (which exercises the ``testci`` target for platforms lii6gc, lii6ll, xci6ll, and From 99e1acf4f6c005bcd33a50cb49fa7bb5ab48c5a1 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 16:50:26 +0000 Subject: [PATCH 30/36] Making design.mps.tests.ci correct, though it needs further work. --- .github/workflows/build-and-test.yml | 2 +- .travis.yml | 2 +- design/tests.txt | 59 ++++++++++++---------------- 3 files changed, 28 insertions(+), 35 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 9d0578ca66..a31be50e4d 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,6 +1,6 @@ # .github/workflows/build-and-test.yml -- GitHub CI build and test configuration for the MPS # -# See design.mps.test.ci.github. [FIXME: Not yet written! RB 2023-01-15] +# See design.mps.test.ci.github. # # [GitHub CI] "About continuous integration"; . # diff --git a/.travis.yml b/.travis.yml index bdfc8721b5..19c1b72a05 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ # .travis.yml -- Travis CI configuration for the MPS # -# See design.mps.test.ci.travis. [FIXME: Currently out of date! RB 2023-01-15] +# See design.mps.test.ci.travis. # # $Id$ diff --git a/design/tests.txt b/design/tests.txt index 5e923adc75..121a68e7aa 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -276,35 +276,38 @@ case to the "Automated test cases" section. Continuous integration ---------------------- -_`.ci`: The MPS uses the following systems for continuous integration: - -.. FIXME: Update to be consistent with .travis.tml and - .github/workflows/build-and-test.yml. +_`.ci`: Ravenbrook uses GitHub workflows and Travis CI for continuous +integration of the MPS. _`.ci.travis`: The commercial Travis_ continuous integration service -runs ``./configure && make install && make test`` (which exercises the -``testci`` target for platforms lii6gc, lii6ll, xci6ll, and -``testansi`` and ``testpollnone`` for platforms anangc and ananll) -whenever there is a commit to the `mps GitHub repository`_. See the -`Ravenbrook/mps`_ project on Travis for a build history. +runs ``./configure && make install && make test``. This exercises the +``testci`` target for both FreeBSD and Linux on ARM64 (platforms +FRA6LL, FRA6GC, LLA6LL, LLA6GC), and ``testansi`` and ``testpollnone`` +for platforms ANANGC and ANANLL. Travis CI runs whenever there is a +commit (push) to the `mps GitHub repository`_ or a new pull request. +See the `Ravenbrook/mps`_ project on Travis for a build history. .. _mps GitHub repository: https://github.com/ravenbrook/mps .. _Travis: https://travis-ci.com/ .. _Ravenbrook/mps: https://travis-ci.com/Ravenbrook/mps _`.ci.travis.config`: Travis is configured using the .travis.yml file -at top level of the project. +at top level of the MPS tree. + +_`.ci.github`: `GitHub CI`_ runs ``./configure && make && make test`` +which exercises the ``testci`` target for Linux, macOS, and Windows on +`x86_64 runners`_ (platforms LLI6LL, LLI6GC, XCI6LL, W3I6MV). [What +about testnansi etc.? RB 2023-01-15] GitHub CI runs whenever there is +a commit (push) to the `mps GitHub repository`_ or a new pull request. +See the `build and test actions on the Ravenbrook GitHub repo +`_ +for a build history. -_`.ci.jenkins`: An instance of Jenkins_ running on "gannet" (a Windows -PC at the Ravenbrook office) runs the ``testci`` target on platforms -w3i3mv and w3i6mv whenever there is a commit to the `mps GitHub -repository`_. +_`.ci.github.config`: GitHub CI is configured using the build-and-test.yml file in the .github/workflows directory of the MPS tree. -.. _Jenkins: https://jenkins.io +.. _GitHub CI: https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration -_`.ci.jenkins.config`: There are instructions for installing and -configuring Jenkins in [GDR_2016-04-14]_, [GDR_2016-04-15]_ and -[GDR_2016-04-20]_. +.. _x86_64 runners: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources MMQA tests @@ -344,21 +347,6 @@ References Melvin E. Conway; *Datamation* 14:5, pp. 28–31; April 1968; -.. [GDR_2016-04-14] - "Jenkins setup and configuration procedure"; - Gareth Rees; Ravenbrook Limited; 2016-04-14; - . - -.. [GDR_2016-04-15] - "Re: Jenkins setup and configuration procedure"; - Gareth Rees; Ravenbrook Limited; 2016-04-15; - . - -.. [GDR_2016-04-20] - "Re: Jenkins setup and configuration procedure"; - Gareth Rees; Ravenbrook Limited; 2016-04-20; - . - Document History ---------------- @@ -375,6 +363,9 @@ Document History - 2018-06-15 GDR_ Procedure for adding a new smoke test. +- 2023-01-15 RB_ Bringing CI section up to date with Travis + configuration. Removing obsolete Jenkins info. Adding GitHub CI. + .. _RB: https://www.ravenbrook.com/consultants/rb/ .. _GDR: https://www.ravenbrook.com/consultants/gdr/ @@ -406,3 +397,5 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +.. end From 748b7b8de95df3840f7e74e3a77263c6f0e8137c Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 17:48:31 +0000 Subject: [PATCH 31/36] Extensive restructuring of CI section to lift common facts between GitHub CI and Travis CI and tag them. --- design/tests.txt | 122 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 94 insertions(+), 28 deletions(-) diff --git a/design/tests.txt b/design/tests.txt index 121a68e7aa..7e1386f5e5 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -179,9 +179,9 @@ _`.runner.req.output.fail`: However, if a test case fails then the test runner must preserve the output from the failing test, including the random seed (see `.randomize.seed`_), so that this can be analyzed and the test repeated. Moreover, it must print the output from the -failing test, so that if the test is being run on a continuous -integration system like Travis, then the output of the failing tests -is included in the failure report. (See job003489_.) +failing test, so that if the test is being run on a `continuous +integration`_ system (see `.ci`_), then the output of the failing +tests is included in the failure report. (See job003489_.) .. _job003489: https://www.ravenbrook.com/project/mps/issue/job003489/ @@ -276,38 +276,104 @@ case to the "Automated test cases" section. Continuous integration ---------------------- -_`.ci`: Ravenbrook uses GitHub workflows and Travis CI for continuous -integration of the MPS. +_`.ci`: Ravenbrook uses both `GitHub CI`_ and `Travis CI`_ for +continuous integration of the MPS via GitHub. -_`.ci.travis`: The commercial Travis_ continuous integration service -runs ``./configure && make install && make test``. This exercises the -``testci`` target for both FreeBSD and Linux on ARM64 (platforms -FRA6LL, FRA6GC, LLA6LL, LLA6GC), and ``testansi`` and ``testpollnone`` -for platforms ANANGC and ANANLL. Travis CI runs whenever there is a -commit (push) to the `mps GitHub repository`_ or a new pull request. -See the `Ravenbrook/mps`_ project on Travis for a build history. +.. _Travis CI: https://travis-ci.com/ -.. _mps GitHub repository: https://github.com/ravenbrook/mps -.. _Travis: https://travis-ci.com/ -.. _Ravenbrook/mps: https://travis-ci.com/Ravenbrook/mps +.. _GitHub CI: https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration -_`.ci.travis.config`: Travis is configured using the .travis.yml file -at top level of the MPS tree. +[This section needs: definition of CI goals and requirements, what we +need CI to do and why. How the testci target meets those +requirements. 'taint really a design without this. RB 2023-01-15] -_`.ci.github`: `GitHub CI`_ runs ``./configure && make && make test`` -which exercises the ``testci`` target for Linux, macOS, and Windows on -`x86_64 runners`_ (platforms LLI6LL, LLI6GC, XCI6LL, W3I6MV). [What -about testnansi etc.? RB 2023-01-15] GitHub CI runs whenever there is -a commit (push) to the `mps GitHub repository`_ or a new pull request. -See the `build and test actions on the Ravenbrook GitHub repo -`_ -for a build history. +_`.ci.run.posix`: On Posix systems where we have autoconf, the CI +services run commands equivalent to:: -_`.ci.github.config`: GitHub CI is configured using the build-and-test.yml file in the .github/workflows directory of the MPS tree. + ./configure + make install + make test -.. _GitHub CI: https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration +which execises the testci target. This is defined by `Makefile.in +<../Makefile.in>`_ in the root of the MPS tree. + +_`.ci.run.windows`: On Windows the CI services run commands that do at +least:: + + make /f w3i6mv.nmk all testci + +This is defined by `.ci.github.config`_. + +_`.ci.run.other.targets`: On some platforms we arrange to run the testansi, +testpollnone, testratio, and testscheme targets. [Need to explain +why, where, etc. RB 2023-01-15] + +_`.ci.run.other.checks`: We also run various non-build checks using CI +to check: + +- document formatting +- shell script syntax + +[Links needed, at least. RB 2023-01-15] + +_`.ci.when:`: CI is triggered on the `mps GitHub repo`_ by: + +- commits (pushes) +- new pull requests +- manually, using tools (see `.ci.tools`_) + +.. _mps GitHub repo: https://github.com/ravenbrook/mps + +_`.ci.results`: CI results are visible via the GitHub web interface: + +- in pull requests, under "Checks", + +- on the `branches page `_ + as green ticks or red crosses that link to details. + +as well as in logs specific to the type of CI. + +_`.ci.results.travis`: Results from Travis CI can be found at the +`Travis CI build history for the MPS GitHub repo +`_. + +_`.ci.results.github`: Results from GitHub CI can be found at `build +and test actions on the Actions tab at the Ravenbrook GitHub repo +`_. + +_`.ci.github`: [Insert overview of GitHub CI here. RB 2023-01-15] + +_`.ci.github.platforms`: GitHub provides runners_ for Linux, Windows, +and macOS, but only on x86_64. See `.ci.travis.platforms`_ for ARM64 +and FreeBSD. + +.. _runners: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources + +_`.ci.github.config`: GitHub CI is configured using the +`build-and-test.yml <../.github/workflows/build-and-test.yml>`_ file +in the .github/workflows directory of the MPS tree. + +_`.ci.travis`: [Insert overview of Travis CI here. RB 2023-01-15] + +_`.ci.travis.platforms`: Where possible, we use `GitHub CI`_ for +platforms, because `Travis CI is slow and expensive`_. However +`GitHub CI`_ is an x86_64 monoculture, and does not provide FreeBSD, +so we use `Travis CI`_ for those. + +.. _Travis CI is slow and expensive: https://github.com/Ravenbrook/mps/issues/109 + +_`.ci.travis.config`: Travis is configured using the `.travis.yml +<../.travis.yml>`_ file at top level of the MPS tree. + +_`.ci.tools`: The MPS tree contains some simple tools for managing CI +without the need to install whole packages such as the GitHub CLI or +Travis CI's Ruby gem. -.. _x86_64 runners: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources +_`.ci.tools.kick`: tool/github-ci-kick and tool/travis-ci-kick both +trigger CI builds without the need to push a change or make a pull +request in the `mps GitHub repo`_. In particular, they are useful for +applying CI to work that was pushed while CI was disabled, for +whatever reason. MMQA tests From 649a0b79223f76e20e6ada46f61799feb8bb6414 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 17:55:37 +0000 Subject: [PATCH 32/36] Miscellaneous corrections found by reading through the presentation of the document on GitHub. --- design/tests.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/design/tests.txt b/design/tests.txt index 7e1386f5e5..00f1d23f55 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -294,7 +294,7 @@ services run commands equivalent to:: make install make test -which execises the testci target. This is defined by `Makefile.in +which execises the testci target, as defined by `Makefile.in <../Makefile.in>`_ in the root of the MPS tree. _`.ci.run.windows`: On Windows the CI services run commands that do at @@ -302,7 +302,7 @@ least:: make /f w3i6mv.nmk all testci -This is defined by `.ci.github.config`_. +as defined by the `.ci.github.config`_. _`.ci.run.other.targets`: On some platforms we arrange to run the testansi, testpollnone, testratio, and testscheme targets. [Need to explain @@ -335,7 +335,7 @@ as well as in logs specific to the type of CI. _`.ci.results.travis`: Results from Travis CI can be found at the `Travis CI build history for the MPS GitHub repo -`_. +`_. _`.ci.results.github`: Results from GitHub CI can be found at `build and test actions on the Actions tab at the Ravenbrook GitHub repo @@ -357,8 +357,8 @@ _`.ci.travis`: [Insert overview of Travis CI here. RB 2023-01-15] _`.ci.travis.platforms`: Where possible, we use `GitHub CI`_ for platforms, because `Travis CI is slow and expensive`_. However -`GitHub CI`_ is an x86_64 monoculture, and does not provide FreeBSD, -so we use `Travis CI`_ for those. +`GitHub CI`_ does not provide ARM64 or FreeBSD, so we use `Travis CI`_ +for those. .. _Travis CI is slow and expensive: https://github.com/Ravenbrook/mps/issues/109 @@ -369,11 +369,11 @@ _`.ci.tools`: The MPS tree contains some simple tools for managing CI without the need to install whole packages such as the GitHub CLI or Travis CI's Ruby gem. -_`.ci.tools.kick`: tool/github-ci-kick and tool/travis-ci-kick both -trigger CI builds without the need to push a change or make a pull -request in the `mps GitHub repo`_. In particular, they are useful for -applying CI to work that was pushed while CI was disabled, for -whatever reason. +_`.ci.tools.kick`: `tool/github-ci-kick <../tool/github-ci-kick>`_ and +`tool/travis-ci-kick <../tool/travis-ci-kick>`_ both trigger CI builds +without the need to push a change or make a pull request in the `mps +GitHub repo`_. In particular, they are useful for applying CI to work +that was pushed while CI was disabled, for whatever reason. MMQA tests From d423faa2e003ce679f320dfa5d88e9bd7b4b3e9d Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 18:01:22 +0000 Subject: [PATCH 33/36] Adding more commentary on things yet to document. --- design/tests.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/design/tests.txt b/design/tests.txt index 00f1d23f55..f8a8031824 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -276,6 +276,9 @@ case to the "Automated test cases" section. Continuous integration ---------------------- +[This section might need to become a document in its own right. CI +has grown in importance and complexity. RB 2023-01-15] + _`.ci`: Ravenbrook uses both `GitHub CI`_ and `Travis CI`_ for continuous integration of the MPS via GitHub. @@ -284,8 +287,10 @@ continuous integration of the MPS via GitHub. .. _GitHub CI: https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration [This section needs: definition of CI goals and requirements, what we -need CI to do and why. How the testci target meets those -requirements. 'taint really a design without this. RB 2023-01-15] +need CI to do and why, how the testci target meets those +requirements. 'taint really a design without this. Mention how CI +supports the pull request merge procedure (except that exists on a +separate branch at the moment). RB 2023-01-15] _`.ci.run.posix`: On Posix systems where we have autoconf, the CI services run commands equivalent to:: From f6b801b18b2732ac054238761703a37cfd41d4c5 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 19:14:35 +0000 Subject: [PATCH 34/36] Upgrading CI configs to first class documents with licensing, cross-references to design, references, etc. --- .github/workflows/build-and-test.yml | 73 +++++++++++++++++++++---- .travis.yml | 79 +++++++++++++++++++++------- design/tests.txt | 2 + 3 files changed, 127 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index a31be50e4d..948e2021eb 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,14 +1,14 @@ # .github/workflows/build-and-test.yml -- GitHub CI build and test configuration for the MPS # -# See design.mps.test.ci.github. +# Copyright (c) 2019-2022 `GitHub contributors`_ (MIT License). +# Copyright (c) 2023 Ravenbrook Limited. See end of file for license. # -# [GitHub CI] "About continuous integration"; . -# -# Adapted from +# See design.mps.test.ci. # # TODO: Exclude certain branches. # -# TODO: Regular builds of version branches. See . +# TODO: Regular builds of version branches. See +# . name: build and test @@ -23,13 +23,18 @@ jobs: posix: + # The build matrix for GitHub CI on Posix platforms + # + # See design.mps.tests.ci.github.platforms. + # + # FreeBSD and ARM64 targets are in Travis CI, configured by + # .travis.yml. + # # See . + strategy: matrix: - # FreeBSD is built using Travis CI. See .travis.yml. os: [ubuntu-latest, macos-latest] - # GitHub runners are only available on x86_64. - # arm64 is built using Travis CI. See .travis.yml. compiler: [clang, gcc] exclude: - os: macos-latest @@ -37,6 +42,7 @@ jobs: runs-on: ${{ matrix.os }} + # See design.mps.tests.ci.run.posix. steps: - uses: actions/checkout@v3 - run: CC=${{ matrix.compiler }} ./configure @@ -47,11 +53,60 @@ jobs: runs-on: windows-latest + # See design.mps.tests.ci.run.windows. + # + # The path to Visual Studio is documented at + # . + steps: - uses: actions/checkout@v3 - # Using path to Visual Studio documented at . - run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 cd code nmake /f w3i6mv.nmk all testci testansi testpollnone shell: cmd + + +# A. REFERENCES +# +# [GitHub CI] "About continuous integration"; . +# +# .. _GitHub contributors: https://github.com/actions/starter-workflows/commits/1d9d6d7fb0a8a27ef98efbbfa9689cd14c906383/ci/c-cpp.yml +# +# +# B. DOCUMENT HISTORY +# +# 2023-01-11 RB Adapted from . +# 2023-01-15 RB Added licence and document history. +# +# +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2013-2023 Ravenbrook Limited . +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# $Id$ diff --git a/.travis.yml b/.travis.yml index 19c1b72a05..fffc72288a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,50 +1,52 @@ # .travis.yml -- Travis CI configuration for the MPS # -# See design.mps.test.ci.travis. +# Copyright (c) 2013-2023 Ravenbrook Limited. See end of file for license. # -# $Id$ +# See design.mps.test.ci. # Some branches don't need builds. Add them here to avoid using build # resources and unnecessary build messages. See # . if: NOT branch IN (branch/2023-01-11/github-ci) -# The main build matrix for POSIX-like systems. language: c # see . + +# The build matrix for Travis CI +# +# See design.mps.tests.ci.travis.platforms. +# +# Most x86_64/amd64 builds are in GitHub CI, configured by +# .github/workflows/build-and-test.yml. + os: - freebsd - linux - # If you include macOS here, Travis launches a redundant build on - # amd64, even though we specify arm64. Perhaps it's because they - # don't support macOS on arm64. When they do, try uncommenting - # this. - # - osx - # See "include" section for Windows arch: - # Most amd64 builds moved to GitHub CI. See .github/workflows/build-and-test.yml. - # - amd64 - arm64 compiler: - clang - gcc -script: + +script: # see design.mps.test.ci.run.posix - ./configure --prefix=$PWD/prefix && make install && make test matrix: + # Extra build jobs to add to the matrix include: - # GitHub CI does not provide FreeBSD . + + # GitHub CI does not provide FreeBSD + # + # on any architecture, so we add it here for amd64. See also + # design.mps.tests.ci.travis.platforms. + - os: freebsd arch: amd64 compiler: clang - os: freebsd arch: amd64 compiler: gcc - # Windows moved to GitHub CI. See .github/workflows/c-cpp.yml. - # - os: windows - # arch: amd64 - # compiler: clang # This is a lie since we invoke MV (Microsoft C) - # script: MSYS2_ARG_CONV_EXCL='*' cmd /c 'code\w3i6mv.bat' + # Specific combinations to exclude from the matrix exclude: - os: osx @@ -58,3 +60,44 @@ notifications: #before_install: # - if test "$TRAVIS_OS_NAME" = "linux"; then sudo apt-get -qq update; fi # - if test "$TRAVIS_OS_NAME" = "linux"; then sudo apt-get install -y gcc-4.7; fi + + +# A. REFERENCES +# +# +# B. DOCUMENT HISTORY +# +# 2013-05-19 RB Created. +# 2023-01-15 RB Added licence and (note) document history. +# +# +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2013-2023 Ravenbrook Limited . +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# $Id$ diff --git a/design/tests.txt b/design/tests.txt index f8a8031824..288313d232 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -292,6 +292,8 @@ requirements. 'taint really a design without this. Mention how CI supports the pull request merge procedure (except that exists on a separate branch at the moment). RB 2023-01-15] +[Need to discuss compilers and toolchains. RB 2023-01-15] + _`.ci.run.posix`: On Posix systems where we have autoconf, the CI services run commands equivalent to:: From 3243ee5619bbcf7b5773336e42a6d29509e1d8c9 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Sun, 15 Jan 2023 19:27:57 +0000 Subject: [PATCH 35/36] Can't link to things that don't exist yet. Leaving a note. --- design/tests.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/design/tests.txt b/design/tests.txt index 288313d232..5342e3cd16 100644 --- a/design/tests.txt +++ b/design/tests.txt @@ -315,13 +315,17 @@ _`.ci.run.other.targets`: On some platforms we arrange to run the testansi, testpollnone, testratio, and testscheme targets. [Need to explain why, where, etc. RB 2023-01-15] -_`.ci.run.other.checks`: We also run various non-build checks using CI -to check: +_`.ci.run.other.checks`: We could also run various non-build checks +using CI to check: - document formatting - shell script syntax -[Links needed, at least. RB 2023-01-15] +[In the branch of writing, these do not yet exist. They are the +subject of `GitHub pull request #113 +`_ of +branch/2023-01-13/rst-check. When merged, they can be linked. RB +2023-01-15] _`.ci.when:`: CI is triggered on the `mps GitHub repo`_ by: From 8ce1a93efec99f383f4be8c19c0fab709658f891 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Mon, 16 Jan 2023 14:33:41 +0000 Subject: [PATCH 36/36] Swapping BSD licence for MIT because we must retain the original licence on code we bring in to the project. --- .github/workflows/build-and-test.yml | 55 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 948e2021eb..1ab63c1159 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -71,8 +71,6 @@ jobs: # # [GitHub CI] "About continuous integration"; . # -# .. _GitHub contributors: https://github.com/actions/starter-workflows/commits/1d9d6d7fb0a8a27ef98efbbfa9689cd14c906383/ci/c-cpp.yml -# # # B. DOCUMENT HISTORY # @@ -82,31 +80,34 @@ jobs: # # C. COPYRIGHT AND LICENSE # -# Copyright (C) 2013-2023 Ravenbrook Limited . -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# NOTE: This is the `MIT Licence `_ +# inherited from +# and not the usual licence for the MPS. +# +# Copyright (c) 2019-2022 `GitHub contributors`_. +# Copyright (c) 2023 Ravenbrook Limited . +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# .. _GitHub contributors: https://github.com/actions/starter-workflows/commits/1d9d6d7fb0a8a27ef98efbbfa9689cd14c906383/ci/c-cpp.yml # # # $Id$