This project uses three GitHub Actions workflows to automate testing, scaffold validation, and releases.
Dependency CVE scanning is left to GitHub's native Dependabot security alerts (enable them under Settings > Code security), with tox -e security (pip-audit) available for on-demand local scans. Pulling later template changes into a scaffolded repo is a deliberate, manual step (fetch the template remote and cherry-pick), not an automated job.
File: .github/workflows/test.yml
Triggers:
- Push to any branch
- Pull request to
main
Purpose: Runs the full test suite using tox across multiple Python versions (3.10, 3.11, 3.12, 3.13). This includes pytest, ruff linting, mypy type checking, and bandit security analysis.
Requirements: None. This workflow uses only public GitHub Actions and requires no secrets.
File: .github/workflows/scaffold-test.yml
Triggers:
- Push to
main - Pull request to
main - Manual dispatch
Purpose: Copies the template to a scratch directory, runs bin/customize.sh against the copy, and runs tox on the renamed scaffold. This proves the customize step still produces a green plugin end to end. It emits a per-PR check named scaffold.
Requirements: None. Uses only public GitHub Actions and requires no secrets.
File: .github/workflows/release.yaml
Triggers:
- Manual dispatch only
Purpose: Automates semantic versioning and publishing. The workflow:
- Analyzes commits using semantic-release to determine the next version
- Creates a GitHub release with changelog
- Updates version in
pyproject.toml - Builds and publishes the package to PyPI
Requirements:
SEMANTIC_RELEASE_TOKEN- GitHub Personal Access Token withrepowrite permissionsPYPI_API_TOKEN- PyPI API token for package publishing
Prerequisites: Commits must follow the Conventional Commits format for semantic-release to determine version bumps:
fix:- Patch release (0.0.x)feat:- Minor release (0.x.0)feat!:orBREAKING CHANGE:- Major release (x.0.0)
To configure the required secrets for the release workflow:
- Go to GitHub Settings > Developer settings > Personal access tokens > Tokens (classic)
- Click Generate new token (classic)
- Give it a descriptive name (e.g., "semantic-release")
- Select the
reposcope (full control of private repositories) - Click Generate token and copy the token
- In your repository, go to Settings > Secrets and variables > Actions
- Click New repository secret
- Name:
SEMANTIC_RELEASE_TOKEN - Value: Paste the token
- Click Add secret
- Log in to PyPI
- Go to Account settings > API tokens
- Click Add API token
- Give it a descriptive name and scope it to your project (recommended) or all projects
- Click Create token and copy the token
- In your repository, go to Settings > Secrets and variables > Actions
- Click New repository secret
- Name:
PYPI_API_TOKEN - Value: Paste the token (starts with
pypi-) - Click Add secret