From 3402d8e7feb9455af0823950b16640228c86aa9e Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 10 May 2022 15:15:36 -0700 Subject: [PATCH] Migrate to sbt-typelevel (#429) * Migrate to sbt-typelevel * Remove sbt opts * Bump to latest sbt * Tweak settings * take 2 * Poke ci * Another try * Gotcha * Poke CI * Disable snapshots for now * Bump sbt-typelevel --- .github/workflows/ci.yml | 81 +++++++++++++++++++++++++++---------- .github/workflows/clean.yml | 2 +- build.sbt | 63 ++++++----------------------- project/plugins.sbt | 7 +--- 4 files changed, 75 insertions(+), 78 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7cd4b1ab..e7c63b54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,8 +12,14 @@ on: branches: ['**'] push: branches: ['**'] + tags: [v*] env: + PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + SONATYPE_CREDENTIAL_HOST: ${{ secrets.SONATYPE_CREDENTIAL_HOST }} + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + PGP_SECRET: ${{ secrets.PGP_SECRET }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: @@ -23,7 +29,7 @@ jobs: matrix: os: [ubuntu-latest] scala: [2.12.15, 2.13.6] - java: [adopt@1.8] + java: [temurin@8] runs-on: ${{ matrix.os }} steps: - name: Checkout current branch (full) @@ -31,10 +37,21 @@ jobs: with: fetch-depth: 0 - - name: Setup Java and Scala - uses: olafurpg/setup-scala@v12 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 with: - java-version: ${{ matrix.java }} + distribution: temurin + java-version: 8 + + - name: Setup Java (temurin@8) + if: matrix.java == 'temurin@8' + uses: actions/setup-java@v2 + with: + distribution: jdkfile + java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 @@ -49,22 +66,26 @@ jobs: key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - name: Check that workflows are up to date - run: sbt --client '++${{ matrix.scala }}; githubWorkflowCheck' + run: sbt '++${{ matrix.scala }}' 'project /' githubWorkflowCheck - - env: - SBT_OPTS: '-J-Xmx8G' - run: sbt --client '++${{ matrix.scala }}; clean; coverage; test; scalastyle; scalafmtCheck; scalafmtSbtCheck; Test / scalafmtCheck; unidoc; coverageReport' + - run: sbt '++${{ matrix.scala }}' clean coverage test scalastyle scalafmtCheckAll scalafmtSbtCheck unidoc coverageReport - name: Code coverage analysis uses: codecov/codecov-action@v1 + - name: Make target directories + if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v')) + run: mkdir -p util/target target effect/target scalafix/input/target effect3/target finagle/target scalafix/rules/target scalafix/tests/target benchmark/target project/target + - name: Compress target directories + if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v')) run: tar cf targets.tar util/target target effect/target scalafix/input/target effect3/target finagle/target scalafix/rules/target scalafix/tests/target benchmark/target project/target - name: Upload target directories + if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v')) uses: actions/upload-artifact@v2 with: - name: target-${{ matrix.os }}-${{ matrix.scala }}-${{ matrix.java }} + name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }} path: targets.tar publish: @@ -75,7 +96,7 @@ jobs: matrix: os: [ubuntu-latest] scala: [2.13.6] - java: [adopt@1.8] + java: [temurin@8] runs-on: ${{ matrix.os }} steps: - name: Checkout current branch (full) @@ -83,10 +104,21 @@ jobs: with: fetch-depth: 0 - - name: Setup Java and Scala - uses: olafurpg/setup-scala@v12 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 + with: + distribution: temurin + java-version: 8 + + - name: Setup Java (temurin@8) + if: matrix.java == 'temurin@8' + uses: actions/setup-java@v2 with: - java-version: ${{ matrix.java }} + distribution: jdkfile + java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 @@ -103,7 +135,7 @@ jobs: - name: Download target directories (2.12.15) uses: actions/download-artifact@v2 with: - name: target-${{ matrix.os }}-2.12.15-${{ matrix.java }} + name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.15 - name: Inflate target directories (2.12.15) run: | @@ -113,16 +145,23 @@ jobs: - name: Download target directories (2.13.6) uses: actions/download-artifact@v2 with: - name: target-${{ matrix.os }}-2.13.6-${{ matrix.java }} + name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.6 - name: Inflate target directories (2.13.6) run: | tar xf targets.tar rm targets.tar - - env: - PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} - PGP_SECRET: ${{ secrets.PGP_SECRET }} - SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} - SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} - run: sbt --client '++${{ matrix.scala }}; ci-release' \ No newline at end of file + - name: Import signing key + if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE == '' + run: echo $PGP_SECRET | base64 -di | gpg --import + + - name: Import signing key and strip passphrase + if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE != '' + run: | + echo "$PGP_SECRET" | base64 -di > /tmp/signing-key.gpg + echo "$PGP_PASSPHRASE" | gpg --pinentry-mode loopback --passphrase-fd 0 --import /tmp/signing-key.gpg + (echo "$PGP_PASSPHRASE"; echo; echo) | gpg --command-fd 0 --pinentry-mode loopback --change-passphrase $(gpg --list-secret-keys --with-colons 2> /dev/null | grep '^sec:' | cut --delimiter ':' --fields 5 | tail -n 1) + + - name: Publish + run: sbt '++${{ matrix.scala }}' tlRelease diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml index b535fcc1..547aaa43 100644 --- a/.github/workflows/clean.yml +++ b/.github/workflows/clean.yml @@ -56,4 +56,4 @@ jobs: printf "Deleting '%s' #%d, %'d bytes\n" $name ${ARTCOUNT[$name]} $size ghapi -X DELETE $REPO/actions/artifacts/$id done - done \ No newline at end of file + done diff --git a/build.sbt b/build.sbt index 5998f9b9..49a0da99 100644 --- a/build.sbt +++ b/build.sbt @@ -1,5 +1,8 @@ val catsVersion = "2.7.0" +ThisBuild / tlBaseVersion := "21.8" // TODO +ThisBuild / tlCiReleaseBranches := Seq() + // For the transition period, we publish artifacts for both cats-effect 2.x and 3.x val catsEffectVersion = "2.5.4" val catsEffect3Version = "3.2.9" @@ -8,39 +11,30 @@ val utilVersion = "21.8.0" val finagleVersion = "21.8.0" ThisBuild / crossScalaVersions := Seq("2.12.15", "2.13.6") -ThisBuild / scalaVersion := crossScalaVersions.value.last - -ThisBuild / organization := "org.typelevel" (Global / onChangedBuildSource) := ReloadOnSourceChanges val docMappingsApiDir = settingKey[String]("Subdirectory in site target directory for API docs") lazy val baseSettings = Seq( - (Compile / console / scalacOptions) ~= { - _.filterNot(Set("-Ywarn-unused-import", "-Ywarn-unused:imports", "-Yno-imports", "-Yno-predef")) - }, - (Test / console / scalacOptions) ~= { - _.filterNot(Set("-Ywarn-unused-import", "-Ywarn-unused:imports", "-Yno-imports", "-Yno-predef")) - }, libraryDependencies ++= Seq( "org.typelevel" %% "cats-core" % catsVersion, "org.scalacheck" %% "scalacheck" % "1.15.4" % Test, "org.scalatest" %% "scalatest" % "3.2.10" % Test, "org.typelevel" %% "cats-laws" % catsVersion % Test, "org.typelevel" %% "discipline-core" % "1.3.0" % Test, - "org.typelevel" %% "discipline-scalatest" % "2.1.5" % Test, - compilerPlugin(("org.typelevel" %% "kind-projector" % "0.13.2").cross(CrossVersion.full)) + "org.typelevel" %% "discipline-scalatest" % "2.1.5" % Test ), resolvers += Resolver.sonatypeRepo("snapshots"), - docMappingsApiDir := "api" + docMappingsApiDir := "api", + autoAPIMappings := true ) -lazy val allSettings = baseSettings ++ publishSettings +lazy val allSettings = baseSettings lazy val root = project .in(file(".")) - .enablePlugins(GhpagesPlugin, ScalaUnidocPlugin) + .enablePlugins(GhpagesPlugin, ScalaUnidocPlugin, NoPublishPlugin) .settings(allSettings) .settings( (ScalaUnidoc / unidoc / unidocProjectFilter) := inAnyProject -- inProjects( @@ -51,8 +45,7 @@ lazy val root = project `scalafix-tests` ), addMappingsToSiteDir((ScalaUnidoc / packageDoc / mappings), docMappingsApiDir), - git.remoteRepo := "git@github.com:typelevel/catbird.git", - publish / skip := true + git.remoteRepo := "git@github.com:typelevel/catbird.git" ) .settings( (console / initialCommands) := @@ -118,10 +111,10 @@ lazy val finagle = project .dependsOn(util) lazy val benchmark = project + .enablePlugins(NoPublishPlugin) .settings(allSettings) .settings( moduleName := "catbird-benchmark", - publish / skip := true, libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10", scalacOptions ~= { _.filterNot(Set("-Yno-imports", "-Yno-predef")) @@ -130,35 +123,9 @@ lazy val benchmark = project .enablePlugins(JmhPlugin) .dependsOn(util) -lazy val publishSettings = Seq( - homepage := Some(url("https://github.com/typelevel/catbird")), - licenses := Seq("Apache 2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), - (Test / publishArtifact) := false, - pomIncludeRepository := { _ => false }, - autoAPIMappings := true, - apiURL := Some(url("https://typelevel.org/catbird/api/")), - scmInfo := Some( - ScmInfo( - url("https://github.com/typelevel/catbird"), - "scm:git:git@github.com:typelevel/catbird.git" - ) - ), - developers += Developer("travisbrown", "Travis Brown", "", url("https://twitter.com/travisbrown")) -) +ThisBuild / apiURL := Some(url("https://typelevel.org/catbird/api/")) +ThisBuild / developers += Developer("travisbrown", "Travis Brown", "", url("https://twitter.com/travisbrown")) -ThisBuild / githubWorkflowJavaVersions := Seq("adopt@1.8") -ThisBuild / githubWorkflowPublishTargetBranches := Seq(RefPredicate.StartsWith(Ref.Tag("v"))) -ThisBuild / githubWorkflowPublish := Seq( - WorkflowStep.Sbt( - List("ci-release"), - env = Map( - "PGP_PASSPHRASE" -> "${{ secrets.PGP_PASSPHRASE }}", - "PGP_SECRET" -> "${{ secrets.PGP_SECRET }}", - "SONATYPE_PASSWORD" -> "${{ secrets.SONATYPE_PASSWORD }}", - "SONATYPE_USERNAME" -> "${{ secrets.SONATYPE_USERNAME }}" - ) - ) -) ThisBuild / githubWorkflowBuild := Seq( WorkflowStep.Sbt( List( @@ -166,14 +133,10 @@ ThisBuild / githubWorkflowBuild := Seq( "coverage", "test", "scalastyle", - "scalafmtCheck", + "scalafmtCheckAll", "scalafmtSbtCheck", - "Test / scalafmtCheck", "unidoc", "coverageReport" - ), - env = Map( - "SBT_OPTS" -> "-J-Xmx8G" ) ), WorkflowStep.Use( diff --git a/project/plugins.sbt b/project/plugins.sbt index 3072dac8..eb919083 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,12 +1,7 @@ addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") -addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.9") -addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") +addSbtPlugin("org.typelevel" % "sbt-typelevel" % "0.4.9") addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.3") -addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.1") -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6") addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3") -addSbtPlugin("com.codecommit" % "sbt-github-actions" % "0.12.0") -addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.1.20") addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.31")