Skip to content

Nightly CIRCT

Nightly CIRCT #737

name: Nightly CIRCT
permissions:
contents: write
env:
# This is the name of the branch containing accumulated patches that need to
# be applied in order for the latest CIRCT to work with Chisel.
branch-name: ci/ci-circt-nightly
on:
workflow_dispatch:
# Run every day at 1100 UTC which is:
# - 0400 PDT / 0300 PST
# - 0700 EDT / 0600 EST
# This time is *four* hours after the scheduled build of the firtool Nightly.
schedule:
- cron: '0 11 * * *'
# Run on PRs that target the
pull_request:
branches:
- ci/ci-circt-nightly
jobs:
determine-branch:
name: 'Update Staging Branch and Determine Target Branch'
runs-on: ubuntu-22.04
steps:
- name: Update Staging Branch
uses: circt/update-staging-branch@v1.2.0
with:
user: chiselbot
email: chiselbot@users.noreply.github.com
main-branch: main
staging-branch: ${{ env.branch-name }}
- name: Determine Branch
id: determine-branch
shell: bash
run: |
branch=$(git rev-parse HEAD)
echo branches=\[\"$branch\"\] >> $GITHUB_OUTPUT
outputs:
branches: ${{ steps.determine-branch.outputs.branches }}
ci:
name: ci
needs: [determine-branch]
strategy:
matrix:
system: ["ubuntu-22.04"]
jvm: [8]
scala: ["2.13.15"]
espresso: ["2.4"]
slang: ["7.0"]
circt: ["nightly"]
ref: ${{ fromJSON(needs.determine-branch.outputs.branches) }}
uses: ./.github/workflows/test.yml
with:
system: ${{ matrix.system }}
jvm: ${{ matrix.jvm }}
scala: ${{ matrix.scala }}
espresso: ${{ matrix.espresso }}
slang: ${{ matrix.slang }}
circt: ${{ matrix.circt }}
ref: ${{ matrix.ref }}
# Sentinel job to simplify how we specify which checks need to pass in branch
# protection and in Mergify. This job checks that all matrix jobs were
# successful.
check-tests:
name: "check tests"
needs: [ci]
runs-on: ubuntu-22.04
outputs:
success: ${{ steps.setoutput.outputs.success }}
steps:
- id: setoutput
run: echo "success=true" >> $GITHUB_OUTPUT
# Related to check-tests above, this job _always_ runs (even if tests fail
# and thus check-steps is skipped). This two sentinel job approach avoids an
# issue where failing tests causes a single sentinel job to be skipped which
# counts as passing for purposes of branch protection.
#
# See: https://brunoscheufler.com/blog/2022-04-09-the-required-github-status-check-that-wasnt
all_tests_passed:
name: "all tests passed"
runs-on: ubuntu-22.04
if: always() # Always run so that we never skip this check
needs: check-tests
# Pass only if check-tests set its output value
steps:
- run: |
PASSED=${{ needs.check-tests.outputs.success }}
if [[ $PASSED == "true" ]]; then
echo "### All tests passed! :rocket:" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "### One or more tests FAILED! :bangbang:" >> $GITHUB_STEP_SUMMARY
exit 1
fi