diff --git a/.travis.yml b/.travis.yml
index 5756d6e3..8149138d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,7 +2,6 @@ language: scala
env:
global:
- - PUBLISH_JDK=oraclejdk8
# PGP_PASSPHRASE
- secure: "MIHv2s6njtXubCzbP/eYXszuO/Y3FADYATZpDtOULZmQHcQ8z+sccQHidyq6hvoK9/I2hRUrc5RIelfA7D32tqP7aF3P9Dq1ZdiWqZYmFKUl6wzJMhgWwnT1RA9Nu67PcNLZGwOe7+55zZpWVNbeTKMe05TzUaaGUgApr9wvS0I="
# SONA_USER
diff --git a/README.md b/README.md
index 6b9a92b9..eff8f74e 100644
--- a/README.md
+++ b/README.md
@@ -4,10 +4,8 @@
[](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-swing_2.11)
[](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-swing_2.12*)
[![Stories in Ready](https://badge.waffle.io/scala/scala-swing.svg?label=ready&title=Ready)](http://waffle.io/scala/scala-swing)
-[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/scala/scala-swing)
This is now community maintained by @andy1138 & @benhutchison. If you're interested in helping then contact them or @adriaanm.
-Questions can asked on the [Google Group](https://groups.google.com/forum/#!forum/scala-swing).
This is a UI library that will wrap most of Java Swing for Scala in a straightforward manner.
The widget class hierarchy loosely resembles that of Java Swing. The main differences are:
diff --git a/admin/README.md b/admin/README.md
index 55ae9c8a..46626b4e 100644
--- a/admin/README.md
+++ b/admin/README.md
@@ -1,7 +1,5 @@
## Tag Driven Releasing
-Copied from https://github.com/scala/scala-java8-compat/commit/4a6cfc97cd95227b86650410e1b632e5ff79335b.
-
### Background Reading
- http://docs.travis-ci.com/user/environment-variables/
@@ -14,48 +12,61 @@ To configure tag driven releases from Travis CI.
1. Generate a key pair for this repository with `./admin/genKeyPair.sh`.
Edit `.travis.yml` and `admin/build.sh` as prompted.
- 2. Publish the public key to https://pgp.mit.edu
- 3. Store other secrets as encrypted environment variables with `admin/encryptEnvVars.sh`.
+ 1. Publish the public key to https://pgp.mit.edu
+ 1. Store other secrets as encrypted environment variables with `admin/encryptEnvVars.sh`.
Edit `.travis.yml` as prompted.
- 4. Edit `.travis.yml` to use `./admin/build.sh` as the build script,
+ 1. Edit `.travis.yml` to use `./admin/build.sh` as the build script,
and edit that script to use the tasks required for this project.
- 5. Edit `.travis.yml` to select which JDK will be used for publishing.
+ 1. Edit `build.sbt`'s `scalaVersionsByJvm in ThisBuild` to select Scala and JVM version
+ combinations that will be used for publishing.
-It is important to add comments in .travis.yml to identify the name
+It is important to add comments in `.travis.yml` to identify the name
of each environment variable encoded in a `:secure` section.
-After all of these steps, your .travis.yml should contain config of the
-form:
-
- language: scala
- env:
- global:
- - PUBLISH_JDK=openjdk6
- # PGP_PASSPHRASE
- - secure: "XXXXXX"
- # SONA_USER
- - secure: "XXXXXX"
- # SONA_PASS
- - secure: "XXXXXX"
- script: admin/build.sh
+After these steps, your `.travis.yml` should contain config of the form:
+
+```
+language: scala
+
+env:
+ global:
+ # PGP_PASSPHRASE
+ - secure: "XXXXXX"
+ # SONA_USER
+ - secure: "XXXXXX"
+ # SONA_PASS
+ - secure: "XXXXXX"
+
+script: admin/build.sh
+
+jdk:
+ - openjdk6
+ - oraclejdk8
+
+notifications:
+ email:
+ - a@b.com
+```
If Sonatype credentials change in the future, step 3 can be repeated
without generating a new key.
-Be sure to use SBT 0.13.7 or higher to avoid [#1430](https://github.com/sbt/sbt/issues/1430)!
-
### Testing
- 1. Follow the release process below to create a dummy release (e.g. 0.1.0-TEST1).
+ 1. Follow the release process below to create a dummy release (e.g., `v0.1.0-TEST1`).
Confirm that the release was staged to Sonatype but do not release it to Maven
central. Instead, drop the staging repository.
### Performing a release
- 1. Create a GitHub "Release" (with a corresponding tag) via the GitHub
+ 1. Create a GitHub "Release" with a corresponding tag (e.g., `v0.1.1`) via the GitHub
web interface.
- 2. Travis CI will schedule a build for this release. Review the build logs.
- 3. Log into https://oss.sonatype.org/ and identify the staging repository.
- 4. Sanity check its contents
- 5. Release staging repository to Maven and send out release announcement.
-
+ 1. The release will be published using the Scala and JVM version combinations specified
+ in `scalaVersionsByJvm` in `build.sbt`.
+ - If you need to release against a different Scala version, include the Scala version
+ and the JVM version to use in the tag name, separated by `#`s (e.g., `v0.1.1#2.13.0-M1#8`).
+ Note that the JVM version needs to be listed in `.travis.yml` for the build to run.
+ 1. Travis CI will schedule a build for this release. Review the build logs.
+ 1. Log into https://oss.sonatype.org/ and identify the staging repository.
+ 1. Sanity check its contents.
+ 1. Release staging repository to Maven and send out release announcement.
diff --git a/admin/build.sh b/admin/build.sh
index f5482e56..11a76205 100755
--- a/admin/build.sh
+++ b/admin/build.sh
@@ -2,15 +2,43 @@
set -e
-# prep environment for publish to sonatype staging if the HEAD commit is tagged
+# Builds of tagged revisions are published to sonatype staging.
-# git on travis does not fetch tags, but we have TRAVIS_TAG
-# headTag=$(git describe --exact-match ||:)
+# Travis runs a build on new revisions and on new tags, so a tagged revision is built twice.
+# Builds for a tag have TRAVIS_TAG defined, which we use for identifying tagged builds.
+# Checking the local git clone would not work because git on travis does not fetch tags.
+
+# The version number to be published is extracted from the tag, e.g., v1.2.3 publishes
+# version 1.2.3 using all Scala versions in build.sbt's `crossScalaVersions`.
+
+# When a new, binary incompatible Scala version becomes available, a previously released version
+# can be released using that new Scala version by creating a new tag containing the Scala and the
+# JVM version after hashes, e.g., v1.2.3#2.13.0-M1#8. The JVM version needs to be listed in
+# `.travis.yml`, otherwise the required build doesn't run.
+
+verPat="[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)?"
+tagPat="^v$verPat(#$verPat#[0-9]+)?$"
+
+if [[ "$TRAVIS_TAG" =~ $tagPat ]]; then
+ currentJvmVer=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | sed 's/^1\.//' | sed 's/[^0-9].*//')
+
+ tagVer=$(echo $TRAVIS_TAG | sed s/#.*// | sed s/^v//)
+ publishVersion='set every version := "'$tagVer'"'
+
+ scalaAndJvmVer=$(echo $TRAVIS_TAG | sed s/[^#]*// | sed s/^#//)
+ if [ "$scalaAndJvmVer" != "" ]; then
+ scalaVer=$(echo $scalaAndJvmVer | sed s/#.*//)
+ jvmVer=$(echo $scalaAndJvmVer | sed s/[^#]*// | sed s/^#//)
+ if [ "$jvmVer" != "$currentJvmVer" ]; then
+ echo "Not publishing $TRAVIS_TAG on Java version $currentJvmVer."
+ exit 0
+ fi
+ publishScalaVersion='set every ScalaModulePlugin.scalaVersionsByJvm := Map('$jvmVer' -> List("'$scalaVer'" -> true))'
+ echo "Releasing $tagVer using Scala $scalaVer on Java version $jvmVer."
+ else
+ echo "Releasing $tagVer on Java version $currentJvmVer according to 'scalaVersionsByJvm' in build.sbt."
+ fi
-if [ "$TRAVIS_JDK_VERSION" == "$PUBLISH_JDK" ] && [[ "$TRAVIS_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)? ]]; then
- echo "Going to release from tag $TRAVIS_TAG!"
- myVer=$(echo $TRAVIS_TAG | sed -e s/^v//)
- publishVersion='set every version := "'$myVer'"'
extraTarget="+publish-signed"
cat admin/gpg.sbt >> project/plugins.sbt
cp admin/publish-settings.sbt .
@@ -22,4 +50,4 @@ if [ "$TRAVIS_JDK_VERSION" == "$PUBLISH_JDK" ] && [[ "$TRAVIS_TAG" =~ ^v[0-9]+\.
openssl aes-256-cbc -K $K -iv $IV -in admin/secring.asc.enc -out admin/secring.asc -d
fi
-sbt "$publishVersion" clean update +test +publishLocal $extraTarget
+sbt "$publishVersion" "$publishScalaVersion" clean update +test +publishLocal $extraTarget
diff --git a/build.sbt b/build.sbt
index 2c5c0a5e..5af7349c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,4 +1,4 @@
-import com.typesafe.tools.mima.plugin.{MimaPlugin, MimaKeys}
+import ScalaModulePlugin._
scalaModuleSettings
@@ -12,8 +12,10 @@ crossScalaVersions := Seq("2.11.8", "2.12.1")
scalacOptions ++= Seq("-deprecation", "-feature")
-// important!! must come here (why?)
-scalaModuleOsgiSettings
+// Map[JvmMajorVersion, List[(ScalaVersion, UseForPublishing)]]
+scalaVersionsByJvm in ThisBuild := Map(
+ 8 -> List("2.11.11", "2.12.2", "2.13.0-M1").map(_ -> true)
+)
OsgiKeys.exportPackage := Seq(s"scala.swing.*;version=${version.value}")
diff --git a/project/build.properties b/project/build.properties
index a6e117b6..64317fda 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1 @@
-sbt.version=0.13.8
+sbt.version=0.13.15
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 25f33731..293445d2 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1 +1 @@
-addSbtPlugin("org.scala-lang.modules" % "scala-module-plugin" % "1.0.3")
+addSbtPlugin("org.scala-lang.modules" % "scala-module-plugin" % "1.0.8")