Overview
The release draft workflow:- Trigger: Manual workflow dispatch (only by code owners)
- Quality Checks: Code quality validation before draft creation
- Action Pinning: Verifies GitHub Actions are properly pinned
- Code Owner Verification: Only repository code owners can trigger
- Release Notes: Auto-generates release notes using release-drafter
Workflow Flowchart
Workflow Configuration
The release draft workflow is defined in.github/workflows/release-draft.yaml:
Release Draft Process
1. Setup Project
- Authenticates using GitHub App
- Checks out code from main branch
- Sets up Python environment
- Resolves project metadata and version
2. Action Pinning Check
- Validates that external GitHub Actions are pinned to SHA versions
- Ensures security best practices
- Checks actions in
.githubdirectory
3. Code Owner Verification
- Verifies the triggering actor is listed in
.github/CODEOWNERS - Prevents unauthorized release creation
- Fails if user is not a code owner
4. Code Quality Checks
- Runs pylint for code quality
- Executes pytest for unit tests
- Runs hadolint for Dockerfile validation
- Ensures code quality before release
5. Create Release Draft
- Merges branches (develop → main by default)
- Updates version in project files
- Creates git tag with version
- Generates release notes using release-drafter
- Creates GitHub release draft
Creating a Release Draft
Steps
- Navigate to Actions: Go to GitHub Actions in your repository
- Select Workflow: Choose “Create new release draft”
- Run Workflow: Click “Run workflow” button
- Wait for Completion: Monitor workflow execution
- Review Draft: Check the created release draft in Releases
Prerequisites
- You must be listed in
.github/CODEOWNERS - All GitHub Actions must be pinned to SHA versions
- Code quality checks must pass
- Release-drafter configuration must exist (
.github/release-drafter.yml)
Configuration
[!TIP] See the Configurations page for complete setup instructions and template files.
Release Drafter
The workflow uses release-drafter to generate release notes. Create.github/release-drafter.yml:
Reusable Components Used
This workflow leverages:- setup-project: Sets up Python environment and resolves metadata
- check-action-pinning: Validates GitHub Actions security
- code-quality: Runs code quality checks
- create-release-draft: Creates release draft with versioning
Version Management
The workflow automatically:- Detects current version from
pyproject.toml - Calculates next release version
- Updates version in project files
- Creates git tag with version
- Generates release notes
Best Practices
- Code Owner Verification: Ensure CODEOWNERS file is up to date
- Action Pinning: Keep all GitHub Actions pinned to SHA versions
- Quality Checks: Address any code quality issues before creating release
- Release Notes: Review auto-generated release notes before publishing
- Version Verification: Verify version numbers are correct
Troubleshooting
Common Issues
-
Code Owner Check Failure
- Ensure you’re listed in
.github/CODEOWNERS - Format:
* @usernameorpath/ @username
- Ensure you’re listed in
-
Action Pinning Failures
- Pin all external GitHub Actions to SHA versions
- Use
actions/checkout@v4format, not@mainor@v4
-
Quality Gate Failures
- Fix pylint errors
- Address failing tests
- Fix Dockerfile linting issues
-
Release Draft Creation Failures
- Verify release-drafter configuration exists
- Check GitHub App credentials
- Ensure proper repository permissions
Verification
- Check workflow logs for detailed error messages
- Verify CODEOWNERS file format
- Review code quality check results
- Confirm release-drafter configuration