@@ -37,6 +37,14 @@ object GenerativePlugin extends AutoPlugin {
37
37
type WorkflowStep = sbtghactions.WorkflowStep
38
38
val WorkflowStep = sbtghactions.WorkflowStep
39
39
40
+ type WorkflowAction = sbtghactions.WorkflowAction
41
+
42
+ type WorkflowSteps = sbtghactions.WorkflowSteps
43
+ val WorkflowSteps = sbtghactions.WorkflowSteps
44
+
45
+ type WorkflowApply = sbtghactions.WorkflowApply
46
+ val WorkflowApply = sbtghactions.WorkflowApply
47
+
40
48
type RefPredicate = sbtghactions.RefPredicate
41
49
val RefPredicate = sbtghactions.RefPredicate
42
50
@@ -73,6 +81,9 @@ object GenerativePlugin extends AutoPlugin {
73
81
type Concurrency = sbtghactions.Concurrency
74
82
val Concurrency = sbtghactions.Concurrency
75
83
84
+ type Secrets = sbtghactions.Secrets
85
+ val Secrets = sbtghactions.Secrets
86
+
76
87
type Graalvm = sbtghactions.Graalvm
77
88
val Graalvm = sbtghactions.Graalvm
78
89
}
@@ -187,6 +198,12 @@ object GenerativePlugin extends AutoPlugin {
187
198
s " concurrency: ${wrap(concurrency.group)}"
188
199
}
189
200
201
+ def compileSecrets (secrets : Secrets ): String =
202
+ secrets match {
203
+ case Secrets .Inherit => " secrets: inherit"
204
+ case Secrets .Explicit (secretMap) => compileEnv(secretMap, " secrets" )
205
+ }
206
+
190
207
def compileEnvironment (environment : JobEnvironment ): String =
191
208
environment.url match {
192
209
case Some (url) =>
@@ -355,6 +372,8 @@ ${indent(rendered.mkString("\n"), 1)}"""
355
372
356
373
357
374
def compileJob (job : WorkflowJob , sbt : String ): String = {
375
+ val renderedName = s """ name: ${wrap(job.name)}"""
376
+
358
377
val renderedNeeds = if (job.needs.isEmpty)
359
378
" "
360
379
else
@@ -485,24 +504,59 @@ ${indent(rendered.mkString("\n"), 1)}"""
485
504
486
505
val declareShell = job.oses.exists(_.contains(" windows" ))
487
506
488
- val runsOn = if (job.runsOnExtraLabels.isEmpty)
489
- s " $$ {{ matrix.os }} "
490
- else
491
- job.runsOnExtraLabels.mkString(s """ [ " $$ {{ matrix.os }}", """ , " , " , " ]" )
507
+ val runsOn = job.action match {
508
+ case steps : WorkflowSteps if steps.runsOnExtraLabels.isEmpty =>
509
+ " \n runs-on: ${{ matrix.os }}"
510
+ case steps : WorkflowSteps =>
511
+ steps.runsOnExtraLabels.mkString(s """ \nruns-on: [ " $$ {{ matrix.os }}", """ , " , " , " ]" )
512
+ case _ =>
513
+ " "
514
+ }
492
515
493
516
val renderedFailFast = job.matrixFailFast.fold(" " )(" \n fail-fast: " + _)
494
517
495
- val body = s """ name: ${wrap(job.name)}${renderedNeeds}${renderedCond}
496
- strategy: ${renderedFailFast}
518
+ val renderedStrategy = s """ \nstrategy: ${renderedFailFast}
497
519
matrix:
498
520
os: ${compileList(job.oses, 3 )}
499
521
scala: ${compileList(job.scalas, 3 )}
500
- java: ${compileList(job.javas.map(_.render), 3 )}${renderedMatrices}
501
- runs-on: ${runsOn}${renderedEnvironment}${renderedContainer}${renderedTimeout}${renderedPerm}${renderedEnv}${renderedConcurrency}
502
- steps:
503
- ${indent(job.steps.map(compileStep(_, sbt, job.sbtStepPreamble, declareShell = declareShell)).mkString(" \n\n " ), 1 )}"""
522
+ java: ${compileList(job.javas.map(_.render), 3 )}"""
523
+
524
+ val renderedSteps = job.action match {
525
+ case steps : WorkflowSteps =>
526
+ " \n steps:\n " +
527
+ indent(steps.steps.map(compileStep(_, sbt, steps.sbtStepPreamble, declareShell = declareShell)).mkString(" \n\n " ), 1 )
528
+ case _ =>
529
+ " "
530
+ }
531
+
532
+ val renderedUses = job.action match {
533
+ case apply : WorkflowApply =>
534
+ val renderedSecrets =
535
+ apply.secrets.map(compileSecrets).map(" \n " + _).getOrElse(" " )
536
+
537
+ s " \n uses: ${apply.ref}${renderParams(apply.params)}${renderedSecrets}"
538
+ case _ =>
539
+ " "
540
+ }
504
541
505
- s " ${job.id}: \n ${indent(body, 1 )}"
542
+ val content = List (
543
+ renderedName,
544
+ renderedNeeds,
545
+ renderedCond,
546
+ renderedStrategy,
547
+ renderedMatrices,
548
+ runsOn,
549
+ renderedEnvironment,
550
+ renderedContainer,
551
+ renderedTimeout,
552
+ renderedPerm,
553
+ renderedEnv,
554
+ renderedConcurrency,
555
+ renderedSteps,
556
+ renderedUses,
557
+ ).reduce(_ ++ _)
558
+
559
+ s " ${job.id}: \n ${indent(content, 1 )}"
506
560
}
507
561
508
562
def compileWorkflow (
0 commit comments