2

I used sbt-release to control release process and sbt-docker to build/publish a docker image.

I can release a specific version via sbt release and build/publish a docker image via sbt docker or `sbt dockerBuildAndPush'

If I wanna release a specific version, I need to

  1. execute sbt release
  2. remember the release version and modify docker image tag with the release version
  3. execute sbt dockerBuildAndPush

But it's so tedious...

I wanna add build/publish docker image into release process.

For example:

I define my release process in build.sbt

val publishDocker = ReleaseStep(action = st => {
  // 1. get release version from sbt-release
  // 2. add release version to docker image tag
  // 3. push docker image to aws ecr
})

releaseProcess := Seq[ReleaseStep](
  checkSnapshotDependencies,            
  inquireVersions,                      
  runTest,                                
  setReleaseVersion,                     
  commitReleaseVersion,                   
  tagRelease,                            
  publishDocker,                      
  setNextVersion,                        
  commitNextVersion,                      
  pushChanges                            
)

But I have no idea how to implement publishDocker function.

Zoe
  • 27,060
  • 21
  • 118
  • 148
pandaforme
  • 153
  • 1
  • 9

3 Answers3

1

@ed Thanks for your advice and I solved it by myself :>

This is my sbt: https://gist.github.com/pandaforme/e378dc3f1f32aa252b14e40937491e9c

I just execute sbt release and it'll automatically compile, generate release version, build and push docker image, etc.

Shonzilla
  • 7,926
  • 1
  • 23
  • 25
pandaforme
  • 153
  • 1
  • 9
0

The simplest way to publish Docker image in release process would be:

releaseProcess := {
  import ReleaseTransformations._
  Seq[ReleaseStep](
    // ... prev steps
    ReleaseStep(releaseStepTask(Docker / publish)),
    // ... next steps
  )
}

Credits

Andrii Abramov
  • 10,019
  • 9
  • 74
  • 96
-2

I'm not familiar with sbt-docker but you can get the version from the st: State parameter:

val publishDocker = ReleaseStep(action = st => {
  // 1. get version from sbt
  // (it was set by sbt-release in setReleaseVersion)
  val extracted = Project.extract(st)
  val version:String = extracted.get(sbt.Keys.version)

})
ed.
  • 2,696
  • 3
  • 22
  • 25