blob: ad0738eddd0da42accdcc1b167af940044f18813 [file] [log] [blame]
# This workflow provides automated testing. It builds and runs tests on each PR.
name: ci
# We want to run CI on all pull requests. Additionally, Bors needs workflows to
# run on the `staging` and `trying` branches.
on:
pull_request:
push:
branches:
- staging
- trying
jobs:
ci:
# Using ubuntu-latest can cause breakage when ubuntu-latest is updated to
# point at a new Ubuntu version. Instead, explicitly specify the version, so
# we can update when we need to. This *could* break if we don't update it
# until support for 18.04 is dropped, but it is likely we'll have a reason
# to update to a newer Ubuntu before then anyway.
runs-on: ubuntu-18.04
steps:
# Clones a single commit from the libtock-rs repository. The commit cloned
# is a merge commit between the PR's target branch and the PR's source.
# Note that we checkout submodules so that we can invoke Tock's CI setup
# scripts, but we do not recursively checkout submodules as we need Tock's
# makefile to set up the qemu submodule itself.
- name: Clone repository
uses: actions/checkout@v2.3.0
with:
submodules: true
# Install a Rust toolchain with the components necessary to build
# libtock-rs and its examples. This action doesn't seem to be able to
# install toolchains for multiple targets, so I add the targets later in
# the "Build and Test" step.
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1.0.6
with:
profile: minimal
# The main test step. We let the makefile do most of the work because the
# makefile can be tested locally. We experimentally determined that -j2 is
# optimal for the Azure Standard_DS2_v2 VM, which is the VM type used by
# GitHub Actions at the time of this writing.
- name: Build and Test
run: |
cd "${GITHUB_WORKSPACE}"
rustup target add riscv32imc-unknown-none-elf thumbv7em-none-eabi
make -j2 setup
make -j2 test