GitHub Actions¶
GitHub Actions ⧉ are used to run CI/CD pipelines.
Important
No pipeline modifies the repository contents (e.g. no formatting is done), it only verifies the compliance (e.g. linting) of source code.
Pipelines¶
Note
Configuration is stored in .github directory and .github/workflows specifically
Pipelines run approximately the same steps as pre-commit hooks, the specific tooling functionality is located in various other documents such as legal, python, other languages, prose, etc.
Features of note include:
-
each workflow starts with a semantic prefix defining its purpose (e.g.
tests,security,docs) -
most of the workflows from each semantic group comes in three flavors:
<type>.yml- analogous to check/linter oftype, done for every push to the pull request (usually ran only if files of interest where changed in the pull request, e.g.**.mdfiles formarkdown.yml<type>-renovate.yml- checks run, whenrenovate[bot]makes an update to the checkers (e.g.dev-markdowninpyproject.toml's[dependency-groups]gets updated, the markdown checks run on allmarkdownfiles in the repository). This allows verification of updates against currently accepted standards (e.g. no new checks were introduced without feedback)<type>-reusable.yml- de facto implementation of the linter, will be called<type>.ymland<type>-renovate.yml
-
*-update.ymlworkflows are ran periodically, see scheduled jobs documentation for more details
Note
This structure may not be present in all workflows, as some checks should not be ran on every push or renovate update, in these cases only <type>.yml might be present.
Reusable workflows¶
- Improve security (as the source code is not modifiable by the repository owner)
- Streamline updates from the main template (as the reusable workflows are updated from the
opennudge/opentemplaterepository)
You might want to change the reusable workflows to local workflows if you:
- want to fully control your pipelines
- want to host/adjust the pipeline yourself
- do not want the pipelines to change behavior without your consent
If so, check the configuration section.
Special workflows¶
These workflows might be of special interest:
check-run-reusable.yml- runs most of the checks defined in<type>-reusable.ymlas a sort of centralized runnersecurity-*- ran on PRs and periodically to ensure the security of the project, see security section for more details
Caching¶
Centralized caching (create from main branch) is used for all workflows, after PR merge, the cache is updated (if needed) and stored.
Note
Cache is optimized on a per-workflow basis, each having a minimal set of necessary dependencies.
Tip
For source code check cache.yml
Configuration¶
Important
Many of the features can be controlled via pyproject.toml as described in configuration section.
Changing workflows reusability¶
Scripts provided in .github/workflows/reusability:
localize.sh- changes the reusable workflows (pointing toopennudge/opentemplate) to local workflowsglobalize.sh- changes the local workflows to reusable workflows (pointing toopennudge/opentemplate)
Run ./reusability/localize.sh or ./reusability/globalize.sh to apply the changes. The script also allows you to specify the directory where the changes should be applied as an argument.
Caution
While localize.sh is safe to run, globalize.sh should be used with caution, as it may incorrectly globalize local workflows/actions you have added on top of the template provided functionality.
Warning
release-package-reusable.yml and release-package-upload-reusable.yml used by release.yml should not be globalized as they are attested uploads to PyPI do not yet support reusable workflows (see this GitHub issue ⧉).
Code sources¶
pyproject.toml.github/workflows/*.yml.github/actions/*/action.yml