This document describes the GitHub Actions workflows implemented in this repository.
The repository includes CI/CD workflows that ensure code quality and automated releases. All workflows follow security best practices and are designed to be modular and maintainable.
Purpose: Ensures CHANGELOG.md is updated for substantive changes.
Triggers:
- Pull requests to
main(on open, sync, reopen, ready_for_review)
Jobs:
- check-changelog: Validates changelog updates
Logic:
- Detects if substantive files were changed (not just docs/CI)
- Requires CHANGELOG.md update for substantive changes
- Verifies content exists in the Unreleased section
- Exempts documentation-only changes
Validation Rules:
- CHANGELOG.md must be modified if code changes
- Unreleased section must have entries
- Follows Keep a Changelog format
Purpose: Validates YAML syntax and formatting for workflow files and the action.yml using yamllint with strict rules.
Triggers:
- Pull requests to
main - Pushes to
main - Manual workflow dispatch
Jobs:
- lint-yaml: Validates YAML syntax using yamllint
- Lints all workflow files in
.github/workflows/ - Validates
action.ymlsyntax and structure - Enforces formatting standards with custom rules
- Lints all workflow files in
Quality Checks:
- YAML syntax validation (ensures valid YAML structure)
- Line length enforcement (max 120 characters)
- Consistent indentation (2 or 4 spaces)
- Comment spacing (minimum 1 space from content)
- Proper YAML formatting standards
Purpose: Automates semantic versioning, tagging, and release creation.
Triggers:
- Pushes to
main - Manual workflow dispatch (with version input)
Jobs:
- check-changelog: Validates unreleased changes exist
- determine-version: Calculates next semantic version
- create-release: Creates GitHub release with changelog notes
- marketplace-submission: Provides marketplace submission instructions
- workflow-summary: Summarizes release process
Versioning Logic:
- Automatically determines version bump (major/minor/patch)
- Defaults to patch version increment
- Detects breaking changes from changelog
- Supports manual version override
Release Process:
- Checks for unreleased changes in CHANGELOG.md
- Determines next version based on changes
- Updates CHANGELOG.md with version and date
- Creates and pushes git tag
- Creates GitHub release with extracted notes
- Updates major version tag (e.g., v1)
- Provides marketplace submission instructions
Requirements:
- CHANGELOG.md must have Unreleased section with content
- Must follow Keep a Changelog format
- Semantic versioning (MAJOR.MINOR.PATCH)
All workflows follow the principle of least privilege:
- Read-only by default
- Write permissions only where required (e.g., release creation, badge commits)
- Explicit permission declarations in workflows
- Pinned Actions: All third-party actions use specific versions
- Minimal Permissions: Workflows request only necessary permissions
- Input Validation: All workflow inputs are validated
lint-test.yml (validates YAML syntax)
↓
changelog-check.yml (validates documentation)
↓
release.yml (creates releases)
↓
marketplace submission (manual)
-
Making Changes:
- Update CHANGELOG.md under
[Unreleased]section - Ensure YAML files pass
lint-test.ymlvalidation - Follow changelog format requirements
- Update CHANGELOG.md under
-
Creating Releases:
- Merge changes to
mainwith updated CHANGELOG.md release.ymlautomatically creates releases- Manually publish to GitHub Marketplace if desired
- Merge changes to
-
Manual Release:
GitHub Actions → release.yml → Run workflow Select version: major/minor/patch or specific version
- Release Approval: Verify changelog before merging to main
- Marketplace: Manually publish new versions to marketplace
- Version Tags: Ensure major version tags (e.g., v1) point to latest release
- Check CHANGELOG.md has
[Unreleased]section with content - Verify changelog follows Keep a Changelog format
- Check workflow logs for errors
- Review lint-test.yml workflow logs
- Check for YAML syntax errors in workflow files
- Ensure action.yml is valid YAML
- Verify line length limits (max 120 characters)
- Per release: Update CHANGELOG.md
- As needed: Review and update workflow configurations
- Monitor workflow runs for failures
When updating workflows:
- Test changes in a feature branch
- Update this documentation
- Update CHANGELOG.md
- Create PR and verify all checks pass