Skip to content

Commit

Permalink
Add infrastructure for checking Poetry configuration files
Browse files Browse the repository at this point in the history
Tasks and a GitHub Actions workflow are added to maintain and check for problems in the Poetry Python dependency
management's configuration files.

The tasks provide the following operations:

- Check for invalid data structure of pyproject.toml
- Check for out of sync poetry.lock file

These tasks are ran by the GitHub Actions workflow on any push or pull request that modifies relevant files, and
periodically to check for breakage caused by external changes.
  • Loading branch information
per1234 committed Oct 16, 2023
1 parent 7f317bc commit 3b9b0ad
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 0 deletions.
116 changes: 116 additions & 0 deletions .github/workflows/check-poetry-task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: Check Poetry

on:
create:
push:
paths:
- ".github/workflows/check-poetry-task.ya?ml"
- "**/poetry.lock"
- "**/pyproject.toml"
- "Taskfile.ya?ml"
pull_request:
paths:
- ".github/workflows/check-poetry-task.ya?ml"
- "**/poetry.lock"
- "**/pyproject.toml"
- "Taskfile.ya?ml"
schedule:
# Run periodically to catch breakage caused by external changes.
- cron: "0 11 * * THU"
workflow_dispatch:
repository_dispatch:

jobs:
run-determination:
runs-on: ubuntu-latest
permissions: {}
outputs:
result: ${{ steps.determination.outputs.result }}
steps:
- name: Determine if the rest of the workflow should run
id: determination
run: |
RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
# The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
if [[
"${{ github.event_name }}" != "create" ||
"${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX
]]; then
# Run the other jobs.
RESULT="true"
else
# There is no need to run the other jobs.
RESULT="false"
fi
echo "result=$RESULT" >> $GITHUB_OUTPUT
validate:
needs: run-determination
if: needs.run-determination.outputs.result == 'true'
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install Python
uses: actions/setup-python@v4
with:
python-version-file: pyproject.toml

- name: Install Poetry
run: |
pipx install \
--python "$(which python)" \
poetry
- name: Install Task
uses: arduino/setup-task@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x

- name: Validate pyproject.toml
run: task poetry:validate

check-sync:
needs: run-determination
if: needs.run-determination.outputs.result == 'true'
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install Python
uses: actions/setup-python@v4
with:
python-version-file: pyproject.toml

- name: Install Poetry
run: |
pipx install \
--python "$(which python)" \
poetry
- name: Install Task
uses: arduino/setup-task@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x

- name: Sync lockfile
run: task poetry:sync

- name: Check if lockfile was out of sync
run: |
git \
diff \
--color \
--exit-code \
package-lock.json
18 changes: 18 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ tasks:
- task: general:check-formatting
- task: general:check-spelling
- task: npm:validate
- task: poetry:validate

fix:
desc: Make automated corrections to the project's files
Expand All @@ -31,6 +32,7 @@ tasks:
- task: go:format
- task: go:lint
- task: go:tidy
- task: poetry:sync

# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-general-formatting-task/Taskfile.yml
general:check-formatting:
Expand Down Expand Up @@ -180,6 +182,22 @@ tasks:
cmds:
- poetry install --no-root

poetry:validate:
desc: Validate pyproject.toml
cmds:
- |
poetry \
check \
--lock
poetry:sync:
desc: Sync poetry.lock
cmds:
- |
poetry \
lock \
--no-update
# Make a temporary file named according to the passed TEMPLATE variable and print the path passed to stdout
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/windows-task/Taskfile.yml
utility:mktemp-file:
Expand Down

0 comments on commit 3b9b0ad

Please sign in to comment.