diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000000..b338dff0aca --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,45 @@ +name: Continuous Integration + +on: [pull_request] + +jobs: + ci: + name: ci + runs-on: ubuntu-latest + strategy: + matrix: + scala: [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: Documentation (Scala 2.12 only) + if: matrix.scala == '2.12.12' + run: sbt ++${{ matrix.scala }} docs/mdoc + - name: Test + run: sbt ++${{ matrix.scala }} test + - name: Binary compatibility + run: sbt ++${{ matrix.scala }} mimaReportBinaryIssues + + + # 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: [ci] + runs-on: ubuntu-latest + steps: + - run: echo Success! diff --git a/.mergify.yml b/.mergify.yml index f23812a42b9..494b5396e74 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -1,135 +1,107 @@ pull_request_rules: - - name: remove outdated reviews - conditions: - - base=master - actions: - dismiss_reviews: +- name: automatic squash-and-merge on CI success and review + conditions: + - status-success=all tests passed + - '#approved-reviews-by>=1' + - '#changes-requested-reviews-by=0' + - base=master + - label="Please Merge" + - label!="DO NOT MERGE" + - label!="bp-conflict" + actions: + merge: + method: squash + strict: smart + strict_method: merge +- name: backport to 3.4.x + conditions: + - merged + - base=master + - milestone=3.4.x + actions: + backport: + branches: + - 3.4.x + ignore_conflicts: true + label_conflicts: bp-conflict + label: + add: + - Backported +- name: backport to 3.3.x, 3.4.x + conditions: + - merged + - base=master + - milestone=3.3.x + actions: + backport: + branches: + - 3.3.x + - 3.4.x + ignore_conflicts: true + label_conflicts: bp-conflict + label: + add: + - Backported +- name: backport to 3.2.x, 3.3.x, 3.4.x + conditions: + - merged + - base=master + - milestone=3.2.x + actions: + backport: + branches: + - 3.2.x + - 3.3.x + - 3.4.x + ignore_conflicts: true + label_conflicts: bp-conflict + label: + add: + - Backported +- name: label Mergify backport PR + conditions: + - body~=This is an automated backport of pull request \#\d+ done by Mergify + actions: + label: + add: + - Backport +- name: automatic squash-and-mege of 3.2.x backport PRs + conditions: + - status-success=all tests passed + - '#changes-requested-reviews-by=0' + - base=3.2.x + - label="Backport" + - label!="DO NOT MERGE" + - label!="bp-conflict" + actions: + merge: + method: squash + strict: smart + strict_method: merge +- name: automatic squash-and-mege of 3.3.x backport PRs + conditions: + - status-success=all tests passed + - '#changes-requested-reviews-by=0' + - base=3.3.x + - label="Backport" + - label!="DO NOT MERGE" + - label!="bp-conflict" + actions: + merge: + method: squash + strict: smart + strict_method: merge +- name: automatic squash-and-mege of 3.4.x backport PRs + conditions: + - status-success=all tests passed + - '#changes-requested-reviews-by=0' + - base=3.4.x + - label="Backport" + - label!="DO NOT MERGE" + - label!="bp-conflict" + actions: + merge: + method: squash + strict: smart + strict_method: merge -pull_request_rules: - - name: automatic squash-and-merge on CI success and review - conditions: - - "status-success=ci/circleci: build-firrtl" - - "status-success=ci/circleci: build-prep" - - "status-success=ci/circleci: test-chisel-2_11" - - "status-success=ci/circleci: test-chisel-2_12" - - status-success=license/cla - - "#approved-reviews-by>=1" - - "#changes-requested-reviews-by=0" - - base=master - - label="Please Merge" - - label!="DO NOT MERGE" - - label!="bp-conflict" - actions: - merge: - method: squash - strict: smart - strict_method: merge - - - name: backport to 3.4.x - conditions: - - merged - - base=master - - milestone=3.4.x - actions: - backport: - branches: - - 3.4.x - ignore_conflicts: True - label_conflicts: "bp-conflict" - label: - add: [Backported] - - - name: backport to 3.3.x and 3.4.x - conditions: - - merged - - base=master - - milestone=3.3.x - actions: - backport: - branches: - - 3.3.x - - 3.4.x - ignore_conflicts: True - label_conflicts: "bp-conflict" - label: - add: [Backported] - - - name: backport to 3.2.x, 3.3.x, and 3.4.x - conditions: - - merged - - base=master - - milestone=3.2.x - actions: - backport: - branches: - - 3.2.x - - 3.3.x - - 3.4.x - ignore_conflicts: True - label_conflicts: "bp-conflict" - label: - add: [Backported] - - - name: label Mergify backport PR - conditions: - - body~=This is an automated backport of pull request \#\d+ done by Mergify - actions: - label: - add: [Backport] - - - name: automatic squash-and-merge of 3.4.x backport PRs - conditions: - - "status-success=ci/circleci: build-firrtl" - - "status-success=ci/circleci: build-prep" - - "status-success=ci/circleci: test-chisel-2_11" - - "status-success=ci/circleci: test-chisel-2_12" - - "status-success=ci/circleci: check-binary-compatibility" - - status-success=license/cla - - "#changes-requested-reviews-by=0" - - base=3.4.x - - label="Backport" - - label!="DO NOT MERGE" - - label!="bp-conflict" - actions: - merge: - method: squash - strict: smart - strict_method: merge - - - name: automatic squash-and-merge of 3.3.x backport PRs - conditions: - - "status-success=ci/circleci: build-firrtl" - - "status-success=ci/circleci: build-prep" - - "status-success=ci/circleci: test-chisel-2_11" - - "status-success=ci/circleci: test-chisel-2_12" - - "status-success=ci/circleci: check-binary-compatibility" - - status-success=license/cla - - "#changes-requested-reviews-by=0" - - base=3.3.x - - label="Backport" - - label!="DO NOT MERGE" - - label!="bp-conflict" - actions: - merge: - method: squash - strict: smart - strict_method: merge - - - name: automatic squash-and-merge of 3.2.x backport PRs - conditions: - - "status-success=ci/circleci: build-firrtl" - - "status-success=ci/circleci: build-prep" - - "status-success=ci/circleci: test-chisel-2_11" - - "status-success=ci/circleci: test-chisel-2_12" - - "status-success=ci/circleci: check-binary-compatibility" - - status-success=license/cla - - "#changes-requested-reviews-by=0" - - base=3.2.x - - label="Backport" - - label!="DO NOT MERGE" - - label!="bp-conflict" - actions: - merge: - method: squash - strict: smart - strict_method: merge diff --git a/build.sbt b/build.sbt index 6eaf91b370b..d1c81a68343 100644 --- a/build.sbt +++ b/build.sbt @@ -147,6 +147,13 @@ lazy val plugin = (project in file("plugin")). }, // Only publish for Scala 2.12 publish / skip := !scalaVersion.value.startsWith("2.12") + ). + settings( + mimaPreviousArtifacts := { + // Not published for 2.11, do not try to check binary compatibility with a 2.11 artifact + if (scalaVersion.value.startsWith("2.11")) Set() + else Set() + } ) lazy val usePluginSettings = Seq( @@ -163,7 +170,8 @@ lazy val usePluginSettings = Seq( lazy val macros = (project in file("macros")). settings(name := "chisel3-macros"). settings(commonSettings: _*). - settings(publishSettings: _*) + settings(publishSettings: _*). + settings(mimaPreviousArtifacts := Set()) lazy val firrtlRef = ProjectRef(workspaceDirectory / "firrtl", "firrtl") @@ -177,6 +185,7 @@ lazy val core = (project in file("core")). buildInfoKeys := Seq[BuildInfoKey](buildInfoPackage, version, scalaVersion, sbtVersion) ). settings(publishSettings: _*). + settings(mimaPreviousArtifacts := Set()). settings( name := "chisel3-core", scalacOptions := scalacOptions.value ++ Seq( @@ -205,6 +214,7 @@ lazy val chisel = (project in file(".")). dependsOn(core). aggregate(macros, core, plugin). settings( + mimaPreviousArtifacts := Set(), libraryDependencies += defaultVersions("treadle") % "test", scalacOptions in Test ++= Seq("-language:reflectiveCalls"), scalacOptions in Compile in doc ++= Seq( diff --git a/project/plugins.sbt b/project/plugins.sbt index 867bf6b655d..e57c53b21c0 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -20,5 +20,7 @@ addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.5" ) addSbtPlugin("com.eed3si9n" % "sbt-sriracha" % "0.1.0") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.8.1") + // From FIRRTL for building from source addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.19")