CI #523
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 | |
- name: Check noir-inspector installation | |
run: | | |
# Fetch the version from `nargo` as to also check the `stable` and `nightly` toolchains | |
VERSION=$(nargo --version | awk -F' = ' '/nargo version/ {print $2}') | |
MIN_VERSION="1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte "$VERSION" "$MIN_VERSION"; then | |
noir-inspector --version | |
fi | |
- name: Check noir-profiler installation | |
run: | | |
# Fetch the version from `nargo` as to also check the `stable` and `nightly` toolchains | |
VERSION=$(nargo --version | awk -F' = ' '/nargo version/ {print $2}') | |
MIN_VERSION="1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte "$VERSION" "$MIN_VERSION"; then | |
noir-profiler --version | |
fi | |
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 | |
- name: Check noir-inspector installation | |
run: | | |
# Fetch the version from `nargo` as to also check the `stable` and `nightly` toolchains | |
VERSION=$(nargo --version | awk -F' = ' '/nargo version/ {print $2}') | |
MIN_VERSION="1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte "$VERSION" "$MIN_VERSION"; then | |
noir-inspector --version | |
fi | |
- name: Check noir-profiler installation | |
run: | | |
# Minimum version which began releasing binaries for the `noir-profiler` | |
# Account for the extra `v` that prefixes "${{matrix.version}}" | |
MIN_VERSION="v1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte ${{matrix.version}} "$MIN_VERSION"; then | |
noir-profiler --version | |
fi | |
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 | |
- name: Check noir-inspector installation | |
run: | | |
# Fetch the version from `nargo` as to also check the `stable` and `nightly` toolchains | |
VERSION=$(nargo --version | awk -F' = ' '/nargo version/ {print $2}') | |
MIN_VERSION="1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte "$VERSION" "$MIN_VERSION"; then | |
noir-inspector --version | |
fi | |
- name: Check noir-profiler installation | |
working-directory: ./project | |
run: | | |
VERSION=$(nargo --version | awk -F' = ' '/nargo version/ {print $2}') | |
MIN_VERSION="1.0.0-beta.3" | |
version_gte() { | |
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] | |
} | |
if version_gte "$VERSION" "$MIN_VERSION"; then | |
noir-profiler --version | |
noir-profiler opcodes -a ./target/project.json -o ./target | |
fi |