ci¶
Central home for my reusable GitHub Actions workflows and composite actions.
The main assumption of this repo is that consumer repositories adopt it through the Copier template first. After that, the primary entrypoints in the consumer repo are the generated workflows:
ci_update.ymlpr_automerge.ymlpr_labeler.ymlsetup_labels.ymlpr_bump.ymlwhenbump_script_pathis setrelease_draft.ymlwhendo_releasesis enabledsite.ymlwhen a site workflow is enabled
Those workflows keep the consumer repo aligned with this central CI repo, handle common PR automation, create release drafts, sync repository labels, and set up site builds.
Usage¶
Quick start¶
The helper applies the Copier template, then asks whether to set
CI_BOT_TOKEN with gh secret set. It can infer the repository from a GitHub
git remote or gh repo view; otherwise pass --repo owner/repo. Pass extra
Copier options after --.
Manual setup¶
Install Copier:
Apply the template:
Add a repository secret named CI_BOT_TOKEN:
- Create a Fine-grained personal access token for the target repository.
- In the repository, go to
Settings -> Secrets and variables -> Actions. - Add a new repository secret named
CI_BOT_TOKENwith that token value.
Required repository permissions for the token:
Contents: Read and writefor update and bump commits.Pull requests: Read and writefor PR labels, comments, updater PRs, bump PRs, and automerge.Issues: Read and writefor repository labels, PR comments, and failure issues.Actions: Read and writefor updater PRs that modify workflow files.Workflows: Read and writefor commits that create or update workflow files.Variables: Read and writefor generatedrelease_draft.ymlworkflows that persistDRAFT_RELEASE_ID.
Mental model¶
This repo is opinionated around one shared CI config file, .github/ci-config.yml,
which drives:
- PR labels
- release notes categories
- semantic version resolution
- repository label metadata
The workflows are meant to compose around that config instead of each repository re-declaring the same rules in multiple places.
Configuration¶
Copier asks a small number of questions and uses the answers to generate the entrypoint workflows plus a shared CI config.
Copier questions¶
bump_script_path
- Optional shell command to run in the target repository after version metadata is resolved.
- If set, the template generates
pr_bump.yml. - The command receives
VERSION,MAJOR_VERSION,MINOR_VERSION, andPATCH_VERSION. - Leave it empty if the repo does not maintain a version file, changelog file, or other bumpable artifact in PRs.
site_generator
- Chooses whether to generate
site.yml, and if so whether it uses MkDocs or Jekyll. noneis the default and skips site workflow generation entirely.mkdocsusesmkdocs_site.yml.jekyllusesjekyll_site.yml.- MkDocs site workflows run on
mainpushes and release publishes; Jekyll site workflows run onmainpushes.
automerge_mode
- Chooses how
pr_automerge.ymlhandles labeled pull requests. pollis the default and waits for checks before merging directly, which works on private repos without GitHub native auto-merge support.nativeenables GitHub auto-merge for labeled PRs and lets GitHub merge when requirements are met.disabledkeeps the workflow in place but disables automerge actions.
do_releases
- Chooses whether to generate
release_draft.yml. - When enabled,
release_draft.ymlcreates or updates a draft release onmainpushes. - With MkDocs sites, this also publishes versioned docs:
mainpublishesdev, and release events publish the release tag pluslatest. - When disabled, release draft generation is skipped and MkDocs sites publish a simpler unversioned Pages site.
release_template
- Contents for
.github/release_template.md. - Used by
release_draft.ymlwhen rendering the draft release body. - Supports
$CHANGESfor generated changelog content and$VERSION/$RESOLVED_VERSIONfor the resolved version. - Only asked when
do_releasesis enabled.
Shared CI config¶
.github/ci-config.yml is the center of the convention. It combines concepts
that would normally live in separate files:
- release-drafter categories and templates
- version-resolver label rules
- PR labeler rules
- repository label metadata such as label descriptions and colors
- the release body template path
This is intentionally a modified combination of the upstream release-drafter/release-drafter and actions/labeler config formats.
Modifications to release-drafter.yml
- Adds
template-fileso the release body can live in.github/release_template.mdinstead of being embedded in YAML.
Modifications to labeler.yml
- Adds
coloranddescriptionmetadata to labels so the same config can also drive repository label setup.
Colors are set according to the following label palette:
| Label | Color | Preview |
|---|---|---|
breaking |
#7f1d1d |
|
bug |
#d73a4a |
|
enhancement |
#0f766e |
|
maintenance |
#0ea5e9 |
|
dependencies |
#1d4ed8 |
|
documentation |
#64748b |
|
automerge |
#eab308 |
|
good first issue |
#c4b5fd |
|
help wanted |
#db2777 |
|
question |
#7e22ce |
|
duplicate |
#cbd5e1 |
|
invalid |
#a3a3a3 |
|
wontfix |
#78716c |