Skip to content

Merge pull request #969 from nikodemus/test-fix-self-tests-on-mac #1336

Merge pull request #969 from nikodemus/test-fix-self-tests-on-mac

Merge pull request #969 from nikodemus/test-fix-self-tests-on-mac #1336

Workflow file for this run

name: "CI"
on:
pull_request:
push:
branches:
- main
- dev
defaults:
run:
shell: bash
env:
UBSAN_OPTIONS: print_stacktrace=1
RUST_BACKTRACE: 1
jobs:
test-mac:
# Mac runners slower and harder to come by: don't want to have
# others queued behind this.
name: "Test Mac"
runs-on: macos-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v2
- name: Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
components: rustfmt
- name: Rustc version
run: rustc --version
# Clang is under brew, not in path
- name: Extend path to include Clang
run: |
brew install llvm
echo $(brew --prefix llvm)/bin >> $GITHUB_PATH
- name: Check clang
run: clang --version
- name: Cache dependencies
uses: actions/cache@v2
with:
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-build
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
- name: Test Rust
uses: actions-rs/cargo@v1
with:
command: test
args: --all
- name: Clang version
run: clang --version
- name: Bootstrap
run: bash build.sh --bootstrap
- name: Self Test
run: bash tests/test_foo.sh
- name: Test Foolang
run: cargo run foo/impl/test_foolang.foo --use=foo/lib
- name: Test Transpile
run: cargo run foo/impl/test_transpile.foo --use=foo/lib
build-host:
name: "Build host"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
timeout-minutes: 15
steps:
- uses: actions/checkout@v2
- name: Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
components: rustfmt
- name: Rustc version
run: rustc --version
- name: Cache dependencies
uses: actions/cache@v2
with:
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-build
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
- name: Built bootstrap interpreter
uses: actions-rs/cargo@v1
with:
command: build
- name: Upload bootstrap interpreter (Windows)
uses: actions/upload-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: target/debug/bootstrap-interpreter.exe
if: ${{ runner.os == 'Windows' }}
- name: Upload bootstrap interpreter (Unix)
uses: actions/upload-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: target/debug/bootstrap-interpreter
if: ${{ runner.os != 'Windows' }}
test-host:
name: "Test host"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
components: rustfmt
- name: Cache dependencies
uses: actions/cache@v2
with:
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-test
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
- name: Test Rust
uses: actions-rs/cargo@v1
with:
command: test
args: --all
- name: Test large
uses: actions-rs/cargo@v1
with:
command: test
args: -- --ignored
test-foolang:
name: "Test Foolang"
needs: build-host
runs-on: ${{ matrix.os }}
timeout-minutes: 5
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v2
- name: Download bootstrap interpreter
uses: actions/download-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: bin/
- name: Make bootstrap interpreter executable
run: chmod a+x bin/bootstrap-interpreter
if: ${{ runner.os != 'Windows' }}
- name: Test
run: ./bin/bootstrap-interpreter foo/impl/test_foolang.foo --use=foo/lib
test-transpile:
name: "Test Transpile"
needs: build-host
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v2
- name: Download bootstrap interpreter
uses: actions/download-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: bin/
- name: Make bootstrap interpreter executable
run: chmod a+x bin/bootstrap-interpreter
if: ${{ runner.os != 'Windows' }}
# Clang is installed on the Windows image, but is not in path.
- name: Extend path to include Clang
run: echo 'C:\msys64\mingw64\bin' >> $GITHUB_PATH
if: ${{ runner.os == 'Windows' }}
- name: Clang version
run: clang --version
- name: Test Transpile
run: ./bin/bootstrap-interpreter foo/impl/test_transpile.foo --use=foo/lib
test-cps:
name: "Test CPS"
needs: build-host
runs-on: ${{ matrix.os }}
timeout-minutes: 10
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v2
- name: Download bootstrap interpreter
uses: actions/download-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: bin/
- name: Make bootstrap interpreter executable
run: chmod a+x bin/bootstrap-interpreter
if: ${{ runner.os != 'Windows' }}
- name: Test CPS
run: ./bin/bootstrap-interpreter foo/impl/cps.foo --use=foo/lib
test-runtime:
name: "Test Runtime"
runs-on: ${{ matrix.os }}
timeout-minutes: 10
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v2
# Clang is under brew, not in path
- name: Extend path to include Clang
run: |
brew install llvm
echo $(brew --prefix llvm)/bin >> $GITHUB_PATH
if: ${{ runner.os == 'MacOS' }}
- name: Check clang
run: clang --version
- name: Test Runtime
run: make test-runtime
- name: Test C Backend
run: make test-c-backend
- name: Test Benchmark
run: make test-benchmark
test-full-bootstrap:
# Not running this on Windows because the linker clang uses
# there doesn't accept either VS style nor GNU style stack-
# size specification, and I don't want to figure it out now.
name: "Test full bootstrap"
needs: build-host
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v2
# This copies it to same place where Rust puts it, because
# that's where bootstrap expects it.
- name: Download bootstrap interpreter
uses: actions/download-artifact@v2
with:
name: bootstrap-interpreter-${{ runner.os }}
path: target/debug/
- name: Make bootstrap interpreter executable
run: chmod a+x target/debug/bootstrap-interpreter
- name: Clang version
run: clang --version
- name: Bootstrap
run: bash build.sh --no-interpreter-build
- name: Self Test
run: bash tests/test_foo.sh
- name: No duplicate declarations
run: bash tests/no_duplicate_declarations.sh
test-foolang-mode:
name: "Test foolang Emacs mode"
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2
- name: Install Emacs
run: |
sudo add-apt-repository -y ppa:kelleyk/emacs
sudo apt-get install -y emacs28-nox
- name: Test foolang-mode
run: bash tests/test-elisp.sh