pub struct GitHubActionsEmitter {
pub runner: String,
pub use_nix: bool,
pub use_cachix: bool,
pub cachix_name: Option<String>,
pub cachix_auth_token_secret: String,
pub default_paths_ignore: Vec<String>,
pub build_cuenv: bool,
pub approval_environment: String,
pub configured_permissions: HashMap<String, String>,
}Expand description
GitHub Actions workflow emitter
Transforms cuenv IR into GitHub Actions workflow YAML that can be
committed to .github/workflows/.
§IR to GitHub Actions Mapping
| IR Field | GitHub Actions |
|---|---|
pipeline.name | Workflow name: |
pipeline.trigger.branch | on.push.branches / on.pull_request.branches |
task.id | Job key |
task.command | Step with run: cuenv task {task.id} |
task.depends_on | Job needs: |
task.manual_approval | Job with environment: |
task.concurrency_group | Job-level concurrency: |
task.resources.tags | runs-on: |
task.outputs (orchestrator) | actions/upload-artifact step |
Fields§
§runner: StringDefault runner for jobs
use_nix: boolInclude Nix installation steps
use_cachix: boolInclude Cachix caching steps
cachix_name: Option<String>Cachix cache name
cachix_auth_token_secret: StringCachix auth token secret name
default_paths_ignore: Vec<String>Default paths to ignore in triggers
build_cuenv: boolInclude cuenv build step (via nix build)
approval_environment: StringEnvironment name for manual approval tasks
configured_permissions: HashMap<String, String>Configured permissions from the manifest
Implementations§
Source§impl GitHubActionsEmitter
impl GitHubActionsEmitter
Sourcepub fn from_config(config: &GitHubConfig) -> Self
pub fn from_config(config: &GitHubConfig) -> Self
Create an emitter from a GitHubConfig manifest configuration.
This applies all configuration from the CUE manifest to the emitter.
Sourcepub fn runner_as_runs_on(&self) -> RunsOn
pub fn runner_as_runs_on(&self) -> RunsOn
Get the configured runner as a RunsOn value
Sourcepub fn apply_configured_permissions(
&self,
permissions: Permissions,
) -> Permissions
pub fn apply_configured_permissions( &self, permissions: Permissions, ) -> Permissions
Apply configured permissions to a base Permissions struct
Sourcepub fn with_runner(self, runner: impl Into<String>) -> Self
pub fn with_runner(self, runner: impl Into<String>) -> Self
Set the default runner for jobs
Sourcepub const fn without_nix(self) -> Self
pub const fn without_nix(self) -> Self
Disable Nix installation steps
Sourcepub fn with_cachix(self, name: impl Into<String>) -> Self
pub fn with_cachix(self, name: impl Into<String>) -> Self
Enable Cachix caching with the given cache name
Sourcepub fn with_cachix_auth_token_secret(self, secret: impl Into<String>) -> Self
pub fn with_cachix_auth_token_secret(self, secret: impl Into<String>) -> Self
Set the Cachix auth token secret name
Sourcepub fn with_paths_ignore(self, paths: Vec<String>) -> Self
pub fn with_paths_ignore(self, paths: Vec<String>) -> Self
Set default paths to ignore in triggers
Sourcepub const fn without_cuenv_build(self) -> Self
pub const fn without_cuenv_build(self) -> Self
Disable automatic cuenv build step
Sourcepub fn with_approval_environment(self, env: impl Into<String>) -> Self
pub fn with_approval_environment(self, env: impl Into<String>) -> Self
Set the environment name for manual approval tasks
Sourcepub fn emit_workflows(
&self,
ir: &IntermediateRepresentation,
) -> EmitterResult<HashMap<String, String>>
pub fn emit_workflows( &self, ir: &IntermediateRepresentation, ) -> EmitterResult<HashMap<String, String>>
Emit multiple workflow files for projects with multiple pipelines.
Returns a map of filename to YAML content. Each pipeline in the IR generates a separate workflow file.
§Errors
Returns EmitterError::Serialization if YAML serialization fails.
Sourcepub fn render_phase_steps(
ir: &IntermediateRepresentation,
) -> (Vec<Step>, IndexMap<String, String>)
pub fn render_phase_steps( ir: &IntermediateRepresentation, ) -> (Vec<Step>, IndexMap<String, String>)
Render phase tasks (bootstrap + setup) into GitHub Actions steps.
Returns a tuple of:
Vec<Step>- rendered steps for bootstrap and setup phase tasksIndexMap<String, String>- secret env vars that should be passed to task steps
This uses GitHubStageRenderer to properly convert phase tasks into steps,
handling both uses: action steps and run: command steps.
Sourcepub fn build_simple_job(
&self,
task: &Task,
ir: &IntermediateRepresentation,
environment: Option<&String>,
project_path: Option<&str>,
) -> Job
pub fn build_simple_job( &self, task: &Task, ir: &IntermediateRepresentation, environment: Option<&String>, project_path: Option<&str>, ) -> Job
Build a simple job from an IR task (no matrix expansion).
This method creates a single job that:
- Checks out the repository
- Runs bootstrap/setup phase tasks (Nix, cuenv, 1Password, etc.)
- Runs the task with
--skip-dependencies(since CI handles job dependencies)
Use build_matrix_jobs for tasks with matrix configurations.
§Arguments
task- IR task to build job forir- Intermediate representation containing phase tasksenvironment- Optional environment name for the taskproject_path- Optional working directory (for monorepo projects)
Sourcepub fn build_artifact_aggregation_job(
&self,
task: &Task,
ir: &IntermediateRepresentation,
environment: Option<&String>,
previous_jobs: &[String],
project_path: Option<&str>,
) -> Job
pub fn build_artifact_aggregation_job( &self, task: &Task, ir: &IntermediateRepresentation, environment: Option<&String>, previous_jobs: &[String], project_path: Option<&str>, ) -> Job
Build an artifact aggregation job from an IR task with artifact_downloads.
This creates a job that:
- Checks out the repository
- Runs bootstrap/setup phase tasks
- Downloads artifacts from previous jobs
- Runs the task with params and
--skip-dependencies
Use this for tasks that aggregate outputs from matrix jobs (e.g., publish).
§Arguments
task- IR task to build job forir- Intermediate representation containing phase tasksenvironment- Optional environment name for the taskprevious_jobs- Jobs that must complete before this jobproject_path- Optional working directory (for monorepo projects)
Sourcepub fn build_matrix_jobs(
&self,
task: &Task,
ir: &IntermediateRepresentation,
environment: Option<&String>,
arch_runners: Option<&HashMap<String, String>>,
previous_jobs: &[String],
project_path: Option<&str>,
) -> IndexMap<String, Job>
pub fn build_matrix_jobs( &self, task: &Task, ir: &IntermediateRepresentation, environment: Option<&String>, arch_runners: Option<&HashMap<String, String>>, previous_jobs: &[String], project_path: Option<&str>, ) -> IndexMap<String, Job>
Build matrix-expanded jobs from an IR task with matrix configuration.
This expands a single task into multiple jobs, one per matrix combination. Currently supports single-dimension matrix expansion (arch).
Returns an IndexMap of job_id -> Job for each matrix combination.
§Arguments
task- IR task withmatrixconfigurationir- Intermediate representation containing phase tasksenvironment- Optional environment name for the taskarch_runners- Optional mapping of arch -> runner labelprevious_jobs- Jobs that must complete before these matrix jobsproject_path- Optional working directory (for monorepo projects)
Sourcepub fn task_has_matrix(task: &Task) -> bool
pub fn task_has_matrix(task: &Task) -> bool
Check if a task has matrix configuration.
Sourcepub const fn task_has_artifact_downloads(task: &Task) -> bool
pub const fn task_has_artifact_downloads(task: &Task) -> bool
Check if a task has artifact downloads (aggregation task).
Trait Implementations§
Source§impl Clone for GitHubActionsEmitter
impl Clone for GitHubActionsEmitter
Source§fn clone(&self) -> GitHubActionsEmitter
fn clone(&self) -> GitHubActionsEmitter
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GitHubActionsEmitter
impl Debug for GitHubActionsEmitter
Source§impl Default for GitHubActionsEmitter
impl Default for GitHubActionsEmitter
Source§impl Emitter for GitHubActionsEmitter
impl Emitter for GitHubActionsEmitter
Source§fn emit_thin(&self, ir: &IntermediateRepresentation) -> EmitterResult<String>
fn emit_thin(&self, ir: &IntermediateRepresentation) -> EmitterResult<String>
Emit a thin mode GitHub Actions workflow.
Thin mode generates a single-job workflow that:
- Runs bootstrap phase steps (e.g., install Nix)
- Runs setup phase steps (e.g., build cuenv)
- Executes
cuenv ci --pipeline <name>for orchestration - Runs success/failure phase steps with conditions
Source§fn emit_expanded(
&self,
ir: &IntermediateRepresentation,
) -> EmitterResult<String>
fn emit_expanded( &self, ir: &IntermediateRepresentation, ) -> EmitterResult<String>
Emit an expanded mode GitHub Actions workflow.
Expanded mode generates a multi-job workflow where each task becomes
a separate job with dependencies managed by GitHub Actions (needs:).
Source§fn format_name(&self) -> &'static str
fn format_name(&self) -> &'static str
Source§fn file_extension(&self) -> &'static str
fn file_extension(&self) -> &'static str
Source§fn description(&self) -> &'static str
fn description(&self) -> &'static str
Source§fn validate(&self, ir: &IntermediateRepresentation) -> EmitterResult<()>
fn validate(&self, ir: &IntermediateRepresentation) -> EmitterResult<()>
Source§fn emit(&self, ir: &IntermediateRepresentation) -> Result<String, EmitterError>
fn emit(&self, ir: &IntermediateRepresentation) -> Result<String, EmitterError>
Auto Trait Implementations§
impl Freeze for GitHubActionsEmitter
impl RefUnwindSafe for GitHubActionsEmitter
impl Send for GitHubActionsEmitter
impl Sync for GitHubActionsEmitter
impl Unpin for GitHubActionsEmitter
impl UnsafeUnpin for GitHubActionsEmitter
impl UnwindSafe for GitHubActionsEmitter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
Source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self file descriptor.Source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
Source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
self file descriptor. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more