aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorJack Koenig2021-01-19 11:51:33 -0800
committerGitHub2021-01-19 11:51:33 -0800
commitbbd7fc4115728ecc7cf88bf0524f2126d8220c34 (patch)
tree1d49d377c0da72490f70a2dbcc9e6a4881b0d7d1 /.github
parent15013df6f6ac2dafeb35d7ed15cf95c7ac8a5bef (diff)
Switch from Travis to Github Actions CI (#2041)
* Fix .run_formal_checks for Github Actions instead of Travis * Remove .run_chisel_tests Because we publish SNAPSHOTs on every merge to master, the Chisel repo checks against master of FIRRTL regularly * Only run unidoc for Scala 2.12 Under Travis we ran for 2.11, 2.12, and 2.13, but it doesn't work when using ++2.<major>.<minor> when major != to 2.12. It seems if we want to run all 3, we have to run as `sbt +unidoc`. It's not clear how much benefit we get from building on the other versions, so stick with 2.12 for now. * Generate .mergify.yml with script in chisel-repo-tools Generated with config: conditions: - status-success=all tests passed branches: - 1.2.x - 1.3.x - 1.4.x
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/test.yml108
1 files changed, 108 insertions, 0 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 00000000..3f57a1a6
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,108 @@
+name: Continuous Integration
+
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+ - 1.4.x
+ - 1.3.x
+ - 1.2.x
+
+jobs:
+ test:
+ name: sbt test
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ scala: [2.13.2, 2.12.12, 2.11.12]
+ container:
+ image: ucbbar/chisel3-tools
+ options: --user github --entrypoint /bin/bash
+ env:
+ CONTAINER_HOME: /home/github
+
+ 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: Unidoc builds (Scala 2.12 only)
+ if: matrix.scala == '2.12.12'
+ run: sbt ++${{ matrix.scala }} unidoc
+ - name: Sanity check benchmarking scripts (Scala 2.12 only)
+ if: matrix.scala == '2.12.12'
+ 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
+
+ # 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]
+ container:
+ image: ucbbar/chisel3-tools
+ options: --user github --entrypoint /bin/bash
+ env:
+ CONTAINER_HOME: /home/github
+
+ 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: Run Formal Equivalence
+ run: ./.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, 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 }}
+