Skip to content

Commit

Permalink
Refactor Github Actions/Travis CI
Browse files Browse the repository at this point in the history
- Dynamically generate a strategy matrix based on the list of changed
  files in this push/pull_request. If the changed files are restricted
  to implementations then only generate a matrix with those
  implementations. If the changes are to tests or other
  non-documentation files (runtest.py, IMPLS.yml, .github/*, etc) then
  run the full set. The matrix generation is done in get-ci-matrix.py.
- Split the implementation list for Github Actions out into a separate
  yaml file IMPLS.yml
- Reduce the travis file to just the OS X / XCode related builds that
  aren't supported on Github Actions.
- Rename the .travis_test.sh script to ci.sh since it is the general
  CI script used for both Travis CI and Github Actions.
  • Loading branch information
kanaka committed Apr 21, 2021
1 parent f0863c2 commit 021d107
Show file tree
Hide file tree
Showing 8 changed files with 398 additions and 420 deletions.
156 changes: 31 additions & 125 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,144 +3,50 @@ name: Build and Test
on: [push, pull_request]

jobs:
get-matrix:
runs-on: ubuntu-20.04
outputs:
do-linux: ${{ steps.get-matrix-step.outputs.do-linux }}
matrix-linux: ${{ steps.get-matrix-step.outputs.linux }}
do-macos: ${{ steps.get-matrix-step.outputs.do-macos }}
matrix-macos: ${{ steps.get-matrix-step.outputs.macos }}
steps:
- uses: actions/checkout@v2
- id: files
uses: kanaka/get-changed-files@v1
- id: get-matrix-step
run: ./get-ci-matrix.py ${{ steps.files.outputs.all }}

linux:
needs: get-matrix
if: ${{ needs.get-matrix.outputs.do-linux == 'true' }}
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
IMPL:
- IMPL=ada
- IMPL=ada.2
- IMPL=awk
- IMPL=bash NO_SELF_HOST=1
- IMPL=basic basic_MODE=cbm NO_SELF_HOST=1
- IMPL=basic basic_MODE=qbasic NO_SELF_HOST=1
- IMPL=bbc-basic
- IMPL=c
- IMPL=cpp
- IMPL=coffee
- IMPL=cs
- IMPL=chuck NO_SELF_HOST_PERF=1
- IMPL=clojure clojure_MODE=clj
- IMPL=clojure clojure_MODE=cljs
- IMPL=common-lisp
- IMPL=crystal
- IMPL=d d_MODE=gdc
- IMPL=d d_MODE=ldc2
- IMPL=d d_MODE=dmd
- IMPL=dart
- IMPL=elisp
- IMPL=elixir
- IMPL=elm
- IMPL=erlang NO_SELF_HOST=1
- IMPL=es6
- IMPL=factor
- IMPL=fantom
- IMPL=forth
- IMPL=fsharp
- IMPL=go
- IMPL=groovy
- IMPL=gnu-smalltalk
- IMPL=guile
- IMPL=haskell
- IMPL=haxe haxe_MODE=neko
- IMPL=haxe haxe_MODE=python
- IMPL=haxe haxe_MODE=cpp
- IMPL=haxe haxe_MODE=js
- IMPL=hy
- IMPL=io NO_SELF_HOST_PERF=1
- IMPL=java
- IMPL=jq
- IMPL=js
- IMPL=julia
- IMPL=kotlin
- IMPL=livescript
- IMPL=logo NO_SELF_HOST=1
- IMPL=lua
- IMPL=make NO_SELF_HOST=1
- IMPL=mal MAL_IMPL=js BUILD_IMPL=js NO_SELF_HOST=1
- IMPL=mal MAL_IMPL=js-mal BUILD_IMPL=js NO_SELF_HOST=1 NO_PERF=1
- IMPL=mal MAL_IMPL=nim BUILD_IMPL=nim NO_SELF_HOST=1
- IMPL=mal MAL_IMPL=nim-mal BUILD_IMPL=nim NO_SELF_HOST=1 NO_PERF=1
- IMPL=matlab NO_SELF_HOST_PERF=1
- IMPL=miniMAL NO_SELF_HOST_PERF=1
- IMPL=nasm NO_SELF_HOST_PERF=1
- IMPL=nim
- IMPL=objpascal
# IMPL=objc NO_DOCKER=1 os: osx osx_image: xcode7}
- IMPL=objc
- IMPL=ocaml
- IMPL=perl
- IMPL=perl6
- IMPL=php
- IMPL=picolisp
- IMPL=pike
- IMPL=plpgsql NO_SELF_HOST=1
# - IMPL=plsql
- IMPL=prolog
- IMPL=ps
- IMPL=powershell NO_SELF_HOST_PERF=1
- IMPL=python python_MODE=python2
- IMPL=python python_MODE=python3
- IMPL=python.2
- IMPL=r
- IMPL=racket
- IMPL=rexx
- IMPL=rpython
- IMPL=ruby
- IMPL=rust
- IMPL=scala
- IMPL=scheme scheme_MODE=chibi
- IMPL=scheme scheme_MODE=kawa
- IMPL=scheme scheme_MODE=gauche
- IMPL=scheme scheme_MODE=chicken
- IMPL=scheme scheme_MODE=sagittarius
- IMPL=scheme scheme_MODE=cyclone
# - IMPL=scheme scheme_MODE=foment
- IMPL=skew
- IMPL=tcl
- IMPL=ts
- IMPL=vala
- IMPL=vb
- IMPL=vhdl NO_SELF_HOST_PERF=1
- IMPL=vimscript
- IMPL=wasm wasm_MODE=wasmtime NO_SELF_HOST_PERF=1 NO_PERF=1
- IMPL=wasm wasm_MODE=wasmer NO_SELF_HOST_PERF=1 NO_PERF=1
- IMPL=wasm wasm_MODE=lucet NO_SELF_HOST_PERF=1 NO_PERF=1
- IMPL=wasm wasm_MODE=wax NO_SELF_HOST_PERF=1
- IMPL=wasm wasm_MODE=node NO_SELF_HOST_PERF=1 NO_PERF=1
- IMPL=wasm wasm_MODE=warpy NO_SELF_HOST_PERF=1
- IMPL=wasm wasm_MODE=wace_libc NO_SELF_HOST_PERF=1
- IMPL=wren
- IMPL=xslt
- IMPL=yorick
- IMPL=zig
matrix: ${{ fromJson(needs.get-matrix.outputs.matrix-linux) }}
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- name: IMPL testing
run: |
export ${{ matrix.IMPL }}
./.travis_test.sh build ${IMPL}
./.travis_test.sh test ${IMPL}
STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./.travis_test.sh test ${IMPL}
./.travis_test.sh perf ${IMPL}
./ci.sh build ${IMPL}
./ci.sh test ${IMPL}
STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./ci.sh test ${IMPL}
./ci.sh perf ${IMPL}
macos:
needs: get-matrix
if: ${{ needs.get-matrix.outputs.do-macos == 'true' }}
runs-on: macos-10.15
strategy:
fail-fast: false
matrix:
IMPL:
# - IMPL=swift NO_DOCKER=1
# - IMPL=swift3 NO_DOCKER=1
# - IMPL=swift4 NO_DOCKER=1
- IMPL=swift5 NO_DOCKER=1
matrix: ${{ fromJson(needs.get-matrix.outputs.matrix-macos) }}
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- name: IMPL testing
run: |
export ${{ matrix.IMPL }}
./.travis_test.sh build ${IMPL}
./.travis_test.sh test ${IMPL}
STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./.travis_test.sh test ${IMPL}
./.travis_test.sh perf ${IMPL}
./ci.sh build ${IMPL}
./ci.sh test ${IMPL}
STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./ci.sh test ${IMPL}
./ci.sh perf ${IMPL}
117 changes: 4 additions & 113 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,124 +5,15 @@ sudo: required

matrix:
include:
- {env: IMPL=ada, services: [docker]}
- {env: IMPL=ada.2, services: [docker]}
- {env: IMPL=awk, services: [docker]}
- {env: IMPL=bash NO_SELF_HOST=1, services: [docker]} # step8 timeout
- {env: IMPL=basic basic_MODE=cbm NO_SELF_HOST=1, services: [docker]} # step4 OOM
- {env: IMPL=basic basic_MODE=qbasic NO_SELF_HOST=1, services: [docker]} # step4 OOM
- {env: IMPL=bbc-basic, services: [docker]}
- {env: IMPL=c, services: [docker]}
- {env: IMPL=cpp, services: [docker]}
- {env: IMPL=coffee, services: [docker]}
- {env: IMPL=cs, services: [docker]}
- {env: IMPL=chuck NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
- {env: IMPL=clojure clojure_MODE=clj, services: [docker]}
- {env: IMPL=clojure clojure_MODE=cljs, services: [docker]}
- {env: IMPL=common-lisp, services: [docker]}
- {env: IMPL=crystal, services: [docker]}
- {env: IMPL=d d_MODE=gdc, services: [docker]}
- {env: IMPL=d d_MODE=ldc2, services: [docker]}
- {env: IMPL=d d_MODE=dmd, services: [docker]}
- {env: IMPL=dart, services: [docker]}
- {env: IMPL=elisp, services: [docker]}
- {env: IMPL=elixir, services: [docker]}
- {env: IMPL=elm, services: [docker]}
- {env: IMPL=erlang NO_SELF_HOST=1, services: [docker]} # step8 OOM
- {env: IMPL=es6, services: [docker]}
- {env: IMPL=factor, services: [docker]}
- {env: IMPL=fantom, services: [docker]}
- {env: IMPL=forth, services: [docker]}
- {env: IMPL=fsharp, services: [docker]}
- {env: IMPL=go, services: [docker]}
- {env: IMPL=groovy, services: [docker]}
- {env: IMPL=gnu-smalltalk, services: [docker]}
- {env: IMPL=guile, services: [docker]}
- {env: IMPL=haskell, services: [docker]}
- {env: IMPL=haxe haxe_MODE=neko, services: [docker]}
- {env: IMPL=haxe haxe_MODE=python, services: [docker]}
- {env: IMPL=haxe haxe_MODE=cpp, services: [docker]}
- {env: IMPL=haxe haxe_MODE=js, services: [docker]}
- {env: IMPL=hy, services: [docker]}
- {env: IMPL=io NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
- {env: IMPL=java, services: [docker]}
- {env: IMPL=jq, services: [docker]}
- {env: IMPL=js, services: [docker]}
- {env: IMPL=julia, services: [docker]}
- {env: IMPL=kotlin, services: [docker]}
- {env: IMPL=livescript, services: [docker]}
- {env: IMPL=logo NO_SELF_HOST=1, services: [docker]} # step4 timeout
- {env: IMPL=lua, services: [docker]}
- {env: IMPL=make NO_SELF_HOST=1, services: [docker]} # step4 timeout
- {env: IMPL=mal MAL_IMPL=js BUILD_IMPL=js NO_SELF_HOST=1, services: [docker]}
- {env: IMPL=mal MAL_IMPL=js-mal BUILD_IMPL=js NO_SELF_HOST=1 NO_PERF=1, services: [docker]}
- {env: IMPL=mal MAL_IMPL=nim BUILD_IMPL=nim NO_SELF_HOST=1, services: [docker]}
- {env: IMPL=mal MAL_IMPL=nim-mal BUILD_IMPL=nim NO_SELF_HOST=1 NO_PERF=1, services: [docker]}
- {env: IMPL=matlab NO_SELF_HOST_PERF=1, services: [docker]} # Octave, perf timeout
- {env: IMPL=miniMAL NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
- {env: IMPL=nasm NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
- {env: IMPL=nim, services: [docker]}
- {env: IMPL=objpascal, services: [docker]}
- {env: IMPL=objc NO_DOCKER=1, os: osx, osx_image: xcode7}
- {env: IMPL=objc, services: [docker]}
- {env: IMPL=ocaml, services: [docker]}
- {env: IMPL=perl, services: [docker]}
- {env: IMPL=perl6, services: [docker]}
- {env: IMPL=php, services: [docker]}
- {env: IMPL=picolisp, services: [docker]}
- {env: IMPL=pike, services: [docker]}
- {env: IMPL=plpgsql NO_SELF_HOST=1, services: [docker]} # step3 timeout
# - {env: IMPL=plsql, services: [docker]}
- {env: IMPL=prolog, services: [docker]}
- {env: IMPL=ps, services: [docker]}
- {env: IMPL=powershell NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
- {env: IMPL=python python_MODE=python2, services: [docker]}
- {env: IMPL=python python_MODE=python3, services: [docker]}
- {env: IMPL=python.2, services: [docker]}
- {env: IMPL=r, services: [docker]}
- {env: IMPL=racket, services: [docker]}
- {env: IMPL=rexx, services: [docker]}
- {env: IMPL=rpython, services: [docker]}
- {env: IMPL=ruby, services: [docker]}
- {env: IMPL=rust, services: [docker]}
- {env: IMPL=scala, services: [docker]}
- {env: IMPL=scheme scheme_MODE=chibi, services: [docker]}
- {env: IMPL=scheme scheme_MODE=kawa, services: [docker]}
- {env: IMPL=scheme scheme_MODE=gauche, services: [docker]}
- {env: IMPL=scheme scheme_MODE=chicken, services: [docker]}
- {env: IMPL=scheme scheme_MODE=sagittarius, services: [docker]}
- {env: IMPL=scheme scheme_MODE=cyclone, services: [docker]}
# - {env: IMPL=scheme scheme_MODE=foment, services: [docker]}
- {env: IMPL=skew, services: [docker]}
- {env: IMPL=swift NO_DOCKER=1, os: osx, osx_image: xcode7.3}
- {env: IMPL=swift3, services: [docker]}
- {env: IMPL=swift3 NO_DOCKER=1, os: osx, osx_image: xcode8}
- {env: IMPL=swift4, services: [docker]}
- {env: IMPL=swift4 NO_DOCKER=1, os: osx, osx_image: xcode10}
- {env: IMPL=swift5, services: [docker]}
- {env: IMPL=swift5 NO_DOCKER=1, os: osx, osx_image: xcode11}
- {env: IMPL=tcl, services: [docker]}
- {env: IMPL=ts, services: [docker]}
- {env: IMPL=vala, services: [docker]}
- {env: IMPL=vb, services: [docker]}
- {env: IMPL=vhdl NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
- {env: IMPL=vimscript, services: [docker]}
# no self-host perf for wasm due to mac stack overflow
- {env: IMPL=wasm wasm_MODE=wasmtime NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=wasmer NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=lucet NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=wax NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=node NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=warpy NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wasm wasm_MODE=wace_libc NO_SELF_HOST_PERF=1, services: [docker]}
- {env: IMPL=wren, services: [docker]}
- {env: IMPL=xslt, services: [docker]}
- {env: IMPL=yorick, services: [docker]}
- {env: IMPL=zig, services: [docker]}

script:
# Build, test, perf
- ./.travis_test.sh build ${IMPL}
- ./.travis_test.sh test ${IMPL}
- STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./.travis_test.sh test ${IMPL}
- ./.travis_test.sh perf ${IMPL}
- ./ci.sh build ${IMPL}
- ./ci.sh test ${IMPL}
- STEP=stepA REGRESS=1 HARD=1 OPTIONAL=0 ./ci.sh test ${IMPL}
- ./ci.sh perf ${IMPL}
Loading

0 comments on commit 021d107

Please sign in to comment.