CI Overview
Who Is This Document For?
This document is intended for contributors who:
- submit pull requests to PipeCD
- want to understand which CI workflows run and why
- need basic context to debug CI failures
CI Philosophy
PipeCD’s CI is designed to:
- provide fast feedback on pull requests
- prevent regressions on the default and release branches
- keep workflows explicit and deterministic
- automate release and publishing tasks safely
Workflow Overview
Below is a brief description of each GitHub Actions workflow under
.github/workflows/.
test.yaml
What it does: Runs Go unit tests to validate core functionality.
When it runs: On pull requests and pushes to the default branch.
lint.yaml
What it does: Runs linters and static analysis to enforce code quality.
When it runs: On pull requests and pushes to the default branch.
build.yaml
What it does: Builds PipeCD binaries to ensure the project compiles correctly.
When it runs: On pull requests and pushes to the default branch.
gen.yaml
What it does: Verifies that generated files are up to date.
When it runs: On pull requests to prevent uncommitted generated changes.
web.yaml
What it does: Builds and validates the PipeCD Web UI.
When it runs: On pull requests that include web-related changes.
chart.yaml
What it does: Validates Helm charts used to deploy PipeCD.
When it runs: On pull requests affecting Helm chart files.
codeql-analysis.yaml
What it does: Runs CodeQL security analysis to detect potential vulnerabilities.
When it runs: On a scheduled basis and on selected pushes.
labeler.yaml
What it does: Automatically applies labels to pull requests based on changed files.
When it runs: When a pull request is opened or updated.
stale.yaml
What it does: Marks and closes inactive issues and pull requests.
When it runs: On a scheduled basis.
cherry_pick.yaml
What it does: Automates cherry-picking changes into release branches.
When it runs: When manually triggered by maintainers.
plugin_release.yaml
What it does: Builds and publishes PipeCD plugins.
When it runs: During plugin release workflows.
publish_binary.yaml
What it does: Builds and publishes PipeCD binaries.
When it runs: During release workflows.
publish_pipedv1_exp.yaml
What it does: Builds and publishes experimental pipedv1 container images.
When it runs: On prerelease or experimental release triggers.
publish_image_chart.yaml
What it does: Publishes Helm charts and related container images.
When it runs: During release workflows.
publish_tool.yaml
What it does: Builds and publishes PipeCD CLI and tooling images.
When it runs: On tool release events.
publish_site.yaml
What it does: Builds and publishes the PipeCD documentation website.
When it runs: On documentation updates and release events.
prerelease.yaml
What it does: Prepares prerelease artifacts for testing and validation.
When it runs: When a prerelease is triggered.
release.yaml
What it does: Orchestrates the full PipeCD release process.
When it runs: When a release is created.
build_tool.yaml
What it does: Builds internal tooling images used by CI and release workflows.
When it runs: On pushes affecting tool-related code.
code-butler.yaml
What it does: Runs automated code maintenance tasks.
When it runs: On a scheduled basis or when triggered by maintainers.
Debugging CI Failures
When a CI check fails:
- Identify which workflow failed.
- Read the workflow name to understand its responsibility.
- Check the job logs for the specific failure.
Most CI failures are scoped to a single concern (tests, lint, build, or web), which usually makes the root cause clear.
References
-
PipeCD GitHub Actions workflows
https://github.com/pipe-cd/pipecd/tree/master/.github/workflows -
Contributing Guide
https://github.com/pipe-cd/pipecd/blob/master/CONTRIBUTING.md -
GitHub Actions documentation
https://docs.github.com/en/actions
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.