Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

plugin: Make it easier to modify extra conditions, e.g. add an author #64

Merged
merged 1 commit into from
Oct 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
)
}
}