Pull requests are welcome. This is a personal portfolio project, so for anything bigger than a bug fix or a tweak to an existing workflow, please open an issue first to discuss the approach. Breaking changes to workflow interfaces affect every caller, so those need a bit more care.
- Create
.github/workflows/<name>.ymlwithon: workflow_call. - Document every input and output in the workflow file itself (use
description:fields) and indocs/workflows.md. - Add a usage example under
examples/. - Add a row to the table in
README.md. - If the workflow introduces a new AWS permission or new required secret, update
docs/oidc-setup.mdanddocs/conventions.md.
- Create
actions/<name>/action.ymlwithruns.using: composite. - Create
actions/<name>/README.mdwith a description and example. - Add a row to the table in
README.mdand a section indocs/actions.md. - Add a test step to
.github/workflows/ci-self-test.yml.
Every composite action must have:
name,description,author: kernelpanic09brandingwithiconandcolor(for GitHub Marketplace display)- Every input must have
descriptionand eitherrequired: trueor adefault - Every output must have
description - Steps must include
shell: bashon everyrunstep
Every reusable workflow (on: workflow_call) must:
- Declare all inputs and secrets explicitly (no
secrets: inheritwithout reason) - Include a
permissions:block at the job level, not just at the top level - Use
GITHUB_TOKENor OIDC for auth, never long-lived static credentials - Pass
id-token: writeonly to jobs that actually call OIDC
Composite actions are tested in ci-self-test.yml by calling them directly in a job. Tests check that outputs are set and that the action exits 0 on valid input.
Reusable workflows are harder to test directly because workflow_call requires a caller. The approach here is:
docs-check.ymlvalidates that everyaction.ymlfile is valid YAML and has required fieldsci-self-test.ymlusesworkflow_dispatchto trigger each reusable workflow with test inputs where possible- For workflows that need real AWS credentials, there's a separate
integration-testenvironment in this repo with a restricted test IAM role
This repo uses release-please to manage changelogs and tags. Commit messages follow Conventional Commits.
fix:commits bump the patch versionfeat:commits bump the minor versionfeat!:or any commit withBREAKING CHANGE:in the footer bumps the major version
When making a breaking change to a workflow or action interface (removing an input, changing an output name, changing default behavior), bump the major version and note it clearly in the changelog.
Callers that pin @v1 are protected from major version changes. Callers on @main get everything immediately.
- YAML: 2-space indent, no tabs
- Shell steps:
set -euo pipefailwhere the logic is non-trivial - Comments explain why, not what
- Don't repeat GitHub's own documentation in comments; link to it instead