name: Continuous Integration on: pull_request: push: branches: - master - 1.6.x - 1.5.x - 1.4.x - 1.3.x - 1.2.x jobs: test: name: sbt test runs-on: ubuntu-latest strategy: matrix: scala: [2.13.10, 2.12.17] steps: - name: Checkout uses: actions/checkout@v2 - name: Install Tabby OSS Cad Suite uses: ./.github/workflows/setup-oss-cad-suite - name: Setup Scala uses: olafurpg/setup-scala@v10 with: java-version: adopt@1.8 - name: Cache Scala uses: coursier/cache-action@v6 - name: Check Formatting (Scala 2.12 only) if: startsWith(matrix.scala, '2.12') run: sbt ++${{ matrix.scala }} scalafmtCheckAll - name: Unidoc run: sbt ++${{ matrix.scala }} unidoc - name: Sanity check benchmarking scripts (Scala 2.13 only) if: startsWith(matrix.scala, '2.13') run: | benchmark/scripts/benchmark_cold_compile.py -N 2 --designs regress/ICache.fir --versions HEAD benchmark/scripts/find_heap_bound.py -- -cp firrtl*jar firrtl.stage.FirrtlMain -i regress/ICache.fir -o out -X verilog - name: Test run: sbt ++${{ matrix.scala }} test - name: Binary compatibility run: sbt ++${{ matrix.scala }} mimaReportBinaryIssues mill: name: Mill Sanity Check runs-on: ubuntu-latest strategy: matrix: scala: [2.13.10, 2.12.17] steps: - name: Checkout uses: actions/checkout@v2 - name: Setup Scala uses: olafurpg/setup-scala@v10 - name: Cache uses: coursier/cache-action@v5 - name: Setup Mill uses: jodersky/setup-mill@v0.2.3 - name: Mill sanity check run: mill _[${{ matrix.scala }}].compile # TODO find better way to express Ops and AddNot as single test equiv: name: formal equivalence runs-on: ubuntu-latest strategy: matrix: design: [RocketCore, FPU, ICache, Ops, AddNot] steps: - name: Checkout uses: actions/checkout@v2 - name: Install Tabby OSS Cad Suite uses: ./.github/workflows/setup-oss-cad-suite - name: Setup Scala uses: olafurpg/setup-scala@v10 with: java-version: adopt@1.8 - name: Cache Scala uses: coursier/cache-action@v5 - name: Run Formal Equivalence # This is here instead of on the whole job because if a job is skipped, so are dependent jobs # If this job were skipped, all_tests_passed would be skipped to # By having this "if" here, this job returns success so that all_tests_passed will succeed too if: github.event_name == 'pull_request' && ! contains(github.event.pull_request.labels.*.name, 'Skip Formal CI') run: | echo ${{ github.event_name }} echo ${{ github.event.pull_request.labels }} ./.run_formal_checks.sh ${{ matrix.design }} # Sentinel job to simplify how we specify which checks need to pass in branch # protection and in Mergify # # When adding new jobs, please add them to `needs` below all_tests_passed: name: "all tests passed" needs: [test, mill, equiv] runs-on: ubuntu-latest steps: - run: echo Success! # sbt ci-release publishes all cross versions so this job needs to be # separate from a Scala versions build matrix to avoid duplicate publishing publish: needs: [all_tests_passed] runs-on: ubuntu-latest if: github.event_name == 'push' steps: - name: Checkout uses: actions/checkout@v2 - name: Setup Scala uses: olafurpg/setup-scala@v10 with: java-version: adopt@1.8 - name: Cache Scala uses: coursier/cache-action@v5 - name: Setup GPG (for Publish) uses: olafurpg/setup-gpg@v3 - name: Publish run: sbt ci-release env: PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} PGP_SECRET: ${{ secrets.PGP_SECRET }} SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}