Skip to content

Commit 07c8c2d

Browse files
Add continueOnError option to WorkflowStep
1 parent e95ee9b commit 07c8c2d

File tree

2 files changed

+42
-14
lines changed

2 files changed

+42
-14
lines changed

github-actions/src/main/scala/org/typelevel/sbt/gha/GenerativePlugin.scala

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ ${indent(rendered.mkString("\n"), 1)}"""
264264
val renderedId = step.id.map(wrap).map("id: " + _ + "\n").getOrElse("")
265265
val renderedCond = step.cond.map(wrap).map("if: " + _ + "\n").getOrElse("")
266266
val renderedShell = if (declareShell) "shell: bash\n" else ""
267+
val renderedContinueOnError = if (step.continueOnError) "continue-on-error: true\n" else ""
267268

268269
val renderedEnvPre = compileEnv(step.env)
269270
val renderedEnv =
@@ -288,7 +289,12 @@ ${indent(rendered.mkString("\n"), 1)}"""
288289
case run: Run =>
289290
val renderedWorkingDirectory =
290291
run.workingDirectory.map(wrap).map("working-directory: " + _ + "\n").getOrElse("")
291-
renderRunBody(run.commands, run.params, renderedShell, renderedWorkingDirectory)
292+
renderRunBody(
293+
run.commands,
294+
run.params,
295+
renderedShell,
296+
renderedWorkingDirectory,
297+
renderedContinueOnError)
292298

293299
case sbtStep: Sbt =>
294300
import sbtStep.commands
@@ -312,7 +318,8 @@ ${indent(rendered.mkString("\n"), 1)}"""
312318
commands = List(s"$sbt $safeCommands"),
313319
params = sbtStep.params,
314320
renderedShell = renderedShell,
315-
renderedWorkingDirectory = ""
321+
renderedWorkingDirectory = "",
322+
renderedContinueOnError = renderedContinueOnError
316323
)
317324

318325
case use: Use =>
@@ -338,7 +345,7 @@ ${indent(rendered.mkString("\n"), 1)}"""
338345
s"uses: docker://$image:$tag"
339346
}
340347

341-
decl + renderParams(params)
348+
decl + renderedContinueOnError + renderParams(params)
342349
}
343350

344351
indent(preamble + body, 1).updated(0, '-')
@@ -348,8 +355,9 @@ ${indent(rendered.mkString("\n"), 1)}"""
348355
commands: List[String],
349356
params: Map[String, String],
350357
renderedShell: String,
351-
renderedWorkingDirectory: String) =
352-
renderedShell + renderedWorkingDirectory + "run: " + wrap(
358+
renderedWorkingDirectory: String,
359+
renderedContinueOnError: String) =
360+
renderedShell + renderedWorkingDirectory + renderedContinueOnError + "run: " + wrap(
353361
commands.mkString("\n")) + renderParams(params)
354362

355363
def renderParams(params: Map[String, String]): String = {

github-actions/src/main/scala/org/typelevel/sbt/gha/WorkflowStep.scala

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ sealed abstract class WorkflowStep extends Product with Serializable {
2222
def cond: Option[String]
2323
def env: Map[String, String]
2424
def timeoutMinutes: Option[Int]
25+
def continueOnError: Boolean
2526

2627
def withId(id: Option[String]): WorkflowStep
2728
def withName(name: Option[String]): WorkflowStep
2829
def withCond(cond: Option[String]): WorkflowStep
2930
def withEnv(env: Map[String, String]): WorkflowStep
3031
def withTimeoutMinutes(minutes: Option[Int]): WorkflowStep
32+
def withContinueOnError(continueOnError: Boolean): WorkflowStep
3133

3234
def updatedEnv(name: String, value: String): WorkflowStep
3335
def concatEnv(env: TraversableOnce[(String, String)]): WorkflowStep
@@ -144,8 +146,18 @@ object WorkflowStep {
144146
env: Map[String, String] = Map(),
145147
params: Map[String, String] = Map(),
146148
timeoutMinutes: Option[Int] = None,
147-
workingDirectory: Option[String] = None): Run =
148-
Impl(commands, id, name, cond, env, params, timeoutMinutes, workingDirectory)
149+
workingDirectory: Option[String] = None,
150+
continueOnError: Boolean = false): Run =
151+
Impl(
152+
commands,
153+
id,
154+
name,
155+
cond,
156+
env,
157+
params,
158+
timeoutMinutes,
159+
workingDirectory,
160+
continueOnError)
149161

150162
private final case class Impl(
151163
commands: List[String],
@@ -155,7 +167,8 @@ object WorkflowStep {
155167
env: Map[String, String],
156168
params: Map[String, String],
157169
timeoutMinutes: Option[Int],
158-
workingDirectory: Option[String])
170+
workingDirectory: Option[String],
171+
continueOnError: Boolean)
159172
extends Run {
160173
override def productPrefix = "Run"
161174
// scalafmt: { maxColumn = 200 }
@@ -164,6 +177,7 @@ object WorkflowStep {
164177
def withCond(cond: Option[String]) = copy(cond = cond)
165178
def withEnv(env: Map[String, String]) = copy(env = env)
166179
def withTimeoutMinutes(minutes: Option[Int]) = copy(timeoutMinutes = minutes)
180+
def withContinueOnError(continueOnError: Boolean) = copy(continueOnError = continueOnError)
167181

168182
def withCommands(commands: List[String]) = copy(commands = commands)
169183
def withParams(params: Map[String, String]) = copy(params = params)
@@ -201,8 +215,9 @@ object WorkflowStep {
201215
env: Map[String, String] = Map(),
202216
params: Map[String, String] = Map(),
203217
timeoutMinutes: Option[Int] = None,
204-
preamble: Boolean = true): Sbt =
205-
Impl(commands, id, name, cond, env, params, timeoutMinutes, preamble)
218+
preamble: Boolean = true,
219+
continueOnError: Boolean = false): Sbt =
220+
Impl(commands, id, name, cond, env, params, timeoutMinutes, preamble, continueOnError)
206221

207222
private final case class Impl(
208223
commands: List[String],
@@ -212,7 +227,8 @@ object WorkflowStep {
212227
env: Map[String, String],
213228
params: Map[String, String],
214229
timeoutMinutes: Option[Int],
215-
preamble: Boolean)
230+
preamble: Boolean,
231+
continueOnError: Boolean)
216232
extends Sbt {
217233
override def productPrefix = "Sbt"
218234
// scalafmt: { maxColumn = 200 }
@@ -221,6 +237,7 @@ object WorkflowStep {
221237
def withCond(cond: Option[String]) = copy(cond = cond)
222238
def withEnv(env: Map[String, String]) = copy(env = env)
223239
def withTimeoutMinutes(minutes: Option[Int]) = copy(timeoutMinutes = minutes)
240+
def withContinueOnError(continueOnError: Boolean): WorkflowStep = copy(continueOnError = continueOnError)
224241

225242
def withCommands(commands: List[String]) = copy(commands = commands)
226243
def withParams(params: Map[String, String]) = copy(params = params)
@@ -256,8 +273,9 @@ object WorkflowStep {
256273
name: Option[String] = None,
257274
cond: Option[String] = None,
258275
env: Map[String, String] = Map(),
259-
timeoutMinutes: Option[Int] = None): Use =
260-
Impl(ref, params, id, name, cond, env, timeoutMinutes)
276+
timeoutMinutes: Option[Int] = None,
277+
continueOnError: Boolean = false): Use =
278+
Impl(ref, params, id, name, cond, env, timeoutMinutes, continueOnError)
261279

262280
private final case class Impl(
263281
ref: UseRef,
@@ -266,7 +284,8 @@ object WorkflowStep {
266284
name: Option[String],
267285
cond: Option[String],
268286
env: Map[String, String],
269-
timeoutMinutes: Option[Int])
287+
timeoutMinutes: Option[Int],
288+
continueOnError: Boolean)
270289
extends Use {
271290
override def productPrefix = "Use"
272291
// scalafmt: { maxColumn = 200 }
@@ -275,6 +294,7 @@ object WorkflowStep {
275294
def withCond(cond: Option[String]) = copy(cond = cond)
276295
def withEnv(env: Map[String, String]) = copy(env = env)
277296
def withTimeoutMinutes(minutes: Option[Int]) = copy(timeoutMinutes = minutes)
297+
def withContinueOnError(continueOnError: Boolean) = copy(continueOnError = continueOnError)
278298

279299
def withRef(ref: UseRef) = copy(ref = ref)
280300
def withParams(params: Map[String, String]) = copy(params = params)

0 commit comments

Comments
 (0)