Merge pull request #969 from nikodemus/test-fix-self-tests-on-mac #1336
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |