chore(ci): improve testing coverage #467
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: | |
push: | |
branches: [master] | |
pull_request: | |
schedule: | |
- cron: "40 2 * * *" # Run 40 mins after nightly noir release (which happens at 2 AM UTC) | |
permissions: | |
contents: read | |
env: | |
REPO: ${{ github.event.pull_request.head.repo.full_name || github.repository }} | |
REF: ${{ github.head_ref || github.ref_name }} | |
MINIMUM_NOIR_VERSION: v0.16.0 | |
jobs: | |
noir-version-list: | |
name: Query supported Noir versions | |
runs-on: ubuntu-latest | |
outputs: | |
noir_versions: ${{ steps.get_versions.outputs.versions }} | |
steps: | |
- name: Checkout sources | |
id: get_versions | |
run: | | |
# gh returns the Noir releases in reverse chronological order so we keep all releases published after the minimum supported version. | |
VERSIONS=$(gh release list -R noir-lang/noir --exclude-pre-releases --json tagName -q 'map(.tagName) | index(env.MINIMUM_NOIR_VERSION) as $index | if $index then .[0:$index+1] else [env.MINIMUM_NOIR_VERSION] end') | |
echo "versions=$VERSIONS" | |
echo "versions=$VERSIONS" >> $GITHUB_OUTPUT | |
env: | |
GH_TOKEN: ${{ github.token }} | |
install: | |
name: Noir ${{matrix.toolchain}} (CLI) on ${{matrix.os == 'ubuntu' && 'Linux' || matrix.os == 'macos' && 'macOS' || matrix.os == 'windows' && 'Windows' || '???'}} | |
needs: [noir-version-list] | |
runs-on: ${{matrix.os}}-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu, macos] | |
toolchain: ${{ fromJson( needs.noir-version-list.outputs.noir_versions )}} | |
include: | |
- os: ubuntu | |
toolchain: nightly | |
- os: ubuntu | |
toolchain: stable | |
- os: macos | |
toolchain: nightly | |
- os: macos | |
toolchain: stable | |
timeout-minutes: 45 | |
steps: | |
- name: Parse toolchain | |
id: parse | |
run: | | |
: parse toolchain version | |
if [[ $toolchain == "stable" ]]; then | |
: By default, noirup installs the latest stable version | |
elif [[ $toolchain == "nightly" ]]; then | |
echo "toolchain="--nightly"" >> $GITHUB_OUTPUT | |
else | |
echo "toolchain="--version $toolchain"" >> $GITHUB_OUTPUT | |
fi | |
env: | |
toolchain: ${{matrix.toolchain}} | |
- name: Install noirup | |
run: | | |
curl -L $INSTALL_URL | bash | |
echo "${HOME}/.nargo/bin" >> $GITHUB_PATH | |
env: | |
INSTALL_URL: https://raw.githubusercontent.com/${{ env.REPO }}/${{ env.REF }}/install | |
NOIRUP_BIN_URL: https://raw.githubusercontent.com/${{ env.REPO }}/${{ env.REF }}/noirup | |
- name: Install nargo with noirup | |
run: noirup ${{steps.parse.outputs.toolchain}} | |
- name: Check nargo installation | |
run: nargo --version | |
install-source: | |
name: Noir ${{matrix.version}} (from source) on ${{matrix.os == 'ubuntu' && 'Linux' || matrix.os == 'macos' && 'macOS' || matrix.os == 'windows' && 'Windows' || '???'}} | |
needs: [noir-version-list] | |
runs-on: ${{matrix.os}}-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
# Installing from source can technically target any commit. | |
# However, we only guarantee that noirup will build release commits. | |
os: [ubuntu, macos] | |
version: ${{ fromJson( needs.noir-version-list.outputs.noir_versions )}} | |
timeout-minutes: 45 | |
steps: | |
- name: Install noirup | |
run: | | |
curl -L $INSTALL_URL | bash | |
echo "${HOME}/.nargo/bin" >> $GITHUB_PATH | |
env: | |
INSTALL_URL: https://raw.githubusercontent.com/${{ env.REPO }}/${{ env.REF }}/install | |
NOIRUP_BIN_URL: https://raw.githubusercontent.com/${{ env.REPO }}/${{ env.REF }}/noirup | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: ${{ runner.os }}-cargo-${{ matrix.version }} | |
- name: Install nargo from source with noirup | |
run: noirup $toolchain | |
env: | |
toolchain: -b tags/${{matrix.version}} | |
- name: Check nargo installation | |
run: nargo --version | |
install-action: | |
name: Noir ${{matrix.toolchain}} (GH action) on ${{matrix.os == 'ubuntu' && 'Linux' || matrix.os == 'macos' && 'macOS' || matrix.os == 'windows' && 'Windows' || '???'}} | |
needs: [noir-version-list] | |
runs-on: ${{matrix.os}}-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu, macos] | |
toolchain: ${{ fromJson( needs.noir-version-list.outputs.noir_versions )}} | |
include: | |
- os: ubuntu | |
toolchain: nightly | |
- os: ubuntu | |
toolchain: stable | |
- os: macos | |
toolchain: nightly | |
- os: macos | |
toolchain: stable | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./ | |
name: Run noir-lang/noirup | |
id: version | |
with: | |
toolchain: ${{matrix.toolchain}} | |
- run: nargo --version | |
- run: nargo new project | |
- run: nargo check | |
working-directory: ./project | |
- run: nargo compile | |
working-directory: ./project | |
- run: nargo test | |
working-directory: ./project |