⚠️ Experimental — This plugin compiles and passes its unit tests but has not been validated in any active GoCodeAlone-internal production deployment. Use with caution. Please open an issue if you adopt it so we can promote it to verified status.
CI/CD config generator for workflow projects — emits GitHub Actions, GitLab CI, Jenkins, and CircleCI pipelines from a workflow app config.
As of v0.3.0 all four platforms — GitHub Actions, GitLab CI, Jenkins, and CircleCI — are generated by the workflow engine's config-derived cigen engine (analyze → CIPlan → render): the output is derived from your app config — its required secrets, deploy phases, migrations, health-check smoke, and plugin-install needs — not a fixed template. The legacy Jenkins/CircleCI template generators were retired in #804 (see ADR 0044 in the workflow repo). This is the same engine behind wfctl ci plan / wfctl ci generate. Requires workflow engine >= v0.68.0.
Pipeline step types:
step.ci_generate— Generate CI/CD configuration files from a workflow app config. All four platforms (GitHub Actions, GitLab CI, Jenkins, CircleCI) are config-derived viacigen.
- Workflow engine / wfctl ≥ v0.67.0 (
minEngineVersion: 0.67.0) — the release that exports thecigenpackage this plugin imports.
# In your wfctl.yaml
version: 1
plugins:
- name: workflow-plugin-ci-generator
version: v0.3.0
source: github.com/GoCodeAlone/workflow-plugin-ci-generatorThen:
wfctl plugin installstep.ci_generate config / input fields:
| Field | Purpose |
|---|---|
platform |
github_actions | gitlab_ci | jenkins | circleci |
infra_config |
Path to the workflow app config to analyze (GHA/GitLab) |
output_dir |
Where to write the generated file(s) |
project_name |
Project label used in generated jobs |
runner |
Runner label (GitHub Actions) |
default_branch |
Default branch (default main) |
from_plan |
(v0.2.0) Path to a CIPlan JSON to render directly, skipping analysis — lets an AI/automation produce the plan via wfctl ci plan, edit it, then render it deterministically |
phase_config |
(v0.2.0) Path to a prerequisite-phase config (e.g. deploy.prereq.yaml) → emits a two-phase apply-prereq → apply-deploy pipeline |
For GHA/GitLab the generated workflow wires each config-referenced secret as ${{ secrets.NAME }}, includes a wfctl plugin install step when the app uses plugins, a wfctl migrations up step when ci.migrations is present, a plan-guard that fails on replace/destroy, and a health-check smoke job. Secret names the generator can't fully derive (e.g. IaC-output-backed or non-UPPER_SNAKE names) are surfaced as warnings on the CIPlan rather than silently guessed.
See examples/minimal/config.yaml.
| Platform | Output file | Generation |
|---|---|---|
| GitHub Actions | .github/workflows/<name>.yml |
config-derived (cigen) |
| GitLab CI | .gitlab-ci.yml |
config-derived (cigen) |
| Jenkins | Jenkinsfile |
config-derived (cigen) |
| CircleCI | .circleci/config.yml |
config-derived (cigen) |
MIT. See LICENSE.