Skip to content

Commit

Permalink
Feat: Add new GHA workflows for PDM
Browse files Browse the repository at this point in the history
Signed-off-by: Matthew Watkins <[email protected]>
  • Loading branch information
ModeSevenIndustrialSolutions committed Nov 23, 2023
1 parent 48d1d18 commit 2f07266
Show file tree
Hide file tree
Showing 7 changed files with 552 additions and 0 deletions.
56 changes: 56 additions & 0 deletions .github/workflows/builds.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
name: '🧪 Test builds (matrix)'

# yamllint disable-line rule:truthy
on:
workflow_dispatch:
pull_request:
types: [opened, reopened, edited, synchronize]

jobs:
pre-release:
# Don't run if pull request is NOT merged
if: github.event.pull_request.merged == true
runs-on: 'ubuntu-latest'
continue-on-error: true
strategy:
fail-fast: false
matrix:
python-version: ['3.9', '3.10', '3.11']
steps:
- name: 'Populate environment variables'
id: setenv
run: |
echo "Action triggered by user: ${GITHUB_TRIGGERING_ACTOR}"
set -x
datetime=$(date +'%Y%m%d%H%M')
export datetime
echo "datetime=${datetime}" >> "$GITHUB_OUTPUT"
vernum="${{ matrix.python-version }}.${datetime}"
echo "vernum=${vernum}" >> "$GITHUB_OUTPUT"
- name: 'Checkout repository'
uses: actions/checkout@v4

- name: 'Set up Python ${{ matrix.python-version }}'
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: 'Install dependencies'
run: |
python -m pip install --upgrade pip
pip install tox tox-gh-actions
- name: 'Tag for test release'
# Delete all local tags, then create a synthetic tag for testing
# Use the date/time to avoid conflicts uploading to Test PyPI
run: |
scripts/dev-versioning.sh "${{ steps.setenv.outputs.vernum }}"
git tag | xargs -L 1 | xargs git tag --delete
git tag "v${{ steps.setenv.outputs.vernum }}"
git checkout "tags/v${{ steps.setenv.outputs.vernum }}"
grep version pyproject.toml
- name: 'Build with TOX'
run: |
tox -e build
40 changes: 40 additions & 0 deletions .github/workflows/dependencies.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
name: '⛔️ Update dependencies'

# yamllint disable-line rule:truthy
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * MON'

jobs:
update-dependencies:
name: 'Update Python modules'
runs-on: ubuntu-latest
permissions:
# IMPORTANT: mandatory to raise the PR
id-token: write
pull-requests: write
repository-projects: write
contents: write

env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- uses: actions/checkout@v4

- name: 'Setup PDM for build commands'
uses: pdm-project/setup-pdm@v3
with:
version: 2.10.0

- name: Update dependencies
uses: pdm-project/update-deps-action@main
with:
token: ${{ secrets.GH_TOKEN }}
commit-message: 'Chore: Update dependencies and pdm.lock'
pr-title: 'Update Python module dependencies'
update-strategy: eager
# Whether to install PDM plugins before update
install-plugins: 'false'
50 changes: 50 additions & 0 deletions .github/workflows/documentation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
name: '🗒️ Build documentation'

# yamllint disable-line rule:truthy
on:
workflow_dispatch:
pull_request:
types: [closed]

jobs:
build_and_deploy:
# Don't run if pull request is NOT merged
if: github.event.pull_request.merged == true
name: 'Rebuild documentation'
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
python-version: ['3.11']
steps:
- name: 'Checkout repository'
uses: actions/checkout@v4

- name: 'Setup PDM for build commands'
uses: pdm-project/setup-pdm@v3

- name: 'Set up Python ${{ matrix.python-version }}'
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: 'Install dependencies'
run: |
python -m pip install --upgrade pip
pdm export -o requirements.txt
if [ -f docs/requirements.txt ]; then
pip install -r docs/requirements.txt; fi
- name: 'Build documentation: (tox/sphinx)'
run: |
tox -e docs
- name: 'Publish documentation'
if: success()
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: gh-pages
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/_build/html/
keep_files: true
167 changes: 167 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
---
name: '🐍📦 Production build and release'

# GitHub/PyPI trusted publisher documentation:
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/

# yamllint disable-line rule:truthy
on:
# workflow_dispatch:
push:
# Only invoked on release tag pushes
tags:
- v*.*.*

env:
python-version: '3.10'

### BUILD ###

jobs:
build:
name: '🐍 Build packages'
runs-on: ubuntu-latest
permissions:
# IMPORTANT: mandatory for Sigstore
id-token: write
steps:
### BUILDING ###

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

- name: 'Setup PDM for build commands'
uses: pdm-project/setup-pdm@v3
with:
version: 2.10.0

- name: 'Setup Python 3.10'
uses: actions/[email protected]
with:
python-version: ${{ env.python-version }}

- name: 'Update version from tags for production release'
run: |
echo "Github versioning: ${{ github.ref_name }}"
scripts/release-versioning.sh
- name: 'Build with PDM backend'
run: |
pdm build
### SIGNING ###

- name: 'Sign packages with Sigstore'
uses: sigstore/[email protected]
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: ${{ github.ref_name }}
path: dist/

### PUBLISH GITHUB ###

github:
name: '📦 Publish to GitHub'
# Only publish on tag pushes
if: startsWith(github.ref, 'refs/tags/')
needs:
- build
runs-on: ubuntu-latest
permissions:
# IMPORTANT: mandatory to publish artefacts
contents: write
steps:
- name: '⬇ Download build artefacts'
uses: actions/download-artifact@v3
with:
name: ${{ github.ref_name }}
path: dist/

- name: '📦 Publish release to GitHub'
uses: ModeSevenIndustrialSolutions/action-automatic-releases@latest
with:
# Valid inputs are:
# repo_token, automatic_release_tag, draft, prerelease, title, files
repo_token: ${{ secrets.GITHUB_TOKEN }}
prerelease: false
automatic_release_tag: ${{ github.ref_name }}
title: ${{ github.ref_name }}
files: |
dist/*.tar.gz
dist/*.whl
### PUBLISH PYPI TEST ###

testpypi:
name: '📦 Publish to PyPi Test'
# Only publish on tag pushes
if: startsWith(github.ref, 'refs/tags/')
needs:
- build
runs-on: ubuntu-latest
environment:
name: testpypi
permissions:
# IMPORTANT: mandatory for trusted publishing
id-token: write
steps:
- name: '⬇ Download build artefacts'
uses: actions/download-artifact@v3
with:
name: ${{ github.ref_name }}
path: dist/

- name: 'Remove files unsupported by PyPi'
run: |
if [ -f dist/buildvars.txt ]; then
rm dist/buildvars.txt
fi
rm dist/*.crt dist/*.sig*
- name: Publish distribution to Test PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
verbose: true

### PUBLISH PYPI ###

pypi:
name: '📦 Publish to PyPi'
# Only publish on tag pushes
if: startsWith(github.ref, 'refs/tags/')
needs:
- testpypi
runs-on: ubuntu-latest
environment:
name: pypi
permissions:
# IMPORTANT: mandatory for trusted publishing
id-token: write
steps:
- name: '⬇ Download build artefacts'
uses: actions/download-artifact@v3
with:
name: ${{ github.ref_name }}
path: dist/

- name: 'Remove files unsupported by PyPi'
run: |
if [ -f dist/buildvars.txt ]; then
rm dist/buildvars.txt
fi
rm dist/*.crt dist/*.sig*
- name: 'Setup PDM for build commands'
uses: pdm-project/setup-pdm@v3

- name: 'Publish release to PyPI'
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
49 changes: 49 additions & 0 deletions .github/workflows/security.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
# This workflow will install Python dependencies
# run tests and lint with a variety of Python versions
# For more information see:
# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: '⛔️ Security auditing'

# yamllint disable-line rule:truthy
on:
workflow_dispatch:
pull_request:
types: [opened, reopened, edited, synchronize]

jobs:
build:
name: 'Audit Python dependencies'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.9', '3.10', '3.11']
steps:
- name: 'Checkout repository'
uses: actions/checkout@v4

- name: 'Setup PDM for build commands'
uses: pdm-project/setup-pdm@v3
with:
version: 2.10.0

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: 'Install dependencies'
run: |
pip install --upgrade pip
pdm lock
pdm export -o requirements.txt
python -m pip install -r requirements.txt
python -m pip install .
- name: 'Run: pip-audit'
uses: pypa/[email protected]
with:
ignore-vulns: |
PYSEC-2023-163
Loading

0 comments on commit 2f07266

Please sign in to comment.