1
1
import microsites ._
2
2
import ReleaseTransformations ._
3
3
import sbt .io .Using
4
+ import com .jsuereth .sbtpgp .PgpKeys
4
5
5
6
import scala .xml .transform .{RewriteRule , RuleTransformer }
6
7
import sbtcrossproject .CrossPlugin .autoImport .{crossProject , CrossType }
7
8
9
+ lazy val publishSignedIfRelevant = taskKey[Unit ](" Runs publishSigned but only if scalaVersion in crossScalaVersions" )
10
+ Global / publishSignedIfRelevant := PgpKeys .publishSigned.value
11
+
12
+ lazy val publishLocalSignedIfRelevant =
13
+ taskKey[Unit ](" Runs publishLocalSigned but only if scalaVersion in crossScalaVersions" )
14
+ Global / publishLocalSignedIfRelevant := PgpKeys .publishLocalSigned.value
15
+
8
16
lazy val scoverageSettings = Seq (
9
17
coverageMinimum := 60 ,
10
18
coverageFailOnMinimum := false ,
11
19
coverageHighlighting := true
12
20
)
13
21
14
22
organization in ThisBuild := " org.typelevel"
15
- scalafixDependencies in ThisBuild += " org.typelevel" %% " simulacrum-scalafix" % " 0.5.0 "
23
+ scalafixDependencies in ThisBuild += " org.typelevel" %% " simulacrum-scalafix" % " 0.5.1 "
16
24
17
25
val scalaCheckVersion = " 1.15.0"
18
26
19
27
val disciplineVersion = " 1.1.0"
20
28
21
29
val disciplineScalatestVersion = " 2.0.1"
22
- val disciplineMunitVersion = " 1.0.0 "
30
+ val disciplineMunitVersion = " 1.0.1 "
23
31
24
32
val kindProjectorVersion = " 0.11.0"
25
33
@@ -35,32 +43,46 @@ ThisBuild / githubWorkflowJavaVersions := Seq(PrimaryJava, LTSJava, LatestJava,
35
43
36
44
val Scala212 = " 2.12.12"
37
45
val Scala213 = " 2.13.3"
38
- val Dotty = " 0.27.0-RC1"
46
+ val DottyOld = " 0.27.0-RC1"
47
+ val DottyNew = " 3.0.0-M1"
39
48
40
- ThisBuild / crossScalaVersions := Seq (Scala212 , Scala213 , Dotty )
49
+ ThisBuild / crossScalaVersions := Seq (Scala212 , Scala213 , DottyOld , DottyNew )
41
50
ThisBuild / scalaVersion := Scala213
42
51
43
52
ThisBuild / githubWorkflowPublishTargetBranches := Seq () // disable publication for now
44
53
45
54
ThisBuild / githubWorkflowBuildMatrixAdditions +=
46
55
" platform" -> List (" jvm" , " js" )
47
56
48
- ThisBuild / githubWorkflowBuildMatrixExclusions +=
49
- MatrixExclude (Map (" platform" -> " js" , " scala" -> Dotty ))
57
+ ThisBuild / githubWorkflowBuildMatrixExclusions ++ =
58
+ crossScalaVersions.value.filterNot(_.startsWith( " 2. " )).map(v => MatrixExclude (Map (" platform" -> " js" , " scala" -> v) ))
50
59
51
60
ThisBuild / githubWorkflowBuildMatrixExclusions ++=
52
61
githubWorkflowJavaVersions.value.filterNot(Set (PrimaryJava )).map { java =>
53
62
MatrixExclude (Map (" platform" -> " js" , " java" -> java))
54
63
}
55
64
65
+ ThisBuild / githubWorkflowBuildMatrixExclusions ++=
66
+ Seq (" jvm" , " js" ).map { platform =>
67
+ MatrixExclude (
68
+ Map (" platform" -> platform, " java" -> LatestJava , " scala" -> DottyNew )
69
+ ) // 3.0.0-M1 doesn't work on JDK 14+
70
+ }
71
+
72
+ // exclude DottyJS for now
73
+ ThisBuild / githubWorkflowBuildMatrixExclusions ++=
74
+ crossScalaVersions.value.filterNot(_.startsWith(" 2." )).map { scala =>
75
+ MatrixExclude (Map (" platform" -> " js" , " scala" -> scala))
76
+ }
77
+
56
78
// we don't need this since we aren't publishing
57
79
ThisBuild / githubWorkflowArtifactUpload := false
58
80
59
81
val JvmCond = s " matrix.platform == 'jvm' "
60
82
val JsCond = s " matrix.platform == 'js' "
61
83
62
- val Scala2Cond = s " matrix.scala != ' $Dotty ' "
63
- val Scala3Cond = s " matrix.scala == ' $Dotty ' "
84
+ val Scala2Cond = s " ( matrix.scala != ' $DottyOld ' && matrix.scala != ' $DottyNew ') "
85
+ val Scala3Cond = s " ( matrix.scala == ' $DottyOld ' || matrix.scala == ' $DottyNew ') "
64
86
65
87
ThisBuild / githubWorkflowBuild := Seq (
66
88
WorkflowStep .Sbt (List (" validateAllJS" ), name = Some (" Validate JavaScript" ), cond = Some (JsCond )),
@@ -131,9 +153,9 @@ def scalaVersionSpecificFolders(srcName: String, srcBaseDir: java.io.File, scala
131
153
List (CrossType .Pure , CrossType .Full )
132
154
.flatMap(_.sharedSrcDir(srcBaseDir, srcName).toList.map(f => file(f.getPath + suffix)))
133
155
CrossVersion .partialVersion(scalaVersion) match {
134
- case Some ((2 , y)) => extraDirs(" -2.x" ) ++ (if (y >= 13 ) extraDirs(" -2.13+" ) else Nil )
135
- case Some ((0 , _)) => extraDirs(" -2.13+" ) ++ extraDirs(" -3.x" )
136
- case _ => Nil
156
+ case Some ((2 , y)) => extraDirs(" -2.x" ) ++ (if (y >= 13 ) extraDirs(" -2.13+" ) else Nil )
157
+ case Some ((0 | 3 , _)) => extraDirs(" -2.13+" ) ++ extraDirs(" -3.x" )
158
+ case _ => Nil
137
159
}
138
160
}
139
161
@@ -142,8 +164,6 @@ ThisBuild / mimaFailOnNoPrevious := false
142
164
def doctestGenTestsDottyCompat (isDotty : Boolean , genTests : Seq [File ]): Seq [File ] =
143
165
if (isDotty) Nil else genTests
144
166
145
- lazy val dottySettings = Seq (crossScalaVersions += Dotty )
146
-
147
167
lazy val commonSettings = Seq (
148
168
scalacOptions ++= commonScalacOptions(scalaVersion.value, isDotty.value),
149
169
Compile / unmanagedSourceDirectories ++= scalaVersionSpecificFolders(" main" , baseDirectory.value, scalaVersion.value),
@@ -158,7 +178,24 @@ lazy val commonSettings = Seq(
158
178
Seq ()
159
179
else
160
180
old
161
- }
181
+ },
182
+ // copying this trick from sbt-spiewak for now
183
+ publishSignedIfRelevant := Def .taskDyn {
184
+ val ver = scalaVersion.value
185
+ val cross = crossScalaVersions.value
186
+ if (cross.contains(ver))
187
+ Def .task(PgpKeys .publishSigned.value)
188
+ else
189
+ Def .task(streams.value.log.warn(s " skipping `publishSigned` in ${name.value}: $ver is not in $cross" ))
190
+ }.value,
191
+ publishLocalSignedIfRelevant := Def .taskDyn {
192
+ val ver = scalaVersion.value
193
+ val cross = crossScalaVersions.value
194
+ if (cross.contains(ver))
195
+ Def .task(PgpKeys .publishLocalSigned.value)
196
+ else
197
+ Def .task(streams.value.log.warn(s " skipping `publishLocalSigned` in ${name.value}: $ver is not in $cross" ))
198
+ }.value
162
199
) ++ warnUnusedImport
163
200
164
201
def macroDependencies (scalaVersion : String ) =
@@ -180,28 +217,15 @@ lazy val simulacrumSettings = Seq(
180
217
scalacOptions ++= (
181
218
if (isDotty.value) Nil else Seq (s " -P:semanticdb:targetroot: ${baseDirectory.value}/target/.semanticdb " , " -Yrangepos" )
182
219
),
183
- libraryDependencies +=
184
- (" org.typelevel" %% " simulacrum-scalafix-annotations" % " 0.5.1" % Provided ).withDottyCompat(scalaVersion.value),
185
- pomPostProcess := { (node : xml.Node ) =>
186
- new RuleTransformer (new RewriteRule {
187
- override def transform (node : xml.Node ): Seq [xml.Node ] =
188
- node match {
189
- case e : xml.Elem
190
- if e.label == " dependency" &&
191
- e.child.exists(child => child.label == " groupId" && child.text == " org.typelevel" ) &&
192
- e.child.exists(child => child.label == " artifactId" && child.text.startsWith(" simulacrum" )) =>
193
- Nil
194
- case _ => Seq (node)
195
- }
196
- }).transform(node).head
197
- }
220
+ libraryDependencies += " org.typelevel" %% " simulacrum-scalafix-annotations" % " 0.5.1"
198
221
)
199
222
200
223
lazy val tagName = Def .setting {
201
224
s " v ${if (releaseUseGlobalVersion.value) (version in ThisBuild ).value else version.value}"
202
225
}
203
226
204
227
lazy val commonJsSettings = Seq (
228
+ crossScalaVersions := crossScalaVersions.value.filter(_.startsWith(" 2." )),
205
229
scalacOptions += {
206
230
val tv = tagName.value
207
231
val tagOrHash =
@@ -595,7 +619,6 @@ lazy val kernel = crossProject(JSPlatform, JVMPlatform)
595
619
.settings(
596
620
libraryDependencies += " org.scalacheck" %%% " scalacheck" % scalaCheckVersion % Test
597
621
)
598
- .jvmSettings(dottySettings)
599
622
600
623
lazy val kernelLaws = crossProject(JSPlatform , JVMPlatform )
601
624
.in(file(" kernel-laws" ))
@@ -610,7 +633,6 @@ lazy val kernelLaws = crossProject(JSPlatform, JVMPlatform)
610
633
.jvmSettings(commonJvmSettings ++ mimaSettings(" cats-kernel-laws" , includeCats1 = false ))
611
634
.jsSettings(coverageEnabled := false )
612
635
.dependsOn(kernel)
613
- .jvmSettings(dottySettings)
614
636
615
637
lazy val core = crossProject(JSPlatform , JVMPlatform )
616
638
.crossType(CrossType .Pure )
@@ -632,7 +654,6 @@ lazy val core = crossProject(JSPlatform, JVMPlatform)
632
654
)
633
655
.jsSettings(commonJsSettings)
634
656
.jvmSettings(commonJvmSettings ++ mimaSettings(" cats-core" ))
635
- .jvmSettings(dottySettings)
636
657
637
658
lazy val laws = crossProject(JSPlatform , JVMPlatform )
638
659
.crossType(CrossType .Pure )
@@ -644,7 +665,6 @@ lazy val laws = crossProject(JSPlatform, JVMPlatform)
644
665
.jsSettings(commonJsSettings)
645
666
.jvmSettings(commonJvmSettings ++ mimaSettings(" cats-laws" , includeCats1 = false ))
646
667
.jsSettings(coverageEnabled := false )
647
- .jvmSettings(dottySettings)
648
668
649
669
lazy val free = crossProject(JSPlatform , JVMPlatform )
650
670
.crossType(CrossType .Pure )
@@ -689,7 +709,6 @@ lazy val alleycatsCore = crossProject(JSPlatform, JVMPlatform)
689
709
.settings(includeGeneratedSrc)
690
710
.jsSettings(commonJsSettings)
691
711
.jvmSettings(commonJvmSettings ++ mimaSettings(" alleycats-core" , includeCats1 = false ))
692
- .jvmSettings(dottySettings)
693
712
694
713
lazy val alleycatsLaws = crossProject(JSPlatform , JVMPlatform )
695
714
.crossType(CrossType .Pure )
@@ -704,7 +723,6 @@ lazy val alleycatsLaws = crossProject(JSPlatform, JVMPlatform)
704
723
.jsSettings(commonJsSettings)
705
724
.jvmSettings(commonJvmSettings ++ mimaSettings(" alleycats-laws" , includeCats1 = false ))
706
725
.jsSettings(coverageEnabled := false )
707
- .jvmSettings(dottySettings)
708
726
709
727
lazy val alleycatsTests = crossProject(JSPlatform , JVMPlatform )
710
728
.in(file(" alleycats-tests" ))
@@ -956,7 +974,7 @@ lazy val sharedReleaseProcess = Seq(
956
974
setReleaseVersion,
957
975
commitReleaseVersion,
958
976
tagRelease,
959
- releaseStepCommandAndRemaining(" +publishSigned " ),
977
+ releaseStepCommandAndRemaining(" +publishSignedIfRelevant " ),
960
978
setNextVersion,
961
979
commitNextVersion,
962
980
releaseStepCommand(" sonatypeReleaseAll" ),
0 commit comments