diff --git a/plugin/src/main/scala/io/github/nafg/mergify/sbt/WriteMergify.scala b/plugin/src/main/scala/io/github/nafg/mergify/sbt/WriteMergify.scala index 9019206..bba3869 100644 --- a/plugin/src/main/scala/io/github/nafg/mergify/sbt/WriteMergify.scala +++ b/plugin/src/main/scala/io/github/nafg/mergify/sbt/WriteMergify.scala @@ -12,44 +12,45 @@ object WriteMergify extends AutoPlugin { override def trigger = allRequirements - val mergifyScalaStewardAuthor = settingKey[String]("The author that identifies Scala Steward pull requests") - val mergifyScalaStewardIncludedJobs = settingKey[Seq[WorkflowJob]]( - "The generated jobs that have to pass to merge Scala Steward PRs" - ) - val mergifyScalaStewardConditions = settingKey[Seq[Condition]]("The conditions for the Scala Steward PR rule") - val mergify = settingKey[Mergify]("The resulting Mergify object") + //noinspection ScalaWeakerAccess + object autoImport { + val mergifyExtraConditions = settingKey[Seq[Condition]]("Conditions required to merge other than passing the build") + val mergifyIncludedJobs = settingKey[Seq[WorkflowJob]]( + "The generated jobs that have to pass to merge Scala Steward PRs" + ) + val mergifyConditions = settingKey[Seq[Condition]]("The conditions for the Scala Steward PR rule") + val mergify = settingKey[Mergify]("The resulting Mergify object") + } + + import autoImport.* + def workflowJobCheckNames(jobs: Seq[WorkflowJob]) = for (job <- jobs; o <- job.oses; s <- job.scalas; v <- job.javas) yield s"${job.name} ($o, $s, ${v.render})" - def defaultScalaStewardAuthor = "scala-steward" + def defaultExtraConditions = Seq(Attr.Author :== "scala-steward") - def defaultScalaStewardConditions(author: String, jobs: Seq[WorkflowJob]) = - (Attr.Author :== author) +: + def defaultConditions(extraConditions: Seq[Condition], jobs: Seq[WorkflowJob]) = + extraConditions ++ (for (name <- workflowJobCheckNames(jobs)) yield Attr.CheckSuccess :== name) - def defaultScalaStewardMergify(conditions: Seq[Condition]) = + def buildMergify(conditions: Seq[Condition]) = defaultMergify .addPullRequestRule("Automatically merge successful Scala Steward PRs")(defaultQueueAction)( - conditions* + conditions * ) - override def projectSettings = { + override def projectSettings = Seq( - mergifyScalaStewardAuthor := defaultScalaStewardAuthor, - mergifyScalaStewardIncludedJobs := githubWorkflowGeneratedCI.value.filter(_.id == "build"), - mergifyScalaStewardConditions := - defaultScalaStewardConditions( - mergifyScalaStewardAuthor.value, - mergifyScalaStewardIncludedJobs.value - ), - mergify := defaultScalaStewardMergify(mergifyScalaStewardConditions.value), + mergifyExtraConditions := defaultExtraConditions, + mergifyIncludedJobs := githubWorkflowGeneratedCI.value.filter(_.id == "build"), + mergifyConditions := defaultConditions(mergifyExtraConditions.value, mergifyIncludedJobs.value), + mergify := buildMergify(mergifyConditions.value), githubWorkflowGenerate := { githubWorkflowGenerate.value IO.write(file(".mergify.yml"), mergify.value.toYaml) } ) - } } diff --git a/plugin/src/test/scala/io/github/nafg/mergify/sbt/Test.scala b/plugin/src/test/scala/io/github/nafg/mergify/sbt/Test.scala index e11f90f..5749ceb 100644 --- a/plugin/src/test/scala/io/github/nafg/mergify/sbt/Test.scala +++ b/plugin/src/test/scala/io/github/nafg/mergify/sbt/Test.scala @@ -1,5 +1,6 @@ package io.github.nafg.mergify.sbt +import io.github.nafg.mergify.Condition import io.github.nafg.mergify.dsl.* import sbtghactions.{JavaSpec, WorkflowJob} @@ -7,9 +8,9 @@ import sbtghactions.{JavaSpec, WorkflowJob} class Test extends munit.FunSuite { test("Simple example") { val mergify = - WriteMergify.defaultScalaStewardMergify( - WriteMergify.defaultScalaStewardConditions( - WriteMergify.defaultScalaStewardAuthor, + WriteMergify.buildMergify( + WriteMergify.defaultConditions( + WriteMergify.defaultExtraConditions, Seq( WorkflowJob( id = "build", @@ -66,4 +67,32 @@ class Test extends munit.FunSuite { thing.toYaml ) } + + test("Multiple alternatives") { + val jobs = List(WorkflowJob("build", "Build", Nil, scalas = List("2.13.9", "3.2.0"))) + val authorsCondition = + Seq("scala-steward", "renovate[bot]") + .map(Attr.Author :== _) + .reduce[Condition](_ || _) + val conditions = WriteMergify.defaultConditions(Seq(authorsCondition), jobs) + + assertEquals( + """defaults: {} + |queue_rules: + | - name: default + | conditions: [] + |pull_request_rules: + | - name: Automatically merge successful Scala Steward PRs + | conditions: + | - or: + | - author=scala-steward + | - author=renovate[bot] + | - check-success=Build (ubuntu-latest, 2.13.9, temurin@11) + | - check-success=Build (ubuntu-latest, 3.2.0, temurin@11) + | actions: + | queue: {} + |""".stripMargin, + WriteMergify.buildMergify(conditions).toYaml + ) + } }