CI - Update dependencies PR¶
File to use: ci_update_dependencies.yml
This workflow creates a PR if there are any updates in the permanent_dependencies_branch
branch that have not been included in the default_repo_branch
branch.
This workflow works nicely together with the CI - Check pyproject.toml dependencies workflow, and the same value for permanent_dependencies_branch
should be used.
In this way, this workflow can be called on a schedule to update the dependencies that have been merged into the permanent_dependencies_branch
branch into the default_repo_branch
branch.
The main point of having this workflow is to have a single PR, which can be squash merged, to merge several dependency updates performed by Dependabot or similar.
As a "bonus" this workflow supports updating pre-commit hooks.
PR branch name
The generated branch for the PR will be named ci/update-dependencies
.
Warning
If a PAT is not passed through for the PAT
secret and GITHUB_TOKEN
is used, beware that any other CI/CD jobs that run for, e.g., pull request events, may not run since GITHUB_TOKEN
-generated PRs are designed to not start more workflows to avoid escalation.
Hence, if it is important to run CI/CD workflows for pull requests, consider passing a PAT as a secret to this workflow represented by the PAT
secret.
Important
If this is to be used together with the CI/CD - New updates to default branch workflow, the pr_body_file
supplied (if any) should be immutable within the first 8 lines, i.e., no check boxes or similar in the first 8 lines.
Indeed, it is recommended to not supply a pr_body_file
in this case.
Expectations¶
There are no expectations of the repo when using this workflow.
Inputs¶
Name | Description | Required | Default | Type |
---|---|---|---|---|
git_username |
A git username (used to set the 'user.name' config option). | Yes | string | |
git_email |
A git user's email address (used to set the 'user.email' config option). | Yes | string | |
runner |
The runner to use for the workflow. Note, the callable workflow expects a Linux/Unix system.. | No | ubuntu-latest | string |
permanent_dependencies_branch |
The branch name for the permanent dependency updates branch. | No | ci/dependency-updates | string |
default_repo_branch |
The branch name of the repository's default branch. More specifically, the branch the PR should target. | No | main | string |
pr_body_file |
Relative path to PR body file from the root of the repository.Example: '.github/utils/pr_body_update_deps.txt' . |
No | Empty string | string |
pr_labels |
A comma separated list of strings of GitHub labels to use for the created PR. | No | Empty string | string |
extra_to_dos |
A multi-line string (insert \n to create line breaks) with extra 'to do' checks. Should start with - [ ] .See also Single vs multi-line input. |
No | Empty string | string |
update_pre-commit |
Whether or not to update pre-commit hooks as part of creating the PR. | No | false |
boolean |
python_version |
The Python version to use for the workflow.Note: This is only relevant if update_pre-commit is true . |
No | 3.9 | string |
install_extras |
Any extras to install from the local repository through 'pip'. Must be encapsulated in square parentheses ([] ) and be separated by commas (, ) without any spaces.Example: '[dev,pre-commit]' .Note: This is only relevant if update_pre-commit is true . |
No | Empty string | string |
pip_index_url |
A URL to a PyPI repository index.Note: This is only relevant if update_pre-commit is true . |
No | https://pypi.org/simple/ |
string |
pip_extra_index_urls |
A space-delimited string of URLs to additional PyPI repository indices.Note: This is only relevant if update_pre-commit is true . |
No | Empty string | string |
skip_pre-commit_hooks |
A comma-separated list of pre-commit hook IDs to skip when running pre-commit after updating hooks.Note: This is only relevant if update_pre-commit is true . |
No | Empty string | string |
Secrets¶
Name | Description | Required |
---|---|---|
PAT |
A personal access token (PAT) with rights to create PRs. This will fallback on GITHUB_TOKEN . |
No |
Usage example¶
The following is an example of how a workflow may look that calls CI - Update dependencies PR. It is meant to be complete as is.
name: CI - Update dependencies
on:
schedule:
- cron: "30 6 * * 3"
workflow_dispatch:
jobs:
check-dependencies:
name: Call external workflow
uses: SINTEF/ci-cd/.github/workflows/ci_update_dependencies.yml@v2.8.3
if: github.repository_owner == 'SINTEF'
with:
git_username: "Casper Welzel Andersen"
git_email: "CasperWA@github.com"
permanent_dependencies_branch: "ci/dependency-updates"
default_repo_branch: stable
pr_labels: "CI/CD"
extra_to_dos: "- [ ] Make sure the PR is **squash** merged, with a sensible commit message.\n- [ ] Check related `requirements*.txt` files are updated accordingly."
update_pre-commit: true
python_version: "3.9"
install_extras: "[pre-commit]"
skip_pre-commit_hooks: "pylint,pylint-models"
secrets:
PAT: ${{ secrets.PAT }}