aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/test.yml
blob: cca2fc3505225e007904ded72fee892aa92dd607 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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.6, 2.12.14]
    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@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.6, 2.12.14]
    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]
    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
        # 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: ./.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 }}