Skip to content

Instantly share code, notes, and snippets.

@hayasshi
Last active February 13, 2018 09:05
Show Gist options
  • Save hayasshi/629422a0dfe578a1967ffb098c214c63 to your computer and use it in GitHub Desktop.
Save hayasshi/629422a0dfe578a1967ffb098c214c63 to your computer and use it in GitHub Desktop.
Release sbt projects using Sonatype.

つかったもの

  • sbt-pgp
  • sbt-sonatype
  • sbt-release

手順

  • Sonatype設定
    • SBTのマニュアルに従って、SonatypeのプロジェクトJIRAにアカウントを作成する。
    • ログインして、プロジェクト「Community Support - Open Source Project Repository Hosting」にチケットを作成する。
      • subject: プロジェクト名(GitHubのリポジトリ名と同じにした)
      • Group Id: GitHubにホストしているので、それをつかった。(github.com/username -> com.github.username)
      • Project URL: https://github.com/username/repositoryname
      • SCM URL: https://github.com/username/repositoryname.git
    • チケットを作成したらリポジトリを作ってもらうまで待つ
      • 結構速く対応してもらえた
  • GPGの設定
    • マニュアルではsystem globalなところにsbt-pluginとして、sbt-gpgを設置しているが、今回はプロジェクトのplugins.sbtに記述した。
      • addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
    • 参考
    • キーの作成と公開
      • sbt "set pgpReadOnly := false" "pgp-cmd gen-key" "pgp-cmd send-key <keyname> hkp://pool.sks-keyservers.net"
      • キーの作成時、下記3つの項目が必要なのであらかじめ準備して保存する。
        • key name: Group Idと同じにした(com.github.username)
        • key email: GitHubの登録メールアドレスにした
        • key passphrase: 適当に生成した文字列
  • sbt-sonatypeの設定
    • 参考
    • addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "1.1") to plugins.sbt
    • build.sbtに追記
      pomExtra in Global := {
          <url>https://github.com/username/repositoryname</url>
          <licenses>
              <license>
                  <name>Apache 2</name>
                  <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
              </license>
          </licenses>
          <scm>
              <connection>scm:git:github.com/username/repositoryname</connection>
              <developerConnection>scm:git:git@github.com:username/repositoryname</developerConnection>
              <url>github.com/username/repositoryname</url>
          </scm>
          <developers>
              <developer>
                  <id>...</id>
                  <name>...</name>
                  <url>...</url>
              </developer>
          </developers>
      },
      credentials += Credentials(
          "Sonatype Nexus Repository Manager",
          "oss.sonatype.org",
          sys.env.getOrElse("SONATYPE_USER", ""),
          sys.env.getOrElse("SONATYPE_PASSWORD", "")
      ),
      

   - Sonatypeのクレデンシャルは、作成したJIRAのアカウントと同期している。環境変数から設定できるようにした。

  • sbt-releaseの設定
    • 参考
    • addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.5") to plugins.sbt
    • build.sbtに追記
      releaseProcess := Seq[ReleaseStep](
          checkSnapshotDependencies,
          inquireVersions,
          runClean,
          runTest,
          setReleaseVersion,
          commitReleaseVersion,
          tagRelease,
          ReleaseStep(action = Command.process("publishSigned", _)),
          setNextVersion,
          commitNextVersion,
          ReleaseStep(action = Command.process("sonatypeReleaseAll", _)),
          pushChanges
      )
      
    • version.sbtをプロジェクトルートに追加
      • version in ThisBuild := "0.0.1-SNAPSHOT"
  • リリース
    • sbt release
    • sbt-releaseブラグインからコンソールで色々聞かれるので答えていくとリリースできてた
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment