@@ -37,6 +37,14 @@ object GenerativePlugin extends AutoPlugin {
3737 type WorkflowStep = sbtghactions.WorkflowStep
3838 val WorkflowStep = sbtghactions.WorkflowStep
3939
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+
4048 type RefPredicate = sbtghactions.RefPredicate
4149 val RefPredicate = sbtghactions.RefPredicate
4250
@@ -73,6 +81,9 @@ object GenerativePlugin extends AutoPlugin {
7381 type Concurrency = sbtghactions.Concurrency
7482 val Concurrency = sbtghactions.Concurrency
7583
84+ type Secrets = sbtghactions.Secrets
85+ val Secrets = sbtghactions.Secrets
86+
7687 type Graalvm = sbtghactions.Graalvm
7788 val Graalvm = sbtghactions.Graalvm
7889 }
@@ -187,6 +198,12 @@ object GenerativePlugin extends AutoPlugin {
187198 s " concurrency: ${wrap(concurrency.group)}"
188199 }
189200
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+
190207 def compileEnvironment (environment : JobEnvironment ): String =
191208 environment.url match {
192209 case Some (url) =>
@@ -355,6 +372,8 @@ ${indent(rendered.mkString("\n"), 1)}"""
355372
356373
357374 def compileJob (job : WorkflowJob , sbt : String ): String = {
375+ val renderedName = s """ name: ${wrap(job.name)}"""
376+
358377 val renderedNeeds = if (job.needs.isEmpty)
359378 " "
360379 else
@@ -485,24 +504,59 @@ ${indent(rendered.mkString("\n"), 1)}"""
485504
486505 val declareShell = job.oses.exists(_.contains(" windows" ))
487506
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+ }
492515
493516 val renderedFailFast = job.matrixFailFast.fold(" " )(" \n fail-fast: " + _)
494517
495- val body = s """ name: ${wrap(job.name)}${renderedNeeds}${renderedCond}
496- strategy: ${renderedFailFast}
518+ val renderedStrategy = s """ \nstrategy: ${renderedFailFast}
497519 matrix:
498520 os: ${compileList(job.oses, 3 )}
499521 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+ }
504541
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 )}"
506560 }
507561
508562 def compileWorkflow (
0 commit comments