Skip to content

Commit

Permalink
plugin: Make it easier to modify extra conditions, e.g. add an author
Browse files Browse the repository at this point in the history
  • Loading branch information
nafg committed Oct 3, 2022
1 parent f9db383 commit 836fcac
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 24 deletions.
43 changes: 22 additions & 21 deletions plugin/src/main/scala/io/github/nafg/mergify/sbt/WriteMergify.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
)
}
}
35 changes: 32 additions & 3 deletions plugin/src/test/scala/io/github/nafg/mergify/sbt/Test.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package io.github.nafg.mergify.sbt

import io.github.nafg.mergify.Condition
import io.github.nafg.mergify.dsl.*

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",
Expand Down Expand Up @@ -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
)
}
}

0 comments on commit 836fcac

Please sign in to comment.