Skip to content

Commit 30c2834

Browse files
authored
Merge pull request scala#54 from lrytz/ci-release
New scala-module-plugin with sbt-ci-release / travisci / dynver / header
2 parents 2690dbe + d18430d commit 30c2834

13 files changed

+107
-252
lines changed

.travis.yml

+14-25
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,33 @@ scala:
44
- 2.13.0
55

66
env:
7-
global:
8-
# PGP_PASSPHRASE
9-
- secure: "NAYlvLQD1OiF+B8NvN+l1Lh0a2xa9FYFfA7LVHt1FXkri6wM/44oVuLF2H7BQTHczFN4754lAR5nrXrBccX1pa4BFmdNLu/nzZIjzjMxz5rFJRcK3nsycJPPUSY6mh5jBP5mR+hyW1zngQPGqCMmwAPP6pANaAztKh34DMSCcdRWb9Gfz6+IL0whCUywYk6LcXBfpD+H0u2ahGUM5ZTWWqqyTDiYmGIhfkXShUZ7oRYNgxffK3BbC5c3UztOTefHMiSCVgqnqNxmFCaGijtm6P1lxW4ebXrklVdb8/Z2AOrJxjV2+Itytb/8w7ukQvYUaPwBoyJYbN0glicMXoYwXKaJ0Rs7VxLFShUQGzDuQFzn5mcjn6r46Gs7aPYC0WTRW6Tx8aaaie7kV+w1zwIx1FrK4OpGaCKGQc73sEUng9EPcVZCbBNS5MNuF/yCfyYN+tSrC7Ms7KzQUwk1aoabEctEqL/Nax8LwayuBBFGrOQnOI9Rt6IxFAze6tJShkcNrZeOp6P/2eCanipHqH18lV3gNr7mKmJL1kTiBdMHo41S/DumNblOz1n5pVOBBLIOjD2Q55uDHAWUPXLbRa+BMtGrmbY2IHIUQPZNKTvnZ5PzoOezP2nSKANUC0V4pN7gVGOmZ/2iPJ7/itdU1tqlQFGRPJvTAzRtsXbPhynEqqw="
10-
# SONA_USER
11-
- secure: "Uc+tOT5E5FEQwLx4ZXZO1Oum1HAhMbvCWpKpkReqdsyb+xBdMbJkt43o8jvM/2WNVMcijEku87o5yWWa/fRDfqBg4GCuwnjUYu/3S0Lyxso8Mgmlcn6khmi09inOvAMVpCdBjvr+krJG1kXgxO62qA3IM0FU9z06Kcngz8F4YhnSGBv2HkOI/+9UHjQeex7tSUSFZi8itnEIN+gK4oWLVItyo0MbH4539BeJyoq/+e70xNxolLFHpVhruBQssg8MS60C5rajo7FXo1BODv+SIR+d1UZ6z8sl2iFU2psijej39nYHzmbxuM9P5Twozs38Rq7g4CM5aFLebna8VZoO6zZtM4PIAyiExkWWILQknrZEhHSded6l73GDeX+eoIigvYNxxAgXMh+MJll1i+XEySLjku8NvarQJ8c09x4S/Rjz1CBEfvlAhM+f117PqVsB87JBnsfE7CABfusJ2wqBpFf9pq9DA3E62XSEniWTIzow37YSR7opRv6wvHzuGrO6OeadIN1P2hb/FDiXDBnqG4xtGUFx81FM0dl9jV97kYiXoaqTwjT0j3d1MBGiN7IzeHxLbczMWA9mvvXtIeOxa73mph3grKKXiRqf/U+455oEIbCObEudjI7zXbjhXGeoVb+OqU7t5Beo+0Lg3H0hyntCsewops/h52lTmgsg5Hw="
12-
# SONA_PASS
13-
- secure: "ggXFZBlzV5ek/rBaE9lrEZlAIfUrv4XDJ4OrP8daMrJxmwkXtoSbcB3z4VgqqWKzAzW89CcU1IiojzDbe/het3xEX4qxdz5Wt05/E+WOgbek528kelwMxq12XRe6xaCVfG+y8OISPgq1q3vKoO/xYGVbK3D6hSD+cjojEXyPpjAfrVSUof06aNPFPQeLX9exgu9zrxkJJm01PbTh19vQk4Ojc++oEmpF7HLD1CF1m7AlW0U2Rba+syivpj9Ray3Z9vu0TnFL06r4TiwZruwcXTLrWUqumFI0r5mhaY6SNH7bqttu+3RPIOdkUGxIeGlkDi3xopt7r2aEkhOKvjRXapW0e/CWmUo1J+NnlIumxrldi4n0iiJGVEvY4Krx/HGZe0wCVTh4vDNOllTGdFmkkxN6WoaHALgj3QNM3XLjvvUu3VcT+QNtsVIvgUDesrtos8zCKczzdhL/d4BMiIg7SFfA33S3vx8BeczLBqddrx+yLSPzfheKrHW7g76EAEyN26vE2/2/GRlMOlG8Lmu8rXBfIPsK9T/ztfE1CxaTW5EsMSrxO2+O/bvAa6DY0R79KkHf7LDI+azzP2NwYx8anM9WlMTp4EbawI/KGZRilWYtJ3Q3y5EQERsrP71W35dKqiBFMPdspS+lTS9hGtso08n7cR2MwTbRjoXVRcWfJ/I="
14-
matrix:
15-
# The empty SCALAJS_VERSION will only compile for the JVM
16-
- SCALAJS_VERSION= ADOPTOPENJDK=8 MODULE=scala-collection-contrib
17-
- SCALAJS_VERSION=0.6.28 ADOPTOPENJDK=8 MODULE=scala-collection-contribJS
18-
- SCALAJS_VERSION=1.0.0-M8 ADOPTOPENJDK=8 MODULE=scala-collection-contribJS
19-
- SCALAJS_VERSION= ADOPTOPENJDK=11 MODULE=scala-collection-contrib
7+
- SCALAJS_VERSION= ADOPTOPENJDK=8
8+
- SCALAJS_VERSION=0.6.29 ADOPTOPENJDK=8
9+
- SCALAJS_VERSION=1.0.0-M8 ADOPTOPENJDK=8
10+
- SCALAJS_VERSION= ADOPTOPENJDK=11
2011

2112
before_install:
2213
# adding $HOME/.sdkman to cache would create an empty directory, which interferes with the initial installation
2314
- "[[ -d $HOME/.sdkman/bin ]] || rm -rf $HOME/.sdkman/"
2415
- curl -sL https://get.sdkman.io | bash
25-
- echo sdkman_auto_answer=true > "$HOME/.sdkman/etc/config"
16+
- echo sdkman_auto_answer=true > $HOME/.sdkman/etc/config
2617
- source "$HOME/.sdkman/bin/sdkman-init.sh"
2718

2819
install:
2920
- sdk install java $(sdk list java | grep -o "$ADOPTOPENJDK\.[0-9\.]*hs-adpt" | head -1)
3021
- unset JAVA_HOME
3122
- java -Xmx32m -version
32-
- javac -J-Xmx32m -version
23+
- git fetch --tags # get all tags for sbt-dynver
3324

34-
script:
35-
- admin/build.sh
25+
script: ./build.sh
3626

3727
before_cache:
38-
- find $HOME/.sbt -name "*.lock" | xargs rm
39-
- find $HOME/.ivy2/cache -name "ivydata-*.properties" | xargs rm
28+
- rm -f $HOME/.ivy2/.sbt.ivy.lock
29+
- find $HOME/.ivy2/cache -name "ivydata-*.properties" | xargs rm
30+
- find $HOME/.sbt -name "*.lock" | xargs rm
4031
cache:
4132
directories:
42-
- $HOME/.ivy2/cache
43-
- $HOME/.coursier
44-
- $HOME/.sbt/1.0
45-
- $HOME/.sbt/boot
46-
- $HOME/.sbt/launchers
47-
- $HOME/.sdkman
33+
- $HOME/.ivy2/cache
34+
- $HOME/.sbt
35+
- $HOME/.cache/coursier
36+
- $HOME/.sdkman

admin/README.md

-68
This file was deleted.

admin/build.sh

-48
This file was deleted.

admin/encryptEnvVars.sh

-11
This file was deleted.

admin/genKeyPair.sh

-41
This file was deleted.

admin/gpg.sbt

-1
This file was deleted.

admin/publish-settings.sbt

-8
This file was deleted.

admin/pubring.asc

-18
This file was deleted.

admin/secring.asc.enc

-1.84 KB
Binary file not shown.

build.sbt

+15-28
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,35 @@
1-
import sbtcrossproject.CrossPlugin.autoImport.{ crossProject, CrossType }
2-
import ScalaModulePlugin._
1+
import sbtcrossproject.CrossPlugin.autoImport.{CrossType, crossProject}
32

4-
lazy val root = project.in(file("."))
5-
.aggregate(`scala-collection-contribJS`, `scala-collection-contribJVM`)
6-
.settings(
7-
disablePublishing,
8-
// HACK If we don’t add this dependency the tests compilation of the aggregated projects fails
9-
libraryDependencies += "junit" % "junit" % "4.12" % Test
10-
)
3+
// With CrossType.Pure, the root project also picks up the sources in `src`
4+
Compile/sources := Nil
5+
Test/sources := Nil
116

12-
lazy val `scala-collection-contrib` = crossProject(JVMPlatform, JSPlatform)
7+
lazy val collectionContrib = crossProject(JVMPlatform, JSPlatform)
8+
.withoutSuffixFor(JVMPlatform)
139
.crossType(CrossType.Pure)
14-
.withoutSuffixFor(JVMPlatform).in(file("."))
15-
.settings(scalaModuleSettings)
16-
.jvmSettings(scalaModuleSettingsJVM)
10+
.in(file("."))
11+
.settings(ScalaModulePlugin.scalaModuleSettings)
12+
.jvmSettings(ScalaModulePlugin.scalaModuleSettingsJVM)
1713
.settings(
1814
name := "scala-collection-contrib",
19-
version := "0.2.1-SNAPSHOT",
20-
21-
crossScalaVersions in ThisBuild := Seq("2.13.0"),
22-
2315
scalacOptions ++= Seq("-opt-warnings", "-language:higherKinds", "-deprecation", "-feature", "-Xfatal-warnings"),
2416
scalacOptions in (Compile, doc) ++= Seq("-implicits", "-groups"),
25-
2617
testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s", "-a"),
2718
parallelExecution in Test := false, // why?
28-
29-
mimaPreviousVersion := Some("0.1.0"),
30-
31-
homepage := Some(url("https://github.com/scala/scala-collection-contrib")),
32-
licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0")),
33-
3419
libraryDependencies ++= Seq(
3520
"junit" % "junit" % "4.12" % Test,
3621
"com.novocode" % "junit-interface" % "0.11" % Test,
3722
"org.openjdk.jol" % "jol-core" % "0.9" % Test
3823
)
3924
)
25+
.jvmSettings(
26+
scalaModuleMimaPreviousVersion := Some("0.1.0"), // why only in jvmSettings?
27+
// TODO: osgi settings; not trivial because of split packages.
28+
// See https://github.com/scala/scala-collection-compat/pull/226
29+
// OsgiKeys.exportPackage := Seq(s"scala.collection.*;version=${version.value}"),
30+
)
4031
.jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin))
4132
.jsSettings(
42-
mimaPreviousVersion := None,
4333
// Scala.js cannot run forked tests
4434
fork in Test := false
4535
)
46-
47-
lazy val `scala-collection-contribJVM` = `scala-collection-contrib`.jvm
48-
lazy val `scala-collection-contribJS` = `scala-collection-contrib`.js

build.sh

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Builds of tagged revisions are published to sonatype staging.
6+
7+
# Travis runs a build on new revisions and on new tags, so a tagged revision is built twice.
8+
# Builds for a tag have TRAVIS_TAG defined, which we use for identifying tagged builds.
9+
10+
# sbt-dynver sets the version number from the tag
11+
# sbt-travisci sets the Scala version from the travis job matrix
12+
13+
# When a new binary incompatible Scala version becomes available, a previously released version
14+
# can be released using that new Scala version by creating a new tag containing the Scala version
15+
# after a hash, e.g., v1.2.3#2.13.0-M3. In this situation, the first job of the travis job
16+
# matrix builds the release. All other jobs are stopped. Make sure that the first job uses
17+
# the desired JVM version.
18+
19+
# For normal tags that are cross-built, we release on JDK 8 for Scala 2.x
20+
isReleaseJob() {
21+
if [[ "$ADOPTOPENJDK" == "8" ]]; then
22+
true
23+
else
24+
false
25+
fi
26+
}
27+
28+
# For tags that define a Scala version, we pick the jobs of one Scala version (2.13.x) to do the releases
29+
isTagScalaReleaseJob() {
30+
if [[ "$ADOPTOPENJDK" == "8" && "$TRAVIS_SCALA_VERSION" =~ ^2\.13\.[0-9]+$ ]]; then
31+
true
32+
else
33+
false
34+
fi
35+
}
36+
37+
if [[ "$SCALAJS_VERSION" != "" ]]; then
38+
projectPrefix="collectionContribJS"
39+
else
40+
projectPrefix="collectionContrib"
41+
fi
42+
43+
verPat="[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)?"
44+
tagPat="^v$verPat(#$verPat)?$"
45+
46+
if [[ "$TRAVIS_TAG" =~ $tagPat ]]; then
47+
releaseTask="ci-release"
48+
tagScalaVer=$(echo $TRAVIS_TAG | sed s/[^#]*// | sed s/^#//)
49+
if [[ "$tagScalaVer" == "" ]]; then
50+
if ! isReleaseJob; then
51+
echo "Not releasing on Java $ADOPTOPENJDK with Scala $TRAVIS_SCALA_VERSION"
52+
exit 0
53+
fi
54+
else
55+
if isTagScalaReleaseJob; then
56+
setTagScalaVersion='set every scalaVersion := "'$tagScalaVer'"'
57+
else
58+
echo "The releases for Scala $tagScalaVer are built by other jobs in the travis job matrix"
59+
exit 0
60+
fi
61+
fi
62+
fi
63+
64+
# default is +publishSigned; we cross-build with travis jobs, not sbt's crossScalaVersions
65+
export CI_RELEASE="$projectPrefix/publishSigned"
66+
export CI_SNAPSHOT_RELEASE="$projectPrefix/publish"
67+
68+
# default is sonatypeBundleRelease, which closes and releases the staging repo
69+
# see https://github.com/xerial/sbt-sonatype#commands
70+
# for now, until we're confident in the new release scripts, just close the staging repo.
71+
export CI_SONATYPE_RELEASE="; sonatypePrepare; sonatypeBundleUpload; sonatypeClose"
72+
73+
sbt "$setTagScalaVersion" clean $projectPrefix/test $projectPrefix/publishLocal $releaseTask

0 commit comments

Comments
 (0)