pax_global_header 0000666 0000000 0000000 00000000064 14756704352 0014527 g ustar 00root root 0000000 0000000 52 comment=26bb37cfab71a5a372e3db0f48a6eac57519a4a6
python-semantic-release-9.21.0/ 0000775 0000000 0000000 00000000000 14756704352 0016360 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/.dockerignore 0000664 0000000 0000000 00000000102 14756704352 0021025 0 ustar 00root root 0000000 0000000 tests
build
dist
docs
htmlcov
.git
.mypy_cache
.pytest_cache
.tox
python-semantic-release-9.21.0/.gitattributes 0000664 0000000 0000000 00000000121 14756704352 0021245 0 ustar 00root root 0000000 0000000 # https://help.github.com/articles/dealing-with-line-endings/
* text=auto eol=lf
python-semantic-release-9.21.0/.github/ 0000775 0000000 0000000 00000000000 14756704352 0017720 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14756704352 0022103 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/.github/ISSUE_TEMPLATE/bug-report.md 0000664 0000000 0000000 00000003776 14756704352 0024530 0 ustar 00root root 0000000 0000000 ---
name: Bug Report
about: Something isn't working as expected
labels:
- bug
- triage
---
## Bug Report
### Description
### Expected behavior
### Actual behavior
### Environment
- **Operating System (w/ version):**
- **Python version:**
- **Pip version:**
- **Semantic-release version:**
- **Build tool (w/ version):**
pip freeze
```log
```
git log --oneline --decorate --graph --all -n 50
```log
```
### Configuration
Semantic Release Configuration
```toml
```
Build System Configuration
```toml
```
GitHub Actions Job Definition
```yaml
```
### Execution Log
semantic-release -vv command
```log
```
### Additional context
python-semantic-release-9.21.0/.github/ISSUE_TEMPLATE/documentation.md 0000664 0000000 0000000 00000000446 14756704352 0025302 0 ustar 00root root 0000000 0000000 ---
name: Documentation
about: I found an error or gap in the docs
labels:
- docs
- triage
---
## Documentation Error
### Description
python-semantic-release-9.21.0/.github/ISSUE_TEMPLATE/feature_request.md 0000664 0000000 0000000 00000000676 14756704352 0025641 0 ustar 00root root 0000000 0000000 ---
name: Feature Request
about: Suggest a new idea
labels:
- feature
- triage
---
## Feature Request
### Description
### Use cases
### Possible implementation
### Alternative solutions
python-semantic-release-9.21.0/.github/ISSUE_TEMPLATE/question.md 0000664 0000000 0000000 00000001471 14756704352 0024277 0 ustar 00root root 0000000 0000000 ---
name: Question
about: I have a question about Python Semantic Release
labels:
- question
- triage
---
## Question
### Configuration
Semantic Release Configuration
```toml
```
## Additional context
git log --oneline --decorate --graph --all -n 50
```log
```
python-semantic-release-9.21.0/.github/PULL_REQUEST_TEMPLATE.md 0000664 0000000 0000000 00000003141 14756704352 0023520 0 ustar 00root root 0000000 0000000
## Purpose
## Rationale
## How did you test?
## How to Verify
---
## PR Completion Checklist
- [ ] Reviewed & followed the [Contributor Guidelines](https://python-semantic-release.readthedocs.io/en/latest/contributing.html)
- [ ] Changes Implemented & Validation pipeline succeeds
- [ ] Commits follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) standard
and are separated into the proper commit type and scope (recommended order: test, build, feat/fix, docs)
- [ ] Appropriate Unit tests added/updated
- [ ] Appropriate End-to-End tests added/updated
- [ ] Appropriate Documentation added/updated and syntax validated for sphinx build (see Contributor Guidelines)
python-semantic-release-9.21.0/.github/changed-files-spec.yml 0000664 0000000 0000000 00000000363 14756704352 0024066 0 ustar 00root root 0000000 0000000 ---
build:
- MANIFEST.in
- Dockerfile
- .dockerignore
- scripts/**
docs:
- docs/**
- README.rst
- AUTHORS.rst
- CONTRIBUTING.rst
- CHANGELOG.rst
src:
- src/**
- pyproject.toml
tests:
- tests/**
python-semantic-release-9.21.0/.github/dependabot.yaml 0000664 0000000 0000000 00000001753 14756704352 0022717 0 ustar 00root root 0000000 0000000 ---
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "18:00"
commit-message:
prefix: "build"
include: "scope"
labels:
- dependencies
- dependabot
open-pull-requests-limit: 10
rebase-strategy: auto
versioning-strategy: "increase-if-necessary"
# Maintain dependencies for Docker (ie our GitHub Action)
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"
labels:
- dependencies
- dependabot
rebase-strategy: auto
commit-message:
prefix: "build"
include: "scope" # (deps)
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "18:00"
commit-message:
prefix: "ci"
labels:
- dependencies
- dependabot
rebase-strategy: auto
groups:
github-actions:
patterns:
- "*"
python-semantic-release-9.21.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14756704352 0021755 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/.github/workflows/ci.yml 0000664 0000000 0000000 00000007276 14756704352 0023107 0 ustar 00root root 0000000 0000000 name: CI
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
branches: # Target branches
- master
# default token permissions = none
permissions: {}
# If a new push is made to the branch, cancel the previous run
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
commitlint:
# condition: Execute IFF it is protected branch update, or a PR that is NOT in a draft state
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@v6
eval-changes:
name: Evaluate changes
# condition: Execute IFF it is protected branch update, or a PR that is NOT in a draft state
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 100
- name: Evaluate | Check common file types for changes
id: core-changed-files
uses: tj-actions/changed-files@v45.0.7
with:
files_yaml_from_source_file: .github/changed-files-spec.yml
- name: Evaluate | Check specific file types for changes
id: ci-changed-files
uses: tj-actions/changed-files@v45.0.7
with:
files_yaml: |
ci:
- .github/workflows/ci.yml
- .github/workflows/validate.yml
- name: Evaluate | Detect if any of the combinations of file sets have changed
id: all-changes
run: |
printf '%s\n' "any_changed=false" >> $GITHUB_OUTPUT
if [ "${{ steps.core-changed-files.outputs.build_any_changed }}" == "true" ] || \
[ "${{ steps.ci-changed-files.outputs.ci_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.docs_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.src_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.tests_any_changed }}" == "true" ]; then
printf '%s\n' "any_changed=true" >> $GITHUB_OUTPUT
fi
outputs:
# essentially casts the string output to a boolean for GitHub
any-file-changes: ${{ steps.all-changes.outputs.any_changed }}
build-changes: ${{ steps.core-changed-files.outputs.build_any_changed }}
ci-changes: ${{ steps.ci-changed-files.outputs.ci_any_changed }}
doc-changes: ${{ steps.core-changed-files.outputs.docs_any_changed }}
src-changes: ${{ steps.core-changed-files.outputs.src_any_changed }}
test-changes: ${{ steps.core-changed-files.outputs.tests_any_changed }}
validate:
needs: eval-changes
uses: ./.github/workflows/validate.yml
with:
python-versions-linux: '["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]'
# Since the test suite takes ~4 minutes to complete on windows, and windows is billed higher
# we are only going to run it on the oldest version of python we support. The older version
# will be the most likely area to fail as newer minor versions maintain compatibility.
python-versions-windows: '["3.8"]'
files-changed: ${{ needs.eval-changes.outputs.any-file-changes }}
build-files-changed: ${{ needs.eval-changes.outputs.build-changes }}
ci-files-changed: ${{ needs.eval-changes.outputs.ci-changes }}
doc-files-changed: ${{ needs.eval-changes.outputs.doc-changes }}
src-files-changed: ${{ needs.eval-changes.outputs.src-changes }}
test-files-changed: ${{ needs.eval-changes.outputs.test-changes }}
permissions: {}
secrets: {}
python-semantic-release-9.21.0/.github/workflows/cicd.yml 0000664 0000000 0000000 00000020013 14756704352 0023376 0 ustar 00root root 0000000 0000000 ---
name: CI/CD
on:
push:
branches:
- master
- release/**
# default token permissions = none
permissions: {}
jobs:
eval-changes:
name: Evaluate changes
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 100 # Must at least retrieve a set of commits to compare changes
# primarily because of any 'Rebase and Merge' PR action in GitHub
- name: Evaluate | Check common file types for changes
id: core-changed-files
uses: tj-actions/changed-files@v45.0.7
with:
base_sha: ${{ github.event.push.before }}
files_yaml_from_source_file: .github/changed-files-spec.yml
- name: Evaluate | Check specific file types for changes
id: ci-changed-files
uses: tj-actions/changed-files@v45.0.7
with:
base_sha: ${{ github.event.push.before }}
files_yaml: |
ci:
- .github/workflows/cicd.yml
- .github/workflows/validate.yml
- name: Evaluate | Detect if any of the combinations of file sets have changed
id: all-changes
run: |
printf '%s\n' "any_changed=false" >> $GITHUB_OUTPUT
if [ "${{ steps.core-changed-files.outputs.build_any_changed }}" == "true" ] || \
[ "${{ steps.ci-changed-files.outputs.ci_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.docs_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.src_any_changed }}" == "true" ] || \
[ "${{ steps.core-changed-files.outputs.tests_any_changed }}" == "true" ]; then
printf '%s\n' "any_changed=true" >> $GITHUB_OUTPUT
fi
outputs:
any-file-changes: ${{ steps.all-changes.outputs.any_changed }}
build-changes: ${{ steps.core-changed-files.outputs.build_any_changed }}
ci-changes: ${{ steps.ci-changed-files.outputs.ci_any_changed }}
doc-changes: ${{ steps.core-changed-files.outputs.docs_any_changed }}
src-changes: ${{ steps.core-changed-files.outputs.src_any_changed }}
test-changes: ${{ steps.core-changed-files.outputs.tests_any_changed }}
validate:
uses: ./.github/workflows/validate.yml
needs: eval-changes
concurrency:
group: ${{ github.workflow }}-validate-${{ github.ref_name }}
cancel-in-progress: true
with:
python-versions-linux: '["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]'
python-versions-windows: '["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]'
files-changed: ${{ needs.eval-changes.outputs.any-file-changes }}
build-files-changed: ${{ needs.eval-changes.outputs.build-changes }}
ci-files-changed: ${{ needs.eval-changes.outputs.ci-changes }}
doc-files-changed: ${{ needs.eval-changes.outputs.doc-changes }}
src-files-changed: ${{ needs.eval-changes.outputs.src-changes }}
test-files-changed: ${{ needs.eval-changes.outputs.test-changes }}
permissions: {}
secrets: {}
release:
name: Semantic Release
runs-on: ubuntu-latest
needs: validate
if: ${{ needs.validate.outputs.new-release-detected == 'true' }}
concurrency:
group: ${{ github.workflow }}-release-${{ github.ref_name }}
cancel-in-progress: false
permissions:
contents: write
env:
GITHUB_ACTIONS_AUTHOR_NAME: github-actions
GITHUB_ACTIONS_AUTHOR_EMAIL: actions@users.noreply.github.com
steps:
# Note: We checkout the repository at the branch that triggered the workflow
# with the entire history to ensure to match PSR's release branch detection
# and history evaluation.
# However, we forcefully reset the branch to the workflow sha because it is
# possible that the branch was updated while the workflow was running. This
# prevents accidentally releasing un-evaluated changes.
- name: Setup | Checkout Repository on Release Branch
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
fetch-depth: 0
- name: Setup | Force release branch to be at workflow sha
run: |
git reset --hard ${{ github.sha }}
- name: Setup | Download Build Artifacts
uses: actions/download-artifact@v4
id: artifact-download
with:
name: ${{ needs.validate.outputs.distribution-artifacts }}
path: dist
- name: Release | Bump Version in Docs
if: needs.validate.outputs.new-release-is-prerelease == 'false'
env:
NEW_VERSION: ${{ needs.validate.outputs.new-release-version }}
NEW_RELEASE_TAG: ${{ needs.validate.outputs.new-release-tag }}
run: |
python -m scripts.bump_version_in_docs
git add docs/*
- name: Evaluate | Verify upstream has NOT changed
# Last chance to abort before causing an error as another PR/push was applied to the upstream branch
# while this workflow was running. This is important because we are committing a version change
shell: bash
run: bash .github/workflows/verify_upstream.sh
- name: Release | Python Semantic Release
id: release
uses: python-semantic-release/python-semantic-release@v9.20.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
root_options: "-v"
build: false
- name: Release | Add distribution artifacts to GitHub Release Assets
uses: python-semantic-release/publish-action@v9.20.0
if: steps.release.outputs.released == 'true'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.release.outputs.tag }}
- name: Release | Update Minor Release Tag Reference
if: steps.release.outputs.released == 'true' && steps.release.outputs.is_prerelease == 'false'
env:
FULL_VERSION_TAG: ${{ steps.release.outputs.tag }}
GIT_COMMITTER_NAME: ${{ env.GITHUB_ACTIONS_AUTHOR_NAME }}
GIT_COMMITTER_EMAIL: ${{ env.GITHUB_ACTIONS_AUTHOR_EMAIL }}
run: |
MINOR_VERSION_TAG="$(echo "$FULL_VERSION_TAG" | cut -d. -f1,2)"
git tag --force --annotate "$MINOR_VERSION_TAG" "${FULL_VERSION_TAG}^{}" -m "$MINOR_VERSION_TAG"
git push -u origin "$MINOR_VERSION_TAG" --force
- name: Release | Update Major Release Tag Reference
if: steps.release.outputs.released == 'true' && steps.release.outputs.is_prerelease == 'false'
env:
FULL_VERSION_TAG: ${{ steps.release.outputs.tag }}
GIT_COMMITTER_NAME: ${{ env.GITHUB_ACTIONS_AUTHOR_NAME }}
GIT_COMMITTER_EMAIL: ${{ env.GITHUB_ACTIONS_AUTHOR_EMAIL }}
run: |
MAJOR_VERSION_TAG="$(echo "$FULL_VERSION_TAG" | cut -d. -f1)"
git tag --force --annotate "$MAJOR_VERSION_TAG" "${FULL_VERSION_TAG}^{}" -m "$MAJOR_VERSION_TAG"
git push -u origin "$MAJOR_VERSION_TAG" --force
outputs:
released: ${{ steps.release.outputs.released || 'false' }}
new-release-version: ${{ steps.release.outputs.version }}
new-release-tag: ${{ steps.release.outputs.tag }}
deploy:
name: Deploy
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.released == 'true' && github.repository == 'python-semantic-release/python-semantic-release' }}
needs:
- validate
- release
environment:
name: pypi
url: https://pypi.org/project/python-semantic-release/
permissions:
# https://docs.github.com/en/rest/overview/permissions-required-for-github-apps?apiVersion=2022-11-28#metadata
id-token: write # needed for PyPI upload
steps:
- name: Setup | Download Build Artifacts
uses: actions/download-artifact@v4
id: artifact-download
with:
name: ${{ needs.validate.outputs.distribution-artifacts }}
path: dist
# see https://docs.pypi.org/trusted-publishers/
- name: Publish package distributions to PyPI
id: pypi-publish
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
packages-dir: dist
print-hash: true
verbose: true
python-semantic-release-9.21.0/.github/workflows/manual.yml 0000664 0000000 0000000 00000010445 14756704352 0023761 0 ustar 00root root 0000000 0000000 name: CI (Manual)
on:
# Enable execution directly from Actions page
workflow_dispatch:
inputs:
linux:
description: 'Test on Linux?'
type: boolean
required: true
default: true
windows:
description: 'Test on Windows?'
type: boolean
required: true
default: true
python3-13:
description: 'Test Python 3.13?'
type: boolean
required: true
default: true
python3-12:
description: 'Test Python 3.12?'
type: boolean
required: true
default: true
python3-11:
description: 'Test Python 3.11?'
type: boolean
required: true
default: true
python3-10:
description: 'Test Python 3.10?'
type: boolean
required: true
default: true
python3-9:
description: 'Test Python 3.9?'
type: boolean
required: true
default: true
python3-8:
description: 'Test Python 3.8?'
type: boolean
required: true
default: true
# default token permissions = none
permissions: {}
env:
COMMON_PYTHON_VERSION: '3.11'
jobs:
eval-input:
name: Evaluate inputs
runs-on: ubuntu-latest
steps:
- name: Setup | Install Python ${{ env.COMMON_PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.COMMON_PYTHON_VERSION }}
- name: Setup | Write file
uses: DamianReeves/write-file-action@v1.3
with:
path: .github/manual_eval_input.py
write-mode: overwrite
contents: |
import json, os
version_list = list(filter(None, [
"3.8" if str(os.getenv("INPUT_PY3_8", False)).lower() == str(True).lower() else None,
"3.9" if str(os.getenv("INPUT_PY3_9", False)).lower() == str(True).lower() else None,
"3.10" if str(os.getenv("INPUT_PY3_10", False)).lower() == str(True).lower() else None,
"3.11" if str(os.getenv("INPUT_PY3_11", False)).lower() == str(True).lower() else None,
"3.12" if str(os.getenv("INPUT_PY3_12", False)).lower() == str(True).lower() else None,
"3.13" if str(os.getenv("INPUT_PY3_13", False)).lower() == str(True).lower() else None,
]))
linux_versions = (
version_list
if str(os.getenv("INPUT_LINUX", False)).lower() == str(True).lower()
else []
)
windows_versions = (
version_list
if str(os.getenv("INPUT_WINDOWS", False)).lower() == str(True).lower()
else []
)
print(f"PYTHON_VERSIONS_LINUX={json.dumps(linux_versions)}")
print(f"PYTHON_VERSIONS_WINDOWS={json.dumps(windows_versions)}")
- name: Evaluate | Generate Test Matrix
id: test-matrix
env:
INPUT_PY3_8: ${{ inputs.python3-8 }}
INPUT_PY3_9: ${{ inputs.python3-9 }}
INPUT_PY3_10: ${{ inputs.python3-10 }}
INPUT_PY3_11: ${{ inputs.python3-11 }}
INPUT_PY3_12: ${{ inputs.python3-12 }}
INPUT_PY3_13: ${{ inputs.python3-13 }}
INPUT_LINUX: ${{ inputs.linux }}
INPUT_WINDOWS: ${{ inputs.windows }}
run: |
if ! vars="$(python3 .github/manual_eval_input.py)"; then
printf '%s\n' "::error::Failed to evaluate input"
exit 1
fi
printf '%s\n' "$vars"
printf '%s\n' "$vars" >> $GITHUB_OUTPUT
outputs:
python-versions-linux: ${{ steps.test-matrix.outputs.PYTHON_VERSIONS_LINUX }}
python-versions-windows: ${{ steps.test-matrix.outputs.PYTHON_VERSIONS_WINDOWS }}
validate:
needs: eval-input
uses: ./.github/workflows/validate.yml
with:
python-versions-linux: ${{ needs.eval-input.outputs.python-versions-linux }}
python-versions-windows: ${{ needs.eval-input.outputs.python-versions-windows }}
# There is no way to check for file changes on a manual workflow so
# we just assume everything has changed
build-files-changed: true
ci-files-changed: true
doc-files-changed: true
src-files-changed: true
test-files-changed: true
files-changed: true
permissions: {}
secrets: {}
python-semantic-release-9.21.0/.github/workflows/stale.yml 0000664 0000000 0000000 00000012623 14756704352 0023614 0 ustar 00root root 0000000 0000000 name: 'Stale Bot'
on:
schedule:
# Execute Daily at 7:15 AM UTC
- cron: '15 7 * * *'
# Default token permissions = None
permissions: {}
jobs:
stale:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
pull-requests: write
actions: write # required to delete/update cache
env:
STALE_ISSUE_WARNING_DAYS: 90
STALE_ISSUE_CLOSURE_DAYS: 7
STALE_PR_WARNING_DAYS: 60
STALE_PR_CLOSURE_DAYS: 10
UNRESPONSIVE_WARNING_DAYS: 14
UNRESPONSIVE_CLOSURE_DAYS: 7
REMINDER_WINDOW: 60
OPERATIONS_RATE_LIMIT: 330 # 1000 api/hr / 3 jobs
steps:
- name: Stale Issues/PRs
uses: actions/stale@v9
with:
# default: 30, GitHub Actions API Rate limit is 1000/hr
operations-per-run: ${{ env.OPERATIONS_RATE_LIMIT }}
# exempt-all-milestones: false (default)
# exempt-all-assignees: false (default)
stale-issue-label: stale
days-before-issue-stale: ${{ env.STALE_ISSUE_WARNING_DAYS }}
days-before-issue-close: ${{ env.STALE_ISSUE_CLOSURE_DAYS }}
exempt-issue-labels: confirmed, help-wanted, info
stale-issue-message: >
This issue is stale because it has not been confirmed or planned by the maintainers
and has been open ${{ env.STALE_ISSUE_WARNING_DAYS }} days with no recent activity.
It will be closed in ${{ env.STALE_ISSUE_CLOSURE_DAYS }} days, if no further
activity occurs. Thank you for your contributions.
close-issue-message: >
This issue was closed due to lack of activity.
# PR Configurations
stale-pr-label: stale
days-before-pr-stale: ${{ env.STALE_PR_WARNING_DAYS }}
days-before-pr-close: ${{ env.STALE_PR_CLOSURE_DAYS }}
exempt-pr-labels: confirmed, dependabot
stale-pr-message: >
This PR is stale because it has not been confirmed or considered ready for merge
by the maintainers but has been open ${{ env.STALE_PR_WARNING_DAYS }} days with
no recent activity. It will be closed in ${{ env.STALE_PR_CLOSURE_DAYS }} days,
if no further activity occurs. Please make sure to add the proper testing, docs,
and descriptions of changes before your PR can be merged. Thank you for your
contributions.
close-pr-message: >
This PR was closed due to lack of activity.
- name: Unresponsive Issues/PRs
# Closes issues rapidly when submitter is unresponsive. The timer is initiated
# by maintainer by placing the awaiting-reply label on the issue or PR. From
# that point the submitter has 14 days before a reminder/warning is given. If
# no response has been received within 3 weeks, the issue is closed. There are
# no exemptions besides removing the awaiting-reply label.
uses: actions/stale@v9
with:
# GitHub Actions API Rate limit is 1000/hr
operations-per-run: ${{ env.OPERATIONS_RATE_LIMIT }}
only-labels: awaiting-reply
stale-issue-label: unresponsive
stale-pr-label: unresponsive
remove-stale-when-updated: awaiting-reply
days-before-stale: ${{ env.UNRESPONSIVE_WARNING_DAYS }}
days-before-close: ${{ env.UNRESPONSIVE_CLOSURE_DAYS }}
stale-issue-message: >
This issue has not received a response in ${{ env.UNRESPONSIVE_WARNING_DAYS }} days.
If no response is received in ${{ env.UNRESPONSIVE_CLOSURE_DAYS }} days, it will be
closed. We look forward to hearing from you.
close-issue-message: >
This issue was closed because no response was received.
stale-pr-message: >
This PR has not received a response in ${{ env.UNRESPONSIVE_WARNING_DAYS }} days.
If no response is received in ${{ env.UNRESPONSIVE_CLOSURE_DAYS }} days, it will be
closed. We look forward to hearing from you.
close-pr-message: >
This PR was closed because no response was received.
- name: Reminders on Confirmed Issues/PRs
# Posts a reminder when confirmed issues are not updated in a timely manner.
# The timer is initiated by a maintainer by placing the confirmed label on
# the issue or PR (which prevents stale closure), however, to prevent it being
# forgotten completely, this job will post a reminder message to the maintainers
# No closures will occur and there are no exemptions besides removing the confirmed
# label.
uses: actions/stale@v9
with:
# GitHub Actions API Rate limit is 1000/hr
operations-per-run: ${{ env.OPERATIONS_RATE_LIMIT }}
only-labels: confirmed
stale-issue-label: needs-update
stale-pr-label: needs-update
days-before-stale: ${{ env.REMINDER_WINDOW }}
days-before-close: -1 # never close
stale-issue-message: >
It has been ${{ env.REMINDER_WINDOW }} days since the last update on this confirmed
issue. @python-semantic-release/team can you provide an update on the status of this
issue?
stale-pr-message: >
It has been ${{ env.REMINDER_WINDOW }} days since the last update on this confirmed
PR. @python-semantic-release/team can you provide an update on the status of this PR?
python-semantic-release-9.21.0/.github/workflows/validate.yml 0000664 0000000 0000000 00000036117 14756704352 0024301 0 ustar 00root root 0000000 0000000 ---
name: Validation Pipeline
on:
# Enable workflow as callable from another workflow
workflow_call:
inputs:
python-versions-linux:
description: 'Python versions to test on Linux (JSON array)'
required: true
type: string
python-versions-windows:
description: 'Python versions to test on Windows (JSON array)'
required: true
type: string
files-changed:
description: 'Boolean string result for if any files have changed'
type: string
required: false
default: 'false'
build-files-changed:
description: 'Boolean string result for if build files have changed'
type: string
required: false
default: 'false'
ci-files-changed:
description: 'Boolean string result for if CI files have changed'
type: string
required: false
default: 'false'
doc-files-changed:
description: 'Boolean string result for if documentation files have changed'
type: string
required: false
default: 'false'
src-files-changed:
description: 'Boolean string result for if source files have changed'
type: string
required: false
default: 'false'
test-files-changed:
description: 'Boolean string result for if test files have changed'
type: string
required: false
default: 'false'
outputs:
new-release-detected:
description: Boolean string result for if new release is available
value: ${{ jobs.build.outputs.new-release-detected }}
new-release-version:
description: Version string for the new release
value: ${{ jobs.build.outputs.new-release-version }}
new-release-tag:
description: Tag string for the new release
value: ${{ jobs.build.outputs.new-release-tag }}
new-release-is-prerelease:
description: Boolean string result for if new release is a pre-release
value: ${{ jobs.build.outputs.new-release-is-prerelease }}
distribution-artifacts:
description: Artifact Download name for the distribution artifacts
value: ${{ jobs.build.outputs.distribution-artifacts }}
# secrets: none required ATT
# set default Token permissions = none
permissions: {}
env:
LOWEST_PYTHON_VERSION: '3.8'
COMMON_PYTHON_VERSION: '3.11'
jobs:
build:
name: Build
runs-on: ubuntu-latest
if: ${{ inputs.build-files-changed == 'true' || inputs.src-files-changed == 'true' || inputs.test-files-changed == 'true' || inputs.ci-files-changed == 'true' }}
steps:
- name: Setup | Checkout Repository at workflow sha
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
fetch-depth: 0
- name: Setup | Force correct release branch on workflow sha
run: |
git checkout -B ${{ github.ref_name }}
- name: Setup | Install Python ${{ env.COMMON_PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.COMMON_PYTHON_VERSION }}
cache: 'pip'
- name: Setup | Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -e .[build]
- name: Build | Build next version artifacts
id: version
uses: python-semantic-release/python-semantic-release@v9.20.0
with:
github_token: ""
root_options: "-v"
build: true
changelog: true
commit: false
push: false
tag: false
vcs_release: false
- name: Build | Annotate next version
if: steps.version.outputs.released == 'true'
run: |
printf '%s\n' "::notice::Next release will be '${{ steps.version.outputs.tag }}'"
- name: Build | Create non-versioned distribution artifact
if: steps.version.outputs.released == 'false'
run: python -m build .
- name: Build | Set distribution artifact variables
id: build
run: |
printf '%s\n' "dist_dir=dist/*" >> $GITHUB_OUTPUT
printf '%s\n' "artifacts_name=dist" >> $GITHUB_OUTPUT
- name: Upload | Distribution Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build.outputs.artifacts_name }}
path: ${{ steps.build.outputs.dist_dir }}
if-no-files-found: error
retention-days: 2
outputs:
new-release-detected: ${{ steps.version.outputs.released }}
new-release-version: ${{ steps.version.outputs.version }}
new-release-tag: ${{ steps.version.outputs.tag }}
new-release-is-prerelease: ${{ steps.version.outputs.is_prerelease }}
distribution-artifacts: ${{ steps.build.outputs.artifacts_name }}
unit-test:
name: Unit Tests
if: ${{ inputs.src-files-changed == 'true' || inputs.test-files-changed == 'true' || inputs.ci-files-changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
fetch-depth: 1
- name: Setup | Install Python ${{ env.LOWEST_PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.LOWEST_PYTHON_VERSION }}
cache: 'pip'
- name: Setup | Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -e .[test]
pip install pytest-github-actions-annotate-failures
- name: Test | Run pytest -m unit --comprehensive
id: tests
run: |
pytest \
-vv \
-nauto \
-m unit \
--comprehensive \
--cov=semantic_release \
--cov-context=test \
--cov-report=term-missing \
--cov-fail-under=60 \
--junit-xml=tests/reports/pytest-results.xml
- name: Report | Upload Test Results
uses: mikepenz/action-junit-report@v5.3.0
if: ${{ always() && steps.tests.outcome != 'skipped' }}
with:
report_paths: ./tests/reports/*.xml
annotate_only: true
test-linux:
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} E2E tests
runs-on: ${{ matrix.os }}
needs:
- build
- unit-test
if: ${{ inputs.src-files-changed == 'true' || inputs.test-files-changed == 'true' || inputs.ci-files-changed == 'true' }}
strategy:
matrix:
python-version: ${{ fromJson(inputs.python-versions-linux) }}
os:
- ubuntu-latest
steps:
- name: Setup | Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
fetch-depth: 1
- name: Setup | Install Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Setup | Download Distribution Artifacts
uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.distribution-artifacts }}
path: ./dist
- name: Setup | Install dependencies
id: install
# To ensure we are testing our installed package (not the src code), we must
# uninstall the editable install (symlink) first then install the distribution artifact.
# Lastly, we ask python to give us the installation location of our distribution artifact
# so that we can use it in the pytest command for coverage
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -e .[test]
pip install pytest-github-actions-annotate-failures
pip uninstall -y python-semantic-release
pip install dist/python_semantic_release-*.whl
python -c 'import pathlib, semantic_release; print(f"PKG_INSTALLED_DIR={pathlib.Path(semantic_release.__file__).resolve().parent}")' >> $GITHUB_OUTPUT
- name: Test | Run pytest -m e2e --comprehensive
id: tests
run: |
pytest \
-vv \
-nauto \
-m e2e \
--comprehensive \
--cov=${{ steps.install.outputs.PKG_INSTALLED_DIR }} \
--cov-context=test \
--cov-report=term-missing \
--cov-fail-under=70 \
--junit-xml=tests/reports/pytest-results.xml
- name: Report | Upload Cached Repos on Failure
uses: actions/upload-artifact@v4
if: ${{ failure() && steps.tests.outcome == 'failure' }}
with:
name: ${{ format('cached-repos-{0}-{1}', matrix.os, matrix.python-version) }}
path: .pytest_cache/d/psr-*
include-hidden-files: true
if-no-files-found: error
retention-days: 1
- name: Report | Upload Tested Repos on Failure
uses: actions/upload-artifact@v4
if: ${{ failure() && steps.tests.outcome == 'failure' }}
with:
name: ${{ format('tested-repos-{0}-{1}', matrix.os, matrix.python-version) }}
path: /tmp/pytest-of-runner/pytest-current/*
include-hidden-files: true
if-no-files-found: error
retention-days: 1
- name: Report | Upload Test Results
uses: mikepenz/action-junit-report@v5.3.0
if: ${{ always() && steps.tests.outcome != 'skipped' }}
with:
report_paths: ./tests/reports/*.xml
annotate_only: true
test-windows:
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} E2E tests
runs-on: ${{ matrix.os }}
needs:
- build
- unit-test
if: ${{ inputs.src-files-changed == 'true' || inputs.test-files-changed == 'true' || inputs.ci-files-changed == 'true' }}
strategy:
matrix:
python-version: ${{ fromJson(inputs.python-versions-windows) }}
os: [windows-latest]
steps:
- name: Setup | Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
fetch-depth: 1
- name: Setup | Install Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Setup | Download Distribution Artifacts
uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.distribution-artifacts }}
path: dist
- name: Setup | Install dependencies
id: install
# To ensure we are testing our installed package (not the src code), we must
# uninstall the editable install (symlink) first then install the distribution artifact.
# Lastly, we ask python to give us the installation location of our distribution artifact
# so that we can use it in the pytest command for coverage
shell: pwsh
run: |
$ErrorActionPreference = 'stop'
python -m pip install --upgrade pip setuptools wheel
pip install -e .[test]
pip install pytest-github-actions-annotate-failures
pip uninstall -y python-semantic-release
$psrWheelFile = Get-ChildItem dist\python_semantic_release-*.whl -File | Select-Object -Index 0
pip install "$psrWheelFile"
python -c 'import pathlib, semantic_release; print(f"PKG_INSTALLED_DIR={pathlib.Path(semantic_release.__file__).resolve().parent}")' | Tee-Object -Variable cmdOutput
echo $cmdOutput >> $env:GITHUB_OUTPUT
- name: Test | Run pytest -m e2e
id: tests
shell: pwsh
# env:
# Required for GitPython to work on Windows because of getpass.getuser()
# USERNAME: "runneradmin"
# Because GHA is currently broken on Windows to pass these varables, we do it manually
run: |
$env:USERNAME = "runneradmin"
pytest `
-vv `
-nauto `
-m e2e `
`--cov=${{ steps.install.outputs.PKG_INSTALLED_DIR }} `
`--cov-context=test `
`--cov-report=term-missing `
`--junit-xml=tests/reports/pytest-results.xml
- name: Report | Upload Cached Repos on Failure
uses: actions/upload-artifact@v4
if: ${{ failure() && steps.tests.outcome == 'failure' }}
with:
name: ${{ format('cached-repos-{0}-{1}', matrix.os, matrix.python-version) }}
path: .pytest_cache/d/psr-*
include-hidden-files: true
if-no-files-found: error
retention-days: 1
- name: Report | Upload Tested Repos on Failure
uses: actions/upload-artifact@v4
if: ${{ failure() && steps.tests.outcome == 'failure' }}
with:
name: ${{ format('tested-repos-{0}-{1}', matrix.os, matrix.python-version) }}
path: ~/AppData/Local/Temp/pytest-of-runneradmin/pytest-current/*
include-hidden-files: true
if-no-files-found: error
retention-days: 1
- name: Report | Upload Test Results
uses: mikepenz/action-junit-report@v5.3.0
if: ${{ always() && steps.tests.outcome != 'skipped' }}
with:
report_paths: ./tests/reports/*.xml
annotate_only: true
lint:
name: Lint
if: ${{ inputs.files-changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
fetch-depth: 1
- name: Setup | Install Python ${{ env.COMMON_PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.COMMON_PYTHON_VERSION }}
cache: 'pip'
- name: Setup | Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -e .[dev,mypy,test]
# needs test because we run mypy over the tests as well and without the dependencies
# mypy will throw import errors
- name: Lint | Ruff Evaluation
id: lint
run: |
ruff check \
--config pyproject.toml \
--output-format=full \
--exit-non-zero-on-fix
- name: Type-Check | MyPy Evaluation
id: type-check
if: ${{ always() && steps.lint.outcome != 'skipped' }}
run: |
mypy .
- name: Format-Check | Ruff Evaluation
id: format-check
if: ${{ always() && steps.type-check.outcome != 'skipped' }}
run: |
ruff format --check --config pyproject.toml
python-semantic-release-9.21.0/.github/workflows/verify_upstream.sh 0000664 0000000 0000000 00000001742 14756704352 0025541 0 ustar 00root root 0000000 0000000 #!/bin/bash
set -eu +o pipefail
# Example output of `git status -sb`:
# ## master...origin/master [behind 1]
# M .github/workflows/verify_upstream.sh
UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | cut -d' ' -f2 | grep -E '\.{3}' | cut -d'.' -f4)"
printf '%s\n' "Upstream branch name: $UPSTREAM_BRANCH_NAME"
set -o pipefail
if [ -z "$UPSTREAM_BRANCH_NAME" ]; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch name!"
exit 1
fi
git fetch "${UPSTREAM_BRANCH_NAME%%/*}"
if ! UPSTREAM_SHA="$(git rev-parse "$UPSTREAM_BRANCH_NAME")"; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch sha!"
exit 1
fi
HEAD_SHA="$(git rev-parse HEAD)"
if [ "$HEAD_SHA" != "$UPSTREAM_SHA" ]; then
printf >&2 '%s\n' "[HEAD SHA] $HEAD_SHA != $UPSTREAM_SHA [UPSTREAM SHA]"
printf >&2 '%s\n' "::error::Upstream has changed, aborting release..."
exit 1
fi
printf '%s\n' "Verified upstream branch has not changed, continuing with release..."
python-semantic-release-9.21.0/.gitignore 0000664 0000000 0000000 00000001457 14756704352 0020357 0 ustar 00root root 0000000 0000000 # Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
*.so
# Distribution / packaging
.Python
.venv
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
venv/
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# PyCharm
.idea
*.iml
# VSCode
.vscode/
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
docs/api/
# PyBuilder
target/
.pytest_cache
.mypy_cache
.python-version
*.swp
python-semantic-release-9.21.0/.pre-commit-config.yaml 0000664 0000000 0000000 00000005056 14756704352 0022647 0 ustar 00root root 0000000 0000000 ---
default_language_version:
python: python3
exclude: "^CHANGELOG.md$"
repos:
# Meta hooks
- repo: meta
hooks:
- id: check-hooks-apply
- id: check-useless-excludes
# Security & credential scanning/alerting
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: debug-statements
- id: detect-aws-credentials
args: ["--allow-missing-credentials"]
- id: detect-private-key
- id: check-builtin-literals
- id: check-yaml
- id: check-toml
- id: check-case-conflict
- id: end-of-file-fixer
- id: trailing-whitespace
- id: check-merge-conflict
- id: mixed-line-ending
- id: check-ast
- repo: https://github.com/asottile/pyupgrade
rev: v3.16.0
hooks:
- id: pyupgrade
args: ["--py38-plus", "--keep-runtime-typing"]
# Linters and validation
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.1
hooks:
- id: ruff
name: ruff (lint)
args:
- "--fix"
- "--exit-non-zero-on-fix"
- "--statistics"
- "--output-format=full"
- id: ruff-format
name: ruff (format)
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.15.0"
hooks:
- id: mypy
additional_dependencies:
- "pydantic>=2,<3"
- "types-requests"
log_file: "mypy.log"
files: "^src/.*"
pass_filenames: false
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
hooks:
# - id: python-use-type-annotations
- id: python-check-blanket-noqa
- id: python-check-mock-methods
- id: python-no-eval
- id: python-no-log-warn
- id: rst-backticks
- id: rst-directive-colons
- id: rst-inline-touching-normal
- repo: https://github.com/jendrikseipp/vulture
rev: "v2.11"
hooks:
- id: vulture
args:
- --min-confidence
- "100"
- --sort-by-size
- "semantic_release"
- "tests"
- repo: https://github.com/pycqa/bandit
rev: 1.7.8
hooks:
- id: bandit
args:
- "-c"
- "pyproject.toml"
- "--quiet"
- "src/"
# Needed if using pyproject.toml for config
additional_dependencies: ["bandit[toml]"]
pass_filenames: false
# GHA linting
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: "0.28.0"
hooks:
- id: check-github-workflows
- id: check-readthedocs
- id: check-dependabot
python-semantic-release-9.21.0/.readthedocs.yml 0000664 0000000 0000000 00000000356 14756704352 0021452 0 ustar 00root root 0000000 0000000 ---
version: 2
sphinx:
configuration: docs/conf.py
builder: html
formats:
- htmlzip
python:
install:
- method: pip
path: .
extra_requirements:
- docs
build:
os: "ubuntu-22.04"
tools:
python: "3"
python-semantic-release-9.21.0/AUTHORS.rst 0000664 0000000 0000000 00000000346 14756704352 0020242 0 ustar 00root root 0000000 0000000 Contributors
------------
|contributors|
.. |contributors| image:: https://contributors-img.web.app/image?repo=relekang/python-semantic-release
:target: https://github.com/relekang/python-semantic-release/graphs/contributors
python-semantic-release-9.21.0/CHANGELOG.rst 0000664 0000000 0000000 00000606107 14756704352 0020413 0 ustar 00root root 0000000 0000000 .. _changelog:
=========
CHANGELOG
=========
.. _changelog-v9.21.0:
v9.21.0 (2025-02-23)
====================
✨ Features
-----------
* Add package name variant, ``python-semantic-release``, project script, closes `#1195`_
(`PR#1199`_, `1ac97bc`_)
📖 Documentation
----------------
* **github-actions**: Update example workflow to handle rapid merges (`PR#1200`_, `1a4116a`_)
.. _#1195: https://github.com/python-semantic-release/python-semantic-release/issues/1195
.. _1a4116a: https://github.com/python-semantic-release/python-semantic-release/commit/1a4116af4b999144998cf94cf84c9c23ff2e352f
.. _1ac97bc: https://github.com/python-semantic-release/python-semantic-release/commit/1ac97bc74c69ce61cec98242c19bf8adc1d37fb9
.. _PR#1199: https://github.com/python-semantic-release/python-semantic-release/pull/1199
.. _PR#1200: https://github.com/python-semantic-release/python-semantic-release/pull/1200
.. _changelog-v9.20.0:
v9.20.0 (2025-02-17)
====================
✨ Features
-----------
* **cmd-version**: Enable stamping of tag formatted versions into files, closes `#846`_ (`PR#1190`_,
`8906d8e`_)
* **cmd-version**: Extend ``version_variables`` to stamp versions with ``@`` symbol separator,
closes `#1156`_ (`PR#1185`_, `23f69b6`_)
📖 Documentation
----------------
* **configuration**: Add usage information for tag format version stamping (`PR#1190`_, `8906d8e`_)
* **configuration**: Clarify ``version_variables`` config description & ``@`` separator usage
(`PR#1185`_, `23f69b6`_)
⚙️ Build System
----------------
* **deps**: Add ``deprecated~=1.2`` for deprecation notices & sphinx documentation (`PR#1190`_,
`8906d8e`_)
.. _#1156: https://github.com/python-semantic-release/python-semantic-release/issues/1156
.. _#846: https://github.com/python-semantic-release/python-semantic-release/issues/846
.. _23f69b6: https://github.com/python-semantic-release/python-semantic-release/commit/23f69b6ac206d111b1e566367f9b2f033df5c87a
.. _8906d8e: https://github.com/python-semantic-release/python-semantic-release/commit/8906d8e70467af1489d797ec8cb09b1f95e5d409
.. _PR#1185: https://github.com/python-semantic-release/python-semantic-release/pull/1185
.. _PR#1190: https://github.com/python-semantic-release/python-semantic-release/pull/1190
.. _changelog-v9.19.1:
v9.19.1 (2025-02-11)
====================
🪲 Bug Fixes
------------
* **changelog**: Standardize heading format for across all version sections (`PR#1182`_, `81f9e80`_)
* **changelog-md**: Standardize heading format for extra release information (`PR#1182`_,
`81f9e80`_)
* **changelog-rst**: Standardize heading format for extra release information (`PR#1182`_,
`81f9e80`_)
* **config**: Handle invalid ``commit_parser`` type gracefully (`PR#1180`_, `903c8ba`_)
* **release-notes**: Standardize heading format for extra release information (`PR#1182`_,
`81f9e80`_)
📖 Documentation
----------------
* Fix spelling errors & inaccurate descriptions (`55d4a05`_)
* **automatic-releases**: Declutter the table of contents for automatic release guides (`e8343ee`_)
* **commit-parsing**: Update reference to section name of additional release info (`PR#1182`_,
`81f9e80`_)
.. _55d4a05: https://github.com/python-semantic-release/python-semantic-release/commit/55d4a05ff56321cf9874f8f302fbe7e5163ad4f7
.. _81f9e80: https://github.com/python-semantic-release/python-semantic-release/commit/81f9e80c3df185ef5e553e024b903ce153e14304
.. _903c8ba: https://github.com/python-semantic-release/python-semantic-release/commit/903c8ba68d797f7cd9e5025c9a3a3ad471c805ae
.. _e8343ee: https://github.com/python-semantic-release/python-semantic-release/commit/e8343eeb38d3b4e18953ac0f97538df396d22b76
.. _PR#1180: https://github.com/python-semantic-release/python-semantic-release/pull/1180
.. _PR#1182: https://github.com/python-semantic-release/python-semantic-release/pull/1182
.. _changelog-v9.19.0:
v9.19.0 (2025-02-10)
====================
✨ Features
-----------
* **parser-conventional**: Add official ``conventional-commits`` parser (`PR#1177`_, `27ddf84`_)
📖 Documentation
----------------
* Update references to Angular parser to Conventional Commit Parser (`PR#1177`_, `27ddf84`_)
💡 ADDITIONAL RELEASE INFORMATION
---------------------------------
* **parser-conventional**: The 'angular' commit parser has been renamed to 'conventional' to match
the official conventional-commits standard for which the 'angular' parser has evolved into. Please
update your configurations to specify 'conventional' as the 'commit_parser' value in place of
'angular'. The 'angular' type will be removed in v11.
.. _27ddf84: https://github.com/python-semantic-release/python-semantic-release/commit/27ddf840f8c812361c60bac9cf0b110d401f33d6
.. _PR#1177: https://github.com/python-semantic-release/python-semantic-release/pull/1177
.. _changelog-v9.18.1:
v9.18.1 (2025-02-08)
====================
🪲 Bug Fixes
------------
* **config**: Refactors default token resolution to prevent pre-mature insecure URL error, closes
`#1074`_, `#1169`_ (`PR#1173`_, `37db258`_)
.. _#1074: https://github.com/python-semantic-release/python-semantic-release/issues/1074
.. _#1169: https://github.com/python-semantic-release/python-semantic-release/issues/1169
.. _37db258: https://github.com/python-semantic-release/python-semantic-release/commit/37db2581620ad02e66716a4b3b365aa28abe65f8
.. _PR#1173: https://github.com/python-semantic-release/python-semantic-release/pull/1173
.. _changelog-v9.18.0:
v9.18.0 (2025-02-06)
====================
✨ Features
-----------
* Add ``create_release_url`` & ``format_w_official_vcs_name`` filters (`PR#1161`_, `f853cf0`_)
* **changelog**: Add ``create_pypi_url`` filter to jinja template render context (`PR#1160`_,
`45d49c3`_)
* **changelog**: Add additional release info to changeling from commit ``NOTICE``'s (`PR#1166`_,
`834ce32`_)
* **changelog-md**: Add additional release info section to default markdown template, closes `#223`_
(`PR#1166`_, `834ce32`_)
* **changelog-rst**: Add additional release info section to default ReStructuredText template,
closes `#223`_ (`PR#1166`_, `834ce32`_)
* **commit-parser**: Enable parsers to identify additional release notices from commit msgs
(`PR#1166`_, `834ce32`_)
* **parser-angular**: Add a ``ignore_merge_commits`` option to discard parsing merge commits
(`PR#1164`_, `463e43b`_)
* **parser-angular**: Add functionality to parse out ``NOTICE:`` prefixed statements in commits,
closes `#223`_ (`PR#1166`_, `834ce32`_)
* **parser-emoji**: Add a ``ignore_merge_commits`` option to discard parsing merge commits
(`PR#1164`_, `463e43b`_)
* **parser-emoji**: Add functionality to parse out ``NOTICE:`` prefixed statements in commits,
closes `#223`_ (`PR#1166`_, `834ce32`_)
* **parsers**: Add option ``ignore_merge_commits`` to discard parsing merge commits (`PR#1164`_,
`463e43b`_)
* **release-notes**: Add license information to default release notes template, closes `#228`_
(`PR#1167`_, `41172c1`_)
* **vcs-bitbucket**: Add ``format_w_official_vcs_name`` filter function (`PR#1161`_, `f853cf0`_)
* **vcs-gitea**: Add ``create_release_url`` & ``format_w_official_vcs_name`` filter functions
(`PR#1161`_, `f853cf0`_)
* **vcs-github**: Add ``create_release_url`` & ``format_w_official_vcs_name`` filter functions
(`PR#1161`_, `f853cf0`_)
* **vcs-gitlab**: Add ``create_release_url`` & ``format_w_official_vcs_name`` filter functions
(`PR#1161`_, `f853cf0`_)
🪲 Bug Fixes
------------
* Refactor parsing compatibility function to support older custom parsers (`PR#1165`_, `cf340c5`_)
* **changelog**: Fix parsing compatibility w/ custom parsers, closes `#1162`_ (`PR#1165`_,
`cf340c5`_)
* **changelog-templates**: Adjust default templates to avoid empty version sections (`PR#1164`_,
`463e43b`_)
* **parser-angular**: Adjust parser to prevent empty message extractions (`PR#1166`_, `834ce32`_)
* **parser-emoji**: Adjust parser to prevent empty message extractions (`PR#1166`_, `834ce32`_)
* **version**: Fix parsing compatibility w/ custom parsers, closes `#1162`_ (`PR#1165`_, `cf340c5`_)
📖 Documentation
----------------
* **changelog**: Add formatted changelog into hosted documentation (`PR#1155`_, `2f18a6d`_)
* **changelog-templates**: Add description for new ``create_pypi_url`` filter function (`PR#1160`_,
`45d49c3`_)
* **changelog-templates**: Add details about license specification in the release notes (`PR#1167`_,
`41172c1`_)
* **changelog-templates**: Define ``create_release_url`` & ``format_w_official_vcs_name`` filters
(`PR#1161`_, `f853cf0`_)
* **changelog-templates**: Document special separate sections of commit descriptions (`ebb4c67`_)
* **commit-parsing**: Document new release notice footer detection feature of built-in parsers
(`cd14e92`_)
.. _#1162: https://github.com/python-semantic-release/python-semantic-release/issues/1162
.. _#223: https://github.com/python-semantic-release/python-semantic-release/issues/223
.. _#228: https://github.com/python-semantic-release/python-semantic-release/issues/228
.. _2f18a6d: https://github.com/python-semantic-release/python-semantic-release/commit/2f18a6debfa6ef3afcc5611a3e09262998f2d4bf
.. _41172c1: https://github.com/python-semantic-release/python-semantic-release/commit/41172c1272a402e94e3c68571d013cbdcb5b9023
.. _45d49c3: https://github.com/python-semantic-release/python-semantic-release/commit/45d49c3da75a7f08c86fc9bab5d232a9b37d9e72
.. _463e43b: https://github.com/python-semantic-release/python-semantic-release/commit/463e43b897ee80dfaf7ce9d88d22ea8e652bcf55
.. _834ce32: https://github.com/python-semantic-release/python-semantic-release/commit/834ce323007c58229abf115ef2016a348de9ee66
.. _cd14e92: https://github.com/python-semantic-release/python-semantic-release/commit/cd14e9209d4e54f0876e737d1f802dded294a48c
.. _cf340c5: https://github.com/python-semantic-release/python-semantic-release/commit/cf340c5256dea58aedad71a6bdf50b17eee53d2f
.. _ebb4c67: https://github.com/python-semantic-release/python-semantic-release/commit/ebb4c67d46b86fdf79e32edf744a2ec2b09d6a93
.. _f853cf0: https://github.com/python-semantic-release/python-semantic-release/commit/f853cf059b3323d7888b06fde09142184e7964e8
.. _PR#1155: https://github.com/python-semantic-release/python-semantic-release/pull/1155
.. _PR#1160: https://github.com/python-semantic-release/python-semantic-release/pull/1160
.. _PR#1161: https://github.com/python-semantic-release/python-semantic-release/pull/1161
.. _PR#1164: https://github.com/python-semantic-release/python-semantic-release/pull/1164
.. _PR#1165: https://github.com/python-semantic-release/python-semantic-release/pull/1165
.. _PR#1166: https://github.com/python-semantic-release/python-semantic-release/pull/1166
.. _PR#1167: https://github.com/python-semantic-release/python-semantic-release/pull/1167
.. _changelog-v9.17.0:
v9.17.0 (2025-01-26)
====================
✨ Features
-----------
* **changelog**: Add ``sort_numerically`` filter function to template environment (`PR#1146`_,
`7792388`_)
* **changelog**: Parse squashed commits individually (`PR#1112`_, `cf785ca`_)
* **config**: Extend support of remote urls aliased using git ``insteadOf`` configurations, closes
`#1150`_ (`PR#1151`_, `4045037`_)
* **parsers**: Parse squashed commits individually (`PR#1112`_, `cf785ca`_)
* **parser-angular**: Apply PR/MR numbers to all parsed commits from a squash merge (`PR#1112`_,
`cf785ca`_)
* **parser-angular**: Upgrade angular parser to parse squashed commits individually, closes `#1085`_
(`PR#1112`_, `cf785ca`_)
* **parser-emoji**: Add functionality to interpret scopes from gitmoji commit messages (`PR#1112`_,
`cf785ca`_)
* **parser-emoji**: Upgrade emoji parser to parse squashed commits individually (`PR#1112`_,
`cf785ca`_)
* **version**: Parse squashed commits individually (`PR#1112`_, `cf785ca`_)
🪲 Bug Fixes
------------
* **github-action**: Disable writing python bytecode in action execution (`PR#1152`_, `315ae21`_)
⚡ Performance Improvements
---------------------------
* **logging**: Remove irrelevant debug logging statements (`PR#1147`_, `f1ef4ec`_)
📖 Documentation
----------------
* **changelog-templates**: Add description for new ``sort_numerically`` filter function (`PR#1146`_,
`7792388`_)
* **commit-parsing**: Add description for squash commit evaluation option of default parsers
(`PR#1112`_, `cf785ca`_)
* **configuration**: Update the ``commit_parser_options`` setting description (`PR#1112`_,
`cf785ca`_)
.. _#1085: https://github.com/python-semantic-release/python-semantic-release/issues/1085
.. _#1150: https://github.com/python-semantic-release/python-semantic-release/issues/1150
.. _315ae21: https://github.com/python-semantic-release/python-semantic-release/commit/315ae2176e211b00b13374560d81e127a3065d1a
.. _4045037: https://github.com/python-semantic-release/python-semantic-release/commit/40450375c7951dafddb09bef8001db7180d95f3a
.. _7792388: https://github.com/python-semantic-release/python-semantic-release/commit/77923885c585171e8888aacde989837ecbabf3fc
.. _cf785ca: https://github.com/python-semantic-release/python-semantic-release/commit/cf785ca79a49eb4ee95c148e0ae6a19e230e915c
.. _f1ef4ec: https://github.com/python-semantic-release/python-semantic-release/commit/f1ef4ecf5f22684a870b958f87d1ca2650e612db
.. _PR#1112: https://github.com/python-semantic-release/python-semantic-release/pull/1112
.. _PR#1146: https://github.com/python-semantic-release/python-semantic-release/pull/1146
.. _PR#1147: https://github.com/python-semantic-release/python-semantic-release/pull/1147
.. _PR#1151: https://github.com/python-semantic-release/python-semantic-release/pull/1151
.. _PR#1152: https://github.com/python-semantic-release/python-semantic-release/pull/1152
.. _changelog-v9.16.1:
v9.16.1 (2025-01-12)
====================
🪲 Bug Fixes
------------
* **parser-custom**: Handle relative parent directory paths to module file better (`PR#1142`_,
`c4056fc`_)
📖 Documentation
----------------
* **github-actions**: Update PSR versions in github workflow examples (`PR#1140`_, `9bdd626`_)
.. _9bdd626: https://github.com/python-semantic-release/python-semantic-release/commit/9bdd626bf8f8359d35725cebe803931063260cac
.. _c4056fc: https://github.com/python-semantic-release/python-semantic-release/commit/c4056fc2e1fb3bddb78728793716ac6fb8522b1a
.. _PR#1140: https://github.com/python-semantic-release/python-semantic-release/pull/1140
.. _PR#1142: https://github.com/python-semantic-release/python-semantic-release/pull/1142
.. _changelog-v9.16.0:
v9.16.0 (2025-01-12)
====================
✨ Features
-----------
* **config**: Expand dynamic parser import to handle a filepath to module (`PR#1135`_, `0418fd8`_)
🪲 Bug Fixes
------------
* **changelog**: Fixes PSR release commit exclusions for customized commit messages (`PR#1139`_,
`f9a2078`_)
* **cmd-version**: Fixes ``--print-tag`` result to match configured tag format (`PR#1134`_,
`a990aa7`_)
* **cmd-version**: Fixes tag format on default version when force bump for initial release, closes
`#1137`_ (`PR#1138`_, `007fd00`_)
* **config-changelog**: Validate ``changelog.exclude_commit_patterns`` on config load (`PR#1139`_,
`f9a2078`_)
📖 Documentation
----------------
* **commit-parsing**: Add the new custom parser import spec description for direct path imports,
closes `#687`_ (`PR#1135`_, `0418fd8`_)
* **configuration**: Adjust ``commit_parser`` option definition for direct path imports (`PR#1135`_,
`0418fd8`_)
.. _#687: https://github.com/python-semantic-release/python-semantic-release/issues/687
.. _#1137: https://github.com/python-semantic-release/python-semantic-release/issues/1137
.. _007fd00: https://github.com/python-semantic-release/python-semantic-release/commit/007fd00a3945ed211ece4baab0b79ad93dc018f5
.. _0418fd8: https://github.com/python-semantic-release/python-semantic-release/commit/0418fd8d27aac14925aafa50912e751e3aeff2f7
.. _a990aa7: https://github.com/python-semantic-release/python-semantic-release/commit/a990aa7ab0a9d52d295c04d54d20e9c9f2db2ca5
.. _f9a2078: https://github.com/python-semantic-release/python-semantic-release/commit/f9a20787437d0f26074fe2121bf0a29576a96df0
.. _PR#1134: https://github.com/python-semantic-release/python-semantic-release/pull/1134
.. _PR#1135: https://github.com/python-semantic-release/python-semantic-release/pull/1135
.. _PR#1138: https://github.com/python-semantic-release/python-semantic-release/pull/1138
.. _PR#1139: https://github.com/python-semantic-release/python-semantic-release/pull/1139
.. _changelog-v9.15.2:
v9.15.2 (2024-12-16)
====================
🪲 Bug Fixes
------------
* **changelog**: Ensures user rendered files are trimmed to end with a single newline (`PR#1118`_,
`6dfbbb0`_)
* **cli**: Add error message of how to gather full error output (`PR#1116`_, `ba85532`_)
* **cmd-version**: Enable maintenance prereleases (`PR#864`_, `b88108e`_)
* **cmd-version**: Fix handling of multiple prerelease token variants & git flow merges (`PR#1120`_,
`8784b9a`_)
* **cmd-version**: Fix version determination algorithm to capture commits across merged branches
(`PR#1120`_, `8784b9a`_)
* **cmd-version**: Forces tag timestamp to be same time as release commit (`PR#1117`_, `7898b11`_)
* **cmd-version**: Handle multiple prerelease token variants properly, closes `#789`_ (`PR#1120`_,
`8784b9a`_)
* **config**: Ensure default config loads on network mounted windows environments, closes `#1123`_
(`PR#1124`_, `a64cbc9`_)
* **version**: Remove some excessive log msgs from debug to silly level (`PR#1120`_, `8784b9a`_)
* **version-bump**: Increment based on current commit's history only, closes `#861`_ (`PR#864`_,
`b88108e`_)
⚡ Performance Improvements
---------------------------
* **cmd-version**: Refactor version determination algorithm for accuracy & speed (`PR#1120`_,
`8784b9a`_)
.. _#789: https://github.com/python-semantic-release/python-semantic-release/issues/789
.. _#861: https://github.com/python-semantic-release/python-semantic-release/issues/861
.. _#1123: https://github.com/python-semantic-release/python-semantic-release/issues/1123
.. _6dfbbb0: https://github.com/python-semantic-release/python-semantic-release/commit/6dfbbb0371aef6b125cbcbf89b80dc343ed97360
.. _7898b11: https://github.com/python-semantic-release/python-semantic-release/commit/7898b1185fc1ad10e96bf3f5e48d9473b45d2b51
.. _8784b9a: https://github.com/python-semantic-release/python-semantic-release/commit/8784b9ad4bc59384f855b5af8f1b8fb294397595
.. _a64cbc9: https://github.com/python-semantic-release/python-semantic-release/commit/a64cbc96c110e32f1ec5d1a7b61e950472491b87
.. _b88108e: https://github.com/python-semantic-release/python-semantic-release/commit/b88108e189e1894e36ae4fdf8ad8a382b5c8c90a
.. _ba85532: https://github.com/python-semantic-release/python-semantic-release/commit/ba85532ddd6fcf1a2205f7ce0b88ea5be76cb621
.. _PR#864: https://github.com/python-semantic-release/python-semantic-release/pull/864
.. _PR#1116: https://github.com/python-semantic-release/python-semantic-release/pull/1116
.. _PR#1117: https://github.com/python-semantic-release/python-semantic-release/pull/1117
.. _PR#1118: https://github.com/python-semantic-release/python-semantic-release/pull/1118
.. _PR#1120: https://github.com/python-semantic-release/python-semantic-release/pull/1120
.. _PR#1124: https://github.com/python-semantic-release/python-semantic-release/pull/1124
.. _changelog-v9.15.1:
v9.15.1 (2024-12-03)
====================
🪲 Bug Fixes
------------
* **changelog-md**: Fix commit sort of breaking descriptions section (`75b342e`_)
* **parser-angular**: Ensure issues are sorted by numeric value rather than text sorted (`3858add`_)
* **parser-emoji**: Ensure issues are sorted by numeric value rather than text sorted (`7b8d2d9`_)
.. _3858add: https://github.com/python-semantic-release/python-semantic-release/commit/3858add582fe758dc2ae967d0cd051d43418ecd0
.. _75b342e: https://github.com/python-semantic-release/python-semantic-release/commit/75b342e6259412cb82d8b7663e5ee4536d14f407
.. _7b8d2d9: https://github.com/python-semantic-release/python-semantic-release/commit/7b8d2d92e135ab46d1be477073ccccc8c576f121
.. _changelog-v9.15.0:
v9.15.0 (2024-12-02)
====================
✨ Features
-----------
* **changelog-md**: Add a breaking changes section to default Markdown template, closes `#244`_
(`PR#1110`_, `4fde30e`_)
* **changelog-md**: Alphabetize breaking change descriptions in markdown changelog template
(`PR#1110`_, `4fde30e`_)
* **changelog-md**: Alphabetize commit summaries & scopes in markdown changelog template
(`PR#1111`_, `8327068`_)
* **changelog-rst**: Add a breaking changes section to default reStructuredText template, closes
`#244`_ (`PR#1110`_, `4fde30e`_)
* **changelog-rst**: Alphabetize breaking change descriptions in ReStructuredText template
(`PR#1110`_, `4fde30e`_)
* **changelog-rst**: Alphabetize commit summaries & scopes in ReStructuredText template (`PR#1111`_,
`8327068`_)
* **commit-parser**: Enable parsers to flag commit to be ignored for changelog, closes `#778`_
(`PR#1108`_, `0cc668c`_)
* **default-changelog**: Add a separate formatted breaking changes section, closes `#244`_
(`PR#1110`_, `4fde30e`_)
* **default-changelog**: Alphabetize commit summaries & scopes in change sections (`PR#1111`_,
`8327068`_)
* **parsers**: Add ``other_allowed_tags`` option for commit parser options (`PR#1109`_, `f90b8dc`_)
* **parsers**: Enable parsers to identify linked issues on a commit (`PR#1109`_, `f90b8dc`_)
* **parser-angular**: Automatically parse angular issue footers from commit messages (`PR#1109`_,
`f90b8dc`_)
* **parser-custom**: Enable custom parsers to identify linked issues on a commit (`PR#1109`_,
`f90b8dc`_)
* **parser-emoji**: Parse issue reference footers from commit messages (`PR#1109`_, `f90b8dc`_)
* **release-notes**: Add tag comparison link to release notes when supported (`PR#1107`_,
`9073344`_)
🪲 Bug Fixes
------------
* **cmd-version**: Ensure release utilizes a timezone aware datetime (`ca817ed`_)
* **default-changelog**: Alphabetically sort commit descriptions in version type sections
(`bdaaf5a`_)
* **util**: Prevent git footers from being collapsed during parse (`PR#1109`_, `f90b8dc`_)
📖 Documentation
----------------
* **api-parsers**: Add option documentation to parser options (`PR#1109`_, `f90b8dc`_)
* **changelog-templates**: Update examples using new ``commit.linked_issues`` attribute (`PR#1109`_,
`f90b8dc`_)
* **commit-parsing**: Improve & expand commit parsing w/ parser descriptions (`PR#1109`_,
`f90b8dc`_)
.. _#244: https://github.com/python-semantic-release/python-semantic-release/issues/244
.. _#778: https://github.com/python-semantic-release/python-semantic-release/issues/778
.. _0cc668c: https://github.com/python-semantic-release/python-semantic-release/commit/0cc668c36490401dff26bb2c3141f6120a2c47d0
.. _4fde30e: https://github.com/python-semantic-release/python-semantic-release/commit/4fde30e0936ecd186e448f1caf18d9ba377c55ad
.. _8327068: https://github.com/python-semantic-release/python-semantic-release/commit/83270683fd02b626ed32179d94fa1e3c7175d113
.. _9073344: https://github.com/python-semantic-release/python-semantic-release/commit/9073344164294360843ef5522e7e4c529985984d
.. _bdaaf5a: https://github.com/python-semantic-release/python-semantic-release/commit/bdaaf5a460ca77edc40070ee799430122132dc45
.. _ca817ed: https://github.com/python-semantic-release/python-semantic-release/commit/ca817ed9024cf84b306a047675534cc36dc116b2
.. _f90b8dc: https://github.com/python-semantic-release/python-semantic-release/commit/f90b8dc6ce9f112ef2c98539d155f9de24398301
.. _PR#1107: https://github.com/python-semantic-release/python-semantic-release/pull/1107
.. _PR#1108: https://github.com/python-semantic-release/python-semantic-release/pull/1108
.. _PR#1109: https://github.com/python-semantic-release/python-semantic-release/pull/1109
.. _PR#1110: https://github.com/python-semantic-release/python-semantic-release/pull/1110
.. _PR#1111: https://github.com/python-semantic-release/python-semantic-release/pull/1111
.. _changelog-v9.14.0:
v9.14.0 (2024-11-11)
====================
✨ Features
-----------
* **changelog**: Add md to rst conversion for markdown inline links (`cb2af1f`_)
* **changelog**: Define first release w/o change descriptions for default MD template (`fa89dec`_)
* **changelog**: Define first release w/o change descriptions for default RST template (`e30c94b`_)
* **changelog**: Prefix scopes on commit descriptions in default template (`PR#1093`_, `560fd2c`_)
* **changelog-md**: Add markdown inline link format macro (`c6d8211`_)
* **changelog-md**: Prefix scopes on commit descriptions in Markdown changelog template (`PR#1093`_,
`560fd2c`_)
* **changelog-rst**: Prefix scopes on commit descriptions in ReStructuredText template (`PR#1093`_,
`560fd2c`_)
* **configuration**: Add ``changelog.default_templates.mask_initial_release`` option (`595a70b`_)
* **context**: Add ``mask_initial_release`` setting to changelog context (`6f2ee39`_)
* **release-notes**: Define first release w/o change descriptions in default template (`83167a3`_)
🪲 Bug Fixes
------------
* **release-notes**: Override default word-wrap to non-wrap for in default template (`99ab99b`_)
📖 Documentation
----------------
* **changelog-templates**: Document new ``mask_initial_release`` changelog context variable
(`f294957`_)
* **configuration**: Document new ``mask_initial_release`` option usage & effect (`3cabcdc`_)
* **homepage**: Fix reference to new ci workflow for test status badge (`6760069`_)
.. _3cabcdc: https://github.com/python-semantic-release/python-semantic-release/commit/3cabcdcd9473e008604e74cc2d304595317e921d
.. _560fd2c: https://github.com/python-semantic-release/python-semantic-release/commit/560fd2c0d58c97318377cb83af899a336d24cfcc
.. _595a70b: https://github.com/python-semantic-release/python-semantic-release/commit/595a70bcbc8fea1f8ccf6c5069c41c35ec4efb8d
.. _6760069: https://github.com/python-semantic-release/python-semantic-release/commit/6760069e7489f50635beb5aedbbeb2cb82b7c584
.. _6f2ee39: https://github.com/python-semantic-release/python-semantic-release/commit/6f2ee39414b3cf75c0b67dee4db0146bbc1041bb
.. _83167a3: https://github.com/python-semantic-release/python-semantic-release/commit/83167a3dcceb7db16b790e1b0efd5fc75fee8942
.. _99ab99b: https://github.com/python-semantic-release/python-semantic-release/commit/99ab99bb0ba350ca1913a2bde9696f4242278972
.. _c6d8211: https://github.com/python-semantic-release/python-semantic-release/commit/c6d8211c859442df17cb41d2ff19fdb7a81cdb76
.. _cb2af1f: https://github.com/python-semantic-release/python-semantic-release/commit/cb2af1f17cf6c8ae037c6cd8bb8b4d9c019bb47e
.. _e30c94b: https://github.com/python-semantic-release/python-semantic-release/commit/e30c94bffe62b42e8dc6ed4fed6260e57b4d532b
.. _f294957: https://github.com/python-semantic-release/python-semantic-release/commit/f2949577dfb2dbf9c2ac952c1bbcc4ab84da080b
.. _fa89dec: https://github.com/python-semantic-release/python-semantic-release/commit/fa89dec239efbae7544b187f624a998fa9ecc309
.. _PR#1093: https://github.com/python-semantic-release/python-semantic-release/pull/1093
.. _changelog-v9.13.0:
v9.13.0 (2024-11-10)
====================
✨ Features
-----------
* **changelog**: Add PR/MR url linking to default Markdown changelog, closes `#924`_, `#953`_
(`cd8d131`_)
* **changelog**: Add PR/MR url linking to default reStructuredText template, closes `#924`_, `#953`_
(`5f018d6`_)
* **parsed-commit**: Add linked merge requests list to the ``ParsedCommit`` object (`9a91062`_)
* **parser-angular**: Automatically parse PR/MR numbers from subject lines in commits (`2ac798f`_)
* **parser-emoji**: Automatically parse PR/MR numbers from subject lines in commits (`bca9909`_)
* **parser-scipy**: Automatically parse PR/MR numbers from subject lines in commits (`2b3f738`_)
🪲 Bug Fixes
------------
* **changelog-rst**: Ignore unknown parsed commit types in default RST changelog (`77609b1`_)
* **parser-angular**: Drop the ``breaking`` category but still maintain a major level bump
(`f1ffa54`_)
* **parsers**: Improve reliability of descriptions after reverse word-wrap (`436374b`_)
⚡ Performance Improvements
---------------------------
* **parser-angular**: Simplify commit parsing type pre-calculation (`a86a28c`_)
* **parser-emoji**: Increase speed of commit parsing (`2c9c468`_)
* **parser-scipy**: Increase speed & decrease complexity of commit parsing (`2b661ed`_)
📖 Documentation
----------------
* **changelog-templates**: Add ``linked_merge_request`` field to examples (`d4376bc`_)
* **changelog-templates**: Fix api class reference links (`7a5bdf2`_)
* **commit-parsing**: Add ``linked_merge_request`` field to Parsed Commit definition (`ca61889`_)
.. _#924: https://github.com/python-semantic-release/python-semantic-release/issues/924
.. _#953: https://github.com/python-semantic-release/python-semantic-release/issues/953
.. _2ac798f: https://github.com/python-semantic-release/python-semantic-release/commit/2ac798f92e0c13c1db668747f7e35a65b99ae7ce
.. _2b3f738: https://github.com/python-semantic-release/python-semantic-release/commit/2b3f73801f5760bac29acd93db3ffb2bc790cda0
.. _2b661ed: https://github.com/python-semantic-release/python-semantic-release/commit/2b661ed122a6f0357a6b92233ac1351c54c7794e
.. _2c9c468: https://github.com/python-semantic-release/python-semantic-release/commit/2c9c4685a66feb35cd78571cf05f76344dd6d66a
.. _436374b: https://github.com/python-semantic-release/python-semantic-release/commit/436374b04128d1550467ae97ba90253f1d1b3878
.. _5f018d6: https://github.com/python-semantic-release/python-semantic-release/commit/5f018d630b4c625bdf6d329b27fd966eba75b017
.. _77609b1: https://github.com/python-semantic-release/python-semantic-release/commit/77609b1917a00b106ce254e6f6d5edcd1feebba7
.. _7a5bdf2: https://github.com/python-semantic-release/python-semantic-release/commit/7a5bdf29b3df0f9a1346ea5301d2a7fee953667b
.. _9a91062: https://github.com/python-semantic-release/python-semantic-release/commit/9a9106212d6c240e9d3358e139b4c4694eaf9c4b
.. _a86a28c: https://github.com/python-semantic-release/python-semantic-release/commit/a86a28c5e26ed766cda71d26b9382c392e377c61
.. _bca9909: https://github.com/python-semantic-release/python-semantic-release/commit/bca9909c1b61fdb1f9ccf823fceb6951cd059820
.. _ca61889: https://github.com/python-semantic-release/python-semantic-release/commit/ca61889d4ac73e9864fbf637fb87ab2d5bc053ea
.. _cd8d131: https://github.com/python-semantic-release/python-semantic-release/commit/cd8d1310a4000cc79b529fbbdc58933f4c6373c6
.. _d4376bc: https://github.com/python-semantic-release/python-semantic-release/commit/d4376bc2ae4d3708d501d91211ec3ee3a923e9b5
.. _f1ffa54: https://github.com/python-semantic-release/python-semantic-release/commit/f1ffa5411892de34cdc842fd55c460a24b6685c6
.. _changelog-v9.12.2:
v9.12.2 (2024-11-07)
====================
🪲 Bug Fixes
------------
* **bitbucket**: Fix ``pull_request_url`` filter to ignore an PR prefix gracefully (`PR#1089`_,
`275ec88`_)
* **cli**: Gracefully capture all exceptions unless in very verbose debug mode (`PR#1088`_,
`13ca44f`_)
* **gitea**: Fix ``issue_url`` filter to ignore an issue prefix gracefully (`PR#1089`_, `275ec88`_)
* **gitea**: Fix ``pull_request_url`` filter to ignore an PR prefix gracefully (`PR#1089`_,
`275ec88`_)
* **github**: Fix ``issue_url`` filter to ignore an issue prefix gracefully (`PR#1089`_, `275ec88`_)
* **github**: Fix ``pull_request_url`` filter to ignore an PR prefix gracefully (`PR#1089`_,
`275ec88`_)
* **gitlab**: Fix ``issue_url`` filter to ignore an issue prefix gracefully (`PR#1089`_, `275ec88`_)
* **gitlab**: Fix ``merge_request_url`` filter to ignore an PR prefix gracefully (`PR#1089`_,
`275ec88`_)
* **hvcs**: Add flexibility to issue & MR/PR url jinja filters (`PR#1089`_, `275ec88`_)
📖 Documentation
----------------
* **changelog-templates**: Update descriptions of issue & MR/PR url jinja filters (`PR#1089`_,
`275ec88`_)
.. _13ca44f: https://github.com/python-semantic-release/python-semantic-release/commit/13ca44f4434098331f70e6937684679cf1b4106a
.. _275ec88: https://github.com/python-semantic-release/python-semantic-release/commit/275ec88e6d1637c47065bb752a60017ceba9876c
.. _PR#1088: https://github.com/python-semantic-release/python-semantic-release/pull/1088
.. _PR#1089: https://github.com/python-semantic-release/python-semantic-release/pull/1089
.. _changelog-v9.12.1:
v9.12.1 (2024-11-06)
====================
🪲 Bug Fixes
------------
* **changelog**: Fix raw-inline pattern replacement in ``convert_md_to_rst`` filter (`2dc70a6`_)
* **cmd-version**: Fix ``--as-prerelease`` when no commit change from last full release (`PR#1076`_,
`3b7b772`_)
* **release-notes**: Add context variable shorthand ``ctx`` like docs claim & changelog has
(`d618d83`_)
📖 Documentation
----------------
* **contributing**: Update local testing instructions (`74f03d4`_)
.. _2dc70a6: https://github.com/python-semantic-release/python-semantic-release/commit/2dc70a6106776106b0fba474b0029071317d639f
.. _3b7b772: https://github.com/python-semantic-release/python-semantic-release/commit/3b7b77246100cedd8cc8f289395f7641187ffdec
.. _74f03d4: https://github.com/python-semantic-release/python-semantic-release/commit/74f03d44684b7b2d84f9f5e471425b02f8bf91c3
.. _d618d83: https://github.com/python-semantic-release/python-semantic-release/commit/d618d83360c4409fc149f70b97c5fe338fa89968
.. _PR#1076: https://github.com/python-semantic-release/python-semantic-release/pull/1076
.. _changelog-v9.12.0:
v9.12.0 (2024-10-18)
====================
✨ Features
-----------
* **changelog**: Add ``autofit_text_width`` filter to template environment (`PR#1062`_, `83e4b86`_)
🪲 Bug Fixes
------------
* **changelog**: Ignore commit exclusion when a commit causes a version bump (`e8f886e`_)
* **parser-angular**: Change ``Fixes`` commit type heading to ``Bug Fixes`` (`PR#1064`_, `09e3a4d`_)
* **parser-emoji**: Enable the default bump level option (`bc27995`_)
📖 Documentation
----------------
* **changelog-templates**: Add definition & usage of ``autofit_text_width`` template filter
(`PR#1062`_, `83e4b86`_)
* **commit-parsers**: Add deprecation message for the tag parser (`af94540`_)
* **configuration**: Add deprecation message for the tag parser (`a83b7e4`_)
.. _09e3a4d: https://github.com/python-semantic-release/python-semantic-release/commit/09e3a4da6237740de8e9932d742b18d990e9d079
.. _83e4b86: https://github.com/python-semantic-release/python-semantic-release/commit/83e4b86abd4754c2f95ec2e674f04deb74b9a1e6
.. _a83b7e4: https://github.com/python-semantic-release/python-semantic-release/commit/a83b7e43e4eaa99790969a6c85f44e01cde80d0a
.. _af94540: https://github.com/python-semantic-release/python-semantic-release/commit/af94540f2b1c63bf8a4dc977d5d0f66176962b64
.. _bc27995: https://github.com/python-semantic-release/python-semantic-release/commit/bc27995255a96b9d6cc743186e7c35098822a7f6
.. _e8f886e: https://github.com/python-semantic-release/python-semantic-release/commit/e8f886ef2abe8ceaea0a24a0112b92a167abd6a9
.. _PR#1062: https://github.com/python-semantic-release/python-semantic-release/pull/1062
.. _PR#1064: https://github.com/python-semantic-release/python-semantic-release/pull/1064
.. _changelog-v9.11.1:
v9.11.1 (2024-10-15)
====================
🪲 Bug Fixes
------------
* **changelog**: Prevent custom template errors when components are in hidden folders (`PR#1060`_,
`a7614b0`_)
.. _a7614b0: https://github.com/python-semantic-release/python-semantic-release/commit/a7614b0db8ce791e4252209e66f42b5b5275dffd
.. _PR#1060: https://github.com/python-semantic-release/python-semantic-release/pull/1060
.. _changelog-v9.11.0:
v9.11.0 (2024-10-12)
====================
✨ Features
-----------
* **changelog**: Add ``convert_md_to_rst`` filter to changelog environment (`PR#1055`_, `c2e8831`_)
* **changelog**: Add default changelog in re-structured text format, closes `#399`_ (`PR#1055`_,
`c2e8831`_)
* **changelog**: Add default changelog template in reStructuredText format (`PR#1055`_, `c2e8831`_)
* **config**: Enable default ``changelog.insertion_flag`` based on output format (`PR#1055`_,
`c2e8831`_)
* **config**: Enable target changelog filename to trigger RST output format, closes `#399`_
(`PR#1055`_, `c2e8831`_)
🪲 Bug Fixes
------------
* **changelog**: Correct spacing for default markdown template during updates (`PR#1055`_,
`c2e8831`_)
📖 Documentation
----------------
* **changelog**: Clarify the ``convert_md_to_rst`` filter added to the template environment
(`PR#1055`_, `c2e8831`_)
* **changelog**: Increase detail about configuration options of default changelog creation
(`PR#1055`_, `c2e8831`_)
* **configuration**: Update ``changelog_file`` with deprecation notice of setting relocation
(`PR#1055`_, `c2e8831`_)
* **configuration**: Update ``output_format`` description for reStructuredText support (`PR#1055`_,
`c2e8831`_)
* **configuration**: Update details of ``insertion_flag``'s dynamic defaults with rst (`PR#1055`_,
`c2e8831`_)
.. _#399: https://github.com/python-semantic-release/python-semantic-release/issues/399
.. _c2e8831: https://github.com/python-semantic-release/python-semantic-release/commit/c2e883104d3c11e56f229638e988d8b571f86e34
.. _PR#1055: https://github.com/python-semantic-release/python-semantic-release/pull/1055
.. _changelog-v9.10.1:
v9.10.1 (2024-10-10)
====================
🪲 Bug Fixes
------------
* **config**: Handle branch match regex errors gracefully (`PR#1054`_, `4d12251`_)
.. _4d12251: https://github.com/python-semantic-release/python-semantic-release/commit/4d12251c678a38de6b71cac5b9c1390eb9dd8ad6
.. _PR#1054: https://github.com/python-semantic-release/python-semantic-release/pull/1054
.. _changelog-v9.10.0:
v9.10.0 (2024-10-08)
====================
✨ Features
-----------
* **changelog**: Add ``changelog_insertion_flag`` to changelog template context (`PR#1045`_,
`c18c245`_)
* **changelog**: Add ``changelog_mode`` to changelog template context (`PR#1045`_, `c18c245`_)
* **changelog**: Add ``prev_changelog_file`` to changelog template context (`PR#1045`_, `c18c245`_)
* **changelog**: Add ``read_file`` function to changelog template context (`PR#1045`_, `c18c245`_)
* **changelog**: Add shorthand ``ctx`` variable to changelog template env (`PR#1045`_, `c18c245`_)
* **changelog**: Modify changelog template to support changelog updates, closes `#858`_
(`PR#1045`_, `c18c245`_)
* **config**: Add ``changelog.default_templates.output_format`` config option (`PR#1045`_,
`c18c245`_)
* **config**: Add ``changelog.insertion_flag`` as configuration option (`PR#1045`_, `c18c245`_)
* **config**: Add ``changelog.mode`` as configuration option (`PR#1045`_, `c18c245`_)
* **github-actions**: Add an action ``build`` directive to toggle the ``--skip-build`` option
(`PR#1044`_, `26597e2`_)
🪲 Bug Fixes
------------
* **changelog**: Adjust angular heading names for readability (`PR#1045`_, `c18c245`_)
* **changelog**: Ensure changelog templates can handle complex directory includes (`PR#1045`_,
`c18c245`_)
* **changelog**: Only render user templates when files exist (`PR#1045`_, `c18c245`_)
* **config**: Prevent jinja from autoescaping markdown content by default (`PR#1045`_, `c18c245`_)
📖 Documentation
----------------
* **changelog-templates**: Improve detail & describe new ``changelog.mode="update"`` (`PR#1045`_,
`c18c245`_)
* **commands**: Update definition of the version commands ``--skip-build`` option (`PR#1044`_,
`26597e2`_)
* **configuration**: Add ``changelog.mode`` and ``changelog.insertion_flag`` config definitions
(`PR#1045`_, `c18c245`_)
* **configuration**: Define the new ``changelog.default_templates.output_format`` option
(`PR#1045`_, `c18c245`_)
* **configuration**: Mark version of configuration setting introduction (`PR#1045`_, `c18c245`_)
* **configuration**: Standardize all true/false to lowercase ensuring toml-compatibility
(`PR#1045`_, `c18c245`_)
* **configuration**: Update ``changelog.environment.autoescape`` default to ``false`` to match code
(`PR#1045`_, `c18c245`_)
* **github-actions**: Add description of the ``build`` input directive (`PR#1044`_, `26597e2`_)
* **github-actions**: Update primary example with workflow sha controlled pipeline (`14f04df`_)
* **homepage**: Update custom changelog reference (`PR#1045`_, `c18c245`_)
.. _#722: https://github.com/python-semantic-release/python-semantic-release/issues/722
.. _#858: https://github.com/python-semantic-release/python-semantic-release/issues/858
.. _14f04df: https://github.com/python-semantic-release/python-semantic-release/commit/14f04dffc7366142faecebb162d4449501cbf1fd
.. _26597e2: https://github.com/python-semantic-release/python-semantic-release/commit/26597e24a80a37500264aa95a908ba366699099e
.. _c18c245: https://github.com/python-semantic-release/python-semantic-release/commit/c18c245df51a9778af09b9dc7a315e3f11cdcda0
.. _PR#1044: https://github.com/python-semantic-release/python-semantic-release/pull/1044
.. _PR#1045: https://github.com/python-semantic-release/python-semantic-release/pull/1045
.. _changelog-v9.9.0:
v9.9.0 (2024-09-28)
===================
✨ Features
-----------
* **github-actions**: Add ``is_prerelease`` output to the version action (`PR#1038`_, `6a5d35d`_)
📖 Documentation
----------------
* **automatic-releases**: Drop extraneous github push configuration (`PR#1011`_, `2135c68`_)
* **github-actions**: Add configuration & description of publish action (`PR#1011`_, `2135c68`_)
* **github-actions**: Add description of new ``is_prerelease`` output for version action
(`PR#1038`_, `6a5d35d`_)
* **github-actions**: Clarify & consolidate GitHub Actions usage docs, closes `#907`_ (`PR#1011`_,
`2135c68`_)
* **github-actions**: Expand descriptions & clarity of actions configs (`PR#1011`_, `2135c68`_)
* **github-actions**: Revert removal of namespace prefix from examples (`PR#1011`_, `2135c68`_)
* **homepage**: Remove link to old github config & update token scope config (`PR#1011`_,
`2135c68`_)
.. _#907: https://github.com/python-semantic-release/python-semantic-release/issues/907
.. _2135c68: https://github.com/python-semantic-release/python-semantic-release/commit/2135c68ccbdad94378809902b52fcad546efd5b3
.. _6a5d35d: https://github.com/python-semantic-release/python-semantic-release/commit/6a5d35d0d9124d6a6ee7910711b4154b006b8773
.. _PR#1011: https://github.com/python-semantic-release/python-semantic-release/pull/1011
.. _PR#1038: https://github.com/python-semantic-release/python-semantic-release/pull/1038
.. _changelog-v9.8.9:
v9.8.9 (2024-09-27)
===================
🪲 Bug Fixes
------------
* **version-cmd**: Ensure ``version_variables`` do not match partial variable names (`PR#1028`_,
`156915c`_)
* **version-cmd**: Improve ``version_variables`` flexibility w/ quotes (ie. json, yaml, etc)
(`PR#1028`_, `156915c`_)
* **version-cmd**: Increase ``version_variable`` flexibility with quotations (ie. json, yaml, etc),
closes `#601`_, `#706`_, `#962`_, `#1026`_ (`PR#1028`_, `156915c`_)
📖 Documentation
----------------
* Update docstrings to resolve sphinx failures, closes `#1029`_ (`PR#1030`_, `d84efc7`_)
* **configuration**: Add clarity to ``version_variables`` usage & limitations (`PR#1028`_,
`156915c`_)
* **homepage**: Re-structure homepage to be separate from project readme (`PR#1032`_, `2307ed2`_)
* **README**: Simplify README to point at official docs (`PR#1032`_, `2307ed2`_)
.. _#1026: https://github.com/python-semantic-release/python-semantic-release/issues/1026
.. _#1029: https://github.com/python-semantic-release/python-semantic-release/issues/1029
.. _#601: https://github.com/python-semantic-release/python-semantic-release/issues/601
.. _#706: https://github.com/python-semantic-release/python-semantic-release/issues/706
.. _#962: https://github.com/python-semantic-release/python-semantic-release/issues/962
.. _156915c: https://github.com/python-semantic-release/python-semantic-release/commit/156915c7d759098f65cf9de7c4e980b40b38d5f1
.. _2307ed2: https://github.com/python-semantic-release/python-semantic-release/commit/2307ed29d9990bf1b6821403a4b8db3365ef8bb5
.. _d84efc7: https://github.com/python-semantic-release/python-semantic-release/commit/d84efc7719a8679e6979d513d1c8c60904af7384
.. _PR#1028: https://github.com/python-semantic-release/python-semantic-release/pull/1028
.. _PR#1030: https://github.com/python-semantic-release/python-semantic-release/pull/1030
.. _PR#1032: https://github.com/python-semantic-release/python-semantic-release/pull/1032
.. _changelog-v9.8.8:
v9.8.8 (2024-09-01)
===================
🪲 Bug Fixes
------------
* **config**: Fix path traversal detection for windows compatibility, closes `#994`_ (`PR#1014`_,
`16e6daa`_)
📖 Documentation
----------------
* **configuration**: Update ``build_command`` env table for windows to use all capital vars
(`0e8451c`_)
* **github-actions**: Update version in examples to latest version (`3c894ea`_)
.. _#994: https://github.com/python-semantic-release/python-semantic-release/issues/994
.. _0e8451c: https://github.com/python-semantic-release/python-semantic-release/commit/0e8451cf9003c6a3bdcae6878039d7d9a23d6d5b
.. _16e6daa: https://github.com/python-semantic-release/python-semantic-release/commit/16e6daaf851ce1eabf5fbd5aa9fe310a8b0f22b3
.. _3c894ea: https://github.com/python-semantic-release/python-semantic-release/commit/3c894ea8a555d20b454ebf34785e772959bbb4fe
.. _PR#1014: https://github.com/python-semantic-release/python-semantic-release/pull/1014
.. _changelog-v9.8.7:
v9.8.7 (2024-08-20)
===================
🪲 Bug Fixes
------------
* Provide ``context.history`` global in release notes templates (`PR#1005`_, `5bd91b4`_)
* **release-notes**: Fix noop-changelog to print raw release notes (`PR#1005`_, `5bd91b4`_)
* **release-notes**: Provide ``context.history`` global in release note templates, closes `#984`_
(`PR#1005`_, `5bd91b4`_)
📖 Documentation
----------------
* Use pinned version for GHA examples (`PR#1004`_, `5fdf761`_)
* **changelog**: Clarify description of the default changelog generation process (`399fa65`_)
* **configuration**: Clarify ``changelog_file`` vs ``template_dir`` option usage, closes `#983`_
(`a7199c8`_)
* **configuration**: Fix build_command_env table rendering (`PR#996`_, `a5eff0b`_)
* **github-actions**: Adjust formatting & version warning in code snippets (`PR#1004`_, `5fdf761`_)
* **github-actions**: Use pinned version for GHA examples, closes `#1003`_ (`PR#1004`_, `5fdf761`_)
.. _#1003: https://github.com/python-semantic-release/python-semantic-release/issues/1003
.. _#983: https://github.com/python-semantic-release/python-semantic-release/issues/983
.. _#984: https://github.com/python-semantic-release/python-semantic-release/issues/984
.. _399fa65: https://github.com/python-semantic-release/python-semantic-release/commit/399fa6521d5c6c4397b1d6e9b13ea7945ae92543
.. _5bd91b4: https://github.com/python-semantic-release/python-semantic-release/commit/5bd91b4d7ac33ddf10446f3e66d7d11e0724aeb2
.. _5fdf761: https://github.com/python-semantic-release/python-semantic-release/commit/5fdf7614c036a77ffb051cd30f57d0a63c062c0d
.. _a5eff0b: https://github.com/python-semantic-release/python-semantic-release/commit/a5eff0bfe41d2fd5d9ead152a132010b718b7772
.. _a7199c8: https://github.com/python-semantic-release/python-semantic-release/commit/a7199c8cd6041a9de017694302e49b139bbcb034
.. _PR#1004: https://github.com/python-semantic-release/python-semantic-release/pull/1004
.. _PR#1005: https://github.com/python-semantic-release/python-semantic-release/pull/1005
.. _PR#996: https://github.com/python-semantic-release/python-semantic-release/pull/996
.. _changelog-v9.8.6:
v9.8.6 (2024-07-20)
===================
🪲 Bug Fixes
------------
* **version-cmd**: Resolve build command execution in powershell (`PR#980`_, `32c8e70`_)
📖 Documentation
----------------
* **configuration**: Correct GHA parameter name for commit email (`PR#981`_, `ce9ffdb`_)
.. _32c8e70: https://github.com/python-semantic-release/python-semantic-release/commit/32c8e70915634d8e560b470c3cf38c27cebd7ae0
.. _ce9ffdb: https://github.com/python-semantic-release/python-semantic-release/commit/ce9ffdb82c2358184b288fa18e83a4075f333277
.. _PR#980: https://github.com/python-semantic-release/python-semantic-release/pull/980
.. _PR#981: https://github.com/python-semantic-release/python-semantic-release/pull/981
.. _changelog-v9.8.5:
v9.8.5 (2024-07-06)
===================
🪲 Bug Fixes
------------
* Enable ``--print-last-released*`` when in detached head or non-release branch (`PR#926`_,
`782c0a6`_)
* **changelog**: Resolve commit ordering issue when dates are similar (`PR#972`_, `bfda159`_)
* **version-cmd**: Drop branch restriction for ``--print-last-released*`` opts, closes `#900`_
(`PR#926`_, `782c0a6`_)
⚡ Performance Improvements
---------------------------
* Improve git history processing for changelog generation (`PR#972`_, `bfda159`_)
* **changelog**: Improve git history parser changelog generation (`PR#972`_, `bfda159`_)
.. _#900: https://github.com/python-semantic-release/python-semantic-release/issues/900
.. _782c0a6: https://github.com/python-semantic-release/python-semantic-release/commit/782c0a6109fb49e168c37f279928c0a4959f8ac6
.. _bfda159: https://github.com/python-semantic-release/python-semantic-release/commit/bfda1593af59e9e728c584dd88d7927fc52c879f
.. _PR#926: https://github.com/python-semantic-release/python-semantic-release/pull/926
.. _PR#972: https://github.com/python-semantic-release/python-semantic-release/pull/972
.. _changelog-v9.8.4:
v9.8.4 (2024-07-04)
===================
🪲 Bug Fixes
------------
* **changelog-cmd**: Remove usage strings when error occurred, closes `#810`_ (`348a51d`_)
* **changelog-cmd**: Render default changelog when user template directory exist but is empty
(`bded8de`_)
* **config**: Prevent path traversal manipulation of target changelog location (`43e35d0`_)
* **config**: Prevent path traversal manipulation of target changelog location (`3eb3dba`_)
* **publish-cmd**: Prevent error when provided tag does not exist locally (`16afbbb`_)
* **publish-cmd**: Remove usage strings when error occurred, closes `#810`_ (`afbb187`_)
* **version-cmd**: Remove usage strings when error occurred, closes `#810`_ (`a7c17c7`_)
.. _#810: https://github.com/python-semantic-release/python-semantic-release/issues/810
.. _16afbbb: https://github.com/python-semantic-release/python-semantic-release/commit/16afbbb8fbc3a97243e96d7573f4ad2eba09aab9
.. _348a51d: https://github.com/python-semantic-release/python-semantic-release/commit/348a51db8a837d951966aff3789aa0c93d473829
.. _3eb3dba: https://github.com/python-semantic-release/python-semantic-release/commit/3eb3dbafec4223ee463b90e927e551639c69426b
.. _43e35d0: https://github.com/python-semantic-release/python-semantic-release/commit/43e35d0972e8a29239d18ed079d1e2013342fcbd
.. _a7c17c7: https://github.com/python-semantic-release/python-semantic-release/commit/a7c17c73fd7becb6d0e042e45ff6765605187e2a
.. _afbb187: https://github.com/python-semantic-release/python-semantic-release/commit/afbb187d6d405fdf6765082e2a1cecdcd7d357df
.. _bded8de: https://github.com/python-semantic-release/python-semantic-release/commit/bded8deae6c92f6dde9774802d9f3716a5cb5705
.. _changelog-v9.8.3:
v9.8.3 (2024-06-18)
===================
🪲 Bug Fixes
------------
* **parser**: Strip DOS carriage-returns in commits, closes `#955`_ (`PR#956`_, `0b005df`_)
.. _#955: https://github.com/python-semantic-release/python-semantic-release/issues/955
.. _0b005df: https://github.com/python-semantic-release/python-semantic-release/commit/0b005df0a8c7730ee0c71453c9992d7b5d2400a4
.. _PR#956: https://github.com/python-semantic-release/python-semantic-release/pull/956
.. _changelog-v9.8.2:
v9.8.2 (2024-06-17)
===================
🪲 Bug Fixes
------------
* **templates**: Suppress extra newlines in default changelog (`PR#954`_, `7b0079b`_)
.. _7b0079b: https://github.com/python-semantic-release/python-semantic-release/commit/7b0079bf3e17c0f476bff520b77a571aeac469d0
.. _PR#954: https://github.com/python-semantic-release/python-semantic-release/pull/954
.. _changelog-v9.8.1:
v9.8.1 (2024-06-05)
===================
🪲 Bug Fixes
------------
* Improve build cmd env on windows (`PR#942`_, `d911fae`_)
* **version-cmd**: Pass windows specific env vars to build cmd when on windows (`PR#942`_,
`d911fae`_)
📖 Documentation
----------------
* **configuration**: Define windows specific env vars for build cmd (`PR#942`_, `d911fae`_)
.. _d911fae: https://github.com/python-semantic-release/python-semantic-release/commit/d911fae993d41a8cb1497fa8b2a7e823576e0f22
.. _PR#942: https://github.com/python-semantic-release/python-semantic-release/pull/942
.. _changelog-v9.8.0:
v9.8.0 (2024-05-27)
===================
✨ Features
-----------
* Extend gitlab to edit a previous release if exists (`PR#934`_, `23e02b9`_)
* **gha**: Configure ssh signed tags in GitHub Action, closes `#936`_ (`PR#937`_, `dfb76b9`_)
* **hvcs-gitlab**: Enable gitlab to edit a previous release if found (`PR#934`_, `23e02b9`_)
* **version-cmd**: Add toggle of ``--no-verify`` option to ``git commit`` (`PR#927`_, `1de6f78`_)
🪲 Bug Fixes
------------
* **gitlab**: Adjust release name to mirror other hvcs release names (`PR#934`_, `23e02b9`_)
* **hvcs-gitlab**: Add tag message to release creation (`PR#934`_, `23e02b9`_)
📖 Documentation
----------------
* **configuration**: Add ``no_git_verify`` description to the configuration page (`PR#927`_,
`1de6f78`_)
* **migration-v8**: Update version references in migration instructions (`PR#938`_, `d6ba16a`_)
.. _#936: https://github.com/python-semantic-release/python-semantic-release/issues/936
.. _1de6f78: https://github.com/python-semantic-release/python-semantic-release/commit/1de6f7834c6d37a74bc53f91609d40793556b52d
.. _23e02b9: https://github.com/python-semantic-release/python-semantic-release/commit/23e02b96dfb2a58f6b4ecf7b7812e4c1bc50573d
.. _d6ba16a: https://github.com/python-semantic-release/python-semantic-release/commit/d6ba16aa8e01bae1a022a9b06cd0b9162c51c345
.. _dfb76b9: https://github.com/python-semantic-release/python-semantic-release/commit/dfb76b94b859a7f3fa3ad778eec7a86de2874d68
.. _PR#927: https://github.com/python-semantic-release/python-semantic-release/pull/927
.. _PR#934: https://github.com/python-semantic-release/python-semantic-release/pull/934
.. _PR#937: https://github.com/python-semantic-release/python-semantic-release/pull/937
.. _PR#938: https://github.com/python-semantic-release/python-semantic-release/pull/938
.. _changelog-v9.7.3:
v9.7.3 (2024-05-15)
===================
🪲 Bug Fixes
------------
* Enabled ``prerelease-token`` parameter in github action (`PR#929`_, `1bb26b0`_)
.. _1bb26b0: https://github.com/python-semantic-release/python-semantic-release/commit/1bb26b0762d94efd97c06a3f1b6b10fb76901f6d
.. _PR#929: https://github.com/python-semantic-release/python-semantic-release/pull/929
.. _changelog-v9.7.2:
v9.7.2 (2024-05-13)
===================
🪲 Bug Fixes
------------
* Enable user configuration of ``build_command`` env vars (`PR#925`_, `6b5b271`_)
* **version**: Enable user config of ``build_command`` env variables, closes `#922`_ (`PR#925`_,
`6b5b271`_)
📖 Documentation
----------------
* **configuration**: Clarify TOC & alphabetize configuration descriptions (`19add16`_)
* **configuration**: Clarify TOC & standardize heading links (`3a41995`_)
* **configuration**: Document ``build_command_env`` configuration option (`PR#925`_, `6b5b271`_)
* **CONTRIBUTING**: Update build command definition for developers (`PR#921`_, `b573c4d`_)
.. _#922: https://github.com/python-semantic-release/python-semantic-release/issues/922
.. _19add16: https://github.com/python-semantic-release/python-semantic-release/commit/19add16dcfdfdb812efafe2d492a933d0856df1d
.. _3a41995: https://github.com/python-semantic-release/python-semantic-release/commit/3a4199542d0ea4dbf88fa35e11bec41d0c27dd17
.. _6b5b271: https://github.com/python-semantic-release/python-semantic-release/commit/6b5b271453874b982fbf2827ec1f6be6db1c2cc7
.. _b573c4d: https://github.com/python-semantic-release/python-semantic-release/commit/b573c4d4a2c212be9bdee918501bb5e046c6a806
.. _PR#921: https://github.com/python-semantic-release/python-semantic-release/pull/921
.. _PR#925: https://github.com/python-semantic-release/python-semantic-release/pull/925
.. _changelog-v9.7.1:
v9.7.1 (2024-05-07)
===================
🪲 Bug Fixes
------------
* **gha**: Fix missing ``git_committer_*`` definition in action, closes `#918`_ (`PR#919`_,
`ccef9d8`_)
.. _#918: https://github.com/python-semantic-release/python-semantic-release/issues/918
.. _ccef9d8: https://github.com/python-semantic-release/python-semantic-release/commit/ccef9d8521be12c0640369b3c3a80b81a7832662
.. _PR#919: https://github.com/python-semantic-release/python-semantic-release/pull/919
.. _changelog-v9.7.0:
v9.7.0 (2024-05-06)
===================
✨ Features
-----------
* **version-cmd**: Pass ``NEW_VERSION`` & useful env vars to build command (`ee6b246`_)
🪲 Bug Fixes
------------
* **gha**: Add missing ``tag`` option to GitHub Action definition, closes `#906`_ (`PR#908`_,
`6b24288`_)
* **gha**: Correct use of ``prerelease`` option for GitHub Action (`PR#914`_, `85e27b7`_)
📖 Documentation
----------------
* **configuration**: Add description of build command available env variables (`c882dc6`_)
* **gha**: Update GitHub Actions doc with all available options (`PR#914`_, `85e27b7`_)
⚙️ Build System
----------------
* **deps**: Bump GitHub Action container to use ``python3.12``, closes `#801`_ (`PR#914`_,
`85e27b7`_)
.. _#801: https://github.com/python-semantic-release/python-semantic-release/issues/801
.. _#906: https://github.com/python-semantic-release/python-semantic-release/issues/906
.. _6b24288: https://github.com/python-semantic-release/python-semantic-release/commit/6b24288a96302cd6982260e46fad128ec4940da9
.. _85e27b7: https://github.com/python-semantic-release/python-semantic-release/commit/85e27b7f486e6b0e6cc9e85e101a97e676bc3d60
.. _c882dc6: https://github.com/python-semantic-release/python-semantic-release/commit/c882dc62b860b2aeaa925c21d1524f4ae25ef567
.. _ee6b246: https://github.com/python-semantic-release/python-semantic-release/commit/ee6b246df3bb211ab49c8bce075a4c3f6a68ed77
.. _PR#908: https://github.com/python-semantic-release/python-semantic-release/pull/908
.. _PR#914: https://github.com/python-semantic-release/python-semantic-release/pull/914
.. _changelog-v9.6.0:
v9.6.0 (2024-04-29)
===================
✨ Features
-----------
* Changelog filters are specialized per vcs type (`PR#890`_, `76ed593`_)
* **changelog**: Changelog filters are hvcs focused (`PR#890`_, `76ed593`_)
* **changelog-context**: Add flag to jinja env for which hvcs is available (`PR#890`_, `76ed593`_)
* **changelog-gitea**: Add issue url filter to changelog context (`PR#890`_, `76ed593`_)
* **changelog-github**: Add issue url filter to changelog context (`PR#890`_, `76ed593`_)
* **version-cmd**: Add ``--as-prerelease`` option to force the next version to be a prerelease,
closes `#639`_ (`PR#647`_, `2acb5ac`_)
🪲 Bug Fixes
------------
* Correct version ``--prerelease`` use & enable ``--as-prerelease`` (`PR#647`_, `2acb5ac`_)
* **github**: Correct changelog filter for pull request urls (`PR#890`_, `76ed593`_)
* **parser-custom**: Gracefully handle custom parser import errors (`67f6038`_)
* **version-cmd**: Correct ``--prerelease`` use, closes `#639`_ (`PR#647`_, `2acb5ac`_)
📖 Documentation
----------------
* **changelog-context**: Explain new hvcs specific context filters (`PR#890`_, `76ed593`_)
* **commands**: Update version command options definition about prereleases (`PR#647`_, `2acb5ac`_)
.. _#639: https://github.com/python-semantic-release/python-semantic-release/issues/639
.. _2acb5ac: https://github.com/python-semantic-release/python-semantic-release/commit/2acb5ac35ae79d7ae25ca9a03fb5c6a4a68b3673
.. _67f6038: https://github.com/python-semantic-release/python-semantic-release/commit/67f60389e3f6e93443ea108c0e1b4d30126b8e06
.. _76ed593: https://github.com/python-semantic-release/python-semantic-release/commit/76ed593ea33c851005994f0d1a6a33cc890fb908
.. _PR#647: https://github.com/python-semantic-release/python-semantic-release/pull/647
.. _PR#890: https://github.com/python-semantic-release/python-semantic-release/pull/890
.. _changelog-v9.5.0:
v9.5.0 (2024-04-23)
===================
✨ Features
-----------
* Extend support to on-prem GitHub Enterprise Server (`PR#896`_, `4fcb737`_)
* **github**: Extend support to on-prem GitHub Enterprise Server, closes `#895`_ (`PR#896`_,
`4fcb737`_)
.. _#895: https://github.com/python-semantic-release/python-semantic-release/issues/895
.. _4fcb737: https://github.com/python-semantic-release/python-semantic-release/commit/4fcb737958d95d1a3be24db7427e137b46f5075f
.. _PR#896: https://github.com/python-semantic-release/python-semantic-release/pull/896
.. _changelog-v9.4.2:
v9.4.2 (2024-04-14)
===================
🪲 Bug Fixes
------------
* **bitbucket**: Allow insecure http connections if configured (`PR#886`_, `db13438`_)
* **bitbucket**: Correct url parsing & prevent double url schemes (`PR#676`_, `5cfdb24`_)
* **config**: Add flag to allow insecure connections (`PR#886`_, `db13438`_)
* **gitea**: Allow insecure http connections if configured (`PR#886`_, `db13438`_)
* **gitea**: Correct url parsing & prevent double url schemes (`PR#676`_, `5cfdb24`_)
* **github**: Allow insecure http connections if configured (`PR#886`_, `db13438`_)
* **github**: Correct url parsing & prevent double url schemes (`PR#676`_, `5cfdb24`_)
* **gitlab**: Allow insecure http connections if configured (`PR#886`_, `db13438`_)
* **gitlab**: Correct url parsing & prevent double url schemes (`PR#676`_, `5cfdb24`_)
* **hvcs**: Allow insecure http connections if configured (`PR#886`_, `db13438`_)
* **hvcs**: Prevent double protocol scheme urls in changelogs (`PR#676`_, `5cfdb24`_)
* **version-cmd**: Handle HTTP exceptions more gracefully (`PR#886`_, `db13438`_)
📖 Documentation
----------------
* **configuration**: Update ``remote`` settings section with missing values, closes `#868`_
(`PR#886`_, `db13438`_)
⚙️ Build System
----------------
* **deps**: Update rich requirement from ~=12.5 to ~=13.0, closes `#888`_ (`PR#877`_, `4a22a8c`_)
.. _#868: https://github.com/python-semantic-release/python-semantic-release/issues/868
.. _#888: https://github.com/python-semantic-release/python-semantic-release/issues/888
.. _4a22a8c: https://github.com/python-semantic-release/python-semantic-release/commit/4a22a8c1a69bcf7b1ddd6db56e6883c617a892b3
.. _5cfdb24: https://github.com/python-semantic-release/python-semantic-release/commit/5cfdb248c003a2d2be5fe65fb61d41b0d4c45db5
.. _db13438: https://github.com/python-semantic-release/python-semantic-release/commit/db1343890f7e0644bc8457f995f2bd62087513d3
.. _PR#676: https://github.com/python-semantic-release/python-semantic-release/pull/676
.. _PR#877: https://github.com/python-semantic-release/python-semantic-release/pull/877
.. _PR#886: https://github.com/python-semantic-release/python-semantic-release/pull/886
.. _changelog-v9.4.1:
v9.4.1 (2024-04-06)
===================
🪲 Bug Fixes
------------
* **gh-actions-output**: Fixed trailing newline to match GITHUB_OUTPUT format (`PR#885`_,
`2c7b6ec`_)
* **gh-actions-output**: Fixed trailing newline to match GITHUB_OUTPUT format, closes `#884`_
(`PR#885`_, `2c7b6ec`_)
.. _#884: https://github.com/python-semantic-release/python-semantic-release/issues/884
.. _2c7b6ec: https://github.com/python-semantic-release/python-semantic-release/commit/2c7b6ec85b6e3182463d7b695ee48e9669a25b3b
.. _PR#885: https://github.com/python-semantic-release/python-semantic-release/pull/885
.. _changelog-v9.4.0:
v9.4.0 (2024-03-31)
===================
✨ Features
-----------
* **gitea**: Derives gitea api domain from base domain when unspecified (`PR#675`_, `2ee3f8a`_)
.. _2ee3f8a: https://github.com/python-semantic-release/python-semantic-release/commit/2ee3f8a918d2e5ea9ab64df88f52e62a1f589c38
.. _PR#675: https://github.com/python-semantic-release/python-semantic-release/pull/675
.. _changelog-v9.3.1:
v9.3.1 (2024-03-24)
===================
🪲 Bug Fixes
------------
* **algorithm**: Handle merge-base errors gracefully, closes `#724`_ (`4c998b7`_)
* **cli-version**: Change implementation to only push the tag we generated, closes `#803`_
(`8a9da4f`_)
⚡ Performance Improvements
---------------------------
* **algorithm**: Simplify logs & use lookup when searching for commit & tag match (`3690b95`_)
.. _#724: https://github.com/python-semantic-release/python-semantic-release/issues/724
.. _#803: https://github.com/python-semantic-release/python-semantic-release/issues/803
.. _3690b95: https://github.com/python-semantic-release/python-semantic-release/commit/3690b9511de633ab38083de4d2505b6d05853346
.. _4c998b7: https://github.com/python-semantic-release/python-semantic-release/commit/4c998b77a3fe5e12783d1ab2d47789a10b83f247
.. _8a9da4f: https://github.com/python-semantic-release/python-semantic-release/commit/8a9da4feb8753e3ab9ea752afa25decd2047675a
.. _changelog-v9.3.0:
v9.3.0 (2024-03-21)
===================
✨ Features
-----------
* **cmd-version**: Changelog available to bundle (`PR#779`_, `37fdb28`_)
* **cmd-version**: Create changelog prior to build enabling doc bundling (`PR#779`_, `37fdb28`_)
.. _37fdb28: https://github.com/python-semantic-release/python-semantic-release/commit/37fdb28e0eb886d682b5dea4cc83a7c98a099422
.. _PR#779: https://github.com/python-semantic-release/python-semantic-release/pull/779
.. _changelog-v9.2.2:
v9.2.2 (2024-03-19)
===================
🪲 Bug Fixes
------------
* **cli**: Enable subcommand help even if config is invalid, closes `#840`_ (`91d221a`_)
.. _#840: https://github.com/python-semantic-release/python-semantic-release/issues/840
.. _91d221a: https://github.com/python-semantic-release/python-semantic-release/commit/91d221a01266e5ca6de5c73296b0a90987847494
.. _changelog-v9.2.1:
v9.2.1 (2024-03-19)
===================
🪲 Bug Fixes
------------
* **parse-git-url**: Handle urls with url-safe special characters (`27cd93a`_)
.. _27cd93a: https://github.com/python-semantic-release/python-semantic-release/commit/27cd93a0a65ee3787ca51be4c91c48f6ddb4269c
.. _changelog-v9.2.0:
v9.2.0 (2024-03-18)
===================
✨ Features
-----------
* **version**: Add new version print flags to display the last released version and tag (`814240c`_)
* **version-config**: Add option to disable 0.x.x versions (`dedb3b7`_)
🪲 Bug Fixes
------------
* **changelog**: Make sure default templates render ending in 1 newline (`0b4a45e`_)
* **changelog-generation**: Fix incorrect release timezone determination (`f802446`_)
📖 Documentation
----------------
* **configuration**: Add description of ``allow-zero-version`` configuration option (`4028f83`_)
* **configuration**: Clarify the ``major_on_zero`` configuration option (`f7753cd`_)
⚙️ Build System
----------------
* **deps**: Add click-option-group for grouping exclusive flags (`bd892b8`_)
.. _0b4a45e: https://github.com/python-semantic-release/python-semantic-release/commit/0b4a45e3673d0408016dc8e7b0dce98007a763e3
.. _4028f83: https://github.com/python-semantic-release/python-semantic-release/commit/4028f8384a0181c8d58c81ae81cf0b241a02a710
.. _814240c: https://github.com/python-semantic-release/python-semantic-release/commit/814240c7355df95e9be9a6ed31d004b800584bc0
.. _bd892b8: https://github.com/python-semantic-release/python-semantic-release/commit/bd892b89c26df9fccc9335c84e2b3217e3e02a37
.. _dedb3b7: https://github.com/python-semantic-release/python-semantic-release/commit/dedb3b765c8530379af61d3046c3bb9c160d54e5
.. _f7753cd: https://github.com/python-semantic-release/python-semantic-release/commit/f7753cdabd07e276bc001478d605fca9a4b37ec4
.. _f802446: https://github.com/python-semantic-release/python-semantic-release/commit/f802446bd0693c4c9f6bdfdceae8b89c447827d2
.. _changelog-v9.1.1:
v9.1.1 (2024-02-25)
===================
🪲 Bug Fixes
------------
* **parse_git_url**: Fix bad url with dash (`1c25b8e`_)
.. _1c25b8e: https://github.com/python-semantic-release/python-semantic-release/commit/1c25b8e6f1e43c15ca7d5a59dca0a13767f9bc33
.. _changelog-v9.1.0:
v9.1.0 (2024-02-14)
===================
✨ Features
-----------
* Add bitbucket hvcs (`bbbbfeb`_)
🪲 Bug Fixes
------------
* Remove unofficial environment variables (`a5168e4`_)
📖 Documentation
----------------
* Add bitbucket authentication (`b78a387`_)
* Add bitbucket to token table (`56f146d`_)
* Fix typo (`b240e12`_)
⚙️ Build System
----------------
* **deps**: Bump minimum required ``tomlkit`` to ``>=0.11.0``, closes `#834`_ (`291aace`_)
.. _#834: https://github.com/python-semantic-release/python-semantic-release/issues/834
.. _291aace: https://github.com/python-semantic-release/python-semantic-release/commit/291aacea1d0429a3b27e92b0a20b598f43f6ea6b
.. _56f146d: https://github.com/python-semantic-release/python-semantic-release/commit/56f146d9f4c0fc7f2a84ad11b21c8c45e9221782
.. _a5168e4: https://github.com/python-semantic-release/python-semantic-release/commit/a5168e40b9a14dbd022f62964f382b39faf1e0df
.. _b240e12: https://github.com/python-semantic-release/python-semantic-release/commit/b240e129b180d45c1d63d464283b7dfbcb641d0c
.. _b78a387: https://github.com/python-semantic-release/python-semantic-release/commit/b78a387d8eccbc1a6a424a183254fc576126199c
.. _bbbbfeb: https://github.com/python-semantic-release/python-semantic-release/commit/bbbbfebff33dd24b8aed2d894de958d532eac596
.. _changelog-v9.0.3:
v9.0.3 (2024-02-08)
===================
🪲 Bug Fixes
------------
* **algorithm**: Correct bfs to not abort on previously visited node (`02df305`_)
⚡ Performance Improvements
---------------------------
* **algorithm**: Refactor bfs search to use queue rather than recursion (`8b742d3`_)
.. _02df305: https://github.com/python-semantic-release/python-semantic-release/commit/02df305db43abfc3a1f160a4a52cc2afae5d854f
.. _8b742d3: https://github.com/python-semantic-release/python-semantic-release/commit/8b742d3db6652981a7b5f773a74b0534edc1fc15
.. _changelog-v9.0.2:
v9.0.2 (2024-02-08)
===================
🪲 Bug Fixes
------------
* **util**: Properly parse windows line-endings in commit messages, closes `#820`_ (`70193ba`_)
📖 Documentation
----------------
* Remove duplicate note in configuration.rst (`PR#807`_, `fb6f243`_)
.. _#820: https://github.com/python-semantic-release/python-semantic-release/issues/820
.. _70193ba: https://github.com/python-semantic-release/python-semantic-release/commit/70193ba117c1a6d3690aed685fee8a734ba174e5
.. _fb6f243: https://github.com/python-semantic-release/python-semantic-release/commit/fb6f243a141642c02469f1080180ecaf4f3cec66
.. _PR#807: https://github.com/python-semantic-release/python-semantic-release/pull/807
.. _changelog-v9.0.1:
v9.0.1 (2024-02-06)
===================
🪲 Bug Fixes
------------
* **config**: Set commit parser opt defaults based on parser choice (`PR#782`_, `9c594fb`_)
.. _9c594fb: https://github.com/python-semantic-release/python-semantic-release/commit/9c594fb6efac7e4df2b0bfbd749777d3126d03d7
.. _PR#782: https://github.com/python-semantic-release/python-semantic-release/pull/782
.. _changelog-v9.0.0:
v9.0.0 (2024-02-06)
===================
♻️ Refactoring
---------------
* Drop support for Python 3.7 (`PR#828`_, `ad086f5`_)
💥 BREAKING CHANGES
--------------------
* Removed Python 3.7 specific control flows and made more modern implementations the default
control flow without a bypass or workaround. Will break on Python 3.7 now. If you require Python
3.7, you should lock your major version at v8. Since we only have enough manpower to maintain the
latest major release, unfortunately there will not be any more updates to v8.
* We decided to remove support for Python 3.7 because it has been officially deprecated by the
Python Foundation over a year ago and our codebase is starting to have limitations and custom
implementations just to maintain support for 3.7.
.. _ad086f5: https://github.com/python-semantic-release/python-semantic-release/commit/ad086f5993ae4741d6e20fee618d1bce8df394fb
.. _PR#828: https://github.com/python-semantic-release/python-semantic-release/pull/828
.. _changelog-v8.7.2:
v8.7.2 (2024-01-03)
===================
🪲 Bug Fixes
------------
* **lint**: Correct linter errors (`c9556b0`_)
.. _c9556b0: https://github.com/python-semantic-release/python-semantic-release/commit/c9556b0ca6df6a61e9ce909d18bc5be8b6154bf8
.. _changelog-v8.7.1:
v8.7.1 (2024-01-03)
===================
🪲 Bug Fixes
------------
* **cli-generate-config**: Ensure configuration types are always toml parsable (`PR#785`_,
`758e649`_)
📖 Documentation
----------------
* Add note on default envvar behavior (`PR#780`_, `0b07cae`_)
* **configuration**: Change defaults definition of token default to table (`PR#786`_, `df1df0d`_)
* **contributing**: Add docs-build, testing conf, & build instructions (`PR#787`_, `011b072`_)
.. _011b072: https://github.com/python-semantic-release/python-semantic-release/commit/011b0729cba3045b4e7291fd970cb17aad7bae60
.. _0b07cae: https://github.com/python-semantic-release/python-semantic-release/commit/0b07cae71915c5c82d7784898b44359249542a64
.. _758e649: https://github.com/python-semantic-release/python-semantic-release/commit/758e64975fe46b961809f35977574729b7c44271
.. _df1df0d: https://github.com/python-semantic-release/python-semantic-release/commit/df1df0de8bc655cbf8f86ae52aff10efdc66e6d2
.. _PR#780: https://github.com/python-semantic-release/python-semantic-release/pull/780
.. _PR#785: https://github.com/python-semantic-release/python-semantic-release/pull/785
.. _PR#786: https://github.com/python-semantic-release/python-semantic-release/pull/786
.. _PR#787: https://github.com/python-semantic-release/python-semantic-release/pull/787
.. _changelog-v8.7.0:
v8.7.0 (2023-12-22)
===================
✨ Features
-----------
* **config**: Enable default environment token per hvcs (`PR#774`_, `26528eb`_)
.. _26528eb: https://github.com/python-semantic-release/python-semantic-release/commit/26528eb8794d00dfe985812269702fbc4c4ec788
.. _PR#774: https://github.com/python-semantic-release/python-semantic-release/pull/774
.. _changelog-v8.6.0:
v8.6.0 (2023-12-22)
===================
✨ Features
-----------
* **utils**: Expand parsable valid git remote url formats (`PR#771`_, `cf75f23`_)
📖 Documentation
----------------
* Minor correction to commit-parsing documentation (`PR#777`_, `245e878`_)
.. _245e878: https://github.com/python-semantic-release/python-semantic-release/commit/245e878f02d5cafec6baf0493c921c1e396b56e8
.. _cf75f23: https://github.com/python-semantic-release/python-semantic-release/commit/cf75f237360488ebb0088e5b8aae626e97d9cbdd
.. _PR#771: https://github.com/python-semantic-release/python-semantic-release/pull/771
.. _PR#777: https://github.com/python-semantic-release/python-semantic-release/pull/777
.. _changelog-v8.5.2:
v8.5.2 (2023-12-19)
===================
🪲 Bug Fixes
------------
* **cli**: Gracefully output configuration validation errors (`PR#772`_, `e8c9d51`_)
.. _e8c9d51: https://github.com/python-semantic-release/python-semantic-release/commit/e8c9d516c37466a5dce75a73766d5be0f9e74627
.. _PR#772: https://github.com/python-semantic-release/python-semantic-release/pull/772
.. _changelog-v8.5.1:
v8.5.1 (2023-12-12)
===================
🪲 Bug Fixes
------------
* **cmd-version**: Handle committing of git-ignored file gracefully (`PR#764`_, `ea89fa7`_)
* **config**: Cleanly handle repository in detached HEAD state (`PR#765`_, `ac4f9aa`_)
* **config**: Gracefully fail when repo is in a detached HEAD state (`PR#765`_, `ac4f9aa`_)
* **version**: Only commit non git-ignored files during version commit (`PR#764`_, `ea89fa7`_)
📖 Documentation
----------------
* **configuration**: Adjust wording and improve clarity (`PR#766`_, `6b2fc8c`_)
* **configuration**: Fix typo in text (`PR#766`_, `6b2fc8c`_)
.. _6b2fc8c: https://github.com/python-semantic-release/python-semantic-release/commit/6b2fc8c156e122ee1b43fdb513b2dc3b8fd76724
.. _ac4f9aa: https://github.com/python-semantic-release/python-semantic-release/commit/ac4f9aacb72c99f2479ae33369822faad011a824
.. _ea89fa7: https://github.com/python-semantic-release/python-semantic-release/commit/ea89fa72885e15da91687172355426a22c152513
.. _PR#764: https://github.com/python-semantic-release/python-semantic-release/pull/764
.. _PR#765: https://github.com/python-semantic-release/python-semantic-release/pull/765
.. _PR#766: https://github.com/python-semantic-release/python-semantic-release/pull/766
.. _changelog-v8.5.0:
v8.5.0 (2023-12-07)
===================
✨ Features
-----------
* Allow template directories to contain a '.' at the top-level (`PR#762`_, `07b232a`_)
.. _07b232a: https://github.com/python-semantic-release/python-semantic-release/commit/07b232a3b34be0b28c6af08aea4852acb1b9bd56
.. _PR#762: https://github.com/python-semantic-release/python-semantic-release/pull/762
.. _changelog-v8.4.0:
v8.4.0 (2023-12-07)
===================
✨ Features
-----------
* **cmd-version**: Add ``--tag/--no-tag`` option to version command (`PR#752`_, `de6b9ad`_)
* **version**: Add ``--no-tag`` option to turn off tag creation (`PR#752`_, `de6b9ad`_)
🪲 Bug Fixes
------------
* **version**: Separate push tags from commit push when not committing changes (`PR#752`_,
`de6b9ad`_)
📖 Documentation
----------------
* **commands**: Update ``version`` subcommand options (`PR#752`_, `de6b9ad`_)
* **migration**: Fix comments about publish command (`PR#747`_, `90380d7`_)
.. _90380d7: https://github.com/python-semantic-release/python-semantic-release/commit/90380d797a734dcca5040afc5fa00e3e01f64152
.. _de6b9ad: https://github.com/python-semantic-release/python-semantic-release/commit/de6b9ad921e697b5ea2bb2ea8f180893cecca920
.. _PR#747: https://github.com/python-semantic-release/python-semantic-release/pull/747
.. _PR#752: https://github.com/python-semantic-release/python-semantic-release/pull/752
.. _changelog-v8.3.0:
v8.3.0 (2023-10-23)
===================
✨ Features
-----------
* **action**: Use composite action for semantic release (`PR#692`_, `4648d87`_)
.. _4648d87: https://github.com/python-semantic-release/python-semantic-release/commit/4648d87bac8fb7e6cc361b765b4391b30a8caef8
.. _PR#692: https://github.com/python-semantic-release/python-semantic-release/pull/692
.. _changelog-v8.2.0:
v8.2.0 (2023-10-23)
===================
✨ Features
-----------
* Allow user customization of release notes template (`PR#736`_, `94a1311`_)
📖 Documentation
----------------
* Add PYTHONPATH mention for commit parser (`3284258`_)
.. _3284258: https://github.com/python-semantic-release/python-semantic-release/commit/3284258b9fa1a3fe165f336181aff831d50fddd3
.. _94a1311: https://github.com/python-semantic-release/python-semantic-release/commit/94a131167e1b867f8bc112a042b9766e050ccfd1
.. _PR#736: https://github.com/python-semantic-release/python-semantic-release/pull/736
.. _changelog-v8.1.2:
v8.1.2 (2023-10-13)
===================
🪲 Bug Fixes
------------
* Correct lint errors (`a13a6c3`_)
* Error when running build command on windows systems (`PR#732`_, `2553657`_)
.. _2553657: https://github.com/python-semantic-release/python-semantic-release/commit/25536574760b407410f435441da533fafbf94402
.. _a13a6c3: https://github.com/python-semantic-release/python-semantic-release/commit/a13a6c37e180dc422599939a5725835306c18ff2
.. _PR#732: https://github.com/python-semantic-release/python-semantic-release/pull/732
.. _changelog-v8.1.1:
v8.1.1 (2023-09-19)
===================
🪲 Bug Fixes
------------
* Attribute error when logging non-strings (`PR#711`_, `75e6e48`_)
.. _75e6e48: https://github.com/python-semantic-release/python-semantic-release/commit/75e6e48129da8238a62d5eccac1ae55d0fee0f9f
.. _PR#711: https://github.com/python-semantic-release/python-semantic-release/pull/711
.. _changelog-v8.1.0:
v8.1.0 (2023-09-19)
===================
✨ Features
-----------
* Upgrade pydantic to v2 (`PR#714`_, `5a5c5d0`_)
📖 Documentation
----------------
* Fix typos (`PR#708`_, `2698b0e`_)
* Update project urls (`PR#715`_, `5fd5485`_)
.. _2698b0e: https://github.com/python-semantic-release/python-semantic-release/commit/2698b0e006ff7e175430b98450ba248ed523b341
.. _5a5c5d0: https://github.com/python-semantic-release/python-semantic-release/commit/5a5c5d0ee347750d7c417c3242d52e8ada50b217
.. _5fd5485: https://github.com/python-semantic-release/python-semantic-release/commit/5fd54856dfb6774feffc40d36d5bb0f421f04842
.. _PR#708: https://github.com/python-semantic-release/python-semantic-release/pull/708
.. _PR#714: https://github.com/python-semantic-release/python-semantic-release/pull/714
.. _PR#715: https://github.com/python-semantic-release/python-semantic-release/pull/715
.. _changelog-v8.0.8:
v8.0.8 (2023-08-26)
===================
🪲 Bug Fixes
------------
* Dynamic_import() import path split (`PR#686`_, `1007a06`_)
.. _1007a06: https://github.com/python-semantic-release/python-semantic-release/commit/1007a06d1e16beef6d18f44ff2e0e09921854b54
.. _PR#686: https://github.com/python-semantic-release/python-semantic-release/pull/686
.. _changelog-v8.0.7:
v8.0.7 (2023-08-16)
===================
🪲 Bug Fixes
------------
* Use correct upload url for github (`PR#661`_, `8a515ca`_)
.. _8a515ca: https://github.com/python-semantic-release/python-semantic-release/commit/8a515caf1f993aa653e024beda2fdb9e629cc42a
.. _PR#661: https://github.com/python-semantic-release/python-semantic-release/pull/661
.. _changelog-v8.0.6:
v8.0.6 (2023-08-13)
===================
🪲 Bug Fixes
------------
* **publish**: Improve error message when no tags found (`PR#683`_, `bdc06ea`_)
.. _bdc06ea: https://github.com/python-semantic-release/python-semantic-release/commit/bdc06ea061c19134d5d74bd9f168700dd5d9bcf5
.. _PR#683: https://github.com/python-semantic-release/python-semantic-release/pull/683
.. _changelog-v8.0.5:
v8.0.5 (2023-08-10)
===================
🪲 Bug Fixes
------------
* Don't warn about vcs token if ignore_token_for_push is true. (`PR#670`_, `f1a54a6`_)
📖 Documentation
----------------
* ``password`` should be ``token``. (`PR#670`_, `f1a54a6`_)
* Fix typo missing 's' in version_variable[s] in configuration.rst (`PR#668`_, `879186a`_)
.. _879186a: https://github.com/python-semantic-release/python-semantic-release/commit/879186aa09a3bea8bbe2b472f892cf7c0712e557
.. _f1a54a6: https://github.com/python-semantic-release/python-semantic-release/commit/f1a54a6c9a05b225b6474d50cd610eca19ec0c34
.. _PR#668: https://github.com/python-semantic-release/python-semantic-release/pull/668
.. _PR#670: https://github.com/python-semantic-release/python-semantic-release/pull/670
.. _changelog-v8.0.4:
v8.0.4 (2023-07-26)
===================
🪲 Bug Fixes
------------
* **changelog**: Use version as semver tag by default (`PR#653`_, `5984c77`_)
📖 Documentation
----------------
* Add Python 3.11 to classifiers in metadata (`PR#651`_, `5a32a24`_)
* Clarify usage of assets config option (`PR#655`_, `efa2b30`_)
.. _5984c77: https://github.com/python-semantic-release/python-semantic-release/commit/5984c7771edc37f0d7d57894adecc2591efc414d
.. _5a32a24: https://github.com/python-semantic-release/python-semantic-release/commit/5a32a24bf4128c39903f0c5d3bd0cb1ccba57e18
.. _efa2b30: https://github.com/python-semantic-release/python-semantic-release/commit/efa2b3019b41eb427f0e1c8faa21ad10664295d0
.. _PR#651: https://github.com/python-semantic-release/python-semantic-release/pull/651
.. _PR#653: https://github.com/python-semantic-release/python-semantic-release/pull/653
.. _PR#655: https://github.com/python-semantic-release/python-semantic-release/pull/655
.. _changelog-v8.0.3:
v8.0.3 (2023-07-21)
===================
🪲 Bug Fixes
------------
* Skip non-parsable versions when calculating next version (`PR#649`_, `88f25ea`_)
.. _88f25ea: https://github.com/python-semantic-release/python-semantic-release/commit/88f25eae62589cdf53dbc3dfcb167a3ae6cba2d3
.. _PR#649: https://github.com/python-semantic-release/python-semantic-release/pull/649
.. _changelog-v8.0.2:
v8.0.2 (2023-07-18)
===================
🪲 Bug Fixes
------------
* Handle missing configuration (`PR#644`_, `f15753c`_)
📖 Documentation
----------------
* Better description for tag_format usage (`2129b72`_)
* Clarify v8 breaking changes in GitHub action inputs (`PR#643`_, `cda050c`_)
* Correct version_toml example in migrating_from_v7.rst (`PR#641`_, `325d5e0`_)
.. _2129b72: https://github.com/python-semantic-release/python-semantic-release/commit/2129b729837eccc41a33dbb49785a8a30ce6b187
.. _325d5e0: https://github.com/python-semantic-release/python-semantic-release/commit/325d5e048bd89cb2a94c47029d4878b27311c0f0
.. _cda050c: https://github.com/python-semantic-release/python-semantic-release/commit/cda050cd9e789d81458157ee240ff99ec65c6f25
.. _f15753c: https://github.com/python-semantic-release/python-semantic-release/commit/f15753ce652f36cc03b108c667a26ab74bcbf95d
.. _PR#641: https://github.com/python-semantic-release/python-semantic-release/pull/641
.. _PR#643: https://github.com/python-semantic-release/python-semantic-release/pull/643
.. _PR#644: https://github.com/python-semantic-release/python-semantic-release/pull/644
.. _changelog-v8.0.1:
v8.0.1 (2023-07-17)
===================
🪲 Bug Fixes
------------
* Invalid version in Git history should not cause a release failure (`PR#632`_, `254430b`_)
📖 Documentation
----------------
* Reduce readthedocs formats and add entries to migration from v7 guide (`9b6ddfe`_)
* **migration**: Fix hyperlink (`PR#631`_, `5fbd52d`_)
.. _254430b: https://github.com/python-semantic-release/python-semantic-release/commit/254430b5cc5f032016b4c73168f0403c4d87541e
.. _5fbd52d: https://github.com/python-semantic-release/python-semantic-release/commit/5fbd52d7de4982b5689651201a0e07b445158645
.. _9b6ddfe: https://github.com/python-semantic-release/python-semantic-release/commit/9b6ddfef448f9de30fa2845034f76655d34a9912
.. _PR#631: https://github.com/python-semantic-release/python-semantic-release/pull/631
.. _PR#632: https://github.com/python-semantic-release/python-semantic-release/pull/632
.. _changelog-v8.0.0:
v8.0.0 (2023-07-16)
===================
✨ Features
-----------
* **publish-cmd**: Add ``--post-to-release-tag`` option to control where to publish (`PR#619`_,
`ec30564`_)
* Make it easier to access commit messages in ParsedCommits (`PR#619`_, `ec30564`_)
* Remove publication of ``dists/`` to artifact repository (`PR#619`_, `ec30564`_)
* Rename 'upload' configuration section to 'publish' (`PR#619`_, `ec30564`_)
* **github-action**: Add GitHub Actions output variables (`PR#619`_, `ec30564`_)
* **version-cmd**: Add ``--skip-build`` option (`PR#619`_, `ec30564`_)
* **version-cmd** Add ``--strict`` version mode (`PR#619`_, `ec30564`_)
🪲 Bug Fixes
------------
* Add logging for token auth, use token for push (`PR#619`_, `ec30564`_)
* Caching for repo owner and name (`PR#619`_, `ec30564`_)
* Correct assets type in configuration (`PR#619`_, `ec30564`_)
* Correct assets type-annotation for RuntimeContext (`PR#619`_, `ec30564`_)
* Correct Dockerfile CLI command and GHA fetch (`PR#619`_, `ec30564`_)
* Correct handling of build commands (`PR#619`_, `ec30564`_)
* Correct logic for generating release notes (`PR#619`_, `ec30564`_)
* Create_or_update_release for Gitlab hvcs (`PR#619`_, `ec30564`_)
* Make additional attributes available for template authors (`PR#619`_, `ec30564`_)
* Only call Github Action output callback once defaults are set (`PR#619`_, `ec30564`_)
* Remove commit amending behavior (`PR#619`_, `ec30564`_)
* Resolve branch checkout logic in GHA (`PR#619`_, `ec30564`_)
* Resolve bug in changelog logic, enable upload to pypi (`PR#619`_, `ec30564`_)
* Resolve loss of tag_format configuration (`PR#619`_, `ec30564`_)
* **github-action**: Pin Debian version in Dockerfile (`PR#619`_, `ec30564`_)
* **github-action**: Correct input parsing (`PR#619`_, `ec30564`_)
* **github-action**: Mark container fs as safe for git to operate on (`PR#619`_, `ec30564`_)
* **github-action**: Quotation for git config command (`PR#619`_, `ec30564`_)
* **github-action**: Remove default for 'force' (`PR#619`_, `ec30564`_)
📖 Documentation
----------------
* Convert to Furo theme (`PR#619`_, `ec30564`_)
* Fix typo (`PR#619`_, `ec30564`_)
* Remove reference to dist publication (`PR#619`_, `ec30564`_)
* Update docs with additional required permissions (`PR#619`_, `ec30564`_)
* **changelog-templates**: fix typo (`PR#619`_, `ec30564`_)
♻️ Refactoring
---------------
* Remove verify-ci command (`PR#619`_, `ec30564`_)
💥 BREAKING CHANGES
--------------------
* numerous breaking changes, see :ref:`migrating-from-v7` for more information
.. _ec30564: https://github.com/python-semantic-release/python-semantic-release/commit/ec30564b4ec732c001d76d3c09ba033066d2b6fe
.. _PR#619: https://github.com/python-semantic-release/python-semantic-release/pull/619
.. _changelog-v7.34.6:
v7.34.6 (2023-06-17)
====================
🪲 Bug Fixes
------------
* Relax invoke dependency constraint (`18ea200`_)
.. _18ea200: https://github.com/python-semantic-release/python-semantic-release/commit/18ea200633fd67e07f3d4121df5aa4c6dd29d154
.. _changelog-v7.34.5:
v7.34.5 (2023-06-17)
====================
🪲 Bug Fixes
------------
* Consider empty commits (`PR#608`_, `6f2e890`_)
.. _6f2e890: https://github.com/python-semantic-release/python-semantic-release/commit/6f2e8909636595d3cb5e858f42c63820cda45974
.. _PR#608: https://github.com/python-semantic-release/python-semantic-release/pull/608
.. _changelog-v7.34.4:
v7.34.4 (2023-06-15)
====================
🪲 Bug Fixes
------------
* Docker build fails installing git (`PR#605`_, `9e3eb97`_)
.. _9e3eb97: https://github.com/python-semantic-release/python-semantic-release/commit/9e3eb979783bc39ca564c2967c6c77eecba682e6
.. _PR#605: https://github.com/python-semantic-release/python-semantic-release/pull/605
.. _changelog-v7.34.3:
v7.34.3 (2023-06-01)
====================
🪲 Bug Fixes
------------
* Generate markdown linter compliant changelog headers & lists (`PR#597`_, `cc87400`_)
.. _cc87400: https://github.com/python-semantic-release/python-semantic-release/commit/cc87400d4a823350de7d02dc3172d2488c9517db
.. _PR#597: https://github.com/python-semantic-release/python-semantic-release/pull/597
.. _changelog-v7.34.2:
v7.34.2 (2023-05-29)
====================
🪲 Bug Fixes
------------
* Open all files with explicit utf-8 encoding (`PR#596`_, `cb71f35`_)
.. _cb71f35: https://github.com/python-semantic-release/python-semantic-release/commit/cb71f35c26c1655e675fa735fa880d39a2c8af9c
.. _PR#596: https://github.com/python-semantic-release/python-semantic-release/pull/596
.. _changelog-v7.34.1:
v7.34.1 (2023-05-28)
====================
🪲 Bug Fixes
------------
* Generate markdown linter compliant changelog headers & lists (`PR#594`_, `9d9d403`_)
.. _9d9d403: https://github.com/python-semantic-release/python-semantic-release/commit/9d9d40305c499c907335abe313e3ed122db0b154
.. _PR#594: https://github.com/python-semantic-release/python-semantic-release/pull/594
.. _changelog-v7.34.0:
v7.34.0 (2023-05-28)
====================
✨ Features
-----------
* Add option to only parse commits for current working directory (`PR#509`_, `cdf8116`_)
.. _cdf8116: https://github.com/python-semantic-release/python-semantic-release/commit/cdf8116c1e415363b10a01f541873e04ad874220
.. _PR#509: https://github.com/python-semantic-release/python-semantic-release/pull/509
.. _changelog-v7.33.5:
v7.33.5 (2023-05-19)
====================
🪲 Bug Fixes
------------
* Update docs and default config for gitmoji changes (`PR#590`_, `192da6e`_)
* Update sphinx dep (`PR#590`_, `192da6e`_)
📖 Documentation
----------------
* Update broken badge and add links (`PR#591`_, `0c23447`_)
.. _0c23447: https://github.com/python-semantic-release/python-semantic-release/commit/0c234475d27ad887b19170c82deb80293b3a95f1
.. _192da6e: https://github.com/python-semantic-release/python-semantic-release/commit/192da6e1352298b48630423d50191070a1c5ab24
.. _PR#590: https://github.com/python-semantic-release/python-semantic-release/pull/590
.. _PR#591: https://github.com/python-semantic-release/python-semantic-release/pull/591
.. _changelog-v7.33.4:
v7.33.4 (2023-05-14)
====================
🪲 Bug Fixes
------------
* If prerelease, publish prerelease (`PR#587`_, `927da9f`_)
.. _927da9f: https://github.com/python-semantic-release/python-semantic-release/commit/927da9f8feb881e02bc08b33dc559bd8e7fc41ab
.. _PR#587: https://github.com/python-semantic-release/python-semantic-release/pull/587
.. _changelog-v7.33.3:
v7.33.3 (2023-04-24)
====================
🪲 Bug Fixes
------------
* Trim emojis from config (`PR#583`_, `02902f7`_)
* Update Gitmojis according to official node module (`PR#582`_, `806fcfa`_)
📖 Documentation
----------------
* Grammar in ``docs/troubleshooting.rst`` (`PR#557`_, `bbe754a`_)
* Spelling and grammar in ``travis.rst`` (`PR#556`_, `3a76e9d`_)
* Update repository name (`PR#559`_, `5cdb05e`_)
.. _02902f7: https://github.com/python-semantic-release/python-semantic-release/commit/02902f73ee961565c2470c000f00947d9ef06cb1
.. _3a76e9d: https://github.com/python-semantic-release/python-semantic-release/commit/3a76e9d7505c421009eb3e953c32cccac2e70e07
.. _5cdb05e: https://github.com/python-semantic-release/python-semantic-release/commit/5cdb05e20f17b12890e1487c42d317dcbadd06c8
.. _806fcfa: https://github.com/python-semantic-release/python-semantic-release/commit/806fcfa4cfdd3df4b380afd015a68dc90d54215a
.. _bbe754a: https://github.com/python-semantic-release/python-semantic-release/commit/bbe754a3db9ce7132749e7902fe118b52f48ee42
.. _PR#556: https://github.com/python-semantic-release/python-semantic-release/pull/556
.. _PR#557: https://github.com/python-semantic-release/python-semantic-release/pull/557
.. _PR#559: https://github.com/python-semantic-release/python-semantic-release/pull/559
.. _PR#582: https://github.com/python-semantic-release/python-semantic-release/pull/582
.. _PR#583: https://github.com/python-semantic-release/python-semantic-release/pull/583
.. _changelog-v7.33.2:
v7.33.2 (2023-02-17)
====================
🪲 Bug Fixes
------------
* Inconsistent versioning between print-version and publish (`PR#524`_, `17d60e9`_)
.. _17d60e9: https://github.com/python-semantic-release/python-semantic-release/commit/17d60e9bf66f62e5845065486c9d5e450f74839a
.. _PR#524: https://github.com/python-semantic-release/python-semantic-release/pull/524
.. _changelog-v7.33.1:
v7.33.1 (2023-02-01)
====================
🪲 Bug Fixes
------------
* **action**: Mark container fs as safe for git (`PR#552`_, `2a55f68`_)
.. _2a55f68: https://github.com/python-semantic-release/python-semantic-release/commit/2a55f68e2b3cb9ffa9204c00ddbf12706af5c070
.. _PR#552: https://github.com/python-semantic-release/python-semantic-release/pull/552
.. _changelog-v7.33.0:
v7.33.0 (2023-01-15)
====================
✨ Features
-----------
* Add signing options to action (`31ad5eb`_)
* Update action with configuration options (`PR#518`_, `4664afe`_)
* **repository**: Add support for TWINE_CERT, closes `#521`_ (`PR#522`_, `d56e85d`_)
🪲 Bug Fixes
------------
* Changelog release commit search logic (`PR#530`_, `efb3410`_)
* **github-actions**: Bump Dockerfile to use Python 3.10 image, closes `#533`_ (`PR#536`_,
`8f2185d`_)
* **action**: Fix environment variable names (`3c66218`_)
📖 Documentation
----------------
* Update documentation (`5cbdad2`_)
.. _#521: https://github.com/python-semantic-release/python-semantic-release/issues/521
.. _#533: https://github.com/python-semantic-release/python-semantic-release/issues/533
.. _31ad5eb: https://github.com/python-semantic-release/python-semantic-release/commit/31ad5eb5a25f0ea703afc295351104aefd66cac1
.. _3c66218: https://github.com/python-semantic-release/python-semantic-release/commit/3c66218640044adf263fcf9b2714cfc4b99c2e90
.. _4664afe: https://github.com/python-semantic-release/python-semantic-release/commit/4664afe5f80a04834e398fefb841b166a51d95b7
.. _5cbdad2: https://github.com/python-semantic-release/python-semantic-release/commit/5cbdad296034a792c9bf05e3700eac4f847eb469
.. _8f2185d: https://github.com/python-semantic-release/python-semantic-release/commit/8f2185d570b3966b667ac591ae523812e9d2e00f
.. _d56e85d: https://github.com/python-semantic-release/python-semantic-release/commit/d56e85d1f2ac66fb0b59af2178164ca915dbe163
.. _efb3410: https://github.com/python-semantic-release/python-semantic-release/commit/efb341036196c39b4694ca4bfa56c6b3e0827c6c
.. _PR#518: https://github.com/python-semantic-release/python-semantic-release/pull/518
.. _PR#522: https://github.com/python-semantic-release/python-semantic-release/pull/522
.. _PR#530: https://github.com/python-semantic-release/python-semantic-release/pull/530
.. _PR#536: https://github.com/python-semantic-release/python-semantic-release/pull/536
.. _PR#541: https://github.com/python-semantic-release/python-semantic-release/pull/541
.. _changelog-v7.32.2:
v7.32.2 (2022-10-22)
====================
🪲 Bug Fixes
------------
* Fix changelog generation in tag-mode (`PR#171`_, `482a62e`_)
📖 Documentation
----------------
* Fix code blocks (`PR#506`_, `24b7673`_)
.. _24b7673: https://github.com/python-semantic-release/python-semantic-release/commit/24b767339fcef1c843f7dd3188900adab05e03b1
.. _482a62e: https://github.com/python-semantic-release/python-semantic-release/commit/482a62ec374208b2d57675cb0b7f0ab9695849b9
.. _PR#171: https://github.com/python-semantic-release/python-semantic-release/pull/171
.. _PR#506: https://github.com/python-semantic-release/python-semantic-release/pull/506
.. _changelog-v7.32.1:
v7.32.1 (2022-10-07)
====================
🪲 Bug Fixes
------------
* Corrections for deprecation warnings (`PR#505`_, `d47afb6`_)
📖 Documentation
----------------
* Correct spelling mistakes (`PR#504`_, `3717e0d`_)
.. _3717e0d: https://github.com/python-semantic-release/python-semantic-release/commit/3717e0d8810f5d683847c7b0e335eeefebbf2921
.. _d47afb6: https://github.com/python-semantic-release/python-semantic-release/commit/d47afb6516238939e174f946977bf4880062a622
.. _PR#504: https://github.com/python-semantic-release/python-semantic-release/pull/504
.. _PR#505: https://github.com/python-semantic-release/python-semantic-release/pull/505
.. _changelog-v7.32.0:
v7.32.0 (2022-09-25)
====================
✨ Features
-----------
* Add setting for enforcing textual changelog sections, closes `#498`_ (`PR#502`_, `988437d`_)
📖 Documentation
----------------
* Correct documented default behavior for ``commit_version_number`` (`PR#497`_, `ffae2dc`_)
.. _#498: https://github.com/python-semantic-release/python-semantic-release/issues/498
.. _988437d: https://github.com/python-semantic-release/python-semantic-release/commit/988437d21e40d3e3b1c95ed66b535bdd523210de
.. _ffae2dc: https://github.com/python-semantic-release/python-semantic-release/commit/ffae2dc68f7f4bc13c5fd015acd43b457e568ada
.. _PR#497: https://github.com/python-semantic-release/python-semantic-release/pull/497
.. _PR#502: https://github.com/python-semantic-release/python-semantic-release/pull/502
.. _changelog-v7.31.4:
v7.31.4 (2022-08-23)
====================
🪲 Bug Fixes
------------
* Account for trailing newlines in commit messages, closes `#490`_ (`PR#495`_, `111b151`_)
.. _#490: https://github.com/python-semantic-release/python-semantic-release/issues/490
.. _111b151: https://github.com/python-semantic-release/python-semantic-release/commit/111b1518e8c8e2bd7535bd4c4b126548da384605
.. _PR#495: https://github.com/python-semantic-release/python-semantic-release/pull/495
.. _changelog-v7.31.3:
v7.31.3 (2022-08-22)
====================
🪲 Bug Fixes
------------
* Use ``commit_subject`` when searching for release commits (`PR#488`_, `3849ed9`_)
.. _3849ed9: https://github.com/python-semantic-release/python-semantic-release/commit/3849ed992c3cff9054b8690bcf59e49768f84f47
.. _PR#488: https://github.com/python-semantic-release/python-semantic-release/pull/488
.. _changelog-v7.31.2:
v7.31.2 (2022-07-29)
====================
🪲 Bug Fixes
------------
* Add better handling of missing changelog placeholder, closes `#454`_ (`e7a0e81`_)
* Add repo=None when not in git repo, closes `#422`_ (`40be804`_)
📖 Documentation
----------------
* Add example for pyproject.toml (`2a4b8af`_)
.. _#422: https://github.com/python-semantic-release/python-semantic-release/issues/422
.. _#454: https://github.com/python-semantic-release/python-semantic-release/issues/454
.. _2a4b8af: https://github.com/python-semantic-release/python-semantic-release/commit/2a4b8af1c2893a769c02476bb92f760c8522bd7a
.. _40be804: https://github.com/python-semantic-release/python-semantic-release/commit/40be804c09ab8a036fb135c9c38a63f206d2742c
.. _e7a0e81: https://github.com/python-semantic-release/python-semantic-release/commit/e7a0e81c004ade73ed927ba4de8c3e3ccaf0047c
.. _changelog-v7.31.1:
v7.31.1 (2022-07-29)
====================
🪲 Bug Fixes
------------
* Update git email in action, closes `#473`_ (`0ece6f2`_)
.. _#473: https://github.com/python-semantic-release/python-semantic-release/issues/473
.. _0ece6f2: https://github.com/python-semantic-release/python-semantic-release/commit/0ece6f263ff02a17bb1e00e7ed21c490f72e3d00
.. _changelog-v7.31.0:
v7.31.0 (2022-07-29)
====================
✨ Features
-----------
* Add prerelease-patch and no-prerelease-patch flags for whether to auto-bump prereleases
(`b4e5b62`_)
* Override repository_url w REPOSITORY_URL env var (`PR#439`_, `cb7578c`_)
🪲 Bug Fixes
------------
* :bug: fix get_current_release_version for tag_only version_source (`cad09be`_)
.. _b4e5b62: https://github.com/python-semantic-release/python-semantic-release/commit/b4e5b626074f969e4140c75fdac837a0625cfbf6
.. _cad09be: https://github.com/python-semantic-release/python-semantic-release/commit/cad09be9ba067f1c882379c0f4b28115a287fc2b
.. _cb7578c: https://github.com/python-semantic-release/python-semantic-release/commit/cb7578cf005b8bd65d9b988f6f773e4c060982e3
.. _PR#439: https://github.com/python-semantic-release/python-semantic-release/pull/439
.. _changelog-v7.30.2:
v7.30.2 (2022-07-26)
====================
🪲 Bug Fixes
------------
* Declare additional_options as action inputs (`PR#481`_, `cb5d8c7`_)
.. _cb5d8c7: https://github.com/python-semantic-release/python-semantic-release/commit/cb5d8c7ce7d013fcfabd7696b5ffb846a8a6f853
.. _PR#481: https://github.com/python-semantic-release/python-semantic-release/pull/481
.. _changelog-v7.30.1:
v7.30.1 (2022-07-25)
====================
🪲 Bug Fixes
------------
* Don't use commit_subject for tag pattern matching (`PR#480`_, `ac3f11e`_)
.. _ac3f11e: https://github.com/python-semantic-release/python-semantic-release/commit/ac3f11e689f4a290d20b68b9c5c214098eb61b5f
.. _PR#480: https://github.com/python-semantic-release/python-semantic-release/pull/480
.. _changelog-v7.30.0:
v7.30.0 (2022-07-25)
====================
✨ Features
-----------
* Add ``additional_options`` input for GitHub Action (`PR#477`_, `aea60e3`_)
🪲 Bug Fixes
------------
* Allow empty additional options (`PR#479`_, `c9b2514`_)
.. _aea60e3: https://github.com/python-semantic-release/python-semantic-release/commit/aea60e3d290c6fe3137bff21e0db1ed936233776
.. _c9b2514: https://github.com/python-semantic-release/python-semantic-release/commit/c9b2514d3e164b20e78b33f60989d78c2587e1df
.. _PR#477: https://github.com/python-semantic-release/python-semantic-release/pull/477
.. _PR#479: https://github.com/python-semantic-release/python-semantic-release/pull/479
.. _changelog-v7.29.7:
v7.29.7 (2022-07-24)
====================
🪲 Bug Fixes
------------
* Ignore dependency version bumps when parsing version from commit logs (`PR#476`_, `51bcb78`_)
.. _51bcb78: https://github.com/python-semantic-release/python-semantic-release/commit/51bcb780a9f55fadfaf01612ff65c1f92642c2c1
.. _PR#476: https://github.com/python-semantic-release/python-semantic-release/pull/476
.. _changelog-v7.29.6:
v7.29.6 (2022-07-15)
====================
🪲 Bug Fixes
------------
* Allow changing prerelease tag using CLI flags (`PR#466`_, `395bf4f`_)
.. _395bf4f: https://github.com/python-semantic-release/python-semantic-release/commit/395bf4f2de73663c070f37cced85162d41934213
.. _PR#466: https://github.com/python-semantic-release/python-semantic-release/pull/466
.. _changelog-v7.29.5:
v7.29.5 (2022-07-14)
====================
🪲 Bug Fixes
------------
* Add packaging module requirement (`PR#469`_, `b99c9fa`_)
* **publish**: Get version bump for current release (`PR#467`_, `dd26888`_)
.. _b99c9fa: https://github.com/python-semantic-release/python-semantic-release/commit/b99c9fa88dc25e5ceacb131cd93d9079c4fb2c86
.. _dd26888: https://github.com/python-semantic-release/python-semantic-release/commit/dd26888a923b2f480303c19f1916647de48b02bf
.. _PR#467: https://github.com/python-semantic-release/python-semantic-release/pull/467
.. _PR#469: https://github.com/python-semantic-release/python-semantic-release/pull/469
.. _changelog-v7.29.4:
v7.29.4 (2022-06-29)
====================
🪲 Bug Fixes
------------
* Add text for empty ValueError (`PR#461`_, `733254a`_)
.. _733254a: https://github.com/python-semantic-release/python-semantic-release/commit/733254a99320d8c2f964d799ac4ec29737867faa
.. _PR#461: https://github.com/python-semantic-release/python-semantic-release/pull/461
.. _changelog-v7.29.3:
v7.29.3 (2022-06-26)
====================
🪲 Bug Fixes
------------
* Ensure that assets can be uploaded successfully on custom GitHub servers (`PR#458`_, `32b516d`_)
.. _32b516d: https://github.com/python-semantic-release/python-semantic-release/commit/32b516d7aded4afcafe4aa56d6a5a329b3fc371d
.. _PR#458: https://github.com/python-semantic-release/python-semantic-release/pull/458
.. _changelog-v7.29.2:
v7.29.2 (2022-06-20)
====================
🪲 Bug Fixes
------------
* Ensure should_bump checks against release version if not prerelease (`PR#457`_, `da0606f`_)
.. _da0606f: https://github.com/python-semantic-release/python-semantic-release/commit/da0606f0d67ada5f097c704b9423ead3b5aca6b2
.. _PR#457: https://github.com/python-semantic-release/python-semantic-release/pull/457
.. _changelog-v7.29.1:
v7.29.1 (2022-06-01)
====================
🪲 Bug Fixes
------------
* Capture correct release version when patch has more than one digit (`PR#448`_, `426cdc7`_)
.. _426cdc7: https://github.com/python-semantic-release/python-semantic-release/commit/426cdc7d7e0140da67f33b6853af71b2295aaac2
.. _PR#448: https://github.com/python-semantic-release/python-semantic-release/pull/448
.. _changelog-v7.29.0:
v7.29.0 (2022-05-27)
====================
✨ Features
-----------
* Allow using ssh-key to push version while using token to publish to hvcs (`PR#419`_, `7b2dffa`_)
* **config**: Add ignore_token_for_push param (`PR#419`_, `7b2dffa`_)
🪲 Bug Fixes
------------
* Fix and refactor prerelease (`PR#435`_, `94c9494`_)
* **test**: Override GITHUB_ACTOR env (`PR#419`_, `7b2dffa`_)
📖 Documentation
----------------
* Add documentation for ignore_token_for_push (`PR#419`_, `7b2dffa`_)
.. _7b2dffa: https://github.com/python-semantic-release/python-semantic-release/commit/7b2dffadf43c77d5e0eea307aefcee5c7744df5c
.. _94c9494: https://github.com/python-semantic-release/python-semantic-release/commit/94c94942561f85f48433c95fd3467e03e0893ab4
.. _PR#419: https://github.com/python-semantic-release/python-semantic-release/pull/419
.. _PR#435: https://github.com/python-semantic-release/python-semantic-release/pull/435
.. _changelog-v7.28.1:
v7.28.1 (2022-04-14)
====================
🪲 Bug Fixes
------------
* Fix getting current version when ``version_source=tag_only`` (`PR#437`_, `b247936`_)
.. _b247936: https://github.com/python-semantic-release/python-semantic-release/commit/b247936a81c0d859a34bf9f17ab8ca6a80488081
.. _PR#437: https://github.com/python-semantic-release/python-semantic-release/pull/437
.. _changelog-v7.28.0:
v7.28.0 (2022-04-11)
====================
✨ Features
-----------
* Add ``tag_only`` option for ``version_source``, closes `#354`_ (`PR#436`_, `cf74339`_)
.. _#354: https://github.com/python-semantic-release/python-semantic-release/issues/354
.. _cf74339: https://github.com/python-semantic-release/python-semantic-release/commit/cf743395456a86c62679c2c0342502af043bfc3b
.. _PR#436: https://github.com/python-semantic-release/python-semantic-release/pull/436
.. _changelog-v7.27.1:
v7.27.1 (2022-04-03)
====================
🪲 Bug Fixes
------------
* **prerelease**: Pass prerelease option to get_current_version (`PR#432`_, `aabab0b`_)
.. _aabab0b: https://github.com/python-semantic-release/python-semantic-release/commit/aabab0b7ce647d25e0c78ae6566f1132ece9fcb9
.. _PR#432: https://github.com/python-semantic-release/python-semantic-release/pull/432
.. _changelog-v7.27.0:
v7.27.0 (2022-03-15)
====================
✨ Features
-----------
* Add git-lfs to docker container (`PR#427`_, `184e365`_)
.. _184e365: https://github.com/python-semantic-release/python-semantic-release/commit/184e3653932979b82e5a62b497f2a46cbe15ba87
.. _PR#427: https://github.com/python-semantic-release/python-semantic-release/pull/427
.. _changelog-v7.26.0:
v7.26.0 (2022-03-07)
====================
✨ Features
-----------
* **publish-cmd**: add ``--prerelease`` cli flag to enable prerelease versioning (`PR#413`_,
`7064265`_)
* **version-cmd**: add ``--prerelease`` cli flag to enable prerelease versioning (`PR#413`_,
`7064265`_)
📖 Documentation
----------------
* Added basic info about prerelease versioning (`PR#413`_, `7064265`_)
.. _7064265: https://github.com/python-semantic-release/python-semantic-release/commit/7064265627a2aba09caa2873d823b594e0e23e77
.. _PR#413: https://github.com/python-semantic-release/python-semantic-release/pull/413
.. _changelog-v7.25.2:
v7.25.2 (2022-02-24)
====================
🪲 Bug Fixes
------------
* **gitea**: Use form-data from asset upload (`PR#421`_, `e011944`_)
.. _e011944: https://github.com/python-semantic-release/python-semantic-release/commit/e011944987885f75b80fe16a363f4befb2519a91
.. _PR#421: https://github.com/python-semantic-release/python-semantic-release/pull/421
.. _changelog-v7.25.1:
v7.25.1 (2022-02-23)
====================
🪲 Bug Fixes
------------
* **gitea**: Build status and asset upload (`PR#420`_, `57db81f`_)
* **gitea**: Handle list build status response (`PR#420`_, `57db81f`_)
.. _57db81f: https://github.com/python-semantic-release/python-semantic-release/commit/57db81f4c6b96da8259e3bad9137eaccbcd10f6e
.. _PR#420: https://github.com/python-semantic-release/python-semantic-release/pull/420
.. _changelog-v7.25.0:
v7.25.0 (2022-02-17)
====================
✨ Features
-----------
* **hvcs**: Add gitea support (`PR#412`_, `b7e7936`_)
📖 Documentation
----------------
* Document tag_commit, closes `#410`_ (`b631ca0`_)
.. _#410: https://github.com/python-semantic-release/python-semantic-release/issues/410
.. _b631ca0: https://github.com/python-semantic-release/python-semantic-release/commit/b631ca0a79cb2d5499715d43688fc284cffb3044
.. _b7e7936: https://github.com/python-semantic-release/python-semantic-release/commit/b7e7936331b7939db09abab235c8866d800ddc1a
.. _PR#412: https://github.com/python-semantic-release/python-semantic-release/pull/412
.. _changelog-v7.24.0:
v7.24.0 (2022-01-24)
====================
✨ Features
-----------
* Include additional changes in release commits (`3e34f95`_)
.. _3e34f95: https://github.com/python-semantic-release/python-semantic-release/commit/3e34f957ff5a3ec6e6f984cc4a79a38ce4391ea9
.. _changelog-v7.23.0:
v7.23.0 (2021-11-30)
====================
✨ Features
-----------
* Support Github Enterprise server (`b4e01f1`_)
.. _b4e01f1: https://github.com/python-semantic-release/python-semantic-release/commit/b4e01f1b7e841263fa84f57f0ac331f7c0b31954
.. _changelog-v7.22.0:
v7.22.0 (2021-11-21)
====================
✨ Features
-----------
* **parser_angular**: Allow customization in parser (`298eebb`_)
🪲 Bug Fixes
------------
* Address PR feedback for ``parser_angular.py`` (`f7bc458`_)
.. _298eebb: https://github.com/python-semantic-release/python-semantic-release/commit/298eebbfab5c083505036ba1df47a5874a1eed6e
.. _f7bc458: https://github.com/python-semantic-release/python-semantic-release/commit/f7bc45841e6a5c762f99f936c292cee25fabcd02
.. _changelog-v7.21.0:
v7.21.0 (2021-11-21)
====================
✨ Features
-----------
* Use gitlab-ci or github actions env vars, closes `#363`_ (`8ca8dd4`_)
🪲 Bug Fixes
------------
* Remove invalid repository exception (`746b62d`_)
.. _#363: https://github.com/python-semantic-release/python-semantic-release/issues/363
.. _746b62d: https://github.com/python-semantic-release/python-semantic-release/commit/746b62d4e207a5d491eecd4ca96d096eb22e3bed
.. _8ca8dd4: https://github.com/python-semantic-release/python-semantic-release/commit/8ca8dd40f742f823af147928bd75a9577c50d0fd
.. _changelog-v7.20.0:
v7.20.0 (2021-11-21)
====================
✨ Features
-----------
* Allow custom environment variable names (`PR#392`_, `372cda3`_)
* Rewrite Twine adapter for uploading to artifact repositories (`cfb20af`_)
🪲 Bug Fixes
------------
* Don't use linux commands on windows (`PR#393`_, `5bcccd2`_)
* Mypy errors in vcs_helpers (`13ca0fe`_)
* Skip removing the build folder if it doesn't exist (`8e79fdc`_)
📖 Documentation
----------------
* Clean typos and add section for repository upload (`1efa18a`_)
.. _13ca0fe: https://github.com/python-semantic-release/python-semantic-release/commit/13ca0fe650125be2f5e953f6193fdc4d44d3c75a
.. _1efa18a: https://github.com/python-semantic-release/python-semantic-release/commit/1efa18a3a55134d6bc6e4572ab025e24082476cd
.. _372cda3: https://github.com/python-semantic-release/python-semantic-release/commit/372cda3497f16ead2209e6e1377d38f497144883
.. _5bcccd2: https://github.com/python-semantic-release/python-semantic-release/commit/5bcccd21cc8be3289db260e645fec8dc6a592abd
.. _8e79fdc: https://github.com/python-semantic-release/python-semantic-release/commit/8e79fdc107ffd852a91dfb5473e7bd1dfaba4ee5
.. _cfb20af: https://github.com/python-semantic-release/python-semantic-release/commit/cfb20af79a8e25a77aee9ff72deedcd63cb7f62f
.. _PR#392: https://github.com/python-semantic-release/python-semantic-release/pull/392
.. _PR#393: https://github.com/python-semantic-release/python-semantic-release/pull/393
.. _changelog-v7.19.2:
v7.19.2 (2021-09-04)
====================
🪲 Bug Fixes
------------
* Fixed ImproperConfig import error (`PR#377`_, `b011a95`_)
.. _b011a95: https://github.com/python-semantic-release/python-semantic-release/commit/b011a9595df4240cb190bfb1ab5b6d170e430dfc
.. _PR#377: https://github.com/python-semantic-release/python-semantic-release/pull/377
.. _changelog-v7.19.1:
v7.19.1 (2021-08-17)
====================
🪲 Bug Fixes
------------
* Add get_formatted_tag helper instead of hardcoded v-prefix in the git tags (`1a354c8`_)
.. _1a354c8: https://github.com/python-semantic-release/python-semantic-release/commit/1a354c86abad77563ebce9a6944256461006f3c7
.. _changelog-v7.19.0:
v7.19.0 (2021-08-16)
====================
✨ Features
-----------
* Custom git tag format support (`PR#373`_, `1d76632`_)
📖 Documentation
----------------
* **configuration**: define ``tag_format`` usage & resulting effect (`PR#373`_, `1d76632`_)
* **parser**: Documentation for scipy-parser (`45ee34a`_)
.. _1d76632: https://github.com/python-semantic-release/python-semantic-release/commit/1d76632043bf0b6076d214a63c92013624f4b95e
.. _45ee34a: https://github.com/python-semantic-release/python-semantic-release/commit/45ee34aa21443860a6c2cd44a52da2f353b960bf
.. _PR#373: https://github.com/python-semantic-release/python-semantic-release/pull/373
.. _changelog-v7.18.0:
v7.18.0 (2021-08-09)
====================
✨ Features
-----------
* Add support for non-prefixed tags (`PR#366`_, `0fee4dd`_)
📖 Documentation
----------------
* Clarify second argument of ParsedCommit (`086ddc2`_)
.. _086ddc2: https://github.com/python-semantic-release/python-semantic-release/commit/086ddc28f06522453328f5ea94c873bd202ff496
.. _0fee4dd: https://github.com/python-semantic-release/python-semantic-release/commit/0fee4ddb5baaddf85ed6b76e76a04474a5f97d0a
.. _PR#366: https://github.com/python-semantic-release/python-semantic-release/pull/366
.. _changelog-v7.17.0:
v7.17.0 (2021-08-07)
====================
✨ Features
-----------
* **parser**: Add scipy style parser (`PR#369`_, `51a3921`_)
.. _51a3921: https://github.com/python-semantic-release/python-semantic-release/commit/51a39213ea120c4bbd7a57b74d4f0cc3103da9f5
.. _PR#369: https://github.com/python-semantic-release/python-semantic-release/pull/369
.. _changelog-v7.16.4:
v7.16.4 (2021-08-03)
====================
🪲 Bug Fixes
------------
* Correct rendering of gitlab issue references, closes `#358`_ (`07429ec`_)
.. _#358: https://github.com/python-semantic-release/python-semantic-release/issues/358
.. _07429ec: https://github.com/python-semantic-release/python-semantic-release/commit/07429ec4a32d32069f25ec77b4bea963bd5d2a00
.. _changelog-v7.16.3:
v7.16.3 (2021-07-29)
====================
🪲 Bug Fixes
------------
* Print right info if token is not set, closes `#360`_ (`PR#361`_, `a275a7a`_)
.. _#360: https://github.com/python-semantic-release/python-semantic-release/issues/360
.. _a275a7a: https://github.com/python-semantic-release/python-semantic-release/commit/a275a7a17def85ff0b41d254e4ee42772cce1981
.. _PR#361: https://github.com/python-semantic-release/python-semantic-release/pull/361
.. _changelog-v7.16.2:
v7.16.2 (2021-06-25)
====================
🪲 Bug Fixes
------------
* Use release-api for gitlab (`1ef5cab`_)
📖 Documentation
----------------
* Recommend setting a concurrency group for GitHub Actions (`34b0735`_)
* Update trove classifiers to reflect supported versions (`PR#344`_, `7578004`_)
.. _1ef5cab: https://github.com/python-semantic-release/python-semantic-release/commit/1ef5caba2d8dd0f2647bc51ede0ef7152d8b7b8d
.. _34b0735: https://github.com/python-semantic-release/python-semantic-release/commit/34b07357ab3f4f4aa787b71183816ec8aaf334a8
.. _7578004: https://github.com/python-semantic-release/python-semantic-release/commit/7578004ed4b20c2bd553782443dfd77535faa377
.. _PR#344: https://github.com/python-semantic-release/python-semantic-release/pull/344
.. _changelog-v7.16.1:
v7.16.1 (2021-06-08)
====================
🪲 Bug Fixes
------------
* Tomlkit should stay at 0.7.0 (`769a5f3`_)
.. _769a5f3: https://github.com/python-semantic-release/python-semantic-release/commit/769a5f31115cdb1f43f19a23fe72b96a8c8ba0fc
.. _changelog-v7.16.0:
v7.16.0 (2021-06-08)
====================
✨ Features
-----------
* Add option to omit tagging (`PR#341`_, `20603e5`_)
.. _20603e5: https://github.com/python-semantic-release/python-semantic-release/commit/20603e53116d4f05e822784ce731b42e8cbc5d8f
.. _PR#341: https://github.com/python-semantic-release/python-semantic-release/pull/341
.. _changelog-v7.15.6:
v7.15.6 (2021-06-08)
====================
🪲 Bug Fixes
------------
* Update click and tomlkit (`PR#339`_, `947ea3b`_)
.. _947ea3b: https://github.com/python-semantic-release/python-semantic-release/commit/947ea3bc0750735941446cf4a87bae20e750ba12
.. _PR#339: https://github.com/python-semantic-release/python-semantic-release/pull/339
.. _changelog-v7.15.5:
v7.15.5 (2021-05-26)
====================
🪲 Bug Fixes
------------
* Pin tomlkit to 0.7.0 (`2cd0db4`_)
.. _2cd0db4: https://github.com/python-semantic-release/python-semantic-release/commit/2cd0db4537bb9497b72eb496f6bab003070672ab
.. _changelog-v7.15.4:
v7.15.4 (2021-04-29)
====================
🪲 Bug Fixes
------------
* Change log level of failed toml loading, closes `#235`_ (`24bb079`_)
.. _#235: https://github.com/python-semantic-release/python-semantic-release/issues/235
.. _24bb079: https://github.com/python-semantic-release/python-semantic-release/commit/24bb079cbeff12e7043dd35dd0b5ae03192383bb
.. _changelog-v7.15.3:
v7.15.3 (2021-04-03)
====================
🪲 Bug Fixes
------------
* Add venv to path in github action (`583c5a1`_)
.. _583c5a1: https://github.com/python-semantic-release/python-semantic-release/commit/583c5a13e40061fc544b82decfe27a6c34f6d265
.. _changelog-v7.15.2:
v7.15.2 (2021-04-03)
====================
🪲 Bug Fixes
------------
* Run semantic-release in virtualenv in the github action, closes `#331`_ (`b508ea9`_)
* Set correct path for venv in action script (`aac02b5`_)
* Use absolute path for venv in github action (`d4823b3`_)
📖 Documentation
----------------
* Clarify that HVCS should be lowercase, closes `#330`_ (`da0ab0c`_)
.. _#330: https://github.com/python-semantic-release/python-semantic-release/issues/330
.. _#331: https://github.com/python-semantic-release/python-semantic-release/issues/331
.. _aac02b5: https://github.com/python-semantic-release/python-semantic-release/commit/aac02b5a44a6959328d5879578aa3536bdf856c2
.. _b508ea9: https://github.com/python-semantic-release/python-semantic-release/commit/b508ea9f411c1cd4f722f929aab9f0efc0890448
.. _d4823b3: https://github.com/python-semantic-release/python-semantic-release/commit/d4823b3b6b1fcd5c33b354f814643c9aaf85a06a
.. _da0ab0c: https://github.com/python-semantic-release/python-semantic-release/commit/da0ab0c62c4ce2fa0d815e5558aeec1a1e23bc89
.. _changelog-v7.15.1:
v7.15.1 (2021-03-26)
====================
🪲 Bug Fixes
------------
* Add support for setting build_command to "false", closes `#328`_ (`520cf1e`_)
* Upgrade python-gitlab range, closes `#329`_ (`abfacc4`_)
📖 Documentation
----------------
* Add common options to documentation, closes `#327`_ (`20d79a5`_)
.. _#327: https://github.com/python-semantic-release/python-semantic-release/issues/327
.. _#328: https://github.com/python-semantic-release/python-semantic-release/issues/328
.. _#329: https://github.com/python-semantic-release/python-semantic-release/issues/329
.. _20d79a5: https://github.com/python-semantic-release/python-semantic-release/commit/20d79a51bffa26d40607c1b77d10912992279112
.. _520cf1e: https://github.com/python-semantic-release/python-semantic-release/commit/520cf1eaa7816d0364407dbd17b5bc7c79806086
.. _abfacc4: https://github.com/python-semantic-release/python-semantic-release/commit/abfacc432300941d57488842e41c06d885637e6c
.. _changelog-v7.15.0:
v7.15.0 (2021-02-18)
====================
✨ Features
-----------
* Allow the use of .pypirc for twine uploads (`PR#325`_, `6bc56b8`_)
📖 Documentation
----------------
* Add documentation for releasing on a Jenkins instance (`PR#324`_, `77ad988`_)
.. _6bc56b8: https://github.com/python-semantic-release/python-semantic-release/commit/6bc56b8aa63069a25a828a2d1a9038ecd09b7d5d
.. _77ad988: https://github.com/python-semantic-release/python-semantic-release/commit/77ad988a2057be59e4559614a234d6871c06ee37
.. _PR#324: https://github.com/python-semantic-release/python-semantic-release/pull/324
.. _PR#325: https://github.com/python-semantic-release/python-semantic-release/pull/325
.. _changelog-v7.14.0:
v7.14.0 (2021-02-11)
====================
✨ Features
-----------
* **checks**: Add support for Jenkins CI (`PR#322`_, `3e99855`_)
📖 Documentation
----------------
* Correct casing on proper nouns (`PR#320`_, `d51b999`_)
* Correcting Python casing (`PR#320`_, `d51b999`_)
* Correcting Semantic Versioning casing (`PR#320`_, `d51b999`_)
.. _3e99855: https://github.com/python-semantic-release/python-semantic-release/commit/3e99855c6bc72b3e9a572c58cc14e82ddeebfff8
.. _d51b999: https://github.com/python-semantic-release/python-semantic-release/commit/d51b999a245a4e56ff7a09d0495c75336f2f150d
.. _PR#320: https://github.com/python-semantic-release/python-semantic-release/pull/320
.. _PR#322: https://github.com/python-semantic-release/python-semantic-release/pull/322
.. _changelog-v7.13.2:
v7.13.2 (2021-01-29)
====================
🪲 Bug Fixes
------------
* Crash when TOML has no PSR section (`PR#319`_, `5f8ab99`_)
* Fix crash when TOML has no PSR section (`PR#319`_, `5f8ab99`_)
📖 Documentation
----------------
* Fix ``version_toml`` example for Poetry (`PR#318`_, `39acb68`_)
.. _39acb68: https://github.com/python-semantic-release/python-semantic-release/commit/39acb68bfffe8242040e476893639ba26fa0d6b5
.. _5f8ab99: https://github.com/python-semantic-release/python-semantic-release/commit/5f8ab99bf7254508f4b38fcddef2bdde8dd15a4c
.. _PR#318: https://github.com/python-semantic-release/python-semantic-release/pull/318
.. _PR#319: https://github.com/python-semantic-release/python-semantic-release/pull/319
.. _changelog-v7.13.1:
v7.13.1 (2021-01-26)
====================
🪲 Bug Fixes
------------
* Use multiline version_pattern match in replace, closes `#306`_ (`PR#315`_, `1a85af4`_)
.. _#306: https://github.com/python-semantic-release/python-semantic-release/issues/306
.. _1a85af4: https://github.com/python-semantic-release/python-semantic-release/commit/1a85af434325ce52e11b49895e115f7a936e417e
.. _PR#315: https://github.com/python-semantic-release/python-semantic-release/pull/315
.. _changelog-v7.13.0:
v7.13.0 (2021-01-26)
====================
✨ Features
-----------
* Support toml files for version declaration, closes `#245`_, `#275`_ (`PR#307`_, `9b62a7e`_)
.. _#245: https://github.com/python-semantic-release/python-semantic-release/issues/245
.. _#275: https://github.com/python-semantic-release/python-semantic-release/issues/275
.. _9b62a7e: https://github.com/python-semantic-release/python-semantic-release/commit/9b62a7e377378667e716384684a47cdf392093fa
.. _PR#307: https://github.com/python-semantic-release/python-semantic-release/pull/307
.. _changelog-v7.12.0:
v7.12.0 (2021-01-25)
====================
✨ Features
-----------
* **github**: Retry GitHub API requests on failure (`PR#314`_, `ac241ed`_)
🪲 Bug Fixes
------------
* **github**: Add retries to github API requests (`PR#314`_, `ac241ed`_)
📖 Documentation
----------------
* **actions**: Pat must be passed to checkout step too, closes `#311`_ (`e2d8e47`_)
.. _#311: https://github.com/python-semantic-release/python-semantic-release/issues/311
.. _ac241ed: https://github.com/python-semantic-release/python-semantic-release/commit/ac241edf4de39f4fc0ff561a749fa85caaf9e2ae
.. _e2d8e47: https://github.com/python-semantic-release/python-semantic-release/commit/e2d8e47d2b02860881381318dcc088e150c0fcde
.. _PR#314: https://github.com/python-semantic-release/python-semantic-release/pull/314
.. _changelog-v7.11.0:
v7.11.0 (2021-01-08)
====================
✨ Features
-----------
* **print-version**: Add print-version command to output version (`512e3d9`_)
🪲 Bug Fixes
------------
* Add dot to --define option help (`eb4107d`_)
* Avoid Unknown bump level 0 message (`8ab624c`_)
* **actions**: Fix github actions with new main location (`6666672`_)
⚙️ Build System
----------------
* Add __main__.py magic file (`e93f36a`_)
.. _512e3d9: https://github.com/python-semantic-release/python-semantic-release/commit/512e3d92706055bdf8d08b7c82927d3530183079
.. _6666672: https://github.com/python-semantic-release/python-semantic-release/commit/6666672d3d97ab7cdf47badfa3663f1a69c2dbdf
.. _8ab624c: https://github.com/python-semantic-release/python-semantic-release/commit/8ab624cf3508b57a9656a0a212bfee59379d6f8b
.. _e93f36a: https://github.com/python-semantic-release/python-semantic-release/commit/e93f36a7a10e48afb42c1dc3d860a5e2a07cf353
.. _eb4107d: https://github.com/python-semantic-release/python-semantic-release/commit/eb4107d2efdf8c885c8ae35f48f1b908d1fced32
.. _changelog-v7.10.0:
v7.10.0 (2021-01-08)
====================
✨ Features
-----------
* **build**: Allow falsy values for build_command to disable build step (`c07a440`_)
📖 Documentation
----------------
* Fix incorrect reference syntax (`42027f0`_)
* Rewrite getting started page (`97a9046`_)
.. _42027f0: https://github.com/python-semantic-release/python-semantic-release/commit/42027f0d2bb64f4c9eaec65112bf7b6f67568e60
.. _97a9046: https://github.com/python-semantic-release/python-semantic-release/commit/97a90463872502d1207890ae1d9dd008b1834385
.. _c07a440: https://github.com/python-semantic-release/python-semantic-release/commit/c07a440f2dfc45a2ad8f7c454aaac180c4651f70
.. _changelog-v7.9.0:
v7.9.0 (2020-12-21)
===================
✨ Features
-----------
* **hvcs**: Add hvcs_domain config option, closes `#277`_ (`ab3061a`_)
🪲 Bug Fixes
------------
* **history**: Coerce version to string (`PR#298`_, `d4cdc3d`_)
* **history**: Require semver >= 2.10 (`5087e54`_)
.. _#277: https://github.com/python-semantic-release/python-semantic-release/issues/277
.. _5087e54: https://github.com/python-semantic-release/python-semantic-release/commit/5087e549399648cf2e23339a037b33ca8b62d954
.. _ab3061a: https://github.com/python-semantic-release/python-semantic-release/commit/ab3061ae93c49d71afca043b67b361e2eb2919e6
.. _d4cdc3d: https://github.com/python-semantic-release/python-semantic-release/commit/d4cdc3d3cd2d93f2a78f485e3ea107ac816c7d00
.. _PR#298: https://github.com/python-semantic-release/python-semantic-release/pull/298
.. _changelog-v7.8.2:
v7.8.2 (2020-12-19)
===================
✨ Features
-----------
* **repository**: Add to settings artifact repository (`f4ef373`_)
🪲 Bug Fixes
------------
* **cli**: Skip remove_dist where not needed (`04817d4`_)
.. _04817d4: https://github.com/python-semantic-release/python-semantic-release/commit/04817d4ecfc693195e28c80455bfbb127485f36b
.. _f4ef373: https://github.com/python-semantic-release/python-semantic-release/commit/f4ef3733b948282fba5a832c5c0af134609b26d2
.. _changelog-v7.8.1:
v7.8.1 (2020-12-18)
===================
🪲 Bug Fixes
------------
* Filenames with unknown mimetype are now properly uploaded to github release (`f3ece78`_)
* **logs**: Fix TypeError when enabling debug logs (`2591a94`_)
.. _2591a94: https://github.com/python-semantic-release/python-semantic-release/commit/2591a94115114c4a91a48f5b10b3954f6ac932a1
.. _f3ece78: https://github.com/python-semantic-release/python-semantic-release/commit/f3ece78b2913e70f6b99907b192a1e92bbfd6b77
.. _changelog-v7.8.0:
v7.8.0 (2020-12-18)
===================
✨ Features
-----------
* Add ``upload_to_pypi_glob_patterns`` option (`42305ed`_)
🪲 Bug Fixes
------------
* **changelog**: Use "issues" link vs "pull" (`93e48c9`_)
* **netrc**: Prefer using token defined in GH_TOKEN instead of .netrc file (`3af32a7`_)
.. _3af32a7: https://github.com/python-semantic-release/python-semantic-release/commit/3af32a738f2f2841fd75ec961a8f49a0b1c387cf
.. _42305ed: https://github.com/python-semantic-release/python-semantic-release/commit/42305ed499ca08c819c4e7e65fcfbae913b8e6e1
.. _93e48c9: https://github.com/python-semantic-release/python-semantic-release/commit/93e48c992cb8b763f430ecbb0b7f9c3ca00036e4
.. _changelog-v7.7.0:
v7.7.0 (2020-12-12)
===================
✨ Features
-----------
* **changelog**: Add PR links in markdown (`PR#282`_, `0448f6c`_)
.. _0448f6c: https://github.com/python-semantic-release/python-semantic-release/commit/0448f6c350bbbf239a81fe13dc5f45761efa7673
.. _PR#282: https://github.com/python-semantic-release/python-semantic-release/pull/282
.. _changelog-v7.6.0:
v7.6.0 (2020-12-06)
===================
✨ Features
-----------
* Add ``major_on_zero`` option (`d324154`_)
📖 Documentation
----------------
* Add documentation for option ``major_on_zero`` (`2e8b26e`_)
.. _2e8b26e: https://github.com/python-semantic-release/python-semantic-release/commit/2e8b26e4ee0316a2cf2a93c09c783024fcd6b3ba
.. _d324154: https://github.com/python-semantic-release/python-semantic-release/commit/d3241540e7640af911eb24c71e66468feebb0d46
.. _changelog-v7.5.0:
v7.5.0 (2020-12-04)
===================
✨ Features
-----------
* **logs**: Include scope in changelogs (`PR#281`_, `21c96b6`_)
.. _21c96b6: https://github.com/python-semantic-release/python-semantic-release/commit/21c96b688cc44cc6f45af962ffe6d1f759783f37
.. _PR#281: https://github.com/python-semantic-release/python-semantic-release/pull/281
.. _changelog-v7.4.1:
v7.4.1 (2020-12-04)
===================
🪲 Bug Fixes
------------
* Add "changelog_capitalize" to flags, closes `#278`_ (`PR#279`_, `37716df`_)
.. _#278: https://github.com/python-semantic-release/python-semantic-release/issues/278
.. _37716df: https://github.com/python-semantic-release/python-semantic-release/commit/37716dfa78eb3f848f57a5100d01d93f5aafc0bf
.. _PR#279: https://github.com/python-semantic-release/python-semantic-release/pull/279
.. _changelog-v7.4.0:
v7.4.0 (2020-11-24)
===================
✨ Features
-----------
* Add changelog_capitalize configuration, closes `#260`_ (`7cacca1`_)
📖 Documentation
----------------
* Fix broken internal references (`PR#270`_, `da20b9b`_)
* Update links to Github docs (`PR#268`_, `c53162e`_)
.. _#260: https://github.com/python-semantic-release/python-semantic-release/issues/260
.. _7cacca1: https://github.com/python-semantic-release/python-semantic-release/commit/7cacca1eb436a7166ba8faf643b53c42bc32a6a7
.. _c53162e: https://github.com/python-semantic-release/python-semantic-release/commit/c53162e366304082a3bd5d143b0401da6a16a263
.. _da20b9b: https://github.com/python-semantic-release/python-semantic-release/commit/da20b9bdd3c7c87809c25ccb2a5993a7ea209a22
.. _PR#268: https://github.com/python-semantic-release/python-semantic-release/pull/268
.. _PR#270: https://github.com/python-semantic-release/python-semantic-release/pull/270
.. _changelog-v7.3.0:
v7.3.0 (2020-09-28)
===================
✨ Features
-----------
* Generate ``changelog.md`` file (`PR#266`_, `2587dfe`_)
📖 Documentation
----------------
* Fix docstring (`5a5e2cf`_)
.. _2587dfe: https://github.com/python-semantic-release/python-semantic-release/commit/2587dfed71338ec6c816f58cdf0882382c533598
.. _5a5e2cf: https://github.com/python-semantic-release/python-semantic-release/commit/5a5e2cfb5e6653fb2e95e6e23e56559953b2c2b4
.. _PR#266: https://github.com/python-semantic-release/python-semantic-release/pull/266
.. _changelog-v7.2.5:
v7.2.5 (2020-09-16)
===================
🪲 Bug Fixes
------------
* Add required to inputs in action metadata (`PR#264`_, `e76b255`_)
.. _e76b255: https://github.com/python-semantic-release/python-semantic-release/commit/e76b255cf7d3d156e3314fc28c54d63fa126e973
.. _PR#264: https://github.com/python-semantic-release/python-semantic-release/pull/264
.. _changelog-v7.2.4:
v7.2.4 (2020-09-14)
===================
🪲 Bug Fixes
------------
* Use range for toml dependency, closes `#241`_ (`45707e1`_)
.. _#241: https://github.com/python-semantic-release/python-semantic-release/issues/241
.. _45707e1: https://github.com/python-semantic-release/python-semantic-release/commit/45707e1b7dcab48103a33de9d7f9fdb5a34dae4a
.. _changelog-v7.2.3:
v7.2.3 (2020-09-12)
===================
🪲 Bug Fixes
------------
* Support multiline version_pattern matching by default (`82f7849`_)
📖 Documentation
----------------
* Create 'getting started' instructions (`PR#256`_, `5f4d000`_)
* Link to getting started guide in README (`f490e01`_)
.. _5f4d000: https://github.com/python-semantic-release/python-semantic-release/commit/5f4d000c3f153d1d23128acf577e389ae879466e
.. _82f7849: https://github.com/python-semantic-release/python-semantic-release/commit/82f7849dcf29ba658e0cb3b5d21369af8bf3c16f
.. _f490e01: https://github.com/python-semantic-release/python-semantic-release/commit/f490e0194fa818db4d38c185bc5e6245bfde546b
.. _PR#256: https://github.com/python-semantic-release/python-semantic-release/pull/256
.. _changelog-v7.2.2:
v7.2.2 (2020-07-26)
===================
🪲 Bug Fixes
------------
* **changelog**: Send changelog to stdout, closes `#250`_ (`87e2bb8`_)
📖 Documentation
----------------
* Add quotation marks to the pip commands in CONTRIBUTING.rst (`PR#253`_, `e20fa43`_)
.. _#250: https://github.com/python-semantic-release/python-semantic-release/issues/250
.. _87e2bb8: https://github.com/python-semantic-release/python-semantic-release/commit/87e2bb881387ff3ac245ab9923347a5a616e197b
.. _e20fa43: https://github.com/python-semantic-release/python-semantic-release/commit/e20fa43098c06f5f585c81b9cd7e287dcce3fb5d
.. _PR#253: https://github.com/python-semantic-release/python-semantic-release/pull/253
.. _changelog-v7.2.1:
v7.2.1 (2020-06-29)
===================
🪲 Bug Fixes
------------
* Commit all files with bumped versions (`PR#249`_, `b3a1766`_)
📖 Documentation
----------------
* Give example of multiple build commands (`PR#248`_, `65f1ffc`_)
.. _65f1ffc: https://github.com/python-semantic-release/python-semantic-release/commit/65f1ffcc6cac3bf382f4b821ff2be59d04f9f867
.. _b3a1766: https://github.com/python-semantic-release/python-semantic-release/commit/b3a1766be7edb7d2eb76f2726d35ab8298688b3b
.. _PR#248: https://github.com/python-semantic-release/python-semantic-release/pull/248
.. _PR#249: https://github.com/python-semantic-release/python-semantic-release/pull/249
.. _changelog-v7.2.0:
v7.2.0 (2020-06-15)
===================
✨ Features
-----------
* Bump versions in multiple files, closes `#175`_ (`PR#246`_, `0ba2c47`_)
.. _#175: https://github.com/python-semantic-release/python-semantic-release/issues/175
.. _0ba2c47: https://github.com/python-semantic-release/python-semantic-release/commit/0ba2c473c6e44cc326b3299b6ea3ddde833bdb37
.. _PR#246: https://github.com/python-semantic-release/python-semantic-release/pull/246
.. _changelog-v7.1.1:
v7.1.1 (2020-05-28)
===================
🪲 Bug Fixes
------------
* **changelog**: Swap sha and message in table changelog (`6741370`_)
.. _6741370: https://github.com/python-semantic-release/python-semantic-release/commit/6741370ab09b1706ff6e19b9fbe57b4bddefc70d
.. _changelog-v7.1.0:
v7.1.0 (2020-05-24)
===================
✨ Features
-----------
* **changelog**: Add changelog_table component, closes `#237`_ (`PR#242`_, `fe6a7e7`_)
.. _#237: https://github.com/python-semantic-release/python-semantic-release/issues/237
.. _fe6a7e7: https://github.com/python-semantic-release/python-semantic-release/commit/fe6a7e7fa014ffb827a1430dbcc10d1fc84c886b
.. _PR#242: https://github.com/python-semantic-release/python-semantic-release/pull/242
.. _changelog-v7.0.0:
v7.0.0 (2020-05-22)
===================
✨ Features
-----------
* Pass changelog_sections to components (`PR#240`_, `3e17a98`_)
* **changelog**: Add changelog components (`PR#240`_, `3e17a98`_)
📖 Documentation
----------------
* Add conda-forge badge (`e9536bb`_)
* Add documentation for changelog_components (`PR#240`_, `3e17a98`_)
💥 BREAKING CHANGES
-------------------
* **changelog**: The ``compare_url`` option has been removed in favor of using
``changelog_components``. This functionality is now available as the
``semantic_release.changelog.compare_url`` component.
.. _3e17a98: https://github.com/python-semantic-release/python-semantic-release/commit/3e17a98d7fa8468868a87e62651ac2c010067711
.. _e9536bb: https://github.com/python-semantic-release/python-semantic-release/commit/e9536bbe119c9e3b90c61130c02468e0e1f14141
.. _PR#240: https://github.com/python-semantic-release/python-semantic-release/pull/240
.. _changelog-v6.4.1:
v6.4.1 (2020-05-15)
===================
🪲 Bug Fixes
------------
* Convert ``\r\n`` to ``\n`` in commit messages, closes `#239`_ (`34acbbc`_)
.. _#239: https://github.com/python-semantic-release/python-semantic-release/issues/239
.. _34acbbc: https://github.com/python-semantic-release/python-semantic-release/commit/34acbbcd25320a9d18dcd1a4f43e1ce1837b2c9f
.. _changelog-v6.4.0:
v6.4.0 (2020-05-15)
===================
✨ Features
-----------
* **history**: Create emoji parser (`PR#238`_, `2e1c50a`_)
🪲 Bug Fixes
------------
* Add emojis to default changelog_sections (`PR#238`_, `2e1c50a`_)
* Include all parsed types in changelog (`PR#238`_, `2e1c50a`_)
📖 Documentation
----------------
* Add documentation for emoji parser (`PR#238`_, `2e1c50a`_)
♻️ Refactoring
---------------
* **history**: Get breaking changes in parser (`PR#238`_, `2e1c50a`_)
.. _2e1c50a: https://github.com/python-semantic-release/python-semantic-release/commit/2e1c50a865628b372f48945a039a3edb38a7cdf0
.. _PR#238: https://github.com/python-semantic-release/python-semantic-release/pull/238
.. _changelog-v6.3.1:
v6.3.1 (2020-05-11)
===================
🪲 Bug Fixes
------------
* Use getboolean for commit_version_number, closes `#186`_ (`a60e0b4`_)
.. _#186: https://github.com/python-semantic-release/python-semantic-release/issues/186
.. _a60e0b4: https://github.com/python-semantic-release/python-semantic-release/commit/a60e0b4e3cadf310c3e0ad67ebeb4e69d0ee50cb
.. _changelog-v6.3.0:
v6.3.0 (2020-05-09)
===================
✨ Features
-----------
* **history**: Support linking compare page in changelog, closes `#218`_ (`79a8e02`_)
📖 Documentation
----------------
* Document compare_link option (`e52c355`_)
* Rewrite commit-log-parsing.rst (`4c70f4f`_)
.. _#218: https://github.com/python-semantic-release/python-semantic-release/issues/218
.. _4c70f4f: https://github.com/python-semantic-release/python-semantic-release/commit/4c70f4f2aa3343c966d1b7ab8566fcc782242ab9
.. _79a8e02: https://github.com/python-semantic-release/python-semantic-release/commit/79a8e02df82fbc2acecaad9e9ff7368e61df3e54
.. _e52c355: https://github.com/python-semantic-release/python-semantic-release/commit/e52c355c0d742ddd2cfa65d42888296942e5bec5
.. _changelog-v6.2.0:
v6.2.0 (2020-05-02)
===================
✨ Features
-----------
* **history**: Check all paragraphs for breaking changes, closes `#200`_ (`fec08f0`_)
📖 Documentation
----------------
* Add = to verbosity option, closes `#227`_ (`a0f4c9c`_)
* Use references where possible, closes `#221`_ (`f38e5d4`_)
.. _#200: https://github.com/python-semantic-release/python-semantic-release/issues/200
.. _#221: https://github.com/python-semantic-release/python-semantic-release/issues/221
.. _#227: https://github.com/python-semantic-release/python-semantic-release/issues/227
.. _a0f4c9c: https://github.com/python-semantic-release/python-semantic-release/commit/a0f4c9cd397fcb98f880097319c08160adb3c3e6
.. _f38e5d4: https://github.com/python-semantic-release/python-semantic-release/commit/f38e5d4a1597cddb69ce47a4d79b8774e796bf41
.. _fec08f0: https://github.com/python-semantic-release/python-semantic-release/commit/fec08f0dbd7ae15f95ca9c41a02c9fe6d448ede0
.. _changelog-v6.1.0:
v6.1.0 (2020-04-26)
===================
✨ Features
-----------
* **actions**: Support PYPI_TOKEN on GitHub Actions (`df2c080`_)
* **pypi**: Support easier use of API tokens, closes `#213`_ (`bac135c`_)
📖 Documentation
----------------
* Add documentation for PYPI_TOKEN (`a8263a0`_)
.. _#213: https://github.com/python-semantic-release/python-semantic-release/issues/213
.. _a8263a0: https://github.com/python-semantic-release/python-semantic-release/commit/a8263a066177d1d42f2844e4cb42a76a23588500
.. _bac135c: https://github.com/python-semantic-release/python-semantic-release/commit/bac135c0ae7a6053ecfc7cdf2942c3c89640debf
.. _df2c080: https://github.com/python-semantic-release/python-semantic-release/commit/df2c0806f0a92186e914cfc8cc992171d74422df
.. _changelog-v6.0.1:
v6.0.1 (2020-04-15)
===================
🪲 Bug Fixes
------------
* **hvcs**: Convert get_hvcs to use LoggedFunction (`3084249`_)
.. _3084249: https://github.com/python-semantic-release/python-semantic-release/commit/308424933fd3375ca3730d9eaf8abbad2435830b
.. _changelog-v6.0.0:
v6.0.0 (2020-04-15)
===================
📖 Documentation
----------------
* Create Read the Docs config file (`aa5a1b7`_)
* Include README.rst in index.rst (`8673a9d`_)
* Move action.rst into main documentation (`509ccaf`_)
* Rewrite README.rst (`e049772`_)
* Rewrite troubleshooting page (`0285de2`_)
♻️ Refactoring
---------------
* **debug**: Use logging and click_log instead of ndebug (`15b1f65`_)
💥 BREAKING CHANGES
-------------------
* **debug**: ``debug="*"`` no longer has an effect, instead use ``--verbosity DEBUG``.
.. _0285de2: https://github.com/python-semantic-release/python-semantic-release/commit/0285de215a8dac3fcc9a51f555fa45d476a56dff
.. _15b1f65: https://github.com/python-semantic-release/python-semantic-release/commit/15b1f650f29761e1ab2a91b767cbff79b2057a4c
.. _509ccaf: https://github.com/python-semantic-release/python-semantic-release/commit/509ccaf307a0998eced69ad9fee1807132babe28
.. _8673a9d: https://github.com/python-semantic-release/python-semantic-release/commit/8673a9d92a9bf348bb3409e002a830741396c8ca
.. _aa5a1b7: https://github.com/python-semantic-release/python-semantic-release/commit/aa5a1b700a1c461c81c6434686cb6f0504c4bece
.. _e049772: https://github.com/python-semantic-release/python-semantic-release/commit/e049772cf14cdd49538cf357db467f0bf3fe9587
.. _changelog-v5.2.0:
v5.2.0 (2020-04-09)
===================
✨ Features
-----------
* **github**: Add tag as default release name (`2997908`_)
📖 Documentation
----------------
* Automate API docs (`7d4fea2`_)
.. _2997908: https://github.com/python-semantic-release/python-semantic-release/commit/2997908f80f4fcec56917d237a079b961a06f990
.. _7d4fea2: https://github.com/python-semantic-release/python-semantic-release/commit/7d4fea266cc75007de51609131eb6d1e324da608
.. _changelog-v5.1.0:
v5.1.0 (2020-04-04)
===================
✨ Features
-----------
* **history**: Allow customizing changelog_sections (`PR#207`_, `d5803d5`_)
📖 Documentation
----------------
* Improve formatting of configuration page (`9a8e22e`_)
* Improve formatting of envvars page (`b376a56`_)
* Update index.rst (`b27c26c`_)
.. _9a8e22e: https://github.com/python-semantic-release/python-semantic-release/commit/9a8e22e838d7dbf3bfd941397c3b39560aca6451
.. _b27c26c: https://github.com/python-semantic-release/python-semantic-release/commit/b27c26c66e7e41843ab29076f7e724908091b46e
.. _b376a56: https://github.com/python-semantic-release/python-semantic-release/commit/b376a567bfd407a507ce0752614b0ca75a0f2973
.. _d5803d5: https://github.com/python-semantic-release/python-semantic-release/commit/d5803d5c1668d86482a31ac0853bac7ecfdc63bc
.. _PR#207: https://github.com/python-semantic-release/python-semantic-release/pull/207
.. _changelog-v5.0.3:
v5.0.3 (2020-03-26)
===================
🪲 Bug Fixes
------------
* Bump dependencies and fix Windows issues on Development (`PR#173`_, `0a6f8c3`_)
* Missing mime types on Windows (`PR#173`_, `0a6f8c3`_)
.. _0a6f8c3: https://github.com/python-semantic-release/python-semantic-release/commit/0a6f8c3842b05f5f424dad5ce1fa5e3823c7e688
.. _PR#173: https://github.com/python-semantic-release/python-semantic-release/pull/173
.. _changelog-v5.0.2:
v5.0.2 (2020-03-22)
===================
🪲 Bug Fixes
------------
* **history**: Leave case of other characters unchanged (`96ba94c`_)
.. _96ba94c: https://github.com/python-semantic-release/python-semantic-release/commit/96ba94c4b4593997343ec61ecb6c823c1494d0e2
.. _changelog-v5.0.1:
v5.0.1 (2020-03-22)
===================
🪲 Bug Fixes
------------
* Make action use current version of semantic-release (`123984d`_)
.. _123984d: https://github.com/python-semantic-release/python-semantic-release/commit/123984d735181c622f3d99088a1ad91321192a11
.. _changelog-v5.0.0:
v5.0.0 (2020-03-22)
===================
✨ Features
-----------
* **build**: Allow config setting for build command, closes `#188`_ (`PR#195`_, `740f4bd`_)
🪲 Bug Fixes
------------
* Rename default of build_command config (`d5db22f`_)
📖 Documentation
----------------
* **pypi**: Update docstrings in pypi.py (`6502d44`_)
💥 BREAKING CHANGES
-------------------
* **build**: Previously the build_commands configuration variable set the types of bundles sent to
``python setup.py``. It has been replaced by the configuration variable ``build_command`` which
takes the full command e.g. ``python setup.py sdist`` or ``poetry build``.
.. _#188: https://github.com/python-semantic-release/python-semantic-release/issues/188
.. _6502d44: https://github.com/python-semantic-release/python-semantic-release/commit/6502d448fa65e5dc100e32595e83fff6f62a881a
.. _740f4bd: https://github.com/python-semantic-release/python-semantic-release/commit/740f4bdb26569362acfc80f7e862fc2c750a46dd
.. _d5db22f: https://github.com/python-semantic-release/python-semantic-release/commit/d5db22f9f7acd05d20fd60a8b4b5a35d4bbfabb8
.. _PR#195: https://github.com/python-semantic-release/python-semantic-release/pull/195
.. _changelog-v4.11.0:
v4.11.0 (2020-03-22)
====================
✨ Features
-----------
* **actions**: Create GitHub Action (`350245d`_)
📖 Documentation
----------------
* Make AUTHORS.rst dynamic (`db2e076`_)
* **readme**: Fix minor typo (`c22f69f`_)
.. _350245d: https://github.com/python-semantic-release/python-semantic-release/commit/350245dbfb07ed6a1db017b1d9d1072b368b1497
.. _c22f69f: https://github.com/python-semantic-release/python-semantic-release/commit/c22f69f62a215ff65e1ab6dcaa8e7e9662692e64
.. _db2e076: https://github.com/python-semantic-release/python-semantic-release/commit/db2e0762f3189d0f1a6ba29aad32bdefb7e0187f
.. _changelog-v4.10.0:
v4.10.0 (2020-03-03)
====================
✨ Features
-----------
* Make commit message configurable (`PR#184`_, `eb0762c`_)
.. _eb0762c: https://github.com/python-semantic-release/python-semantic-release/commit/eb0762ca9fea5cecd5c7b182504912a629be473b
.. _PR#184: https://github.com/python-semantic-release/python-semantic-release/pull/184
.. _changelog-v4.9.0:
v4.9.0 (2020-03-02)
===================
✨ Features
-----------
* **pypi**: Add build_commands config (`22146ea`_)
🪲 Bug Fixes
------------
* **pypi**: Change bdist_wheels to bdist_wheel (`c4db509`_)
.. _22146ea: https://github.com/python-semantic-release/python-semantic-release/commit/22146ea4b94466a90d60b94db4cc65f46da19197
.. _c4db509: https://github.com/python-semantic-release/python-semantic-release/commit/c4db50926c03f3d551c8331932c567c7bdaf4f3d
.. _changelog-v4.8.0:
v4.8.0 (2020-02-28)
===================
✨ Features
-----------
* **git**: Add a new config for commit author (`aa2c22c`_)
.. _aa2c22c: https://github.com/python-semantic-release/python-semantic-release/commit/aa2c22c469448fe57f02bea67a02f998ce519ac3
.. _changelog-v4.7.1:
v4.7.1 (2020-02-28)
===================
🪲 Bug Fixes
------------
* Repair parsing of remotes in the gitlab ci format, closes `#181`_ (`0fddbe2`_)
.. _#181: https://github.com/python-semantic-release/python-semantic-release/issues/181
.. _0fddbe2: https://github.com/python-semantic-release/python-semantic-release/commit/0fddbe2fb70d24c09ceddb789a159162a45942dc
.. _changelog-v4.7.0:
v4.7.0 (2020-02-28)
===================
✨ Features
-----------
* Upload distribution files to GitHub Releases (`PR#177`_, `e427658`_)
* **github**: Upload dists to release (`PR#177`_, `e427658`_)
🪲 Bug Fixes
------------
* Post changelog after PyPI upload (`PR#177`_, `e427658`_)
* Support repository owner names containing dots, closes `#179`_ (`a6c4da4`_)
* **github**: Fix upload of .whl files (`PR#177`_, `e427658`_)
* **github**: Use application/octet-stream for .whl files (`90a7e47`_)
📖 Documentation
----------------
* Document upload_to_release config option (`PR#177`_, `e427658`_)
.. _#179: https://github.com/python-semantic-release/python-semantic-release/issues/179
.. _90a7e47: https://github.com/python-semantic-release/python-semantic-release/commit/90a7e476a04d26babc88002e9035cad2ed485b07
.. _a6c4da4: https://github.com/python-semantic-release/python-semantic-release/commit/a6c4da4c0e6bd8a37f64544f7813fa027f5054ed
.. _e427658: https://github.com/python-semantic-release/python-semantic-release/commit/e427658e33abf518191498c3142a0f18d3150e07
.. _PR#177: https://github.com/python-semantic-release/python-semantic-release/pull/177
.. _changelog-v4.6.0:
v4.6.0 (2020-02-19)
===================
✨ Features
-----------
* **history**: Capitalize changelog messages (`1a8e306`_)
🪲 Bug Fixes
------------
* Add more debug statements in logs (`bc931ec`_)
* Only overwrite with patch if bump is None, closes `#159`_ (`1daa4e2`_)
.. _#159: https://github.com/python-semantic-release/python-semantic-release/issues/159
.. _1a8e306: https://github.com/python-semantic-release/python-semantic-release/commit/1a8e3060b8f6d6362c27903dcfc69d17db5f1d36
.. _1daa4e2: https://github.com/python-semantic-release/python-semantic-release/commit/1daa4e23ec2dd40c6b490849276524264787e24e
.. _bc931ec: https://github.com/python-semantic-release/python-semantic-release/commit/bc931ec46795fde4c1ccee004eec83bf73d5de7a
.. _changelog-v4.5.1:
v4.5.1 (2020-02-16)
===================
🪲 Bug Fixes
------------
* **github**: Send token in request header, closes `#167`_ (`be9972a`_)
📖 Documentation
----------------
* Add note about automatic releases in readme (`e606e75`_)
* Fix broken list in readme (`7aa572b`_)
* Update readme and getting started docs (`07b3208`_)
.. _#167: https://github.com/python-semantic-release/python-semantic-release/issues/167
.. _07b3208: https://github.com/python-semantic-release/python-semantic-release/commit/07b3208ff64301e544c4fdcb48314e49078fc479
.. _7aa572b: https://github.com/python-semantic-release/python-semantic-release/commit/7aa572b2a323ddbc69686309226395f40c52b469
.. _be9972a: https://github.com/python-semantic-release/python-semantic-release/commit/be9972a7b1fb183f738fb31bd370adb30281e4d5
.. _e606e75: https://github.com/python-semantic-release/python-semantic-release/commit/e606e7583a30167cf7679c6bcada2f9e768b3abe
.. _changelog-v4.5.0:
v4.5.0 (2020-02-08)
===================
✨ Features
-----------
* **history**: Enable colon defined version, closes `#165`_ (`7837f50`_)
🪲 Bug Fixes
------------
* Remove erroneous submodule (`762bfda`_)
* **cli**: --noop flag works when before command, closes `#73`_ (`4fcc781`_)
.. _#73: https://github.com/python-semantic-release/python-semantic-release/issues/73
.. _#165: https://github.com/python-semantic-release/python-semantic-release/issues/165
.. _4fcc781: https://github.com/python-semantic-release/python-semantic-release/commit/4fcc781d1a3f9235db552f0f4431c9f5e638d298
.. _762bfda: https://github.com/python-semantic-release/python-semantic-release/commit/762bfda728c266b8cd14671d8da9298fc99c63fb
.. _7837f50: https://github.com/python-semantic-release/python-semantic-release/commit/7837f5036269328ef29996b9ea63cccd5a6bc2d5
.. _changelog-v4.4.1:
v4.4.1 (2020-01-18)
===================
🪲 Bug Fixes
------------
* Add quotes around twine arguments, closes `#163`_ (`46a83a9`_)
.. _#163: https://github.com/python-semantic-release/python-semantic-release/issues/163
.. _46a83a9: https://github.com/python-semantic-release/python-semantic-release/commit/46a83a94b17c09d8f686c3ae7b199d7fd0e0e5e5
.. _changelog-v4.4.0:
v4.4.0 (2020-01-17)
===================
✨ Features
-----------
* **parser**: Add support for exclamation point for breaking changes, closes `#156`_ (`a4f8a10`_)
* **parser**: Make BREAKING-CHANGE synonymous with BREAKING CHANGE (`beedccf`_)
🪲 Bug Fixes
------------
* **github**: Add check for GITHUB_ACTOR for git push (`PR#162`_, `c41e9bb`_)
.. _#156: https://github.com/python-semantic-release/python-semantic-release/issues/156
.. _a4f8a10: https://github.com/python-semantic-release/python-semantic-release/commit/a4f8a10afcc358a8fbef83be2041129480350be2
.. _beedccf: https://github.com/python-semantic-release/python-semantic-release/commit/beedccfddfb360aeebef595342ee980446012ec7
.. _c41e9bb: https://github.com/python-semantic-release/python-semantic-release/commit/c41e9bb986d01b92d58419cbdc88489d630a11f1
.. _PR#162: https://github.com/python-semantic-release/python-semantic-release/pull/162
.. _changelog-v4.3.4:
v4.3.4 (2019-12-17)
===================
🪲 Bug Fixes
------------
* Fallback to whole log if correct tag is not available, closes `#51`_ (`PR#157`_, `252bffd`_)
.. _#51: https://github.com/python-semantic-release/python-semantic-release/issues/51
.. _252bffd: https://github.com/python-semantic-release/python-semantic-release/commit/252bffd3be7b6dfcfdb384d24cb1cd83d990fc9a
.. _PR#157: https://github.com/python-semantic-release/python-semantic-release/pull/157
.. _changelog-v4.3.3:
v4.3.3 (2019-11-06)
===================
🪲 Bug Fixes
------------
* Instead of requiring click 7.0, looks like all tests will pass with at least 2.0. (`PR#155`_,
`f07c7f6`_)
* Set version of click to >=2.0,<8.0. (`PR#155`_, `f07c7f6`_)
* Upgrade to click 7.0, closes `#117`_ (`PR#155`_, `f07c7f6`_)
.. _#117: https://github.com/python-semantic-release/python-semantic-release/issues/117
.. _f07c7f6: https://github.com/python-semantic-release/python-semantic-release/commit/f07c7f653be1c018e443f071d9a196d9293e9521
.. _PR#155: https://github.com/python-semantic-release/python-semantic-release/pull/155
.. _changelog-v4.3.2:
v4.3.2 (2019-10-05)
===================
🪲 Bug Fixes
------------
* Update regex to get repository owner and name for project with dots, closes `#151`_ (`2778e31`_)
.. _#151: https://github.com/python-semantic-release/python-semantic-release/issues/151
.. _2778e31: https://github.com/python-semantic-release/python-semantic-release/commit/2778e316a0c0aa931b1012cb3862d04659c05e73
.. _changelog-v4.3.1:
v4.3.1 (2019-09-29)
===================
🪲 Bug Fixes
------------
* Support repo urls without git terminator (`700e9f1`_)
.. _700e9f1: https://github.com/python-semantic-release/python-semantic-release/commit/700e9f18dafde1833f482272a72bb80b54d56bb3
.. _changelog-v4.3.0:
v4.3.0 (2019-09-06)
===================
✨ Features
-----------
* Add the possibility to load configuration from pyproject.toml (`35f8bfe`_)
* Allow the override of configuration options from cli, closes `#119`_ (`f0ac82f`_)
* Allow users to get version from tag and write/commit bump to file, closes `#104`_ (`1f9fe1c`_)
* Make the vcs functionalities work with gitlab, closes `#121`_ (`82d555d`_)
🪲 Bug Fixes
------------
* Manage subgroups in git remote url, closes `#139`_, `#140`_ (`4b11875`_)
* Update list of commit types to include build, ci and perf, closes `#145`_ (`41ea12f`_)
.. _#104: https://github.com/python-semantic-release/python-semantic-release/issues/104
.. _#119: https://github.com/python-semantic-release/python-semantic-release/issues/119
.. _#121: https://github.com/python-semantic-release/python-semantic-release/issues/121
.. _#139: https://github.com/python-semantic-release/python-semantic-release/issues/139
.. _#140: https://github.com/python-semantic-release/python-semantic-release/issues/140
.. _#145: https://github.com/python-semantic-release/python-semantic-release/issues/145
.. _1f9fe1c: https://github.com/python-semantic-release/python-semantic-release/commit/1f9fe1cc7666d47cc0c348c4705b63c39bf10ecc
.. _35f8bfe: https://github.com/python-semantic-release/python-semantic-release/commit/35f8bfef443c8b69560c918f4b13bc766fb3daa2
.. _41ea12f: https://github.com/python-semantic-release/python-semantic-release/commit/41ea12fa91f97c0046178806bce3be57c3bc2308
.. _4b11875: https://github.com/python-semantic-release/python-semantic-release/commit/4b118754729094e330389712cf863e1c6cefee69
.. _82d555d: https://github.com/python-semantic-release/python-semantic-release/commit/82d555d45b9d9e295ef3f9546a6ca2a38ca4522e
.. _f0ac82f: https://github.com/python-semantic-release/python-semantic-release/commit/f0ac82fe59eb59a768a73a1bf2ea934b9d448c58
.. _changelog-v4.2.0:
v4.2.0 (2019-08-05)
===================
✨ Features
-----------
* Add configuration to customize handling of dists, closes `#115`_ (`2af6f41`_)
* Add support for configuring branch, closes `#43`_ (`14abb05`_)
* Add support for showing unreleased changelog, closes `#134`_ (`41ef794`_)
🪲 Bug Fixes
------------
* Add commit hash when generating breaking changes, closes `#120`_ (`0c74faf`_)
* Kept setting new version for tag source (`0e24a56`_)
* Remove deletion of build folder, closes `#115`_ (`b45703d`_)
* Updated the tag tests (`3303eef`_)
* Upgrade click to 7.0 (`2c5dd80`_)
.. _#43: https://github.com/python-semantic-release/python-semantic-release/issues/43
.. _#115: https://github.com/python-semantic-release/python-semantic-release/issues/115
.. _#120: https://github.com/python-semantic-release/python-semantic-release/issues/120
.. _#134: https://github.com/python-semantic-release/python-semantic-release/issues/134
.. _0c74faf: https://github.com/python-semantic-release/python-semantic-release/commit/0c74fafdfa81cf2e13db8f4dcf0a6f7347552504
.. _0e24a56: https://github.com/python-semantic-release/python-semantic-release/commit/0e24a5633f8f94b48da97b011634d4f9d84f7b4b
.. _14abb05: https://github.com/python-semantic-release/python-semantic-release/commit/14abb05e7f878e88002f896812d66b4ea5c219d4
.. _2af6f41: https://github.com/python-semantic-release/python-semantic-release/commit/2af6f41b21205bdd192514a434fca2feba17725a
.. _2c5dd80: https://github.com/python-semantic-release/python-semantic-release/commit/2c5dd809b84c2157a5e6cdcc773c43ec864f0328
.. _3303eef: https://github.com/python-semantic-release/python-semantic-release/commit/3303eefa49a0474bbd85df10ae186ccbf9090ec1
.. _41ef794: https://github.com/python-semantic-release/python-semantic-release/commit/41ef7947ad8a07392c96c7540980476e989c1d83
.. _b45703d: https://github.com/python-semantic-release/python-semantic-release/commit/b45703dad38c29b28575060b21e5fb0f8482c6b1
.. _changelog-v4.1.2:
v4.1.2 (2019-08-04)
===================
🪲 Bug Fixes
------------
* Correct isort build fail (`0037210`_)
* Make sure the history only breaks loop for version commit, closes `#135`_ (`5dc6cfc`_)
* **vcs**: Allow cli to be run from subdirectory (`fb7bb14`_)
📖 Documentation
----------------
* **circleci**: Point badge to master branch (`9c7302e`_)
.. _#135: https://github.com/python-semantic-release/python-semantic-release/issues/135
.. _0037210: https://github.com/python-semantic-release/python-semantic-release/commit/00372100b527ff9308d9e43fe5c65cdf179dc4dc
.. _5dc6cfc: https://github.com/python-semantic-release/python-semantic-release/commit/5dc6cfc634254f09997bb3cb0f17abd296e2c01f
.. _9c7302e: https://github.com/python-semantic-release/python-semantic-release/commit/9c7302e184a1bd88f39b3039691b55cd77f0bb07
.. _fb7bb14: https://github.com/python-semantic-release/python-semantic-release/commit/fb7bb14300e483626464795b8ff4f033a194cf6f
.. _changelog-v4.1.1:
v4.1.1 (2019-02-15)
===================
📖 Documentation
----------------
* Correct usage of changelog (`f4f59b0`_)
* Debug usage and related (`f08e594`_)
* Describing the commands (`b6fa04d`_)
* Update url for commit guidelinesThe guidelines can now be found in theDEVELOPERS.md in angular.
(`90c1b21`_)
.. _90c1b21: https://github.com/python-semantic-release/python-semantic-release/commit/90c1b217f86263301b91d19d641c7b348e37d960
.. _b6fa04d: https://github.com/python-semantic-release/python-semantic-release/commit/b6fa04db3044525a1ee1b5952fb175a706842238
.. _f08e594: https://github.com/python-semantic-release/python-semantic-release/commit/f08e5943a9876f2d17a7c02f468720995c7d9ffd
.. _f4f59b0: https://github.com/python-semantic-release/python-semantic-release/commit/f4f59b08c73700c6ee04930221bfcb1355cbc48d
.. _changelog-v4.1.0:
v4.1.0 (2019-01-31)
===================
✨ Features
-----------
* **ci_checks**: Add support for bitbucket (`9fc120d`_)
🪲 Bug Fixes
------------
* Initialize git Repo from current folder (`c7415e6`_)
* Maintain version variable formatting on bump (`PR#103`_, `bf63156`_)
* Use same changelog code for command as post (`248f622`_)
📖 Documentation
----------------
* Add installation instructions for development (`PR#106`_, `9168d0e`_)
* **readme**: Add testing instructions (`bb352f5`_)
.. _248f622: https://github.com/python-semantic-release/python-semantic-release/commit/248f62283c59182868c43ff105a66d85c923a894
.. _9168d0e: https://github.com/python-semantic-release/python-semantic-release/commit/9168d0ea56734319a5d77e890f23ff6ba51cc97d
.. _9fc120d: https://github.com/python-semantic-release/python-semantic-release/commit/9fc120d1a7e4acbbca609628e72651685108b364
.. _bb352f5: https://github.com/python-semantic-release/python-semantic-release/commit/bb352f5b6616cc42c9f2f2487c51dedda1c68295
.. _bf63156: https://github.com/python-semantic-release/python-semantic-release/commit/bf63156f60340614fae94c255fb2f097cf317b2b
.. _c7415e6: https://github.com/python-semantic-release/python-semantic-release/commit/c7415e634c0affbe6396e0aa2bafe7c1b3368914
.. _PR#103: https://github.com/python-semantic-release/python-semantic-release/pull/103
.. _PR#106: https://github.com/python-semantic-release/python-semantic-release/pull/106
.. _changelog-v4.0.1:
v4.0.1 (2019-01-12)
===================
🪲 Bug Fixes
------------
* Add better error message when pypi credentials are empty, closes `#96`_ (`c4e5dcb`_)
* Clean out dist and build before building, closes `#86`_ (`b628e46`_)
* Filter out pypi secrets from exceptions, closes `#41`_ (`5918371`_)
* Unfreeze dependencies, closes `#100`_ (`847833b`_)
* Use correct syntax to exclude tests in package, closes `#92`_ (`3e41e91`_)
* **parser_angular**: Fix non-match when special chars in scope (`8a33123`_)
📖 Documentation
----------------
* Remove reference to gitter, closes `#90`_ (`896e37b`_)
.. _#41: https://github.com/python-semantic-release/python-semantic-release/issues/41
.. _#86: https://github.com/python-semantic-release/python-semantic-release/issues/86
.. _#90: https://github.com/python-semantic-release/python-semantic-release/issues/90
.. _#92: https://github.com/python-semantic-release/python-semantic-release/issues/92
.. _#96: https://github.com/python-semantic-release/python-semantic-release/issues/96
.. _#100: https://github.com/python-semantic-release/python-semantic-release/issues/100
.. _3e41e91: https://github.com/python-semantic-release/python-semantic-release/commit/3e41e91c318663085cd28c8165ece21d7e383475
.. _5918371: https://github.com/python-semantic-release/python-semantic-release/commit/5918371c1e82b06606087c9945d8eaf2604a0578
.. _847833b: https://github.com/python-semantic-release/python-semantic-release/commit/847833bf48352a4935f906d0c3f75e1db596ca1c
.. _896e37b: https://github.com/python-semantic-release/python-semantic-release/commit/896e37b95cc43218e8f593325dd4ea63f8b895d9
.. _8a33123: https://github.com/python-semantic-release/python-semantic-release/commit/8a331232621b26767e4268079f9295bf695047ab
.. _b628e46: https://github.com/python-semantic-release/python-semantic-release/commit/b628e466f86bc27cbe45ec27a02d4774a0efd3bb
.. _c4e5dcb: https://github.com/python-semantic-release/python-semantic-release/commit/c4e5dcbeda0ce8f87d25faefb4d9ae3581029a8f
.. _changelog-v4.0.0:
v4.0.0 (2018-11-22)
===================
✨ Features
-----------
* Add support for commit_message config variable (`4de5400`_)
* **CI checks**: Add support for GitLab CI checks, closes `#88`_ (`8df5e2b`_)
🪲 Bug Fixes
------------
* Add check of credentials (`7d945d4`_)
* Add credentials check (`0694604`_)
* Add dists to twine call (`1cec2df`_)
* Change requests from fixed version to version range (`PR#93`_, `af3ad59`_)
* Re-add skip-existing (`366e9c1`_)
* Remove repository argument in twine (`e24543b`_)
* Remove universal from setup config (`18b2402`_)
* Update twine (`c4ae7b8`_)
* Use new interface for twine (`c04872d`_)
* Use twine through cli call (`ab84beb`_)
📖 Documentation
----------------
* Add type hints and more complete docstrings, closes `#81`_ (`a6d5e9b`_)
* Fix typo in documentation index (`da6844b`_)
♻️ Refactoring
---------------
* Remove support for python 2 (`85fe638`_)
💥 BREAKING CHANGES
-------------------
* If you rely on the commit message to be the version number only, this will break your code
* This will only work with python 3 after this commit.
.. _#81: https://github.com/python-semantic-release/python-semantic-release/issues/81
.. _#88: https://github.com/python-semantic-release/python-semantic-release/issues/88
.. _0694604: https://github.com/python-semantic-release/python-semantic-release/commit/0694604f3b3d2159a4037620605ded09236cdef5
.. _18b2402: https://github.com/python-semantic-release/python-semantic-release/commit/18b24025e397aace03dd5bb9eed46cfdd13491bd
.. _1cec2df: https://github.com/python-semantic-release/python-semantic-release/commit/1cec2df8bcb7f877c813d6470d454244630b050a
.. _366e9c1: https://github.com/python-semantic-release/python-semantic-release/commit/366e9c1d0b9ffcde755407a1de18e8295f6ad3a1
.. _4de5400: https://github.com/python-semantic-release/python-semantic-release/commit/4de540011ab10483ee1865f99c623526cf961bb9
.. _7d945d4: https://github.com/python-semantic-release/python-semantic-release/commit/7d945d44b36b3e8c0b7771570cb2305e9e09d0b2
.. _85fe638: https://github.com/python-semantic-release/python-semantic-release/commit/85fe6384c15db317bc7142f4c8bbf2da58cece58
.. _8df5e2b: https://github.com/python-semantic-release/python-semantic-release/commit/8df5e2bdd33a620e683f3adabe174e94ceaa88d9
.. _a6d5e9b: https://github.com/python-semantic-release/python-semantic-release/commit/a6d5e9b1ccbe75d59e7240528593978a19d8d040
.. _ab84beb: https://github.com/python-semantic-release/python-semantic-release/commit/ab84beb8f809e39ae35cd3ce5c15df698d8712fd
.. _af3ad59: https://github.com/python-semantic-release/python-semantic-release/commit/af3ad59f018876e11cc3acdda0b149f8dd5606bd
.. _c04872d: https://github.com/python-semantic-release/python-semantic-release/commit/c04872d00a26e9bf0f48eeacb360b37ce0fba01e
.. _c4ae7b8: https://github.com/python-semantic-release/python-semantic-release/commit/c4ae7b8ecc682855a8568b247690eaebe62d2d26
.. _da6844b: https://github.com/python-semantic-release/python-semantic-release/commit/da6844bce0070a0020bf13950bd136fe28262602
.. _e24543b: https://github.com/python-semantic-release/python-semantic-release/commit/e24543b96adb208897f4ce3eaab96b2f4df13106
.. _PR#93: https://github.com/python-semantic-release/python-semantic-release/pull/93
.. _changelog-v3.11.2:
v3.11.2 (2018-06-10)
====================
🪲 Bug Fixes
------------
* Upgrade twine (`9722313`_)
.. _9722313: https://github.com/python-semantic-release/python-semantic-release/commit/9722313eb63c7e2c32c084ad31bed7ee1c48a928
.. _changelog-v3.11.1:
v3.11.1 (2018-06-06)
====================
🪲 Bug Fixes
------------
* Change Gitpython version number, closes `#80`_ (`23c9d4b`_)
📖 Documentation
----------------
* Add retry option to cli docs (`021da50`_)
.. _#80: https://github.com/python-semantic-release/python-semantic-release/issues/80
.. _021da50: https://github.com/python-semantic-release/python-semantic-release/commit/021da5001934f3199c98d7cf29f62a3ad8c2e56a
.. _23c9d4b: https://github.com/python-semantic-release/python-semantic-release/commit/23c9d4b6a1716e65605ed985881452898d5cf644
.. _changelog-v3.11.0:
v3.11.0 (2018-04-12)
====================
✨ Features
-----------
* Add --retry cli option (`PR#78`_, `3e312c0`_)
* Add support to finding previous version from tags if not using commit messages (`PR#68`_,
`6786487`_)
* Be a bit more forgiving to find previous tags (`PR#68`_, `6786487`_)
🪲 Bug Fixes
------------
* Add pytest cache to gitignore (`b8efd5a`_)
* Make repo non if it is not a git repository, closes `#74`_ (`1dc306b`_)
📖 Documentation
----------------
* Define ``--retry`` usage (`3e312c0`_)
* Remove old notes about trello board (`7f50c52`_)
* Update status badges (`cfa13b8`_)
.. _#74: https://github.com/python-semantic-release/python-semantic-release/issues/74
.. _1dc306b: https://github.com/python-semantic-release/python-semantic-release/commit/1dc306b9b1db2ac360211bdc61fd815302d0014c
.. _3e312c0: https://github.com/python-semantic-release/python-semantic-release/commit/3e312c0ce79a78d25016a3b294b772983cfb5e0f
.. _6786487: https://github.com/python-semantic-release/python-semantic-release/commit/6786487ebf4ab481139ef9f43cd74e345debb334
.. _7f50c52: https://github.com/python-semantic-release/python-semantic-release/commit/7f50c521a522bb0c4579332766248778350e205b
.. _b8efd5a: https://github.com/python-semantic-release/python-semantic-release/commit/b8efd5a6249c79c8378bffea3e245657e7094ec9
.. _cfa13b8: https://github.com/python-semantic-release/python-semantic-release/commit/cfa13b8260e3f3b0bfcb395f828ad63c9c5e3ca5
.. _PR#68: https://github.com/python-semantic-release/python-semantic-release/pull/68
.. _PR#78: https://github.com/python-semantic-release/python-semantic-release/pull/78
.. _changelog-v3.10.3:
v3.10.3 (2018-01-29)
====================
🪲 Bug Fixes
------------
* Error when not in git repository, closes `#74`_ (`PR#75`_, `251b190`_)
.. _#74: https://github.com/python-semantic-release/python-semantic-release/issues/74
.. _251b190: https://github.com/python-semantic-release/python-semantic-release/commit/251b190a2fd5df68892346926d447cbc1b32475a
.. _PR#75: https://github.com/python-semantic-release/python-semantic-release/pull/75
.. _changelog-v3.10.2:
v3.10.2 (2017-08-03)
====================
🪲 Bug Fixes
------------
* Update call to upload to work with twine 1.9.1 (`PR#72`_, `8f47643`_)
.. _8f47643: https://github.com/python-semantic-release/python-semantic-release/commit/8f47643c54996e06c358537115e7e17b77cb02ca
.. _PR#72: https://github.com/python-semantic-release/python-semantic-release/pull/72
.. _changelog-v3.10.1:
v3.10.1 (2017-07-22)
====================
🪲 Bug Fixes
------------
* Update Twine (`PR#69`_, `9f268c3`_)
.. _9f268c3: https://github.com/python-semantic-release/python-semantic-release/commit/9f268c373a932621771abbe9607b739b1e331409
.. _PR#69: https://github.com/python-semantic-release/python-semantic-release/pull/69
.. _changelog-v3.10.0:
v3.10.0 (2017-05-05)
====================
✨ Features
-----------
* Add git hash to the changelog (`PR#65`_, `628170e`_)
🪲 Bug Fixes
------------
* Make changelog problems not fail whole publish (`b5a68cf`_)
📖 Documentation
----------------
* Fix typo in cli.py docstring (`PR#64`_, `0d13985`_)
.. _0d13985: https://github.com/python-semantic-release/python-semantic-release/commit/0d139859cd71f2d483f4360f196d6ef7c8726c18
.. _628170e: https://github.com/python-semantic-release/python-semantic-release/commit/628170ebc440fc6abf094dd3e393f40576dedf9b
.. _b5a68cf: https://github.com/python-semantic-release/python-semantic-release/commit/b5a68cf6177dc0ed80eda722605db064f3fe2062
.. _PR#64: https://github.com/python-semantic-release/python-semantic-release/pull/64
.. _PR#65: https://github.com/python-semantic-release/python-semantic-release/pull/65
.. _changelog-v3.9.0:
v3.9.0 (2016-07-03)
===================
✨ Features
-----------
* Add option for choosing between versioning by commit or tag (`c0cd1f5`_)
* Don't use file to track version, only tag to commit for versioning (`cd25862`_)
* Get repo version from historical tags instead of config file (`a45a9bf`_)
🪲 Bug Fixes
------------
* Can't get the proper last tag from commit history (`5a0e681`_)
.. _5a0e681: https://github.com/python-semantic-release/python-semantic-release/commit/5a0e681e256ec511cd6c6a8edfee9d905891da10
.. _a45a9bf: https://github.com/python-semantic-release/python-semantic-release/commit/a45a9bfb64538efeb7f6f42bb6e7ede86a4ddfa8
.. _c0cd1f5: https://github.com/python-semantic-release/python-semantic-release/commit/c0cd1f5b2e0776d7b636c3dd9e5ae863125219e6
.. _cd25862: https://github.com/python-semantic-release/python-semantic-release/commit/cd258623ee518c009ae921cd6bb3119dafae43dc
.. _changelog-v3.8.1:
v3.8.1 (2016-04-17)
===================
🪲 Bug Fixes
------------
* Add search_parent_directories option to gitpython (`PR#62`_, `8bf9ce1`_)
.. _8bf9ce1: https://github.com/python-semantic-release/python-semantic-release/commit/8bf9ce11137399906f18bc8b25698b6e03a65034
.. _PR#62: https://github.com/python-semantic-release/python-semantic-release/pull/62
.. _changelog-v3.8.0:
v3.8.0 (2016-03-21)
===================
✨ Features
-----------
* Add ci checks for circle ci (`151d849`_)
🪲 Bug Fixes
------------
* Add git fetch to frigg after success (`74a6cae`_)
* Make tag parser work correctly with breaking changes (`9496f6a`_)
* Refactoring cli.py to improve --help and error messages (`c79fc34`_)
📖 Documentation
----------------
* Add info about correct commit guidelines (`af35413`_)
* Add info about trello board in readme (`5229557`_)
* Fix badges in readme (`7f4e549`_)
* Update info about releases in contributing.md (`466f046`_)
.. _151d849: https://github.com/python-semantic-release/python-semantic-release/commit/151d84964266c8dca206cef8912391cb73c8f206
.. _466f046: https://github.com/python-semantic-release/python-semantic-release/commit/466f0460774cad86e7e828ffb50c7d1332b64e7b
.. _5229557: https://github.com/python-semantic-release/python-semantic-release/commit/5229557099d76b3404ea3677292332442a57ae2e
.. _74a6cae: https://github.com/python-semantic-release/python-semantic-release/commit/74a6cae2b46c5150e63136fde0599d98b9486e36
.. _7f4e549: https://github.com/python-semantic-release/python-semantic-release/commit/7f4e5493edb6b3fb3510d0bb78fcc8d23434837f
.. _9496f6a: https://github.com/python-semantic-release/python-semantic-release/commit/9496f6a502c79ec3acb4e222e190e76264db02cf
.. _af35413: https://github.com/python-semantic-release/python-semantic-release/commit/af35413fae80889e2c5fc6b7d28f77f34b3b4c02
.. _c79fc34: https://github.com/python-semantic-release/python-semantic-release/commit/c79fc3469fb99bf4c7f52434fa9c0891bca757f9
.. _changelog-v3.7.2:
v3.7.2 (2016-03-19)
===================
🪲 Bug Fixes
------------
* Move code around a bit to make flake8 happy (`41463b4`_)
.. _41463b4: https://github.com/python-semantic-release/python-semantic-release/commit/41463b49b5d44fd94c11ab6e0a81e199510fabec
.. _changelog-v3.7.1:
v3.7.1 (2016-03-15)
===================
📖 Documentation
----------------
* **configuration**: Fix typo in setup.cfg section (`725d87d`_)
.. _725d87d: https://github.com/python-semantic-release/python-semantic-release/commit/725d87dc45857ef2f9fb331222845ac83a3af135
.. _changelog-v3.7.0:
v3.7.0 (2016-01-10)
===================
✨ Features
-----------
* Add ci_checks for Frigg CI (`577c374`_)
.. _577c374: https://github.com/python-semantic-release/python-semantic-release/commit/577c374396fe303b6fe7d64630d2959998d3595c
.. _changelog-v3.6.1:
v3.6.1 (2016-01-10)
===================
🪲 Bug Fixes
------------
* Add requests as dependency (`4525a70`_)
.. _4525a70: https://github.com/python-semantic-release/python-semantic-release/commit/4525a70d5520b44720d385b0307e46fae77a7463
.. _changelog-v3.6.0:
v3.6.0 (2015-12-28)
===================
✨ Features
-----------
* Add checks for semaphore, closes `#44`_ (`2d7ef15`_)
📖 Documentation
----------------
* Add documentation for configuring on CI (`7806940`_)
* Add note about node semantic release (`0d2866c`_)
* Add step by step guide for configuring travis ci (`6f23414`_)
* Move automatic-releases to subfolder (`ed68e5b`_)
* Remove duplicate readme (`42a9421`_)
.. _#44: https://github.com/python-semantic-release/python-semantic-release/issues/44
.. _0d2866c: https://github.com/python-semantic-release/python-semantic-release/commit/0d2866c528098ecaf1dd81492f28d3022a2a54e0
.. _2d7ef15: https://github.com/python-semantic-release/python-semantic-release/commit/2d7ef157b1250459060e99601ec53a00942b6955
.. _42a9421: https://github.com/python-semantic-release/python-semantic-release/commit/42a942131947cd1864c1ba29b184caf072408742
.. _6f23414: https://github.com/python-semantic-release/python-semantic-release/commit/6f2341442f61f0284b1119a2c49e96f0be678929
.. _7806940: https://github.com/python-semantic-release/python-semantic-release/commit/7806940ae36cb0d6ac0f966e5d6d911bd09a7d11
.. _ed68e5b: https://github.com/python-semantic-release/python-semantic-release/commit/ed68e5b8d3489463e244b078ecce8eab2cba2bb1
.. _changelog-v3.5.0:
v3.5.0 (2015-12-22)
===================
✨ Features
-----------
* Add author in commit, closes `#40`_ (`020efaa`_)
* Checkout master before publishing (`dc4077a`_)
🪲 Bug Fixes
------------
* Remove " from git push command (`031318b`_)
📖 Documentation
----------------
* Convert readme to rst (`e8a8d26`_)
.. _#40: https://github.com/python-semantic-release/python-semantic-release/issues/40
.. _020efaa: https://github.com/python-semantic-release/python-semantic-release/commit/020efaaadf588e3fccd9d2f08a273c37e4158421
.. _031318b: https://github.com/python-semantic-release/python-semantic-release/commit/031318b3268bc37e6847ec049b37425650cebec8
.. _dc4077a: https://github.com/python-semantic-release/python-semantic-release/commit/dc4077a2d07e0522b625336dcf83ee4e0e1640aa
.. _e8a8d26: https://github.com/python-semantic-release/python-semantic-release/commit/e8a8d265aa2147824f18065b39a8e7821acb90ec
.. _changelog-v3.4.0:
v3.4.0 (2015-12-22)
===================
✨ Features
-----------
* Add travis environment checks (`f386db7`_)
.. _f386db7: https://github.com/python-semantic-release/python-semantic-release/commit/f386db75b77acd521d2f5bde2e1dde99924dc096
.. _changelog-v3.3.3:
v3.3.3 (2015-12-22)
===================
🪲 Bug Fixes
------------
* Do git push and git push --tags instead of --follow-tags (`8bc70a1`_)
.. _8bc70a1: https://github.com/python-semantic-release/python-semantic-release/commit/8bc70a183fd72f595c72702382bc0b7c3abe99c8
.. _changelog-v3.3.2:
v3.3.2 (2015-12-21)
===================
🪲 Bug Fixes
------------
* Change build badge (`0dc068f`_)
📖 Documentation
----------------
* Update docstrings for generate_changelog (`987c6a9`_)
.. _0dc068f: https://github.com/python-semantic-release/python-semantic-release/commit/0dc068fff2f8c6914f4abe6c4e5fb2752669159e
.. _987c6a9: https://github.com/python-semantic-release/python-semantic-release/commit/987c6a96d15997e38c93a9d841c618c76a385ce7
.. _changelog-v3.3.1:
v3.3.1 (2015-12-21)
===================
🪲 Bug Fixes
------------
* Add pandoc to travis settings (`17d40a7`_)
* Only list commits from the last version tag, closes `#28`_ (`191369e`_)
.. _#28: https://github.com/python-semantic-release/python-semantic-release/issues/28
.. _17d40a7: https://github.com/python-semantic-release/python-semantic-release/commit/17d40a73062ffa774542d0abc0f59fc16b68be37
.. _191369e: https://github.com/python-semantic-release/python-semantic-release/commit/191369ebd68526e5b1afcf563f7d13e18c8ca8bf
.. _changelog-v3.3.0:
v3.3.0 (2015-12-20)
===================
✨ Features
-----------
* Add support for environment variables for pypi credentials (`3b383b9`_)
🪲 Bug Fixes
------------
* Add missing parameters to twine.upload (`4bae22b`_)
* Better filtering of github token in push error (`9b31da4`_)
* Downgrade twine to version 1.5.0 (`66df378`_)
* Make sure the github token is not in the output (`55356b7`_)
* Push to master by default (`a0bb023`_)
.. _3b383b9: https://github.com/python-semantic-release/python-semantic-release/commit/3b383b92376a7530e89b11de481c4dfdfa273f7b
.. _4bae22b: https://github.com/python-semantic-release/python-semantic-release/commit/4bae22bae9b9d9abf669b028ea3af4b3813a1df0
.. _55356b7: https://github.com/python-semantic-release/python-semantic-release/commit/55356b718f74d94dd92e6c2db8a15423a6824eb5
.. _66df378: https://github.com/python-semantic-release/python-semantic-release/commit/66df378330448a313aff7a7c27067adda018904f
.. _9b31da4: https://github.com/python-semantic-release/python-semantic-release/commit/9b31da4dc27edfb01f685e6036ddbd4c715c9f60
.. _a0bb023: https://github.com/python-semantic-release/python-semantic-release/commit/a0bb023438a1503f9fdb690d976d71632f19a21f
.. _changelog-v3.2.1:
v3.2.1 (2015-12-20)
===================
🪲 Bug Fixes
------------
* Add requirements to manifest (`ed25ecb`_)
* **pypi**: Add sdist as default in addition to bdist_wheel (`a1a35f4`_)
.. _a1a35f4: https://github.com/python-semantic-release/python-semantic-release/commit/a1a35f43175187091f028474db2ebef5bfc77bc0
.. _ed25ecb: https://github.com/python-semantic-release/python-semantic-release/commit/ed25ecbaeec0e20ad3040452a5547bb7d6faf6ad
.. _changelog-v3.2.0:
v3.2.0 (2015-12-20)
===================
✨ Features
-----------
* **angular-parser**: Remove scope requirement (`90c9d8d`_)
* **git**: Add push to GH_TOKEN@github-url (`546b5bf`_)
🪲 Bug Fixes
------------
* **deps**: Use one file for requirements (`4868543`_)
.. _4868543: https://github.com/python-semantic-release/python-semantic-release/commit/486854393b24803bb2356324e045ccab17510d46
.. _546b5bf: https://github.com/python-semantic-release/python-semantic-release/commit/546b5bf15466c6f5dfe93c1c03ca34604b0326f2
.. _90c9d8d: https://github.com/python-semantic-release/python-semantic-release/commit/90c9d8d4cd6d43be094cda86579e00b507571f98
.. _changelog-v3.1.0:
v3.1.0 (2015-08-31)
===================
✨ Features
-----------
* **pypi**: Add option to disable pypi upload (`f5cd079`_)
.. _f5cd079: https://github.com/python-semantic-release/python-semantic-release/commit/f5cd079edb219de5ad03a71448d578f5f477da9c
.. _changelog-v3.0.0:
v3.0.0 (2015-08-25)
===================
✨ Features
-----------
* **parser**: Add tag parser (`a7f392f`_)
🪲 Bug Fixes
------------
* **errors**: Add exposing of errors in package (`3662d76`_)
* **version**: Parse file instead for version (`005dba0`_)
.. _005dba0: https://github.com/python-semantic-release/python-semantic-release/commit/005dba0094eeb4098315ef383a746e139ffb504d
.. _3662d76: https://github.com/python-semantic-release/python-semantic-release/commit/3662d7663291859dd58a91b4b4ccde4f0edc99b2
.. _a7f392f: https://github.com/python-semantic-release/python-semantic-release/commit/a7f392fd4524cc9207899075631032e438e2593c
.. _changelog-v2.1.4:
v2.1.4 (2015-08-24)
===================
🪲 Bug Fixes
------------
* **github**: Fix property calls (`7ecdeb2`_)
.. _7ecdeb2: https://github.com/python-semantic-release/python-semantic-release/commit/7ecdeb22de96b6b55c5404ebf54a751911c4d8cd
.. _changelog-v2.1.3:
v2.1.3 (2015-08-22)
===================
🪲 Bug Fixes
------------
* **hvcs**: Make Github.token an property (`37d5e31`_)
📖 Documentation
----------------
* **api**: Update apidocs (`6185380`_)
* **parsers**: Add documentation about commit parsers (`9b55422`_)
* **readme**: Update readme with information about the changelog command (`56a745e`_)
.. _37d5e31: https://github.com/python-semantic-release/python-semantic-release/commit/37d5e3110397596a036def5f1dccf0860964332c
.. _56a745e: https://github.com/python-semantic-release/python-semantic-release/commit/56a745ef6fa4edf6f6ba09c78fcc141102cf2871
.. _6185380: https://github.com/python-semantic-release/python-semantic-release/commit/6185380babedbbeab2a2a342f17b4ff3d4df6768
.. _9b55422: https://github.com/python-semantic-release/python-semantic-release/commit/9b554222768036024a133153a559cdfc017c1d91
.. _changelog-v2.1.2:
v2.1.2 (2015-08-20)
===================
🪲 Bug Fixes
------------
* **cli**: Fix call to generate_changelog in publish (`5f8bce4`_)
.. _5f8bce4: https://github.com/python-semantic-release/python-semantic-release/commit/5f8bce4cbb5e1729e674efd6c651e2531aea2a16
.. _changelog-v2.1.1:
v2.1.1 (2015-08-20)
===================
🪲 Bug Fixes
------------
* **history**: Fix issue in get_previous_version (`f961786`_)
.. _f961786: https://github.com/python-semantic-release/python-semantic-release/commit/f961786aa3eaa3a620f47cc09243340fd329b9c2
.. _changelog-v2.1.0:
v2.1.0 (2015-08-20)
===================
✨ Features
-----------
* **cli**: Add the possibility to re-post the changelog (`4d028e2`_)
🪲 Bug Fixes
------------
* **cli**: Fix check of token in changelog command (`cc6e6ab`_)
* **github**: Fix the github releases integration (`f0c3c1d`_)
* **history**: Fix changelog generation (`f010272`_)
.. _4d028e2: https://github.com/python-semantic-release/python-semantic-release/commit/4d028e21b9da01be8caac8f23f2c11e0c087e485
.. _cc6e6ab: https://github.com/python-semantic-release/python-semantic-release/commit/cc6e6abe1e91d3aa24e8d73e704829669bea5fd7
.. _f010272: https://github.com/python-semantic-release/python-semantic-release/commit/f01027203a8ca69d21b4aff689e60e8c8d6f9af5
.. _f0c3c1d: https://github.com/python-semantic-release/python-semantic-release/commit/f0c3c1db97752b71f2153ae9f623501b0b8e2c98
.. _changelog-v2.0.0:
v2.0.0 (2015-08-19)
===================
✨ Features
-----------
* **cli**: Add command for printing the changelog (`336b8bc`_)
* **github**: Add github release changelog helper (`da18795`_)
* **history**: Add angular parser (`91e4f0f`_)
* **history**: Add generate_changelog function (`347f21a`_)
* **history**: Add markdown changelog formatter (`d77b58d`_)
* **history**: Set angular parser as the default (`c2cf537`_)
* **publish**: Add publishing of changelog to github (`74324ba`_)
* **settings**: Add loading of current parser (`7bd0916`_)
🪲 Bug Fixes
------------
* **cli**: Change output indentation on changelog (`2ca41d3`_)
* **history**: Fix level id's in angular parser (`2918d75`_)
* **history**: Fix regex in angular parser (`974ccda`_)
* **history**: Support unexpected types in changelog generator (`13deacf`_)
💥 BREAKING CHANGES
-------------------
* **history**: The default parser is now angular. Thus, the default behavior of the commit log
evaluator will change. From now on it will use the angular commit message spec to determine the
new version.
.. _13deacf: https://github.com/python-semantic-release/python-semantic-release/commit/13deacf5d33ed500e4e94ea702a2a16be2aa7c48
.. _2918d75: https://github.com/python-semantic-release/python-semantic-release/commit/2918d759bf462082280ede971a5222fe01634ed8
.. _2ca41d3: https://github.com/python-semantic-release/python-semantic-release/commit/2ca41d3bd1b8b9d9fe7e162772560e3defe2a41e
.. _336b8bc: https://github.com/python-semantic-release/python-semantic-release/commit/336b8bcc01fc1029ff37a79c92935d4b8ea69203
.. _347f21a: https://github.com/python-semantic-release/python-semantic-release/commit/347f21a1f8d655a71a0e7d58b64d4c6bc6d0bf31
.. _74324ba: https://github.com/python-semantic-release/python-semantic-release/commit/74324ba2749cdbbe80a92b5abbecfeab04617699
.. _7bd0916: https://github.com/python-semantic-release/python-semantic-release/commit/7bd0916f87a1f9fe839c853eab05cae1af420cd2
.. _91e4f0f: https://github.com/python-semantic-release/python-semantic-release/commit/91e4f0f4269d01b255efcd6d7121bbfd5a682e12
.. _974ccda: https://github.com/python-semantic-release/python-semantic-release/commit/974ccdad392d768af5e187dabc184be9ac3e133d
.. _c2cf537: https://github.com/python-semantic-release/python-semantic-release/commit/c2cf537a42beaa60cd372c7c9f8fb45db8085917
.. _d77b58d: https://github.com/python-semantic-release/python-semantic-release/commit/d77b58db4b66aec94200dccab94f483def4dacc9
.. _da18795: https://github.com/python-semantic-release/python-semantic-release/commit/da187951af31f377ac57fe17462551cfd776dc6e
.. _changelog-v1.0.0:
v1.0.0 (2015-08-04)
===================
💥 Breaking
-----------
* Restructure helpers into history and pypi (`00f64e6`_)
📖 Documentation
----------------
* Add automatic publishing documentation, resolves `#18`_ (`58076e6`_)
.. _#18: https://github.com/python-semantic-release/python-semantic-release/issues/18
.. _00f64e6: https://github.com/python-semantic-release/python-semantic-release/commit/00f64e623db0e21470d55488c5081e12d6c11fd3
.. _58076e6: https://github.com/python-semantic-release/python-semantic-release/commit/58076e60bf20a5835b112b5e99a86c7425ffe7d9
.. _changelog-v0.9.1:
v0.9.1 (2015-08-04)
===================
🪲 Bug Fixes
------------
* Fix ``get_current_head_hash`` to ensure it only returns the hash (`7c28832`_)
.. _7c28832: https://github.com/python-semantic-release/python-semantic-release/commit/7c2883209e5bf4a568de60dbdbfc3741d34f38b4
.. _changelog-v0.9.0:
v0.9.0 (2015-08-03)
===================
✨ Features
-----------
* Add Python 2.7 support, resolves `#10`_ (`c05e13f`_)
.. _#10: https://github.com/python-semantic-release/python-semantic-release/issues/10
.. _c05e13f: https://github.com/python-semantic-release/python-semantic-release/commit/c05e13f22163237e963c493ffeda7e140f0202c6
.. _changelog-v0.8.0:
v0.8.0 (2015-08-03)
===================
✨ Features
-----------
* Add ``check_build_status`` option, resolves `#5`_ (`310bb93`_)
* Add ``get_current_head_hash`` in git helpers (`d864282`_)
* Add git helper to get owner and name of repo (`f940b43`_)
.. _#5: https://github.com/python-semantic-release/python-semantic-release/issues/5
.. _310bb93: https://github.com/python-semantic-release/python-semantic-release/commit/310bb9371673fcf9b7b7be48422b89ab99753f04
.. _d864282: https://github.com/python-semantic-release/python-semantic-release/commit/d864282c498f0025224407b3eeac69522c2a7ca0
.. _f940b43: https://github.com/python-semantic-release/python-semantic-release/commit/f940b435537a3c93ab06170d4a57287546bd8d3b
.. _changelog-v0.7.0:
v0.7.0 (2015-08-02)
===================
✨ Features
-----------
* Add ``patch_without_tag`` option, resolves `#6`_ (`3734a88`_)
📖 Documentation
----------------
* Set up sphinx based documentation, resolves `#1`_ (`41fba78`_)
.. _#1: https://github.com/python-semantic-release/python-semantic-release/issues/1
.. _#6: https://github.com/python-semantic-release/python-semantic-release/issues/6
.. _3734a88: https://github.com/python-semantic-release/python-semantic-release/commit/3734a889f753f1b9023876e100031be6475a90d1
.. _41fba78: https://github.com/python-semantic-release/python-semantic-release/commit/41fba78a389a8d841316946757a23a7570763c39
.. _changelog-v0.6.0:
v0.6.0 (2015-08-02)
===================
✨ Features
-----------
* Add twine for uploads to pypi, resolves `#13`_ (`eec2561`_)
.. _#13: https://github.com/python-semantic-release/python-semantic-release/issues/13
.. _eec2561: https://github.com/python-semantic-release/python-semantic-release/commit/eec256115b28b0a18136a26d74cfc3232502f1a6
.. _changelog-v0.5.4:
v0.5.4 (2015-07-29)
===================
🪲 Bug Fixes
------------
* Add python2 not supported warning (`e84c4d8`_)
.. _e84c4d8: https://github.com/python-semantic-release/python-semantic-release/commit/e84c4d8b6f212aec174baccd188185627b5039b6
.. _changelog-v0.5.3:
v0.5.3 (2015-07-28)
===================
⚙️ Build System
---------------
* Add ``wheel`` as a dependency (`971e479`_)
.. _971e479: https://github.com/python-semantic-release/python-semantic-release/commit/971e4795a8b8fea371fcc02dc9221f58a0559f32
.. _changelog-v0.5.2:
v0.5.2 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix python wheel tag (`f9ac163`_)
.. _f9ac163: https://github.com/python-semantic-release/python-semantic-release/commit/f9ac163491666022c809ad49846f3c61966e10c1
.. _changelog-v0.5.1:
v0.5.1 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix push commands (`8374ef6`_)
.. _8374ef6: https://github.com/python-semantic-release/python-semantic-release/commit/8374ef6bd78eb564a6d846b882c99a67e116394e
.. _changelog-v0.5.0:
v0.5.0 (2015-07-28)
===================
✨ Features
-----------
* Add setup.py hook for the cli interface (`c363bc5`_)
.. _c363bc5: https://github.com/python-semantic-release/python-semantic-release/commit/c363bc5d3cb9e9a113de3cd0c49dd54a5ea9cf35
.. _changelog-v0.4.0:
v0.4.0 (2015-07-28)
===================
✨ Features
-----------
* Add publish command (`d8116c9`_)
.. _d8116c9: https://github.com/python-semantic-release/python-semantic-release/commit/d8116c9dec472d0007973939363388d598697784
.. _changelog-v0.3.2:
v0.3.2 (2015-07-28)
===================
* No change
.. _changelog-v0.3.1:
v0.3.1 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix wheel settings (`1e860e8`_)
.. _1e860e8: https://github.com/python-semantic-release/python-semantic-release/commit/1e860e8a4d9ec580449a0b87be9660a9482fa2a4
.. _changelog-v0.3.0:
v0.3.0 (2015-07-27)
===================
✨ Features
-----------
* Add support for tagging releases (`5f4736f`_)
🪲 Bug Fixes
------------
* Fix issue when version should not change (`441798a`_)
.. _441798a: https://github.com/python-semantic-release/python-semantic-release/commit/441798a223195138c0d3d2c51fc916137fef9a6c
.. _5f4736f: https://github.com/python-semantic-release/python-semantic-release/commit/5f4736f4e41bc96d36caa76ca58be0e1e7931069
.. _changelog-v0.2.0:
v0.2.0 (2015-07-27)
===================
✨ Features
-----------
* added no-operation (``--noop``) mode (`44c2039`_)
⚙️ Build System
---------------
* Swapped pygit2 with gitpython to avoid libgit2 dependency (`8165a2e`_)
.. _44c2039: https://github.com/python-semantic-release/python-semantic-release/commit/44c203989aabc9366ba42ed2bc40eaccd7ac891c
.. _8165a2e: https://github.com/python-semantic-release/python-semantic-release/commit/8165a2eef2c6eea88bfa52e6db37abc7374cccba
.. _changelog-v0.1.1:
v0.1.1 (2015-07-27)
===================
🪲 Bug Fixes
------------
* Fix entry point (`bd7ce7f`_)
.. _bd7ce7f: https://github.com/python-semantic-release/python-semantic-release/commit/bd7ce7f47c49e2027767fb770024a0d4033299fa
.. _changelog-v0.1.0:
v0.1.0 (2015-07-27)
===================
* Initial Release
python-semantic-release-9.21.0/CONTRIBUTING.rst 0000664 0000000 0000000 00000005045 14756704352 0021025 0 ustar 00root root 0000000 0000000 Contributing
------------
If you want to contribute that is awesome. Remember to be nice to others in issues and reviews.
Please remember to write tests for the cool things you create or fix.
Unsure about something? No worries, `open an issue`_.
.. _open an issue: https://github.com/relekang/python-semantic-release/issues/new
Commit messages
~~~~~~~~~~~~~~~
Since python-semantic-release is released with python-semantic-release we need the commit messages
to adhere to the `Conventional Commits Specification`_. Although scopes are optional, scopes are
expected where applicable. Changes should be committed separately with the commit type they represent,
do not combine them all into one commit.
If you are unsure how to describe the change correctly just try and ask about it in your pr. If we
think it should be something else or there is a pull-request without tags we will help out in
adding or changing them.
.. _Conventional Commits Specification: https://www.conventionalcommits.org/en/v1.0.0
Releases
~~~~~~~~
This package is released by python-semantic-release on each master build, thus if there are changes
that should result in a new release it will happen if the build is green.
Development
~~~~~~~~~~~
Install this module and the development dependencies
.. code-block:: bash
pip install -e .[dev,mypy,test]
And if you'd like to build the documentation locally
.. code-block:: bash
pip install -e .[docs]
sphinx-autobuild --open-browser docs docs/_build/html
Testing
~~~~~~~
To test your modifications locally:
.. code-block:: bash
# Run type-checking, all tests across all supported Python versions
tox
# Run all tests for your current installed Python version (with full error output)
pytest -vv --comprehensive
# Run unit tests for your current installed Python version
pytest
# or
pytest -vv -m unit
# Run end-to-end tests for your current installed Python version (with full error output)
pytest -vv -m e2e [--comprehensive]
The ``--comprehensive`` flag is optional and will run all the variations of tests and it does
take significantly longer to run.
Building
~~~~~~~~
This project is designed to be versioned and built by itself using the ``tool.semantic_release``
configuration in ``pyproject.toml``. The setting ``tool.semantic_release.build_command`` defines
the command to run to build the package.
The following is a copy of the ``build_command`` setting which can be run manually to build the
package locally:
.. code-block:: bash
pip install -e .[build]
python -m build .
python-semantic-release-9.21.0/Dockerfile 0000664 0000000 0000000 00000002106 14756704352 0020351 0 ustar 00root root 0000000 0000000 # This Dockerfile is only for GitHub Actions
FROM python:3.13-bookworm
# Copy python-semantic-release source code into container
COPY . /psr
RUN \
# Install desired packages
apt update && apt install -y --no-install-recommends \
# install git with git-lfs support
git git-lfs \
# install python cmodule / binary module build utilities
python3-dev gcc make cmake cargo \
# Configure global pip
&& { \
printf '%s\n' "[global]"; \
printf '%s\n' "no-cache-dir = true"; \
printf '%s\n' "disable-pip-version-check = true"; \
} > /etc/pip.conf \
# Create virtual environment for python-semantic-release
&& python3 -m venv /psr/.venv \
# Update core utilities in the virtual environment
&& /psr/.venv/bin/pip install -U pip setuptools wheel \
# Install psr & its dependencies from source into virtual environment
&& /psr/.venv/bin/pip install /psr \
# Cleanup
&& apt clean -y
ENV PSR_DOCKER_GITHUB_ACTION=true
ENV PYTHONDONTWRITEBYTECODE=1
ENTRYPOINT ["/bin/bash", "-l", "/psr/action.sh"]
python-semantic-release-9.21.0/LICENSE 0000664 0000000 0000000 00000002073 14756704352 0017367 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2015 Rolf Erik Lekang
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
python-semantic-release-9.21.0/MANIFEST.in 0000664 0000000 0000000 00000000224 14756704352 0020114 0 ustar 00root root 0000000 0000000 # Make sure non-python files are included
graft src/**/data/
# include docs & testing into sdist, ignored for wheel build
graft tests/
graft docs/
python-semantic-release-9.21.0/README.rst 0000664 0000000 0000000 00000001541 14756704352 0020050 0 ustar 00root root 0000000 0000000 Python Semantic Release
***********************
*Automating Releases via SemVer and Commit Message Conventions*
----
The official documentation for Python Semantic Release can be found at
`python-semantic-release.readthedocs.io`_.
GitHub Action
=============
When using the Python Semantic Release GitHub Action, it executes the command
``semantic-release version`` using `python-semantic-release`_.
The usage information and examples for this GitHub Action is available under
the `GitHub Actions section`_ of `python-semantic-release.readthedocs.io`_.
.. _python-semantic-release: https://pypi.org/project/python-semantic-release/
.. _python-semantic-release.readthedocs.io: https://python-semantic-release.readthedocs.io/en/latest/
.. _GitHub Actions section: https://python-semantic-release.readthedocs.io/en/latest/automatic-releases/github-actions.html
python-semantic-release-9.21.0/action.sh 0000664 0000000 0000000 00000010066 14756704352 0020174 0 ustar 00root root 0000000 0000000 #!/bin/bash
set -e
# Convert "true"/"false" into command line args, returns "" if not defined
eval_boolean_action_input() {
local -r input_name="$1"
shift
local -r flag_value="$1"
shift
local -r if_true="$1"
shift
local -r if_false="$1"
if [ -z "$flag_value" ]; then
echo ""
elif [ "$flag_value" = "true" ]; then
echo "$if_true"
elif [ "$flag_value" = "false" ]; then
echo "$if_false"
else
printf 'Error: Invalid value for input %s: %s is not "true" or "false\n"' \
"$input_name" "$flag_value" >&2
return 1
fi
}
# Convert inputs to command line arguments
export ARGS=()
# v10 Breaking change as prerelease should be as_prerelease to match
ARGS+=("$(eval_boolean_action_input "prerelease" "$INPUT_PRERELEASE" "--as-prerelease" "")") || exit 1
ARGS+=("$(eval_boolean_action_input "commit" "$INPUT_COMMIT" "--commit" "--no-commit")") || exit 1
ARGS+=("$(eval_boolean_action_input "tag" "$INPUT_TAG" "--tag" "--no-tag")") || exit 1
ARGS+=("$(eval_boolean_action_input "push" "$INPUT_PUSH" "--push" "--no-push")") || exit 1
ARGS+=("$(eval_boolean_action_input "changelog" "$INPUT_CHANGELOG" "--changelog" "--no-changelog")") || exit 1
ARGS+=("$(eval_boolean_action_input "vcs_release" "$INPUT_VCS_RELEASE" "--vcs-release" "--no-vcs-release")") || exit 1
ARGS+=("$(eval_boolean_action_input "build" "$INPUT_BUILD" "" "--skip-build")") || exit 1
# Handle --patch, --minor, --major
# https://stackoverflow.com/a/47541882
valid_force_levels=("prerelease" "patch" "minor" "major")
if [ -z "$INPUT_FORCE" ]; then
true # do nothing if 'force' input is not set
elif printf '%s\0' "${valid_force_levels[@]}" | grep -Fxzq "$INPUT_FORCE"; then
ARGS+=("--$INPUT_FORCE")
else
printf "Error: Input 'force' must be one of: %s\n" "${valid_force_levels[@]}" >&2
fi
if [ -n "$INPUT_BUILD_METADATA" ]; then
ARGS+=("--build-metadata $INPUT_BUILD_METADATA")
fi
if [ -n "$INPUT_PRERELEASE_TOKEN" ]; then
ARGS+=("--prerelease-token $INPUT_PRERELEASE_TOKEN")
fi
# Change to configured directory
cd "${INPUT_DIRECTORY}"
# Set Git details
if ! [ "${INPUT_GIT_COMMITTER_NAME:="-"}" = "-" ]; then
git config --global user.name "$INPUT_GIT_COMMITTER_NAME"
fi
if ! [ "${INPUT_GIT_COMMITTER_EMAIL:="-"}" = "-" ]; then
git config --global user.email "$INPUT_GIT_COMMITTER_EMAIL"
fi
if [ "${INPUT_GIT_COMMITTER_NAME:="-"}" != "-" ] && [ "${INPUT_GIT_COMMITTER_EMAIL:="-"}" != "-" ]; then
# Must export this value to the environment for PSR to consume the override
export GIT_COMMIT_AUTHOR="$INPUT_GIT_COMMITTER_NAME <$INPUT_GIT_COMMITTER_EMAIL>"
fi
# See https://github.com/actions/runner-images/issues/6775#issuecomment-1409268124
# and https://github.com/actions/runner-images/issues/6775#issuecomment-1410270956
git config --system --add safe.directory "*"
if [[ -n "$INPUT_SSH_PUBLIC_SIGNING_KEY" && -n "$INPUT_SSH_PRIVATE_SIGNING_KEY" ]]; then
echo "SSH Key pair found, configuring signing..."
# Write keys to disk
mkdir -vp ~/.ssh
echo -e "$INPUT_SSH_PUBLIC_SIGNING_KEY" >>~/.ssh/signing_key.pub
cat ~/.ssh/signing_key.pub
echo -e "$INPUT_SSH_PRIVATE_SIGNING_KEY" >>~/.ssh/signing_key
# DO NOT CAT private key for security reasons
sha256sum ~/.ssh/signing_key
# Ensure read only private key
chmod 400 ~/.ssh/signing_key
# Enable ssh-agent & add signing key
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/signing_key
# Create allowed_signers file for git
if [ "${INPUT_GIT_COMMITTER_EMAIL:="-"}" = "-" ]; then
echo >&2 "git_committer_email must be set to use SSH key signing!"
exit 1
fi
touch ~/.ssh/allowed_signers
echo "$INPUT_GIT_COMMITTER_EMAIL $INPUT_SSH_PUBLIC_SIGNING_KEY" >~/.ssh/allowed_signers
# Configure git for signing
git config --global gpg.format ssh
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
git config --global user.signingKey ~/.ssh/signing_key
git config --global commit.gpgsign true
git config --global tag.gpgsign true
fi
# Copy inputs into correctly-named environment variables
export GH_TOKEN="${INPUT_GITHUB_TOKEN}"
# Run Semantic Release (explicitly use the GitHub action version)
eval "/psr/.venv/bin/semantic-release $INPUT_ROOT_OPTIONS version ${ARGS[*]}"
python-semantic-release-9.21.0/action.yml 0000664 0000000 0000000 00000006267 14756704352 0020373 0 ustar 00root root 0000000 0000000 ---
name: Python Semantic Release
description: Automated Releases via SemVer and Commit Message Conventions
branding:
color: orange
inputs:
root_options:
default: "-v"
required: false
description: |
Additional options for the main command. Example: -vv --noop
directory:
default: "."
required: false
description: Sub-directory to cd into before running semantic-release
github_token:
type: string
required: true
description: GitHub token used to push release notes and new commits/tags
git_committer_name:
type: string
required: false
description: The human name for the “committer” field
git_committer_email:
type: string
required: false
description: The email address for the “committer” field
ssh_public_signing_key:
type: string
required: false
description: The ssh public key used to sign commits
ssh_private_signing_key:
type: string
required: false
description: The ssh private key used to sign commits
# `semantic-release version` command line options
prerelease:
type: string
required: false
description: |
Force the next version to be a prerelease. Set to "true" or "false".
prerelease_token:
type: string
required: false
description: "Force the next version to use this prerelease token, if it is a prerelease"
force:
type: string
required: false
description: |
Force the next version to be a major release. Must be set to
one of "prerelease", "patch", "minor", or "major".
commit:
type: string
required: false
description: Whether or not to commit changes locally. Defaults are handled
by python-semantic-release internal version command.
tag:
type: string
required: false
description: |
Whether or not to make a local version tag. Defaults are handled
by python-semantic-release internal version command.
push:
type: string
required: false
description: |
Whether or not to push local commits to the Git repository. See
the configuration page for defaults of `semantic-release version`
for how the default is determined between push, tag, & commit.
changelog:
type: string
required: false
description: |
Whether or not to update the changelog.
vcs_release:
type: string
required: false
description: |
Whether or not to create a release in the remote VCS, if supported
build:
type: string
required: false
description: |
Whether or not to run the build_command for the project. Defaults are
handled by python-semantic-release internal version command.
build_metadata:
type: string
required: false
description: |
Build metadata to append to the new version
outputs:
is_prerelease:
description: |
"true" if the version is a prerelease, "false" otherwise
released:
description: |
"true" if a release was made, "false" otherwise
tag:
description: |
The Git tag corresponding to the version output
version:
description: |
The newly released version if one was made, otherwise the current version
runs:
using: docker
image: Dockerfile
python-semantic-release-9.21.0/config/ 0000775 0000000 0000000 00000000000 14756704352 0017625 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/config/release-templates/ 0000775 0000000 0000000 00000000000 14756704352 0023241 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/config/release-templates/.components/ 0000775 0000000 0000000 00000000000 14756704352 0025504 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/config/release-templates/.components/changelog_1.0.0.rst.j2 0000664 0000000 0000000 00000014377 14756704352 0031227 0 ustar 00root root 0000000 0000000 {#
This file overrides what would be generated normally because the commits are
not conformative to the standard commit message format.
#}
.. _changelog-v1.0.0:
v1.0.0 (2015-08-04)
===================
💥 Breaking
-----------
* Restructure helpers into history and pypi (`00f64e6`_)
📖 Documentation
----------------
* Add automatic publishing documentation, resolves `#18`_ (`58076e6`_)
.. _#18: https://github.com/python-semantic-release/python-semantic-release/issues/18
.. _00f64e6: https://github.com/python-semantic-release/python-semantic-release/commit/00f64e623db0e21470d55488c5081e12d6c11fd3
.. _58076e6: https://github.com/python-semantic-release/python-semantic-release/commit/58076e60bf20a5835b112b5e99a86c7425ffe7d9
.. _changelog-v0.9.1:
v0.9.1 (2015-08-04)
===================
🪲 Bug Fixes
------------
* Fix ``get_current_head_hash`` to ensure it only returns the hash (`7c28832`_)
.. _7c28832: https://github.com/python-semantic-release/python-semantic-release/commit/7c2883209e5bf4a568de60dbdbfc3741d34f38b4
.. _changelog-v0.9.0:
v0.9.0 (2015-08-03)
===================
✨ Features
-----------
* Add Python 2.7 support, resolves `#10`_ (`c05e13f`_)
.. _#10: https://github.com/python-semantic-release/python-semantic-release/issues/10
.. _c05e13f: https://github.com/python-semantic-release/python-semantic-release/commit/c05e13f22163237e963c493ffeda7e140f0202c6
.. _changelog-v0.8.0:
v0.8.0 (2015-08-03)
===================
✨ Features
-----------
* Add ``check_build_status`` option, resolves `#5`_ (`310bb93`_)
* Add ``get_current_head_hash`` in git helpers (`d864282`_)
* Add git helper to get owner and name of repo (`f940b43`_)
.. _#5: https://github.com/python-semantic-release/python-semantic-release/issues/5
.. _310bb93: https://github.com/python-semantic-release/python-semantic-release/commit/310bb9371673fcf9b7b7be48422b89ab99753f04
.. _d864282: https://github.com/python-semantic-release/python-semantic-release/commit/d864282c498f0025224407b3eeac69522c2a7ca0
.. _f940b43: https://github.com/python-semantic-release/python-semantic-release/commit/f940b435537a3c93ab06170d4a57287546bd8d3b
.. _changelog-v0.7.0:
v0.7.0 (2015-08-02)
===================
✨ Features
-----------
* Add ``patch_without_tag`` option, resolves `#6`_ (`3734a88`_)
📖 Documentation
----------------
* Set up sphinx based documentation, resolves `#1`_ (`41fba78`_)
.. _#1: https://github.com/python-semantic-release/python-semantic-release/issues/1
.. _#6: https://github.com/python-semantic-release/python-semantic-release/issues/6
.. _3734a88: https://github.com/python-semantic-release/python-semantic-release/commit/3734a889f753f1b9023876e100031be6475a90d1
.. _41fba78: https://github.com/python-semantic-release/python-semantic-release/commit/41fba78a389a8d841316946757a23a7570763c39
.. _changelog-v0.6.0:
v0.6.0 (2015-08-02)
===================
✨ Features
-----------
* Add twine for uploads to pypi, resolves `#13`_ (`eec2561`_)
.. _#13: https://github.com/python-semantic-release/python-semantic-release/issues/13
.. _eec2561: https://github.com/python-semantic-release/python-semantic-release/commit/eec256115b28b0a18136a26d74cfc3232502f1a6
.. _changelog-v0.5.4:
v0.5.4 (2015-07-29)
===================
🪲 Bug Fixes
------------
* Add python2 not supported warning (`e84c4d8`_)
.. _e84c4d8: https://github.com/python-semantic-release/python-semantic-release/commit/e84c4d8b6f212aec174baccd188185627b5039b6
.. _changelog-v0.5.3:
v0.5.3 (2015-07-28)
===================
⚙️ Build System
---------------
* Add ``wheel`` as a dependency (`971e479`_)
.. _971e479: https://github.com/python-semantic-release/python-semantic-release/commit/971e4795a8b8fea371fcc02dc9221f58a0559f32
.. _changelog-v0.5.2:
v0.5.2 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix python wheel tag (`f9ac163`_)
.. _f9ac163: https://github.com/python-semantic-release/python-semantic-release/commit/f9ac163491666022c809ad49846f3c61966e10c1
.. _changelog-v0.5.1:
v0.5.1 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix push commands (`8374ef6`_)
.. _8374ef6: https://github.com/python-semantic-release/python-semantic-release/commit/8374ef6bd78eb564a6d846b882c99a67e116394e
.. _changelog-v0.5.0:
v0.5.0 (2015-07-28)
===================
✨ Features
-----------
* Add setup.py hook for the cli interface (`c363bc5`_)
.. _c363bc5: https://github.com/python-semantic-release/python-semantic-release/commit/c363bc5d3cb9e9a113de3cd0c49dd54a5ea9cf35
.. _changelog-v0.4.0:
v0.4.0 (2015-07-28)
===================
✨ Features
-----------
* Add publish command (`d8116c9`_)
.. _d8116c9: https://github.com/python-semantic-release/python-semantic-release/commit/d8116c9dec472d0007973939363388d598697784
.. _changelog-v0.3.2:
v0.3.2 (2015-07-28)
===================
* No change
.. _changelog-v0.3.1:
v0.3.1 (2015-07-28)
===================
🪲 Bug Fixes
------------
* Fix wheel settings (`1e860e8`_)
.. _1e860e8: https://github.com/python-semantic-release/python-semantic-release/commit/1e860e8a4d9ec580449a0b87be9660a9482fa2a4
.. _changelog-v0.3.0:
v0.3.0 (2015-07-27)
===================
✨ Features
-----------
* Add support for tagging releases (`5f4736f`_)
🪲 Bug Fixes
------------
* Fix issue when version should not change (`441798a`_)
.. _441798a: https://github.com/python-semantic-release/python-semantic-release/commit/441798a223195138c0d3d2c51fc916137fef9a6c
.. _5f4736f: https://github.com/python-semantic-release/python-semantic-release/commit/5f4736f4e41bc96d36caa76ca58be0e1e7931069
.. _changelog-v0.2.0:
v0.2.0 (2015-07-27)
===================
✨ Features
-----------
* added no-operation (``--noop``) mode (`44c2039`_)
⚙️ Build System
---------------
* Swapped pygit2 with gitpython to avoid libgit2 dependency (`8165a2e`_)
.. _44c2039: https://github.com/python-semantic-release/python-semantic-release/commit/44c203989aabc9366ba42ed2bc40eaccd7ac891c
.. _8165a2e: https://github.com/python-semantic-release/python-semantic-release/commit/8165a2eef2c6eea88bfa52e6db37abc7374cccba
.. _changelog-v0.1.1:
v0.1.1 (2015-07-27)
===================
🪲 Bug Fixes
------------
* Fix entry point (`bd7ce7f`_)
.. _bd7ce7f: https://github.com/python-semantic-release/python-semantic-release/commit/bd7ce7f47c49e2027767fb770024a0d4033299fa
python-semantic-release-9.21.0/config/release-templates/.components/changelog_header.rst.j2 0000664 0000000 0000000 00000000407 14756704352 0032010 0 ustar 00root root 0000000 0000000 .. _changelog:
{% if ctx.changelog_mode == "update"
%}{# # Modified insertion flag to insert a changelog header directly
# which convienently puts the insertion flag incognito when reading raw RST
#}{{
insertion_flag ~ "\n"
}}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/changelog_init.rst.j2 0000664 0000000 0000000 00000002272 14756704352 0031525 0 ustar 00root root 0000000 0000000 {#
This changelog template initializes a full changelog for the project,
it follows the following logic:
1. Header
2. Any Unreleased Details (uncommon)
3. all previous releases except the very first release
4. the first release
#}{#
# # Header
#}{% include "changelog_header.rst.j2"
-%}{#
# # Any Unreleased Details (uncommon)
#}{% include "unreleased_changes.rst.j2"
-%}{#
# # Since this is initialization, we are generating all the previous
# # release notes per version. The very first release notes is specialized.
# # We also have non-conformative commits, so insert manual write-ups.
#}{% if releases | length > 0
%}{% for release in releases
%}{% if loop.last
%}{{ "\n"
}}{% include "first_release.rst.j2"
-%}{{ "\n"
}}{#
#}{% elif release.version == "1.0.0"
%}{# # Append 0.1.1 through 1.0.0 non-generated changelog only once
#}{{ "\n"
}}{% include "changelog_1.0.0.rst.j2"
-%}{{ "\n\n"
}}{#
#}{% elif release.version > "1.0.0"
%}{{ "\n"
}}{% include "versioned_changes.rst.j2"
-%}{{ "\n"
}}{% endif
%}{% endfor
%}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/changelog_update.rst.j2 0000664 0000000 0000000 00000005054 14756704352 0032045 0 ustar 00root root 0000000 0000000 {#
This Update changelog template uses the following logic:
1. Read previous changelog file (ex. project_root/CHANGELOG.md)
2. Split on insertion flag (ex. )
3. Print top half of previous changelog
3. New Changes (unreleased commits & newly released)
4. Print bottom half of previous changelog
Note: if a previous file was not found, it does not write anything at the bottom
but render does NOT fail
#}{% set prev_changelog_contents = prev_changelog_file | read_file | safe
%}{% set changelog_parts = prev_changelog_contents.split(insertion_flag, maxsplit=1)
%}{#
#}{% if changelog_parts | length < 2
%}{# # insertion flag was not found, check if the file was empty or did not exist
#}{% if prev_changelog_contents | length > 0
%}{# # File has content but no insertion flag, therefore, file will not be updated
#}{{ changelog_parts[0]
}}{% else
%}{# # File was empty or did not exist, therefore, it will be created from scratch
#}{% include "changelog_init.rst.j2"
%}{% endif
%}{% else
%}{#
# Previous Changelog Header
# - Depending if there is header content, then it will separate the insertion flag
# with a newline from header content, otherwise it will just print the insertion flag
#}{% set prev_changelog_top = changelog_parts[0] | trim
%}{% if prev_changelog_top | length > 0
%}{{
"%s\n\n%s\n" | format(prev_changelog_top, insertion_flag | trim)
}}{% else
%}{{
"%s\n" | format(insertion_flag | trim)
}}{% endif
%}{#
# Any Unreleased Details (uncommon)
#}{% include "unreleased_changes.rst.j2"
-%}{#
#}{% if releases | length > 0
%}{# # Latest Release Details
#}{% set release = releases[0]
%}{#
#}{% if releases | length == 1 and ctx.mask_initial_release
%}{# # First Release detected
#}{{ "\n"
}}{%- include "first_release.rst.j2"
-%}{{ "\n"
}}{#
#}{% elif release.version.as_semver_tag() ~ " (" not in changelog_parts[1]
%}{# # The release version is not already in the changelog so we add it
#}{{ "\n"
}}{%- include "versioned_changes.rst.j2"
-%}{{ "\n"
}}{#
#}{% endif
%}{% endif
%}{#
# Previous Changelog Footer
# - skips printing footer if empty, which happens when the insertion_flag
# was at the end of the file (ignoring whitespace)
#}{% set previous_changelog_bottom = changelog_parts[1] | trim
%}{% if previous_changelog_bottom | length > 0
%}{{ "\n%s\n" | format(previous_changelog_bottom)
}}{% endif
%}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/changes.md.j2 0000664 0000000 0000000 00000011602 14756704352 0027750 0 ustar 00root root 0000000 0000000 {% from 'macros.md.j2' import apply_alphabetical_ordering_by_brk_descriptions
%}{% from 'macros.md.j2' import apply_alphabetical_ordering_by_descriptions
%}{% from 'macros.md.j2' import apply_alphabetical_ordering_by_release_notices
%}{% from 'macros.md.j2' import emoji_map, format_breaking_changes_description
%}{% from 'macros.md.j2' import format_commit_summary_line, format_release_notice
%}{% from 'macros.md.j2' import section_heading_order, section_heading_translations
%}{#
EXAMPLE:
### ✨ Features
- Add new feature ([#10](https://domain.com/namespace/repo/pull/10),
[`abcdef0`](https://domain.com/namespace/repo/commit/HASH))
- **scope**: Add new feature ([`abcdef0`](https://domain.com/namespace/repo/commit/HASH))
### 🪲 Bug Fixes
- Fix bug ([#11](https://domain.com/namespace/repo/pull/11),
[`abcdef1`](https://domain.com/namespace/repo/commit/HASH))
### 💥 Breaking Changes
- With the change _____, the change causes ___ effect. Ultimately, this section
it is a more detailed description of the breaking change. With an optional
scope prefix like the commit messages above.
- **scope**: this breaking change has a scope to identify the part of the code that
this breaking change applies to for better context.
### 💡 Additional Release Information
- This is a release note that provides additional information about the release
that is not a breaking change or a feature/bug fix.
- **scope**: this release note has a scope to identify the part of the code that
this release note applies to for better context.
#}{% set max_line_width = max_line_width | default(100)
%}{% set hanging_indent = hanging_indent | default(2)
%}{#
#}{% for type_ in section_heading_order if type_ in commit_objects
%}{# PREPROCESS COMMITS (order by description & format description line)
#}{% set ns = namespace(commits=commit_objects[type_])
%}{% set _ = apply_alphabetical_ordering_by_descriptions(ns)
%}{#
#}{% set commit_descriptions = []
%}{#
#}{% for commit in ns.commits
%}{# # Generate the commit summary line and format it for Markdown
#}{% set description = "- %s" | format(format_commit_summary_line(commit))
%}{% set description = description | autofit_text_width(max_line_width, hanging_indent)
%}{% set _ = commit_descriptions.append(description)
%}{% endfor
%}{#
# # PRINT SECTION (header & commits)
#}{{ "\n"
}}{{ "### %s %s\n" | format(emoji_map[type_], type_ | title)
}}{{ "\n"
}}{{ "%s\n" | format(commit_descriptions | unique | join("\n\n"))
}}{% endfor
%}{#
# # Determine if any commits have a breaking change or release notice
# # commit_objects is a dictionary of strings to a list of commits { "features", [ParsedCommit(), ...] }
#}{% set breaking_commits = []
%}{% set notice_commits = []
%}{% for commits in commit_objects.values()
%}{% set valid_commits = commits | rejectattr("error", "defined") | list
%}{# # Filter out breaking change commits that have no breaking descriptions
#}{% set _ = breaking_commits.extend(
valid_commits | selectattr("breaking_descriptions.0")
)
%}{# # Filter out ParsedCommits commits that have no release notices
#}{% set _ = notice_commits.extend(
valid_commits | selectattr("release_notices.0")
)
%}{% endfor
%}{#
#}{% if breaking_commits | length > 0
%}{# PREPROCESS COMMITS
#}{% set brk_ns = namespace(commits=breaking_commits)
%}{% set _ = apply_alphabetical_ordering_by_brk_descriptions(brk_ns)
%}{#
#}{% set brking_descriptions = []
%}{#
#}{% for commit in brk_ns.commits
%}{% set full_description = "- %s" | format(
format_breaking_changes_description(commit).split("\n\n") | join("\n\n- ")
)
%}{% set _ = brking_descriptions.append(
full_description | autofit_text_width(max_line_width, hanging_indent)
)
%}{% endfor
%}{#
# # PRINT BREAKING CHANGE DESCRIPTIONS (header & descriptions)
#}{{ "\n"
}}{{ "### %s Breaking Changes\n" | format(emoji_map["breaking"])
}}{{
"\n%s\n" | format(brking_descriptions | unique | join("\n\n"))
}}{#
#}{% endif
%}{#
#}{% if notice_commits | length > 0
%}{# PREPROCESS COMMITS
#}{% set notice_ns = namespace(commits=notice_commits)
%}{% set _ = apply_alphabetical_ordering_by_release_notices(notice_ns)
%}{#
#}{% set release_notices = []
%}{#
#}{% for commit in notice_ns.commits
%}{% set full_description = "- %s" | format(
format_release_notice(commit).split("\n\n") | join("\n\n- ")
)
%}{% set _ = release_notices.append(
full_description | autofit_text_width(max_line_width, hanging_indent)
)
%}{% endfor
%}{#
# # PRINT RELEASE NOTICE INFORMATION (header & descriptions)
#}{{ "\n"
}}{{ "### %s Additional Release Information\n" | format(emoji_map["release_note"])
}}{{
"\n%s\n" | format(release_notices | unique | join("\n\n"))
}}{#
#}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/changes.rst.j2 0000664 0000000 0000000 00000015313 14756704352 0030163 0 ustar 00root root 0000000 0000000 {% from 'macros.rst.j2' import apply_alphabetical_ordering_by_brk_descriptions
%}{% from 'macros.rst.j2' import apply_alphabetical_ordering_by_descriptions
%}{% from 'macros.rst.j2' import apply_alphabetical_ordering_by_release_notices
%}{% from 'macros.rst.j2' import emoji_map, extract_issue_link_references, extract_pr_link_reference
%}{% from 'macros.rst.j2' import format_breaking_changes_description, format_commit_summary_line
%}{% from 'macros.rst.j2' import format_link_reference, format_release_notice
%}{% from 'macros.rst.j2' import generate_heading_underline, section_heading_order
%}{% from 'macros.rst.j2' import section_heading_translations
%}{#
✨ Features
-----------
* Add new feature (`#10`_, `8a7b8ec`_)
* **scope**: Add another feature (`abcdef0`_)
🪲 Bug Fixes
------------
* Fix bug (`#11`_, `8a7b8ec`_)
💥 Breaking Changes
-------------------
* With the change _____, the change causes ___ effect. Ultimately, this section
it is a more detailed description of the breaking change. With an optional
scope prefix like the commit messages above.
* **scope**: this breaking change has a scope to identify the part of the code that
this breaking change applies to for better context.
💡 Additional Release Information
---------------------------------
* This is a release note that provides additional information about the release
that is not a breaking change or a feature/bug fix.
* **scope**: this release note has a scope to identify the part of the code that
this release note applies to for better context.
.. _8a7B8ec: https://domain.com/owner/repo/commit/8a7b8ec
.. _abcdef0: https://domain.com/owner/repo/commit/abcdef0
.. _PR#10: https://domain.com/namespace/repo/pull/10
.. _PR#11: https://domain.com/namespace/repo/pull/11
#}{% set max_line_width = max_line_width | default(100)
%}{% set hanging_indent = hanging_indent | default(2)
%}{#
#}{% set post_paragraph_links = []
%}{#
#}{% for type_ in section_heading_order if type_ in commit_objects
%}{# # PREPARE SECTION HEADER
#}{% set section_header = "%s %s" | format(
emoji_map[type_], type_ | title
)
%}{#
# # PREPROCESS COMMITS
#}{% set ns = namespace(commits=commit_objects[type_])
%}{% set _ = apply_alphabetical_ordering_by_descriptions(ns)
%}{#
#}{% set commit_descriptions = []
%}{#
#}{% for commit in ns.commits
%}{# # Extract PR/MR reference if it exists and store it for later
#}{% set pr_link_reference = extract_pr_link_reference(commit) | default("", true)
%}{% if pr_link_reference != ""
%}{% set _ = post_paragraph_links.append(pr_link_reference)
%}{% endif
%}{#
# # Extract Issue references if they exists and store it for later
#}{% set issue_urls_ns = namespace(urls=[])
%}{% set _ = extract_issue_link_references(issue_urls_ns, commit)
%}{% set _ = post_paragraph_links.extend(issue_urls_ns.urls)
%}{#
# # Always generate a commit hash reference link and store it for later
#}{% set commit_hash_link_reference = format_link_reference(
commit.hexsha | commit_hash_url,
commit.short_hash
)
%}{% set _ = post_paragraph_links.append(commit_hash_link_reference)
%}{#
# # Generate the commit summary line and format it for RST
#}{% set description = "* %s" | format(format_commit_summary_line(commit))
%}{% set description = description | convert_md_to_rst
%}{% set description = description | autofit_text_width(max_line_width, hanging_indent)
%}{% set _ = commit_descriptions.append(description)
%}{% endfor
%}{#
# # PRINT SECTION (Header & Commits)
# Note: Must add an additional character to the section header when determining the underline because of
# the emoji character which can serve as 2 characters in length.
#}{{ "\n"
}}{{ section_header ~ "\n"
}}{{ generate_heading_underline(section_header ~ " ", '-') ~ "\n"
}}{{
"\n%s\n" | format(commit_descriptions | unique | join("\n\n"))
}}{% endfor
%}{#
# # Determine if any commits have a breaking change or release notice
# # commit_objects is a dictionary of strings to a list of commits { "features", [ParsedCommit(), ...] }
#}{% set breaking_commits = []
%}{% set notice_commits = []
%}{% for commits in commit_objects.values()
%}{% set valid_commits = commits | rejectattr("error", "defined") | list
%}{# # Filter out breaking change commits that have no breaking descriptions
#}{% set _ = breaking_commits.extend(
valid_commits | selectattr("breaking_descriptions.0")
)
%}{# # Filter out ParsedCommits commits that have no release notices
#}{% set _ = notice_commits.extend(
valid_commits | selectattr("release_notices.0")
)
%}{% endfor
%}{#
#}{% if breaking_commits | length > 0
%}{# # PREPROCESS COMMITS
#}{% set brk_ns = namespace(commits=breaking_commits)
%}{% set _ = apply_alphabetical_ordering_by_brk_descriptions(brk_ns)
%}{#
#}{% set brking_descriptions = []
%}{#
#}{% for commit in brk_ns.commits
%}{% set full_description = "* %s" | format(
format_breaking_changes_description(commit).split("\n\n") | join("\n\n* ")
)
%}{% set _ = brking_descriptions.append(
full_description | convert_md_to_rst | autofit_text_width(max_line_width, hanging_indent)
)
%}{% endfor
%}{#
# # PRINT BREAKING CHANGE DESCRIPTIONS (header & descriptions)
#}{{ "\n"
}}{{ "%s Breaking Changes\n" | format(emoji_map["breaking"])
}}{{ '-------------------\n'
}}{{
"\n%s\n" | format(brking_descriptions | unique | join("\n\n"))
}}{#
#}{% endif
%}{#
#}{% if notice_commits | length > 0
%}{# PREPROCESS COMMITS
#}{% set notice_ns = namespace(commits=notice_commits)
%}{% set _ = apply_alphabetical_ordering_by_release_notices(notice_ns)
%}{#
#}{% set release_notices = []
%}{#
#}{% for commit in notice_ns.commits
%}{% set full_description = "* %s" | format(
format_release_notice(commit).split("\n\n") | join("\n\n* ")
)
%}{% set _ = release_notices.append(
full_description | convert_md_to_rst | autofit_text_width(max_line_width, hanging_indent)
)
%}{% endfor
%}{#
# # PRINT RELEASE NOTICE INFORMATION (header & descriptions)
#}{{ "\n"
}}{{ "%s Additional Release Information\n" | format(emoji_map["release_note"])
}}{{ "---------------------------------\n"
}}{{
"\n%s\n" | format(release_notices | unique | join("\n\n"))
}}{#
#}{% endif
%}{#
#
# # PRINT POST PARAGRAPH LINKS
#}{% if post_paragraph_links | length > 0
%}{# # Print out any PR/MR or Issue URL references that were found in the commit messages
#}{{ "\n%s\n" | format(post_paragraph_links | unique | sort | join("\n"))
}}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/first_release.rst.j2 0000664 0000000 0000000 00000000716 14756704352 0031403 0 ustar 00root root 0000000 0000000 {% from "macros.rst.j2" import generate_heading_underline
%}{#
.. _changelog-vX.X.X:
vX.X.X (YYYY-MMM-DD)
====================
* Initial Release
#}{% set version_header = "%s (%s)" | format(
release.version.as_semver_tag(),
release.tagged_date.strftime("%Y-%m-%d")
)
%}
{{- ".. _changelog-%s:" | format(release.version.as_semver_tag()) }}
{{ version_header }}
{{ generate_heading_underline(version_header, "=") }}
* Initial Release
python-semantic-release-9.21.0/config/release-templates/.components/macros.md.j2 0000664 0000000 0000000 00000017226 14756704352 0027634 0 ustar 00root root 0000000 0000000 {% set section_heading_translations = {
'feat': 'features',
'fix': 'bug fixes',
'perf': 'performance improvements',
'docs': 'documentation',
'build': 'build system',
'refactor': 'refactoring',
'test': 'testing',
'ci': 'continuous integration',
'chore': 'chores',
'style': 'code style',
} %}
{% set section_heading_order = section_heading_translations.values() %}
{% set emoji_map = {
'breaking': '💥',
'features': '✨',
'bug fixes': '🪲',
'performance improvements': '⚡',
'documentation': '📖',
'build system': '⚙️',
'refactoring': '♻️',
'testing': '✅',
'continuous integration': '🤖',
'chores': '🧹',
'code style': '🎨',
'unknown': '❗',
'release_note': '💡',
} %}
{#
MACRO: format a inline link reference in Markdown
#}{% macro format_link(link, label)
%}{{ "[%s](%s)" | format(label, link)
}}{% endmacro
%}
{#
MACRO: Capitalize the first letter of a string only
#}{% macro capitalize_first_letter_only(sentence)
%}{{ (sentence[0] | upper) ~ sentence[1:]
}}{% endmacro
%}
{#
MACRO: commit message links or PR/MR links of commit
#}{% macro commit_msg_links(commit)
%}{% if commit.error is undefined
%}{#
# # Initialize variables
#}{% set link_references = []
%}{% set summary_line = capitalize_first_letter_only(
commit.descriptions[0] | safe
)
%}{#
#}{% if commit.linked_merge_request != ""
%}{% set pr_num = commit.linked_merge_request
%}{# # TODO: breaking change v10, remove summary line replacers as PSR will do it for us
#}{% set summary_line = summary_line | replace("(pull request ", "(") | replace("(" ~ pr_num ~ ")", "") | trim
%}{#
# # Add PR references with a link to the PR
#}{% set _ = link_references.append(
format_link(pr_num | pull_request_url, "PR" ~ pr_num)
)
%}{% endif
%}{#
# # DEFAULT: Always include the commit hash as a link
#}{% set _ = link_references.append(
format_link(
commit.hexsha | commit_hash_url,
"`%s`" | format(commit.short_hash)
)
)
%}{#
#}{% set formatted_links = ""
%}{% if link_references | length > 0
%}{% set formatted_links = " (%s)" | format(link_references | join(", "))
%}{% endif
%}{#
# Return the modified summary_line
#}{{ summary_line ~ formatted_links
}}{% endif
%}{% endmacro
%}
{#
MACRO: format commit summary line
#}{% macro format_commit_summary_line(commit)
%}{# # Check for Parsing Error
#}{% if commit.error is undefined
%}{#
# # Add any message links to the commit summary line
#}{% set summary_line = commit_msg_links(commit)
%}{#
#}{% if commit.scope
%}{% set summary_line = "**%s**: %s" | format(commit.scope, summary_line)
%}{% endif
%}{#
# # Return the modified summary_line
#}{{ summary_line
}}{#
#}{% else
%}{# # Return the first line of the commit if there was a Parsing Error
#}{{ (commit.commit.message | string).split("\n", maxsplit=1)[0]
}}{% endif
%}{% endmacro
%}
{#
MACRO: format the breaking changes description by:
- Capitalizing the description
- Adding an optional scope prefix
#}{% macro format_breaking_changes_description(commit)
%}{% set ns = namespace(full_description="")
%}{#
#}{% if commit.error is undefined
%}{% for paragraph in commit.breaking_descriptions
%}{% if paragraph | trim | length > 0
%}{#
#}{% set paragraph_text = capitalize_first_letter_only(paragraph) | trim | safe
%}{#
#}{% set ns.full_description = [
ns.full_description,
paragraph_text
] | join("\n\n")
%}{#
#}{% endif
%}{% endfor
%}{#
#}{% set ns.full_description = ns.full_description | trim
%}{#
#}{% if commit.scope
%}{% set ns.full_description = "**%s**: %s" | format(
commit.scope, ns.full_description
)
%}{% endif
%}{% endif
%}{#
#}{{ ns.full_description
}}{% endmacro
%}
{#
MACRO: format the release notice by:
- Capitalizing the description
- Adding an optional scope prefix
#}{% macro format_release_notice(commit)
%}{% set ns = namespace(full_description="")
%}{#
#}{% if commit.error is undefined
%}{% for paragraph in commit.release_notices
%}{% if paragraph | trim | length > 0
%}{#
#}{% set paragraph_text = capitalize_first_letter_only(paragraph) | trim | safe
%}{#
#}{% set ns.full_description = [
ns.full_description,
paragraph_text
] | join("\n\n")
%}{#
#}{% endif
%}{% endfor
%}{#
#}{% set ns.full_description = ns.full_description | trim
%}{#
#}{% if commit.scope
%}{% set ns.full_description = "**%s**: %s" | format(
commit.scope, ns.full_description
)
%}{% endif
%}{% endif
%}{#
#}{{ ns.full_description
}}{% endmacro
%}
{#
MACRO: order commits alphabetically by scope and attribute
- Commits are sorted based on scope and then the attribute alphabetically
- Commits without scope are placed first and sorted alphabetically by the attribute
- parameter: ns (namespace) object with a commits list
- parameter: attr (string) attribute to sort by
- returns None but modifies the ns.commits list in place
#}{% macro order_commits_alphabetically_by_scope_and_attr(ns, attr)
%}{% set ordered_commits = []
%}{#
# # Eliminate any ParseError commits from input set
#}{% set filtered_commits = ns.commits | rejectattr("error", "defined") | list
%}{#
# # grab all commits with no scope and sort alphabetically by attr
#}{% for commit in filtered_commits | rejectattr("scope") | sort(attribute=attr)
%}{% set _ = ordered_commits.append(commit)
%}{% endfor
%}{#
# # grab all commits with a scope and sort alphabetically by the scope and then attr
#}{% for commit in filtered_commits | selectattr("scope") | sort(attribute=(['scope', attr] | join(",")))
%}{% set _ = ordered_commits.append(commit)
%}{% endfor
%}{#
# # Return the ordered commits
#}{% set ns.commits = ordered_commits
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized summaries and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_descriptions(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'descriptions.0')
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized breaking changes and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_brk_descriptions(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'breaking_descriptions.0')
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized release notices and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_release_notices(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'release_notices.0')
%}{% endmacro
%}
python-semantic-release-9.21.0/config/release-templates/.components/macros.rst.j2 0000664 0000000 0000000 00000022652 14756704352 0030043 0 ustar 00root root 0000000 0000000 {# TODO: move to configuration for user to modify #}
{% set section_heading_translations = {
'feat': 'features',
'fix': 'bug fixes',
'perf': 'performance improvements',
'docs': 'documentation',
'build': 'build system',
'refactor': 'refactoring',
'test': 'testing',
'ci': 'continuous integration',
'chore': 'chores',
'style': 'code style',
}
%}
{% set section_heading_order = section_heading_translations.values() %}
{% set emoji_map = {
'breaking': '💥',
'features': '✨',
'bug fixes': '🪲',
'performance improvements': '⚡',
'documentation': '📖',
'build system': '⚙️',
'refactoring': '♻️',
'testing': '✅',
'continuous integration': '🤖',
'chores': '🧹',
'code style': '🎨',
'unknown': '❗',
'release_note': '💡',
} %}
{#
MACRO: format a post-paragraph link reference in RST
#}{% macro format_link_reference(link, label)
%}{{ ".. _%s: %s" | format(label, link)
}}{% endmacro
%}
{#
MACRO: Capitalize the first letter of a string only
#}{% macro capitalize_first_letter_only(sentence)
%}{{ (sentence[0] | upper) ~ sentence[1:]
}}{% endmacro
%}
{#
MACRO: format commit summary line
#}{% macro format_commit_summary_line(commit)
%}{# # Check for Parsing Error
#}{% if commit.error is undefined
%}{#
# # Add any message links to the commit summary line
#}{% set summary_line = commit_msg_links(commit)
%}{#
#}{% if commit.scope
%}{% set summary_line = "**%s**: %s" | format(commit.scope, summary_line)
%}{% endif
%}{#
# # Return the modified summary_line
#}{{ summary_line
}}{#
#}{% else
%}{# # Return the first line of the commit if there was a Parsing Error
#}{{ (commit.commit.message | string).split("\n", maxsplit=1)[0]
}}{% endif
%}{% endmacro
%}
{#
MACRO: Create & return an non-inline RST link from a commit message
- Returns empty string if no PR/MR identifier is found
#}{% macro extract_pr_link_reference(commit)
%}{% if commit.error is undefined
%}{% set summary_line = commit.descriptions[0]
%}{#
#}{% if commit.linked_merge_request != ""
%}{# # Create a PR/MR reference url
#}{{ format_link_reference(
commit.linked_merge_request | pull_request_url,
"PR" ~ commit.linked_merge_request,
)
}}{% endif
%}{% endif
%}{% endmacro
%}
{#
MACRO: Extract issue references from a parsed commit object
- Stores the issue urls in the namespace object
#}{% macro extract_issue_link_references(ns, commit)
%}{% set issue_urls = []
%}{#
#}{% if commit.linked_issues is defined and commit.linked_issues | length > 0
%}{% for issue_num in commit.linked_issues
%}{# # Create an issue reference url
#}{% set _ = issue_urls.append(
format_link_reference(
issue_num | issue_url,
issue_num,
)
)
%}{% endfor
%}{% endif
%}{#
# # Store the issue urls in the namespace object
#}{% set ns.urls = issue_urls
%}{% endmacro
%}
{#
MACRO: formats a commit message for a non-inline RST link for a commit hash and/or PR/MR
#}{% macro commit_msg_links(commit)
%}{% if commit.error is undefined
%}{#
# # Initialize variables
#}{% set closes_statement = ""
%}{% set link_references = []
%}{% set summary_line = capitalize_first_letter_only(
commit.descriptions[0] | safe
)
%}{#
#}{% if commit.linked_issues | length > 0
%}{% set closes_statement = ", closes `%s`_" | format(
commit.linked_issues | join("`_, `")
)
%}{% endif
%}{#
#}{% if commit.linked_merge_request != ""
%}{# # TODO: breaking change v10, remove summary line replacers as PSR will do it for us
#}{% set summary_line = summary_line | replace("(pull request ", "(") | replace("(" ~ commit.linked_merge_request ~ ")", "") | trim
%}{#
# # Add PR references with a link to the PR
#}{% set _ = link_references.append("`PR%s`_" | format(commit.linked_merge_request))
%}{% endif
%}{#
# DEFAULT: Always include the commit hash as a link
#}{% set _ = link_references.append("`%s`_" | format(commit.short_hash))
%}{#
#}{% set formatted_links = ""
%}{% if link_references | length > 0
%}{% set formatted_links = " (%s)" | format(link_references | join(", "))
%}{% endif
%}{#
# Return the modified summary_line
#}{{ summary_line ~ closes_statement ~ formatted_links
}}{% endif
%}{% endmacro
%}
{# MACRO: generate a heading underline that matches the exact length of the header #}
{% macro generate_heading_underline(header, underline_char)
%}{% set header_underline = []
%}{% for _ in header
%}{% set __ = header_underline.append(underline_char)
%}{% endfor
%}{# # Print out the header underline
#}{{ header_underline | join
}}{% endmacro
%}
{#
MACRO: format the breaking changes description by:
- Capitalizing the description
- Adding an optional scope prefix
#}{% macro format_breaking_changes_description(commit)
%}{% set ns = namespace(full_description="")
%}{#
#}{% if commit.error is undefined
%}{% for paragraph in commit.breaking_descriptions
%}{% if paragraph | trim | length > 0
%}{#
#}{% set paragraph_text = capitalize_first_letter_only(paragraph) | trim | safe
%}{#
#}{% set ns.full_description = [
ns.full_description,
paragraph_text
] | join("\n\n")
%}{#
#}{% endif
%}{% endfor
%}{#
#}{% set ns.full_description = ns.full_description | trim
%}{#
#}{% if commit.scope
%}{% set ns.full_description = "**%s**: %s" | format(
commit.scope, ns.full_description
)
%}{% endif
%}{% endif
%}{#
#}{{ ns.full_description
}}{% endmacro
%}
{#
MACRO: format the release notice by:
- Capitalizing the description
- Adding an optional scope prefix
#}{% macro format_release_notice(commit)
%}{% set ns = namespace(full_description="")
%}{#
#}{% if commit.error is undefined
%}{% for paragraph in commit.release_notices
%}{% if paragraph | trim | length > 0
%}{#
#}{% set paragraph_text = capitalize_first_letter_only(paragraph) | trim | safe
%}{#
#}{% set ns.full_description = [
ns.full_description,
paragraph_text
] | join("\n\n")
%}{#
#}{% endif
%}{% endfor
%}{#
#}{% set ns.full_description = ns.full_description | trim
%}{#
#}{% if commit.scope
%}{% set ns.full_description = "**%s**: %s" | format(
commit.scope, ns.full_description
)
%}{% endif
%}{% endif
%}{#
#}{{ ns.full_description
}}{% endmacro
%}
{#
MACRO: order commits alphabetically by scope and attribute
- Commits are sorted based on scope and then the attribute alphabetically
- Commits without scope are placed first and sorted alphabetically by the attribute
- parameter: ns (namespace) object with a commits list
- parameter: attr (string) attribute to sort by
- returns None but modifies the ns.commits list in place
#}{% macro order_commits_alphabetically_by_scope_and_attr(ns, attr)
%}{% set ordered_commits = []
%}{#
# # Eliminate any ParseError commits from input set
#}{% set filtered_commits = ns.commits | rejectattr("error", "defined") | list
%}{#
# # grab all commits with no scope and sort alphabetically by attr
#}{% for commit in filtered_commits | rejectattr("scope") | sort(attribute=attr)
%}{% set _ = ordered_commits.append(commit)
%}{% endfor
%}{#
# # grab all commits with a scope and sort alphabetically by the scope and then attr
#}{% for commit in filtered_commits | selectattr("scope") | sort(attribute=(['scope', attr] | join(",")))
%}{% set _ = ordered_commits.append(commit)
%}{% endfor
%}{#
# # Return the ordered commits
#}{% set ns.commits = ordered_commits
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized summaries and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_descriptions(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'descriptions.0')
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized breaking changes and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_brk_descriptions(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'breaking_descriptions.0')
%}{% endmacro
%}
{#
MACRO: apply smart ordering of commits objects based on alphabetized release notices and then scopes
- Commits are sorted based on the commit type and the commit message
- Commits are grouped by the commit type
- parameter: ns (namespace) object with a commits list
- returns None but modifies the ns.commits list in place
#}{% macro apply_alphabetical_ordering_by_release_notices(ns)
%}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'release_notices.0')
%}{% endmacro
%}
python-semantic-release-9.21.0/config/release-templates/.components/unreleased_changes.rst.j2 0000664 0000000 0000000 00000000312 14756704352 0032363 0 ustar 00root root 0000000 0000000 {% if unreleased_commits | length > 0 %}
.. _changelog-unreleased:
Unreleased
==========
{% set commit_objects = unreleased_commits
%}{% include "changes.rst.j2"
-%}{{ "\n"
}}{% endif
%}
python-semantic-release-9.21.0/config/release-templates/.components/versioned_changes.md.j2 0000664 0000000 0000000 00000000753 14756704352 0032033 0 ustar 00root root 0000000 0000000 {# EXAMPLE:
## vX.X.X (YYYY-MMM-DD)
_This release is published under the MIT License._ # Release Notes Only
{{ change_sections }}
#}{{
"## %s (%s)\n" | format(
release.version.as_semver_tag(),
release.tagged_date.strftime("%Y-%m-%d")
)
}}{% if license_name is defined and license_name
%}{{ "\n_This release is published under the %s License._\n" | format(license_name)
}}{% endif
%}{#
#}{% set commit_objects = release["elements"]
%}{% include "changes.md.j2"
-%}
python-semantic-release-9.21.0/config/release-templates/.components/versioned_changes.rst.j2 0000664 0000000 0000000 00000001031 14756704352 0032231 0 ustar 00root root 0000000 0000000 {% from 'macros.rst.j2' import generate_heading_underline %}{#
.. _changelog-X.X.X:
vX.X.X (YYYY-MMM-DD)
====================
{{ change_sections }}
#}{% set version_header = "%s (%s)" | format(
release.version.as_semver_tag(),
release.tagged_date.strftime("%Y-%m-%d")
)
%}{#
#}{{
".. _changelog-%s:" | format(release.version.as_semver_tag()) }}
{{ version_header }}
{{ generate_heading_underline(version_header, "=") }}
{#
#}{% set commit_objects = release["elements"]
%}{% include "changes.rst.j2"
-%}
python-semantic-release-9.21.0/config/release-templates/.release_notes.md.j2 0000664 0000000 0000000 00000010053 14756704352 0027002 0 ustar 00root root 0000000 0000000 {% from ".components/macros.md.j2" import format_link
%}{# EXAMPLE:
## v1.0.0 (2020-01-01)
_This release is published under the MIT License._
### ✨ Features
- Add new feature ([PR#10](https://domain.com/namespace/repo/pull/10), [`abcdef0`](https://domain.com/namespace/repo/commit/HASH))
- **scope**: Add new feature ([`abcdef0`](https://domain.com/namespace/repo/commit/HASH))
### 🪲 Bug Fixes
- Fix bug ([PR#11](https://domain.com/namespace/repo/pull/11), [`abcdef1`](https://domain.com/namespace/repo/commit/HASH))
### 💥 Breaking Changes
- With the change _____, the change causes ___ effect. Ultimately, this section it is a more detailed description of the breaking change. With an optional scope prefix like the commit messages above.
- **scope**: this breaking change has a scope to identify the part of the code that this breaking change applies to for better context.
### 💡 Additional Release Information
- This is a release note that provides additional information about the release that is not a breaking change or a feature/bug fix.
- **scope**: this release note has a scope to identify the part of the code that this release note applies to for better context.
### ✅ Resolved Issues
- [#000](https://domain.com/namespace/repo/issues/000): _Title_
---
**Detailed Changes**: [vX.X.X...vX.X.X](https://domain.com/namespace/repo/compare/vX.X.X...vX.X.X)
---
**Installable artifacts are available from**:
- [PyPi Registry](https://pypi.org/project/package_name/x.x.x)
- [GitHub Release Assets](https://github.com/namespace/repo/releases/tag/vX.X.X)
#}{# # Set line width to 1000 to avoid wrapping as GitHub will handle it
#}{% set max_line_width = max_line_width | default(1000)
%}{% set hanging_indent = hanging_indent | default(2)
%}{% set license_name = license_name | default("", True)
%}{% set releases = context.history.released.values() | list
%}{% set curr_release_index = releases.index(release)
%}{#
#}{% if mask_initial_release and curr_release_index == releases | length - 1
%}{# # On a first release, generate our special message
#}{% include ".components/first_release.md.j2"
%}{% else
%}{# # Not the first release so generate notes normally
#}{% include ".components/versioned_changes.md.j2"
-%}{#
# # If there are any commits that resolve issues, list out the issues with links
#}{% set issue_resolving_commits = []
%}{% for commits in release["elements"].values()
%}{% set _ = issue_resolving_commits.extend(
commits | rejectattr("error", "defined") | selectattr("linked_issues")
)
%}{% endfor
%}{% if issue_resolving_commits | length > 0
%}{{
"\n### ✅ Resolved Issues\n"
}}{#
#}{% set issue_numbers = []
%}{% for linked_issues in issue_resolving_commits | map(attribute="linked_issues")
%}{% set _ = issue_numbers.extend(linked_issues)
%}{% endfor
%}{% for issue_num in issue_numbers | unique | sort_numerically
%}{{
"\n- %s: _Title_\n" | format(format_link(issue_num | issue_url, issue_num))
}}{#
#}{% endfor
%}{% endif
%}{#
#}{% set prev_release_index = curr_release_index + 1
%}{#
#}{% if 'compare_url' is filter and prev_release_index < releases | length
%}{% set prev_version_tag = releases[prev_release_index].version.as_tag()
%}{% set new_version_tag = release.version.as_tag()
%}{% set version_compare_url = prev_version_tag | compare_url(new_version_tag)
%}{% set detailed_changes_link = '[{}...{}]({})'.format(
prev_version_tag, new_version_tag, version_compare_url
)
%}{{ "\n"
}}{{ "---\n"
}}{{ "\n"
}}{{ "**Detailed Changes**: %s" | format(detailed_changes_link)
}}{{ "\n"
}}{% endif
%}{% endif
%}{#
#}
---
**Installable artifacts are available from**:
{{
"- %s" | format(
format_link(
repo_name | create_pypi_url(release.version | string),
"PyPi Registry",
)
)
}}
{{
"- %s" | format(
format_link(
release.version.as_tag() | create_release_url,
"{vcs_name} Release Assets" | format_w_official_vcs_name,
)
)
}}
python-semantic-release-9.21.0/config/release-templates/CHANGELOG.rst.j2 0000664 0000000 0000000 00000001350 14756704352 0025573 0 ustar 00root root 0000000 0000000 {#
This changelog template controls which changelog creation occurs
based on which mode is provided.
Modes:
- init: Initialize a full changelog from scratch
- update: Insert new version details where the placeholder exists in the current changelog
#}{% set this_file = "CHANGELOG.rst"
%}{% set insertion_flag = ctx.changelog_insertion_flag
%}{% set unreleased_commits = ctx.history.unreleased
%}{% set releases = ctx.history.released.values() | list
%}{#
#}{% if ctx.changelog_mode == "init"
%}{% include ".components/changelog_init.rst.j2"
%}{#
#}{% elif ctx.changelog_mode == "update"
%}{% set prev_changelog_file = this_file
%}{% include ".components/changelog_update.rst.j2"
%}{#
#}{% endif
%}
python-semantic-release-9.21.0/docs/ 0000775 0000000 0000000 00000000000 14756704352 0017310 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/docs/Makefile 0000664 0000000 0000000 00000015510 14756704352 0020752 0 ustar 00root root 0000000 0000000 # Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make ' where is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/python-semantic-release.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/python-semantic-release.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/python-semantic-release"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/python-semantic-release"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
livehtml:
sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
python-semantic-release-9.21.0/docs/algorithm.rst 0000664 0000000 0000000 00000022670 14756704352 0022037 0 ustar 00root root 0000000 0000000 .. _algorithm:
Python Semantic Release's Version Bumping Algorithm
===================================================
Below is a technical description of the algorithm which Python Semantic Release
uses to calculate a new version for a project.
.. _algorithm-assumptions:
Assumptions
~~~~~~~~~~~
* At runtime, we are in a Git repository with HEAD referring to a commit on
some branch of the repository (i.e. not in detached HEAD state).
* We know in advance whether we want to produce a prerelease or not (based on
the configuration and command-line flags).
* We can parse the tags of the repository into semantic versions, as we are given
the format that those Git tags should follow via configuration, but cannot
cherry-pick only tags that apply to commits on specific branches. We must parse
all tags in order to ensure we have parsed any that might apply to commits in
this branch's history.
* If we can identify a commit as a ``merge-base`` between our HEAD commit and one
or more tags, then that merge-base should be unique.
* We know ahead of time what ``prerelease_token`` to use for prereleases - e.g.
``rc``.
* We know ahead of time whether ``major`` changes introduced by commits
should cause the new version to remain on ``0.y.z`` if the project is already
on a ``0.`` version - see :ref:`major_on_zero `.
.. _algorithm-implementation:
Implementation
~~~~~~~~~~~~~~
1. Parse all the Git tags of the repository into semantic versions, and **sort**
in descending (most recent first) order according to `semver precedence`_.
Ignore any tags which do not correspond to valid semantic versions according
to ``tag_format``.
2. Find the ``merge-base`` of HEAD and the latest tag according to the sort above.
Call this commit ``M``.
If there are no tags in the repo's history, we set ``M=HEAD``.
3. Find the latest non-prerelease version whose tag references a commit that is
an ancestor of ``M``. We do this via a breadth-first search through the commit
lineage, starting against ``M``, and for each tag checking if the tag
corresponds to that commit. We break from the search when we find such a tag.
If no such tag is found, see 4a).
Else, suppose that tag corresponds to a commit ``L`` - goto 4b).
4.
a. If no commit corresponding to the last non-prerelease version is found,
the entire history of the repository is considered. We parse every commit
that is an ancestor of HEAD to determine the type of change introduced -
either ``major``, ``minor``, ``patch``, ``prerelease_revision`` or
``no_release``. We store this levels in a ``set`` as we only require
the distinct types of change that were introduced.
b. However, if we found a commit ``L`` which is the commit against which the
last non-prerelease was tagged, then we parse only the commits from HEAD
as far back as ``L``, to understand what changes have been introduced
since the previous non-prerelease. We store these levels - either
``major``, ``minor``, ``patch``, ``prerelease_revision``, or
``no_release``, in a set, as we only require the distinct types of change
that were introduced.
c. We look for tags that correspond to each commit during this process, to
identify the latest pre-release that was made within HEAD's ancestry.
5. If there have been no changes since the last non-prerelease, or all commits
since that release result in a ``no_release`` type according to the commit
parser, then we **terminate the algorithm.**
6. If we have not exited by this point, we know the following information:
* The latest version, by `semver precedence`_, within the whole repository.
Call this ``LV``. This might not be within the ancestry of HEAD.
* The latest version, prerelease or non-prerelease, within the whole repository.
Call this ``LVH``. This might not be within the ancestry of HEAD.
This may be the same as ``LV``.
* The latest non-prerelease version within the ancestry of HEAD. Call this
``LVHF``. This may be the same as ``LVH``.
* The most significant type of change introduced by the commits since the
previous full release. Call this ``level``
* Whether or not we wish to produce a prerelease from this version increment.
Call this a boolean flag, ``prerelease``. (Assumption)
* Whether or not to increment the major digit if a major change is introduced
against an existing ``0.`` version. Call this ``major_on_zero``, a boolean
flag. (Assumption)
Using this information, the new version is decided according to the following
criteria:
a. If ``LV`` has a major digit of ``0``, ``major_on_zero`` is ``False`` and
``level`` is ``major``, reduce ``level`` to ``minor``.
b. If ``prerelease=True``, then
i. Diff ``LV`` with ``LVHF``, to understand if the ``major``, ``minor`` or
``patch`` digits have changed. For example, diffing ``1.2.1`` and
``1.2.0`` is a ``patch`` diff, while diffing ``2.1.1`` and ``1.17.2`` is
a ``major`` diff. Call this ``DIFF``
ii. If ``DIFF`` is less semantically significant than ``level``, for example
if ``DIFF=patch`` and ``level=minor``, then
1. Increment the digit of ``LVF`` corresponding to ``level``, for example
the minor digit if ``level=minor``, setting all less significant
digits to zero.
2. Add ``prerelease_token`` as a suffix result of 1., together with a
prerelease revision number of ``1``. Return this new version and
**terminate the algorithm.**
Thus if ``DIFF=patch``, ``level=minor``, ``prerelease=True``,
``prerelease_token="rc"``, and ``LVF=1.1.1``,
then the version returned by the algorithm is ``1.2.0-rc.1``.
iii. If ``DIFF`` is semantically less significant than or equally
significant to ``level``, then this means that the significance
of change introduced by ``level`` is already reflected in a
prerelease version that has been created since the last full release.
For example, if ``LVHF=1.1.1``, ``LV=1.2.0-rc.1`` and ``level=minor``.
In this case we:
1. If the prerelease token of ``LV`` is different from
``prerelease_token``, take the major, minor and patch digits
of ``LV`` and construct a prerelease version using our given
``prerelease_token`` and a prerelease revision of ``1``. We
then return this version and **terminate the algorithm.**
For example, if ``LV=1.2.0-rc.1`` and ``prerelease_token=alpha``,
we return ``1.2.0-alpha.1``.
2. If the prerelease token of ``LV`` is the same as ``prerelease_token``,
we increment the revision number of ``LV``, return this version, and
**terminate the algorithm.**
For example, if ``LV=1.2.0-rc.1`` and ``prerelease_token=rc``,
we return ``1.2.0-rc.2``.
c. If ``prerelease=False``, then
i. If ``LV`` is not a prerelease, then we increment the digit of ``LV``
corresponding to ``level``, for example the minor digit if ``level=minor``,
setting all less significant digits to zero.
We return the result of this and **terminate the algorithm**.
ii. If ``LV`` is a prerelease, then:
1. Diff ``LV`` with ``LVHF``, to understand if the ``major``, ``minor`` or
``patch`` digits have changed. Call this ``DIFF``
2. If ``DIFF`` is less semantically significant than ``level``, then
i. Increment the digit of ``LV`` corresponding to ``level``, for example
the minor digit if ``level=minor``, setting all less significant
digits to zero.
ii. Remove the prerelease token and revision number from the result of i.,
("Finalize" the result of i.) return the result and **terminate the
algorithm.**
For example, if ``LV=1.2.2-alpha.1`` and ``level=minor``, we return
``1.3.0``.
3. If ``DIFF`` is semantically less significant than or equally
significant to ``level``, then we finalize ``LV``, return the
result and **terminate the algorithm**.
.. _semver precedence: https://semver.org/#spec-item-11
.. _algorithm-complexity:
Complexity
~~~~~~~~~~
**Space:**
A list of parsed tags takes ``O(number of tags)`` in space. Parsing each commit during
the breadth-first search between ``merge-base`` and the latest tag in the ancestry
of HEAD takes at worst ``O(number of commits)`` in space to track visited commits.
Therefore worst-case space complexity will be linear in the number of commits in the
repo, unless the number of tags significantly exceeds the number of commits
(in which case it will be linear in the number of tags).
**Time:**
Assuming using regular expression parsing of each tag is a constant-time operation,
then the following steps contribute to the time complexity of the algorithm:
* Parsing each tag - ``O(number of tags)``
* Sorting tags by `semver precedence`_ -
``O(number of tags * log(number of tags))``
* Finding the merge-base of HEAD and the latest release tag -
``O(number of commits)`` (worst case)
* Parsing each commit and checking each tag against each commit -
``O(number of commits) + O(number of tags * number of commits)``
(worst case)
Overall, assuming that the number of tags is less than or equal to the number
of commits in the repository, this would lead to a worst-case time complexity
that's quadratic in the number of commits in the repo.
python-semantic-release-9.21.0/docs/automatic-releases/ 0000775 0000000 0000000 00000000000 14756704352 0023077 5 ustar 00root root 0000000 0000000 python-semantic-release-9.21.0/docs/automatic-releases/cronjobs.rst 0000664 0000000 0000000 00000002404 14756704352 0025450 0 ustar 00root root 0000000 0000000 .. _cronjobs:
Publish with cronjobs
~~~~~~~~~~~~~~~~~~~~~
This is for you if for some reason you cannot publish from your CI or you would like releases to
drop at a certain interval. Before you start, answer this: Are you sure you do not want a CI to
release for you? (high version numbers are not a bad thing).
The guide below is for setting up scheduled publishing on a server. It requires that the user
that runs the cronjob has push access to the repository and upload access to an artifact repository.
1. Create a virtualenv::
virtualenv semantic_release -p `which python3`
2. Install python-semantic-release::
pip install python-semantic-release
3. Clone the repositories you want to have scheduled publishing.
3. Put the following in ``publish``::
VENV=semantic_release/bin
$VENV/pip install -U pip python-semantic-release > /dev/null
publish() {
cd $1
git stash -u # ensures that there is no untracked files in the directory
git fetch && git reset --hard origin/master
$VENV/semantic-release version && $VENV/semantic-release publish
cd ..
}
publish
publish
4. Add cronjob::
/bin/bash -c "cd && source semantic_release/bin/activate && ./publish 2>&1 >> releases.log"
python-semantic-release-9.21.0/docs/automatic-releases/github-actions.rst 0000664 0000000 0000000 00000061042 14756704352 0026554 0 ustar 00root root 0000000 0000000 .. _gh_actions:
GitHub Actions
==============
There are two official GitHub Actions for Python Semantic Release:
1. :ref:`python-semantic-release/python-semantic-release@TAG `
This is the main action that runs the :ref:`version ` CLI
command. It is used to (1) determine the next version number, (2) stamp the
version number, (3) run the build command, (4) build the changelog, (5) commit
the changes, (6) tag the commit, (7) publish the commit & tag and lastly
(8) create a GitHub release. For more information review the
:ref:`version command documentation ` and see
:ref:`below ` for the Action configuration options.
2. :ref:`python-semantic-release/publish-action@TAG `
This action is used to execute the :ref:`publish ` CLI command.
It is used to upload files, such as distribution artifacts and other assets,
to a GitHub release.
.. note::
These GitHub Actions are only simplified wrappers around the
python-semantic-release CLI. Ultimately, they download and install the
published package from PyPI so if you find that you are trying to do something
more advanced or less common, you may need to install and use the CLI directly.
.. _gh_actions-psr:
Python Semantic Release Action
''''''''''''''''''''''''''''''
The official `Python Semantic Release GitHub Action`_ is a `GitHub Docker Action`_,
which means at the beginning of the job it will build a Docker image that contains
the Python Semantic Release package and its dependencies. It will then run the
job step inside the Docker Container. This is done to ensure that the environment
is consistent across all GitHub Runners regardless of platform. With this choice,
comes some limitations of non-configurable options like a pre-defined python
version, lack of installed build tools, and an inability to utilize caching.
The primary benefit of using the GitHub Action is that it is easy to set up and
use for most projects. We handle a lot of the git configuration under the hood,
so you don't have to handle it yourself. There are a plenty of customization
options available which are detailed individually below.
Most importantly your project's configuration file will be used as normal, as
your project will be mounted into the container for the action to use.
.. _Python Semantic Release GitHub Action: https://github.com/marketplace/actions/python-semantic-release
.. _GitHub Docker Action: https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action
.. seealso::
`action.yml`__: the code definition of the action
__ https://github.com/python-semantic-release/python-semantic-release/blob/master/action.yml
.. _gh_actions-psr-inputs:
Inputs
------
GitHub Action inputs are used for select configuration and provide the necessary
information to execute the action. The inputs are passed to the action using the
``with`` keyword in the workflow file. Many inputs will mirror the command line
options available in the :ref:`version ` command. This section
outlines each supported input and its purpose.
----
.. _gh_actions-psr-inputs-build:
``build``
"""""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should execute the build command or not. This option is
equivalent to adding the command line switch ``--skip-build`` (when ``false``) to
the :ref:`version ` command. If set to ``true``, no command line switch
is passed and the default behavior of the :ref:`version ` is used.
**Required:** ``false``
.. note::
If not set or set to ``true``, the default behavior is defined by the
:ref:`version ` command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-skip_build` option for the :ref:`version `
command.
----
.. _gh_actions-psr-inputs-build_metadata:
``build_metadata``
""""""""""""""""""
**Type:** ``string``
Explicitly set the build metadata of the version. This is equivalent to running the command:
.. code:: shell
semantic-release version --build-metadata
**Required:** ``false``
.. seealso::
- :ref:`cmd-version-option-build-metadata` option for the :ref:`version ` command
----
.. _gh_actions-psr-inputs-changelog:
``changelog``
"""""""""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should generate a changelog or not. This option is
equivalent to adding either ``--changelog`` (on ``true``) or ``--no-changelog``
(on ``false``) to the :ref:`version ` command.
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-changelog` options for the :ref:`version `
command
----
.. _gh_actions-psr-inputs-commit:
``commit``
""""""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should commit any changes to the local repository. Changes
include the version stamps, changelog, and any other files that are modified and added
to the index during the build command. This option is equivalent to adding either
``--commit`` (on ``true``) or ``--no-commit`` (on ``false``) to the
:ref:`version ` command.
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-commit` options for the :ref:`version ` command
----
.. _gh_actions-psr-inputs-directory:
``directory``
"""""""""""""
If the project is not at the root of the repository (like in monorepos), you
can specify a sub-directory to change into before running semantic-release.
**Required:** ``false``
**Default:** ``.``
----
.. _gh_actions-psr-inputs-force:
``force``
"""""""""
**Type:** ``Literal["prerelease", "patch", "minor", "major"]``
Force the next version to be a specific bump type. This is equivalent to running
the command:
.. code:: shell
semantic-release version --
# Ex: force a patch level version bump
semantic-release version --patch
**Required:** ``false``
.. seealso::
- :ref:`cmd-version-option-force-level` options for the :ref:`version ` command
----
.. _gh_actions-psr-inputs-git_committer_email:
``git_committer_email``
"""""""""""""""""""""""
The email of the account used to commit. If customized, it must be associated
with the provided token.
**Required:** ``false``
----
.. _gh_actions-psr-inputs-git_committer_name:
``git_committer_name``
""""""""""""""""""""""
The name of the account used to commit. If customized, it must be associated
with the provided token.
**Required:** ``false``
----
.. _gh_actions-psr-inputs-github_token:
``github_token``
""""""""""""""""
The GitHub Token is essential for access to your GitHub repository to allow the
push of commits & tags as well as to create a release. Not only do you need to
provide the token as an input but you also need to ensure that the token has the
correct permissions.
The token should have the following `permissions`_:
* id-token: write
* contents: write
**Required:** ``true``
.. _permissions: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idpermissions
----
.. _gh_actions-psr-inputs-prerelease:
``prerelease``
""""""""""""""
Force the version to be a prerelease version when set to ``true``. This is equivalent
to running the command:
.. code:: shell
semantic-release version --as-prerelease
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-as-prerelease` option for the :ref:`version `
command
----
.. _gh_actions-psr-inputs-prerelease_token:
``prerelease_token``
""""""""""""""""""""
Override any prerelease token in the configuration file with this value, if it is
a pre-release. This will override the matching release branch configuration's
``prerelease_token`` value. If you always want it to be a prerelease then you must
also set the :ref:`gh_actions-psr-inputs-prerelease` input to ``true``.
This option is equivalent to running the command:
.. code:: shell
semantic-release version --prerelease-token
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-prerelease-token` option for the :ref:`version `
command
----
.. _gh_actions-psr-inputs-push:
``push``
""""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should push any commits or tags from the local repository
to the remote repository. This option is equivalent to adding either ``--push`` (on
``true``) or ``--no-push`` (on ``false``) to the :ref:`version ` command.
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-push` options for the :ref:`version ` command
----
.. _gh_actions-psr-inputs-root_options:
``root_options``
""""""""""""""""
Additional options for the main ``semantic-release`` command, which will come
before the :ref:`version ` subcommand.
**Example**
.. code:: yaml
- uses: python-semantic-release/python-semantic-release@v9.21.0
with:
root_options: "-vv --noop"
This configuration would cause the command to be
``semantic-release -vv --noop version``, which would run the version command
verbosely but in no-operation mode.
**Required:** ``false``
**Default:** ``-v``
.. seealso::
- :ref:`Options ` for the :ref:`semantic-release ` command
----
.. _gh_actions-psr-inputs-ssh_public_signing_key:
``ssh_public_signing_key``
""""""""""""""""""""""""""
The public key associated with the private key used in signing a commit and tag.
**Required:** ``false``
----
.. _gh_actions-psr-inputs-ssh_private_signing_key:
``ssh_private_signing_key``
"""""""""""""""""""""""""""
The private key used to sign a commit and tag.
**Required:** ``false``
----
.. _gh_actions-psr-inputs-tag:
``tag``
"""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should create a version tag in the local repository. This
option is equivalent to adding either ``--tag`` (on ``true``) or ``--no-tag`` (on
``false``) to the :ref:`version ` command.
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-tag` options for the :ref:`version ` command
----
.. _gh_actions-psr-inputs-vcs_release:
``vcs_release``
"""""""""""""""
**Type:** ``Literal["true", "false"]``
Override whether the action should create a release on the VCS. This option is
equivalent to adding either ``--vcs-release`` (on ``true``) or ``--no-vcs-release``
(on ``false``) to the :ref:`version ` command.
**Required:** ``false``
.. note::
If not set, the default behavior is defined by the :ref:`version `
command and any user :ref:`configurations `.
.. seealso::
- :ref:`cmd-version-option-vcs-release` options for the :ref:`version `
command
----
.. _gh_actions-psr-outputs:
Outputs
-------
The Python Semantic Release Action also provides outputs that can be used in subsequent
steps of the workflow. These outputs are used to provide information about the release
and any actions that were taken.
----
.. _gh_actions-psr-outputs-is_prerelease:
``is_prerelease``
"""""""""""""""""
**Type:** ``Literal["true", "false"]``
A boolean value indicating whether the released version is a prerelease.
----
.. _gh_actions-psr-outputs-released:
``released``
""""""""""""
**Type:** ``Literal["true", "false"]``
A boolean value indicating whether a release was made.
----
.. _gh_actions-psr-outputs-version:
``version``
"""""""""""
**Type:** ``string``
The newly released SemVer version string if one was made,
otherwise the current version.
Example: ``1.2.3``
----
.. _gh_actions-psr-outputs-tag:
``tag``
"""""""
**Type:** ``string``
The Git tag corresponding to the ``version`` output but in
the tag format dictated by your configuration.
Example: ``v1.2.3``
----
.. _gh_actions-publish:
Python Semantic Release Publish Action
''''''''''''''''''''''''''''''''''''''
The official `Python Semantic Release Publish Action`_ is a `GitHub Docker Action`_, which
means at the beginning of the job it will build a Docker image that contains the Python
Semantic Release package and its dependencies. It will then run the job step inside the
Docker Container. This is done to ensure that the environment is consistent across all
GitHub Runners regardless of platform. With this choice, comes some limitations of
non-configurable options like a pre-defined python version, lack of additional 3rd party
tools, and an inability to utilize caching.
The primary benefit of using the GitHub Action is that it is easy to set up and use for
most projects. We handle some additional configuration under the hood, so you don't have
to handle it yourself. We do however provide a few customization options which are detailed
individually below.
Most importantly your project's configuration file will be used as normal, as your project
will be mounted into the container for the action to use.
If you have issues with the action, please open an issue on the
`python-semantic-release/publish-action`_ repository.
.. _Python Semantic Release Publish Action: https://github.com/marketplace/actions/python-semantic-release-publish
.. seealso::
- `action.yml`__: the code definition for the publish action
__ https://github.com/python-semantic-release/publish-action/blob/main/action.yml
.. _gh_actions-publish-inputs:
Inputs
------
GitHub Action inputs are used for select configuration and provide the necessary
information to execute the action. The inputs are passed to the action using the
``with`` keyword in the workflow file. Many inputs will mirror the command line
options available in the :ref:`publish ` command and others will be
specific to adjustment of the action environment. This section outlines each
supported input and its purpose.
----
.. _gh_actions-publish-inputs-directory:
``directory``
"""""""""""""
If the project is not at the root of the repository (like in monorepos), you
can specify a sub-directory to change into before running semantic-release.
**Required:** ``false``
**Default:** ``.``
----
.. _gh_actions-publish-inputs-github_token:
``github_token``
""""""""""""""""
The GitHub Token is essential for access to your GitHub repository to allow the
publish of assets to a release. Not only do you need to provide the token as an
input but you also need to ensure that the token has the correct permissions.
The token should have the following `permissions`_:
* ``contents: write``: Required for modifying a GitHub Release
**Required:** ``true``
.. _permissions: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idpermissions
----
.. _gh_actions-publish-inputs-root_options:
``root_options``
""""""""""""""""
Additional options for the main ``semantic-release`` command, which will come
before the :ref:`publish ` subcommand.
**Example**
.. code:: yaml
- uses: python-semantic-release/publish-action@v9.21.0
with:
root_options: "-vv --noop"
This configuration would cause the command to be
``semantic-release -vv --noop publish``, which would run the publish command
verbosely but in no-operation mode.
**Required:** ``false``
**Default:** ``-v``
.. seealso::
- :ref:`Options ` for the :ref:`semantic-release `
command
----
.. _gh_actions-publish-inputs-tag:
``tag``
"""""""
**Type:** ``string``
The tag corresponding to the GitHub Release that the artifacts should be published
to. This option is equivalent to running the command:
.. code:: shell
semantic-release publish --tag
Python Semantic Release will automatically determine the latest release if no
``--tag`` option is provided.
**Required:** ``false``
.. seealso::
- :ref:`cmd-publish-option-tag` option for the :ref:`publish ` command
----
.. _gh_actions-publish-outputs:
Outputs
-------
There are no outputs provided by the Python Semantic Release Publish Action at this time.
.. note::
If you would like outputs to be provided by this action, please open an issue
on the `python-semantic-release/publish-action`_ repository.
.. _python-semantic-release/publish-action: https://github.com/python-semantic-release/publish-action/issues
----
.. _gh_actions-examples:
Examples
''''''''
Common Workflow Example
-----------------------
The following is a simple common workflow example that uses both the Python Semantic Release Action
and the Python Semantic Release Publish Action. This workflow will run on every push to the
``main`` branch and will create a new release upon a successful version determination. If a
version is released, the workflow will then publish the package to PyPI and upload the package
to the GitHub Release Assets as well.
.. code:: yaml
name: Continuous Delivery
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-release-${{ github.ref_name }}
cancel-in-progress: false
permissions:
id-token: write
contents: write
steps:
# Note: We checkout the repository at the branch that triggered the workflow
# with the entire history to ensure to match PSR's release branch detection
# and history evaluation.
# However, we forcefully reset the branch to the workflow sha because it is
# possible that the branch was updated while the workflow was running. This
# prevents accidentally releasing un-evaluated changes.
- name: Setup | Checkout Repository on Release Branch
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
fetch-depth: 0
- name: Setup | Force release branch to be at workflow sha
run: |
git reset --hard ${{ github.sha }}
- name: Evaluate | Verify upstream has NOT changed
# Last chance to abort before causing an error as another PR/push was applied to
# the upstream branch while this workflow was running. This is important
# because we are committing a version change (--commit). You may omit this step
# if you have 'commit: false' in your configuration.
#
# You may consider moving this to a repo script and call it from this step instead
# of writing it in-line.
shell: bash
run: |
set +o pipefail
UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | cut -d' ' -f2 | grep -E '\.{3}' | cut -d'.' -f4)"
printf '%s\n' "Upstream branch name: $UPSTREAM_BRANCH_NAME"
set -o pipefail
if [ -z "$UPSTREAM_BRANCH_NAME" ]; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch name!"
exit 1
fi
git fetch "${UPSTREAM_BRANCH_NAME%%/*}"
if ! UPSTREAM_SHA="$(git rev-parse "$UPSTREAM_BRANCH_NAME")"; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch sha!"
exit 1
fi
HEAD_SHA="$(git rev-parse HEAD)"
if [ "$HEAD_SHA" != "$UPSTREAM_SHA" ]; then
printf >&2 '%s\n' "[HEAD SHA] $HEAD_SHA != $UPSTREAM_SHA [UPSTREAM SHA]"
printf >&2 '%s\n' "::error::Upstream has changed, aborting release..."
exit 1
fi
printf '%s\n' "Verified upstream branch has not changed, continuing with release..."
- name: Action | Semantic Version Release
id: release
# Adjust tag with desired version if applicable.
uses: python-semantic-release/python-semantic-release@v9.21.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
git_committer_name: "github-actions"
git_committer_email: "actions@users.noreply.github.com"
- name: Publish | Upload package to PyPI
uses: pypa/gh-action-pypi-publish@v1
if: steps.release.outputs.released == 'true'
- name: Publish | Upload to GitHub Release Assets
uses: python-semantic-release/publish-action@v9.21.0
if: steps.release.outputs.released == 'true'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.release.outputs.tag }}
.. important::
The `concurrency`_ directive is used on the job to prevent race conditions of more than
one release job in the case if there are multiple pushes to ``main`` in a short period
of time.
Secondly the *Evaluate | Verify upstream has NOT changed* step is used to ensure that the
upstream branch has not changed while the workflow was running. This is important because
we are committing a version change (``commit: true``) and there might be a push collision
that would cause undesired behavior. Review Issue `#1201`_ for more detailed information.
.. warning::
You must set ``fetch-depth`` to 0 when using ``actions/checkout@v4``, since
Python Semantic Release needs access to the full history to build a changelog
and at least the latest tags to determine the next version.
.. warning::
The ``GITHUB_TOKEN`` secret is automatically configured by GitHub, with the
same permissions role as the user who triggered the workflow run. This causes
a problem if your default branch is protected to specific users.
You can work around this by storing an administrator's Personal Access Token
as a separate secret and using that instead of ``GITHUB_TOKEN``. In this
case, you will also need to pass the new token to ``actions/checkout`` (as
the ``token`` input) in order to gain push access.
.. _#1201: https://github.com/python-semantic-release/python-semantic-release/issues/1201
.. _concurrency: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idconcurrency
Version Overrides Example
-------------------------
In the case where you want to provide multiple command line options to the
:ref:`version ` command, you provide them through the ``with``
directive in the workflow file. In this example, we want to force a patch
version bump, not produce a changelog, and provide specialized build
metadata. As a regular CLI command, this would look like:
.. code:: shell
semantic-release version --patch --no-changelog --build-metadata abc123
The equivalent GitHub Action configuration would be:
.. code:: yaml
# snippet
- name: Action | Semantic Version Release
# Adjust tag with desired version if applicable.
uses: python-semantic-release/python-semantic-release@v9.21.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
force: patch
changelog: false
build_metadata: abc123
.. _gh_actions-monorepo:
Actions with Monorepos
''''''''''''''''''''''
While ``python-semantic-release`` does **NOT** have full monorepo support, if you
have multiple projects stored within a single repository (or your project is
not at the root of the repository), you can pass the
:ref:`directory ` input to the action to change
directory before semantic-release execution.
For multiple packages, you would need to run the action multiple times, to release
each project. The following example demonstrates how to release two projects in
a monorepo.
The ``directory`` input directive is also available for the Python Semantic Release
Publish Action.
.. code:: yaml
- name: Release Project 1
uses: python-semantic-release/python-semantic-release@v9.21.0
with:
directory: ./project1
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Release Project 2
uses: python-semantic-release/python-semantic-release@v9.21.0
with:
directory: ./project2
github_token: ${{ secrets.GITHUB_TOKEN }}
python-semantic-release-9.21.0/docs/automatic-releases/index.rst 0000664 0000000 0000000 00000000650 14756704352 0024741 0 ustar 00root root 0000000 0000000 .. _automatic:
Automatic Releases
------------------
The key point with using this package is to automate your releases and stop worrying about
version numbers. Different approaches to automatic releases and publishing with the help of
this package can be found below. Using a CI is the recommended approach.
.. _automatic-guides:
Guides
^^^^^^
.. toctree::
:maxdepth: 2
travis
github-actions
cronjobs
python-semantic-release-9.21.0/docs/automatic-releases/travis.rst 0000664 0000000 0000000 00000004334 14756704352 0025145 0 ustar 00root root 0000000 0000000 Setting up python-semantic-release on Travis CI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This guide expects you to have activated the repository on Travis CI.
If this is not the case, please refer to `Travis documentation`_ on how to do that.
1. Add python-semantic-release settings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
See :doc:`../configuration` for details on how to configure Python Semantic Release.
Make sure that at least you have set :ref:`config-version_variables` before continuing.
2. Add environment variables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You will need to set up an environment variable in Travis. An easy way to do that
is to go to the settings page for your package and add it there. Make sure that the
secret toggle is set correctly.
You need to set the :ref:`GH_TOKEN ` environment
variable with a personal access token for Github. It will need either ``repo`` or
``public_repo`` scope depending on whether the repository is private or public.
More information on how to set environment variables can be found on
`Travis documentation on environment variables`_.
3. Add travis configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following should be added to your ``.travis.yml`` file.
.. code-block:: yaml
after_success:
- git config --global user.name "semantic-release (via TravisCI)"
- git config --global user.email "semantic-release@travis"
- pip install python-semantic-release
- semantic-release version && semantic-release publish
The first line tells Travis that we want to run the listed tasks after a successful build.
The two first lines in after_success will configure git so that python-semantic-release
will be able to commit on Travis. The third installs the latest version of python-semantic-release.
The last will run the publish command, which will publish a new version if the changes
indicate that one is due.
4. Push some changes
^^^^^^^^^^^^^^^^^^^^
You are now ready to release automatically on Travis CI on every change to your master branch.
Happy coding!
.. _Travis documentation: https://docs.travis-ci.com/
.. _Travis documentation on environment variables: https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings
python-semantic-release-9.21.0/docs/changelog_templates.rst 0000664 0000000 0000000 00000132440 14756704352 0024053 0 ustar 00root root 0000000 0000000 .. _changelog-templates:
Version Change Reports
======================
When using the :ref:`cmd-version` and :ref:`cmd-changelog` commands, Python
Semantic Release (PSR) will generate a changelog and release notes for your
project automatically in the default configuration. The changelog is rendered
using the `Jinja`_ template engine, and in the default configuration, PSR will
use a built-in template file to render the changelog at the file location
defined by the :ref:`changelog_file ` setting.
Through the use of the templating engine & the
:ref:`template_dir ` configuration setting, you
can customize the appearance of your changelog and release notes content. You
may also generate a set of files using your custom template directory and the
templates will be rendered relative to the root of your repository.
Because PSR uses a third-party library, `Jinja`_, as its template engine, we do
not include all the syntax within our documentation but rather you should refer
to the `Template Designer Documentation`_ for guidance on how to customize the
appearance of your release files. If you would like to customize the template
environment itself, then certain options are available to you via
:ref:`changelog environment configuration `.
If you do not want to use the changelog generation features, you can disable
changelog generation entirely during the :ref:`cmd-version` command by providing
the :ref:`--no-changelog ` command-line option.
.. _Jinja: https://jinja.palletsprojects.com/en/3.1.x/
.. _Template Designer Documentation: https://jinja.palletsprojects.com/en/3.1.x/templates/
.. _changelog-templates-default_changelog:
Using the Default Changelog
---------------------------
If you don't provide any custom templates in the
:ref:`changelog.template_dir `, the default changelog
templates will be used to render the changelog.
PSR provides two default changelog output formats:
1. Markdown (``.md``), *default*
2. reStructuredText (``.rst``), *available since v9.11.0*
Both formats are kept in sync with one another to display the equivalent information
in the respective format. The default changelog template is located in the
``data/templates/`` directory within the PSR package. The templates are written in
modular style (ie. multiple files) and during the render process are ultimately
combined together to render the final changelog output. The rendering start point
is the ``CHANGELOG.{FORMAT_EXT}.j2`` underneath the respective format directory.
PSR provides a few configuration options to customize the default changelog output
and can be found under the
:ref:`changelog.default_templates ` section
as well as some common configuration options under the :ref:`config-changelog`
section.
To toggle the output format, you only need to set the
:ref:`changelog.default_templates.changelog_file `
file name to include the desired file extension (``.md`` or ``.rst``). If you would
like a different extension for the resulting changelog file, but would like
to still have control over the template format, you can set the
:ref:`changelog.default_templates.output_format `
configuration setting to the desired format.
A common and *highly-recommended* configuration option is the
:ref:`changelog.exclude_commit_patterns `
setting which allows the user to define regular expressions that will exclude commits
from the changelog output. This is useful to filter out change messages that are not
relevant to your external consumers (ex. ``ci`` and ``test`` in the conventional commit
standard) and only include the important changes that impact the consumer of your
software.
Another important configuration option is the :ref:`changelog.mode `
setting which determines the behavior of the changelog generation. There are 2
modes that available that described in detail below.
1. :ref:`changelog-templates-default_changelog-init` when ``mode = "init"``.
2. :ref:`changelog-templates-default_changelog-update` when ``mode = "update"``.
.. _changelog-templates-default_changelog-init:
Initialization Mode
^^^^^^^^^^^^^^^^^^^
When using the initialization mode, the changelog file will be created from
scratch using the entire git history and **overwrite** any existing changelog
file. This is the default behavior introduced in ``v8.0.0``. This is useful
when you are trying to convert over to Python Semantic Release for the first
time or when you want to automatically update the entire format of your
changelog file.
.. warning::
If you have an existing changelog in the location you have configured with
the :ref:`changelog.changelog_file ` setting, PSR
will overwrite the contents of this file on each release.
Please make sure to refer to :ref:`changelog-templates-migrating-existing-changelog`.
.. _changelog-templates-default_changelog-update:
Update Mode
^^^^^^^^^^^^
.. note::
Introduced in ``v9.10.0``.
When using the update mode, only the change information from the last release will
be prepended into the existing changelog file (defined by the
:ref:`changelog.changelog_file `). This mimics the
behavior that was used in versions prior to ``v8.0.0`` before the conversion to a
templating engine but now uses the `Jinja`_ to accomplish the update. This mode is
best suited for managing changes over the lifetime of your project when you may have
a need to make manual changes or adjustments to the changelog and its not easily
recreated with a template.
**How It Works**
In order to insert the new release information into an existing changelog file, your
changelog file must have an insertion flag to indicate where the new release information
should be inserted. The default template will read in your existing changelog file,
split the content based on the insertion flag, and then recombine the content (including
the insertion flag) with the new release information added after the insertion flag.
The insertion flag is customizable through the
:ref:`changelog.insertion_flag ` setting. Generally,
your insertion flag should be unique text to your changelog file to avoid any
unexpected behavior. See the examples below.
In the case where the insertion flag is **NOT** found in the existing changelog file, the
changelog file will be re-written without any changes.
If there is no existing changelog file found, then the changelog file will be initialized
from scratch as if the mode was set to ``init``, except the
:ref:`changelog.insertion_flag ` will be included into the
newly created changelog file.
.. tip::
We have accomplished changelog updating through the use of the `Jinja`_ templating
and additional context filters and context variables. This is notable because
in the case that you want to customize your changelog template, you now can use the
same logic to enable changelog updates of your custom template!
.. seealso::
- :ref:`changelog-templates-migrating-existing-changelog`.
**Example**
Given your existing changelog looks like the following with a
:ref:`changelog.insertion_flag ` set to
````, when you run the :ref:`cmd-version` command, the new release
information will be inserted after the insertion flag.
**Before**
.. code:: markdown
# CHANGELOG
## 1.0.0
- Initial Release
**After**
.. code:: markdown
# CHANGELOG
## v1.1.0
### Feature
- feat: added a new feature
### Fix
- fix: resolved divide by zero error
## 1.0.0
- Initial Release
.. _changelog-templates-default_changelog-examples:
Configuration Examples
^^^^^^^^^^^^^^^^^^^^^^
1. Goal: Configure an updating reStructuredText changelog with a custom insertion
flag within ``pyproject.toml``.
.. code:: toml
[tool.semantic_release.changelog]
mode = "update"
insertion_flag = "..\n All versions below are listed in reverse chronological order"
[tool.semantic_release.changelog.default_templates]
changelog_file = "CHANGELOG.rst"
output_format = "rst" # optional because of the file extension
2. Goal: Configure an updating Markdown changelog with custom file name and default
insertion flag within a separate config file ``releaserc.json``.
.. code:: json
{
"semantic_release": {
"changelog": {
"mode": "update",
"default_templates": {
"changelog_file": "docs/HISTORY",
"output_format": "md"
}
}
}
}
3. Goal: Configure an initializing reStructuredText changelog with filtered conventional
commits patterns and merge commits within a custom config file ``releaserc.toml``.
.. code:: toml
[semantic_release.changelog]
mode = "init"
default_templates = { changelog_file = "docs/CHANGELOG.rst" }
exclude_commit_patterns = [
'''chore(?:\([^)]*?\))?: .+''',
'''ci(?:\([^)]*?\))?: .+''',
'''refactor(?:\([^)]*?\))?: .+''',
'''style(?:\([^)]*?\))?: .+''',
'''test(?:\([^)]*?\))?: .+''',
'''build\((?!deps\): .+)''',
'''Merged? .*''',
]
If identified or supported by the parser, the default changelog templates will include
a separate section of breaking changes and additional release information. Refer to the
:ref:`commit parsing ` section to see how to write commit messages that
will be properly parsed and displayed in these sections.
.. _changelog-templates-default_release_notes:
Using the Default Release Notes
-------------------------------
PSR has the capability to generate release notes as part of the publishing of a
new version similar to the changelog. The release notes are generated using a
`Jinja`_ template and posted to the your remote version control server (VCS) such
as GitHub, GitLab, etc during the :ref:`cmd-version` command. PSR provides a
default built-in template out-of-the-box for generating release notes.
The difference between the changelog and release notes is that the release notes
only contain the changes for the current release. Due to the modularity of the
PSR templates, the format is similar to an individual version of the default
changelog but may include other version specific information.
At this time, the default template for version release notes is only available
in Markdown format for all VCS types.
If you want to review what the default release notes look like you can use the
following command to print the release notes to the console (remove any configuration
for defining a custom template directory):
.. code:: console
# Create a current tag
git tag v1.0.0
semantic-release --noop changelog --post-to-release-tag v1.0.0
The default template provided by PSR will respect the
:ref:`config-changelog-default_templates-mask_initial_release` setting and
will also add a comparison link to the previous release if one exists without
customization.
As of ``v9.18.0``, the default release notes will also include a statement to
declare which license the project was released under. PSR determines which license
to declare based on the value of ``project.license-expression`` in the ``pyproject.toml``
file as defined in the `PEP 639`_ specification.
.. seealso::
- To personalize your release notes, see the
:ref:`changelog-templates-custom_release_notes` section.
.. _PEP 639: https://peps.python.org/pep-0639/
.. _changelog-templates-template-rendering:
Custom Changelogs
-----------------
If you would like to customize the appearance of your changelog, you can create
your own custom templates and configure PSR to render your templates instead
during the :ref:`cmd-version` and :ref:`cmd-changelog` commands.
To use a custom template, you need to create a directory within your repository
and set the :ref:`template_dir ` setting to the name
of this directory. The default name is ``"templates"``.
Templates are identified by giving a ``.j2`` extension to the template file. Any such
templates have the ``.j2`` extension removed from the target file. Therefore, to render
an output file ``foo.csv``, you should create a template called ``foo.csv.j2`` within
your template directory.
If you have additional files that you would like to render alongside your changelog,
you can place these files within the template directory. A file within your template
directory which does *not* end in ``.j2`` will not be treated as a template; it will
be copied to its target location without being rendered by the template engine.
.. tip::
Hidden files within the template directory (i.e. filenames that begin with a
period ``"."``) are *excluded* from the rendering process. Hidden folders
within the template directory are also excluded, *along with all files and
folders contained within them*. This is useful for defining macros or other
template components that should not be rendered individually.
.. tip::
When initially starting out at customizing your own changelog templates, you
should reference the default template embedded within PSR. The template directory
is located at ``data/templates/`` within the PSR package. Within our templates
directory we separate out each type of commit parser (e.g. angular) and the
content format type (e.g. markdown). You can copy this directory to your
repository's templates directory and then customize the templates to your liking.
.. _changelog-templates-template-rendering-directory-structure:
Directory Structure
^^^^^^^^^^^^^^^^^^^
When the templates are rendered, files within the templates directory tree are output
to the location within your repository that has the *same relative path* to the root
of your project as the *relative path of the template within the templates directory*.
**Example**
An example project has the following structure:
.. code-block::
example-project/
├── src/
│ └── example_project/
│ └── __init__.py
└── ch-templates/
├── CHANGELOG.md.j2
├── .components/
│ └── authors.md.j2
├── .macros.j2
├── src/
│ └── example_project/
│ └── data/
│ └── data.json.j2
└── static/
└── config.cfg
And a custom templates folder configured via the following snippet in ``pyproject.toml``:
.. code-block:: toml
[tool.semantic_release.changelog]
template_dir = "ch-templates"
After running a release with Python Semantic Release, the directory structure
of the project will now look like this (excluding the template directory):
.. code-block::
example-project/
├── CHANGELOG.md
├── src/
│ └── example_project/
│ ├── data/
│ │ └── data.json
│ └── __init__.py
└── static/
└── config.cfg
Importantly, note the following:
* There is no top-level ``.macros`` file created, because hidden files are excluded
from the rendering process.
* There is no top-level ``.components`` directory created, because hidden folders and
all files and folders contained within it are excluded from the rendering process.
* The ``.components/authors.md.j2`` file is not rendered directly, however, it is
used as a component to the ``CHANGELOG.md.j2`` via an ``include`` statement in the
changelog template.
* To render data files into the ``src/`` folder, the path to which the template should
be rendered has to be created within the ``ch-templates`` directory.
* The ``ch-templates/static`` folder is created at the top-level of the project, and the
file ``ch-templates/static/config.cfg`` is *copied, not rendered* to the new top-level
``static`` folder.
You may wish to leverage this behavior to modularize your changelog template, to
define macros in a separate file, or to reference static data which you would like
to avoid duplicating between your template environment and the remainder of your
project.
.. _changelog-templates-template-rendering-template-context:
Changelog Template Context
^^^^^^^^^^^^^^^^^^^^^^^^^^
During the rendering of a directory tree, Python Semantic Release provides information
about the history of the project available within the templating environment in order
for it to be used to generate the changelog and other desired documents.
Important project information is provided to the templating environment through
the global variable ``context`` or ``ctx`` for short. Within the template environment,
the ``context`` object has the following attributes:
* ``changelog_insertion_flag (str)``: the insertion flag used to determine where the new
release information should be inserted into the changelog file. This value is passed
directly from :ref:`changelog.insertion_flag `.
*Introduced in v9.10.0.*
**Example Usage:**
.. code:: jinja
{% set changelog_parts = prev_changelog_contents.split(
ctx.changelog_insertion_flag, maxsplit=1
)
%}
* ``changelog_mode (Literal["init", "update"])``: the mode of the changelog generation
currently being used. This can be used to determine different rendering logic. This
value is passed directly from the :ref:`changelog.mode `
configuration setting.
*Introduced in v9.10.0.*
**Example Usage:**
.. code:: jinja
{% if ctx.changelog_mode == "init"
%}{% include ".changelog_init.md.j2"
%}{#
#}{% elif ctx.changelog_mode == "update"
%}{% include ".changelog_update.md.j2"
%}{#
#}{% endif
%}
* ``history (ReleaseHistory)``: the
:class:`ReleaseHistory `
instance for the project (See the
:ref:`Release History `
section for more information).
**Example Usage:**
.. code:: jinja
{% set unreleased_commits = ctx.history.unreleased | dictsort
%}{% for release in context.history.released.values()
%}{% include ".versioned_changes.md.j2"
#}{% endfor
%}
* ``hvcs_type (str)``: the name of the VCS server type currently configured. This can
be used to determine which filters are available or different rendering logic.
*Introduced in v9.6.0.*
**Example Usage:**
.. code:: jinja
{% if ctx.hvcs_type == "github"
%}{{ "29" | pull_request_url
}}{#
#}{% elif ctx.hvcs_type == "gitlab"
%}{{ "29" | merge_request_url
}}{#
#}{% endif
%}
* ``mask_initial_release (bool)``: a boolean value indicating whether the initial release
should be masked with a generic message. This value is passed directly from the
:ref:`changelog.default_templates.mask_initial_release `
configuration setting.
*Introduced in v9.14.0.*
**Example Usage:**
.. code:: jinja
#}{% if releases | length == 1 and ctx.mask_initial_release
%}{# # On a first release, generate a generic message
#}{% include ".components/first_release.md.j2"
%}{% else
%}{# # Not the first release
#}{% include ".components/versioned_changes.md.j2"
%}{% endif
%}
* ``repo_name (str)``: the name of the current repository parsed from the Git url.
**Example Usage:**
.. code:: jinja
{{ ctx.repo_name }}
.. code:: markdown
example_repo
* ``repo_owner (str)``: the owner of the current repository parsed from the Git url.
**Example Usage:**
.. code:: jinja
{{ ctx.repo_owner }}
.. code:: markdown
example_org
* ``prev_changelog_file (str)``: the path to the previous changelog file that should
be updated with the new release information. This value is passed directly from
:ref:`changelog.changelog_file `.
*Introduced in v9.10.0.*
**Example Usage:**
.. code:: jinja
{% set prev_changelog_contents = prev_changelog_file | read_file | safe %}
.. _changelog-templates-template-rendering-template-context-release-history:
Release History
"""""""""""""""
A :py:class:`ReleaseHistory `
object has two attributes: ``released`` and ``unreleased``.
The ``unreleased`` attribute is of type ``Dict[str, List[ParseResult]]``. Each commit
in the current branch's commit history since the last release on this branch is grouped
by the ``type`` attribute of the
:py:class:`ParsedCommit `
returned by the commit parser, or if the parser returned a
:py:class:`ParseError `
then the result is grouped under the ``"unknown"`` key.
For this reason, every element of ``ReleaseHistory.unreleased["unknown"]`` is a
:py:class:`ParseError `, and
every element of every other value in ``ReleaseHistory.unreleased`` is of type
:py:class:`ParsedCommit `.
Typically, commit types will be ``"feature"``, ``"fix"``, ``"breaking"``, though the
specific types are determined by the parser. For example, the
:py:class:`EmojiCommitParser `
uses a textual representation of the emoji corresponding to the most significant change
introduced in a commit (e.g. ``":boom:"``) as the different commit types. As a template
author, you are free to customize how these are presented in the rendered template.
.. note::
If you are using a custom commit parser following the guide at
:ref:`commit_parser-custom_parser`, your custom implementations of
:py:class:`ParseResult `,
:py:class:`ParseError `
and :py:class:`ParsedCommit `
will be used in place of the built-in types.
The ``released`` attribute is of type ``Dict[Version, Release]``. The keys of this
dictionary correspond to each version released within this branch's history, and
are of type :py:class:`Version `. You can
use the ``as_tag()`` method to render these as the Git tag that they correspond to
inside your template.
A :py:class:`Release ` object
has an ``elements`` attribute, which has the same structure as the ``unreleased``
attribute of a
:py:class:`ReleaseHistory `;
that is, ``elements`` is of type ``Dict[str, List[ParseResult]]``, where every element
of ``elements["unknown"]`` is a
:py:class:`ParseError `, and elements
of every other value correspond to the ``type`` attribute of the
:py:class:`ParsedCommit ` returned
by the commit parser.
The commits represented within each ``ReleaseHistory.released[version].elements``
grouping are the commits which were made between version and the release corresponding
to the previous version. That is, given two releases ``Version(1, 0, 0)`` and
``Version(1, 1, 0)``, ``ReleaseHistory.released[Version(1, 0, 0)].elements`` contains
only commits made after the release of ``Version(1, 0, 0)`` up to and including the
release of ``Version(1, 1, 0)``.
To maintain a consistent order of subsections in the changelog headed by the commit
type, it's recommended to use Jinja's
`dictsort `_
filter.
Each :py:class:`Release `
object also has the following attributes:
* ``tagger: git.Actor``: The tagger who tagged the release.
* ``committer: git.Actor``: The committer who made the release commit.
* ``tagged_date: datetime``: The date and time at which the release was tagged.
.. seealso::
* :ref:`commit_parser-builtin`
* :ref:`Commit Parser Tokens `
* `git.Actor `_
* `datetime.strftime Format Codes `_
.. _changelog-templates-custom_templates-filters:
Changelog Template Filters
^^^^^^^^^^^^^^^^^^^^^^^^^^
In addition to the context variables, PSR seeds the template environment with a set of
custom functions (commonly called ``filters`` in `Jinja`_ terminology) for use within the
template. Filter's first argument is always piped (``|``) to the function while any additional
arguments are passed in parentheses like normal function calls.
The filters provided vary based on the VCS configured and available features:
* ``autofit_text_width (Callable[[textStr, maxWidthInt, indent_sizeInt], textStr])``: given a
text string, fit the text to the maximum width provided. This filter is useful when you want
to wrap text to a specific width. The filter will attempt to break the text at word boundaries
and will indent the text by the amount specified in the ``indent_size`` parameter.
*Introduced in v9.12.0.*
**Example Usage:**
.. code:: jinja
{{ "This is a long string that needs to be wrapped to a specific width" | autofit_text_width(40, 4) }}
**Markdown Output:**
.. code:: markdown
This is a long string that needs to be
wrapped to a specific width
* ``convert_md_to_rst (Callable[[MdStr], RstStr])``: given a markdown string, convert it to
reStructuredText format. This filter is useful when building a reStructuredText changelog
but your commit messages are in markdown format. It is utilized by the default RST changelog
template. It is limited in its ability to convert all markdown to reStructuredText, but it
handles most common cases (bold, italics, inline-raw, etc.) within commit messages.
*Introduced in v9.11.0.*
**Example Usage:**
.. code:: jinja
{{ "\n* %s (`%s`_)\n" | format(
commit.message.rstrip() | convert_md_to_rst,
commit.short_hash,
)
}}
* ``create_pypi_url(package_name: str, version: str = "")``: given a package name and an optional
version, return a URL to the PyPI page for the package. If a version is provided, the URL will
point to the specific version page. If no version is provided, the URL will point to the package
page.
*Introduced in v9.18.0.*
**Example Usage:**
.. code:: jinja
{{ "example-package" | create_pypi_url }}
{{ "example-package" | create_pypi_url("1.0.0") }}
**Markdown Output:**
.. code:: markdown
https://pypi.org/project/example-package
https://pypi.org/project/example-package/1.0.0
* ``create_release_url (Callable[[TagStr], UrlStr])``: given a tag, return a URL to the release
page on the remote vcs. This filter is useful when you want to link to the release page on the
remote vcs.
*Introduced in v9.18.0.*
**Example Usage:**
.. code:: jinja
{{ "v1.0.0" | create_release_url }}
**Markdown Output:**
.. code:: markdown
https://example.com/example/repo/releases/tag/v1.0.0
* ``create_server_url (Callable[[PathStr, AuthStr | None, QueryStr | None, FragmentStr | None], UrlStr])``:
when given a path, prepend the configured vcs server host and url scheme. Optionally you
can provide, a auth string, a query string or a url fragment to be normalized into the
resulting url. Parameter order is as described above respectively.
*Introduced in v9.6.0.*
**Example Usage:**
.. code:: jinja
{{ "example/repo.git" | create_server_url }}
{{ "example/repo" | create_server_url(None, "results=1", "section-header") }}
**Markdown Output:**
.. code:: markdown
https://example.com/example/repo.git
https://example.com/example/repo?results=1#section-header
* ``create_repo_url (Callable[[RepoPathStr, QueryStr | None, FragmentStr | None], UrlStr])``:
when given a repository path, prepend the configured vcs server host, and repo namespace.
Optionally you can provide, an additional query string and/or a url fragment to also put
in the url. Parameter order is as described above respectively. This is similar to
``create_server_url`` but includes the repo namespace and owner automatically.
*Introduced in v9.6.0.*
**Example Usage:**
.. code:: jinja
{{ "releases/tags/v1.0.0" | create_repo_url }}
{{ "issues" | create_repo_url("q=is%3Aissue+is%3Aclosed") }}
**Markdown Output:**
.. code:: markdown
https://example.com/example/repo/releases/tags/v1.0.0
https://example.com/example/repo/issues?q=is%3Aissue+is%3Aclosed
* ``commit_hash_url (Callable[[hashStr], UrlStr])``: given a commit hash, return a URL to the
commit in the remote.
*Introduced in v8.0.0.*
**Example Usage:**
.. code:: jinja
{{ commit.hexsha | commit_hash_url }}
**Markdown Output:**
.. code:: markdown
https://example.com/example/repo/commit/a1b2c3d435657f5d339ba10c7b1ed81b460af51d
* ``compare_url (Callable[[StartRefStr, StopRefStr], UrlStr])``: given a starting git reference
and a ending git reference create a comparison url between the two references that can be
opened on the remote
*Introduced in v9.6.0.*
**Example Usage:**
.. code:: jinja
{{ "v1.0.0" | compare_url("v1.1.0") }}
**Markdown Output:**
.. code:: markdown
https://example.com/example/repo/compare/v1.0.0...v1.1.0
* ``issue_url (Callable[[IssueNumStr | IssueNumInt], UrlStr])``: given an issue
number, return a URL to the issue on the remote vcs. In v9.12.2, this filter
was updated to handle a string that has leading prefix symbols (ex. ``#32``)
and will strip the prefix before generating the URL.
*Introduced in v9.6.0, Modified in v9.12.2.*
**Example Usage:**
.. code:: jinja
{# Add Links to issues annotated in the commit message
# NOTE: commit.linked_issues is only available in v9.15.0 or greater
#
#}{% for issue_ref in commit.linked_issues
%}{{ "- [%s](%s)" | format(issue_ref, issue_ref | issue_url)
}}{% endfor
%}
**Markdown Output:**
.. code:: markdown
- [#32](https://example.com/example/repo/issues/32)
* ``merge_request_url (Callable[[MergeReqStr | MergeReqInt], UrlStr])``: given a
merge request number, return a URL to the merge request in the remote. This is
an alias to the ``pull_request_url`` but only available for the VCS that uses
the merge request terminology. In v9.12.2, this filter was updated to handle
a string that has leading prefix symbols (ex. ``#29``) and will strip the prefix
before generating the URL.
*Introduced in v9.6.0, Modified in v9.12.2.*
**Example Usage:**
.. code:: jinja
{{
"[%s](%s)" | format(
commit.linked_merge_request,
commit.linked_merge_request | merge_request_url
)
}}
{# commit.linked_merge_request is only available in v9.13.0 or greater #}
**Markdown Output:**
.. code:: markdown
[#29](https://example.com/example/repo/-/merge_requests/29)
* ``pull_request_url (Callable[[PullReqStr | PullReqInt], UrlStr])``: given a pull
request number, return a URL to the pull request in the remote. For remote vcs'
that use merge request terminology, this filter is an alias to the
``merge_request_url`` filter function. In v9.12.2, this filter was updated to
handle a string that has leading prefix symbols (ex. ``#29``) and will strip
the prefix before generating the URL.
*Introduced in v9.6.0, Modified in v9.12.2.*
**Example Usage:**
.. code:: jinja
{# Create a link to the merge request associated with the commit
# NOTE: commit.linked_merge_request is only available in v9.13.0 or greater
#}{{
"[%s](%s)" | format(
commit.linked_merge_request,
commit.linked_merge_request | pull_request_url
)
}}
**Markdown Output:**
.. code:: markdown
[#29](https://example.com/example/repo/pull/29)
* ``format_w_official_vcs_name (Callable[[str], str])``: given a format string, insert
the official VCS type name into the string and return. This filter is useful when you want to
display the proper name of the VCS type in a changelog or release notes. The filter supports
three different replace formats: ``%s``, ``{}``, and ``{vcs_name}``.
*Introduced in v9.18.0.*
**Example Usage:**
.. code:: jinja
{{ "%s Releases" | format_w_official_vcs_name }}
{{ "{} Releases" | format_w_official_vcs_name }}
{{ "{vcs_name} Releases" | format_w_official_vcs_name }}
**Markdown Output:**
.. code:: markdown
GitHub Releases
GitHub Releases
GitHub Releases
* ``read_file (Callable[[str], str])``: given a file path, read the file and
return the contents as a string. This function was added specifically to
enable the changelog update feature where it would load the existing changelog
file into the templating environment to be updated.
*Introduced in v9.10.0.*
**Example Usage:**
.. code:: jinja
{% set prev_changelog_contents = prev_changelog_file | read_file | safe %}
* ``sort_numerically (Callable[[Iterable[str], bool], list[str]])``: given a
sequence of strings with possibly some non-number characters as a prefix or suffix,
sort the strings as if they were just numbers from lowest to highest. This filter
is useful when you want to sort issue numbers or other strings that have a numeric
component in them but cannot be cast to a number directly to sort them. If you want
to sort the strings in reverse order, you can pass a boolean value of ``True`` as the
second argument.
*Introduced in v9.16.0.*
**Example Usage:**
.. code:: jinja
{{ ["#222", "#1023", "#444"] | sort_numerically }}
{{ ["#222", "#1023", "#444"] | sort_numerically(True) }}
**Markdown Output:**
.. code:: markdown
['#222', '#444', '#1023']
['#1023', '#444', '#222']
Availability of the documented filters can be found in the table below:
========================== ========= ===== ====== ======
**filter - hvcs_type** bitbucket gitea github gitlab
========================== ========= ===== ====== ======
autofit_text_width ✅ ✅ ✅ ✅
convert_md_to_rst ✅ ✅ ✅ ✅
create_pypi_url ✅ ✅ ✅ ✅
create_server_url ✅ ✅ ✅ ✅
create_release_url ❌ ✅ ✅ ✅
create_repo_url ✅ ✅ ✅ ✅
commit_hash_url ✅ ✅ ✅ ✅
compare_url ✅ ❌ ✅ ✅
format_w_official_vcs_name ✅ ✅ ✅ ✅
issue_url ❌ ✅ ✅ ✅
merge_request_url ❌ ❌ ❌ ✅
pull_request_url ✅ ✅ ✅ ✅
read_file ✅ ✅ ✅ ✅
sort_numerically ✅ ✅ ✅ ✅
========================== ========= ===== ====== ======
.. seealso::
* `Filters `_
.. _changelog-templates-template-rendering-example:
Example
^^^^^^^
The following template is a simple example of how to render a changelog using
the PSR template context to create a changelog in Markdown format.
**Configuration:** ``pyproject.toml``
.. code:: toml
[tool.semantic_release.changelog]
template_dir = "templates"
**Template:** ``templates/CHANGELOG.md.j2``
.. code:: jinja
# CHANGELOG
{% for version, release in ctx.history.released.items()
%}{{
"## %s (%s)" | format(version.as_tag(), release.tagged_date.strftime("%Y-%m-%d"))
}}{% for type_, commits in release["elements"] if type_ != "unknown" | dictsort
%}{{
"### %s" | format(type_ | title)
}}{% for commit in commits
%}{{
"* %s ([`%s`](%s))" | format(
commit.descriptions[0] | capitalize,
commit.hexsha[:7],
commit.hexsha | commit_hash_url,
)
}}{% endfor
%}{% endfor
%}{% endfor
%}
**Result:** ``CHANGELOG.md``
.. code:: markdown
# CHANGELOG
## v1.1.0 (2022-01-01)
### Feature
* Added a new feature ([`a1b2c3d`](https://github.com/example/repo/commit/a1b2c3d))
## v1.0.0 (2021-12-31)
### Fix
* Resolved divide by zero error ([`e4f5g6h`](https://github.com/example/repo/commit/e4f5g6h))
It is important to note that the template utilizes the ``context`` variable to extract
the project history as well as the ``commit_hash_url`` filter to generate a URL to
the remote VCS for each commit. Both of these are injected into the template environment
by PSR.
.. _changelog-templates-custom_release_notes:
Custom Release Notes
--------------------
If you would like to customize the appearance of your release notes, you can add a
hidden file named ``.release_notes.md.j2`` at the root of your
:ref:`changelog.template_dir `. This file will
automatically be detected and used to render the release notes during the
:ref:`cmd-version` and :ref:`cmd-changelog` commands.
A similar :ref:`template rendering `
mechanism is used to render the release notes as is used for the changelog. There
are minor differences in the context available to the release notes template but
the template directory structure and modularity is maintained.
.. tip::
When initially starting out at customizing your own release notes template, you
should reference the default template embedded within PSR. The release notes template
can be found in the directory ``data/templates//md`` within the PSR package.
.. _changelog-templates-custom_release_notes-context:
Release Notes Context
^^^^^^^^^^^^^^^^^^^^^
All of the changelog's
:ref:`template context ` is
exposed to the `Jinja`_ template when rendering the release notes.
Additionally, the following two globals are available to the template:
* ``release`` (:py:class:`Release `):
contains metadata about the content of the release, as parsed from commit logs
*Introduced in v8.0.0.*
* ``version`` (:py:class:`Version `): contains
metadata about the software version to be released and its ``git`` tag
*Introduced in v8.0.0.*
.. _changelog-templates-release-notes-template-example:
Example
^^^^^^^
Below is an example template that can be used to render release notes (it's similar to
GitHub's `automatically generated release notes`_):
.. _Automatically generated release notes: https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
**Configuration:** ``pyproject.toml``
.. code:: toml
[tool.semantic_release.changelog]
template_dir = "templates"
**Template:** ``templates/.release_notes.md.j2``
.. code:: jinja
## What's Changed
{% for type_, commits in release["elements"] | dictsort
%}{%- if type_ != "unknown"
%}{{
"### %s" | format(type_ | title)
}}{% for commit in commits
%}{{
"* %s by %s in [`%s`](%s)" | format(
commit.descriptions[0] | capitalize,
commit.commit.author.name,
commit.hexsha[:7],
commit.hexsha | commit_hash_url,
)
}}{%- endfor
%}{% endif
%}{% endfor
%}
**Result:** ``https://github.com/example/repo/releases/tag/v1.1.0``
.. code:: markdown
## What's Changed
### Feature
* Added a new feature by John Doe in [`a1b2c3d`](https://github.com/example/repo/commit/a1b2c3d)
.. _changelog-templates-migrating-existing-changelog:
Migrating an Existing Changelog
-------------------------------
**v9.10.0 or greater**
Migrating an existing changelog is simple with Python Semantic Release! To preserve your
existing changelog, follow these steps:
1. **Set the changelog.mode to "update"** in your configuration file. This will ensure that
only the new release information is added to your existing changelog file.
2. **Set the changelog.insertion_flag to a unique string.** You may use the default value
or set it to a unique string that is not present in your existing changelog file. This
flag is used to determine where the new release information should be inserted into your
existing changelog.
3. **Add the insertion flag to your changelog file.** This must match the value you set in
step 2. The insertion flag should be placed in the location above where you would like
the new release information to be inserted.
.. note::
If you are trying to convert an existing changelog to a new format, you will need to do
most of the conversion manually (or rebuild via init and modify) and make sure to include
your insertion flag into the format of the new changelog.
**Prior to v9.10.0**
If you have an existing changelog that you would like to preserve, you will need to
add the contents of the changelog file to your changelog template - either directly
or via Jinja's `include `_
tag.
If you would like only the history from your next release onwards to be rendered
into the changelog in addition to the existing changelog, you can add an `if statement
`_ based upon the versions in
the keys of ``context.released``.
.. _changelog-templates-upgrading-templates:
Upgrading Templates
-------------------
As PSR evolves, new features and improvements are added to the templating engine. If you
have created your own custom templates, you may need to update them to take advantage of
some new features. Below are some instructions on how to upgrade your templates to gain
the benefits of the new features.
.. _changelog-templates-upgrading-updating_changelog:
Incrementally Updating Changelog Template
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. note::
This section is only relevant if you are upgrading from a version of PSR
greater than v8.0.0 and prior to ``v9.10.0`` and have created your own
custom templates.
If you have previously created your own custom templates and would like to gain
the benefits of the new updating changelog feature, you will need to make a few
changes to your existing templates.
The following steps are a few suggestions to help upgrade your templates but
primarily you should review the embedded default templates in the PSR package
for a full example. You can find the default templates at `data/templates/`__
directory.
__ https://github.com/python-semantic-release/python-semantic-release/tree/master/src/semantic_release/data/templates
1. **Add a conditional to check the changelog_mode.** This will allow you
to determine if you should render the entire changelog or just the new
release information. See ``data/templates/*/md/CHANGELOG.md.j2`` for reference.
2. **Use the new read_file filter** to read in the existing changelog file
``ctx.prev_changelog_file``. This will allow you to include the existing
changelog content in your new changelog file. See
``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
3. **Split the changelog content based on the insertion flag.** This will
allow you to insert the new release information after the insertion flag
(``ctx.changelog_insertion_flag``). See
``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
4. **Print the leading content before the insertion flag.** This ensures you
maintain any content that should be included before the new release information.
See ``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
5. **Print your insertion flag.** This is imperative to ensure that the resulting
changelog can be updated in the future. See
``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
6. **Print the new release information.** Be sure to consider both unreleased
and released commits during this step because of the :ref:`cmd-changelog`
command that can be run at any time. See
``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
7. **Print the trailing content after the insertion flag.** This ensures you
maintain any content that should be included after the new release information.
See ``data/templates/*/md/.components/changelog_update.md.j2`` for reference.
.. tip::
Modularity of your templates is key to handling both modes of changelog
generation. Reference the default templates for examples on how we handle
both modes and defensively handle numerous breaking scenarios.
.. tip::
If you are having trouble upgrading your templates, please post a question
on the `PSR GitHub`__
__ https://github.com/python-semantic-release/python-semantic-release/issues
python-semantic-release-9.21.0/docs/commands.rst 0000664 0000000 0000000 00000037701 14756704352 0021653 0 ustar 00root root 0000000 0000000 .. _commands:
Commands
========
All commands accept a ``-h/--help`` option, which displays the help text for the
command and exits immediately.
``semantic-release`` does not allow interspersed arguments and options, which
means that the options for ``semantic-release`` are not necessarily accepted
one of the subcommands. In particular, the :ref:`cmd-main-option-noop` and
:ref:`cmd-main-option-verbosity` flags must be given to the top-level
``semantic-release`` command, before the name of the subcommand.
For example:
Incorrect::
semantic-release version --print --noop -vv
Correct::
semantic-release -vv --noop version --print
With the exception of :ref:`cmd-main` and :ref:`cmd-generate-config`, all
commands require that you have set up your project's configuration. To help with
this step, :ref:`cmd-generate-config` can create the default configuration for you,
which will allow you to tweak it to your needs rather than write it from scratch.
.. _cmd-main:
``semantic-release``
~~~~~~~~~~~~~~~~~~~~
.. _cmd-main-options:
Options:
--------
.. _cmd-main-option-version:
``--version``
**************
Display the version of Python Semantic Release and exit
.. _cmd-main-option-noop:
``--noop``
**********
Use this flag to see what ``semantic-release`` intends to do without making changes
to your project. When using this option, ``semantic-release`` can be run as many times
as you wish without any side-effects.
.. _cmd-main-option-verbosity:
``-v/--verbose``
******************
Can be supplied more than once. Controls the verbosity of ``semantic-releases`` logging
output (default level is ``WARNING``, use ``-v`` for ``INFO`` and ``-vv`` for ``DEBUG``).
.. _cmd-main-option-config:
``-c/--config [FILE]``
**********************
Specify the configuration file which Python Semantic Release should use. This can
be any of the supported formats valid for :ref:`cmd-generate-config-option-format`
**Default:** pyproject.toml
.. seealso::
- :ref:`configuration`
.. _cmd-main-option-strict:
``--strict``
************
Enable Strict Mode. This will cause a number of conditions to produce a non-zero
exit code when passed, where they would otherwise have produced an exit code of 0.
Enabling this allows, for example, certain conditions to cause failure of a CI
pipeline, while omitting this flag would allow the pipeline to continue to run.
.. seealso::
- :ref:`strict-mode`
.. _cmd-version:
``semantic-release version``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Detect the semantically correct next version that should be applied to your
project.
By default:
* Write this new version to the project metadata locations
specified in the configuration file
* Build the project using :ref:`config-build_command`, if specified
* Create a new commit with these locations and any other assets configured
to be included in a release
* Tag this commit according the configured format, with a tag that uniquely
identifies the version being released
* Push the new tag and commit to the remote for the repository
* Create a release (if supported) in the remote VCS for this tag
Changelog generation is done identically to the way it is done in :ref:`cmd-changelog`,
but this command additionally ensures the updated changelog is included in the release
commit that is made.
.. seealso::
- :ref:`cmd-changelog`
- :ref:`changelog-templates`
- :ref:`config-tag_format`
- :ref:`config-assets`
- :ref:`config-version_toml`
- :ref:`config-version_variables`
.. _cmd-version-options:
Options:
--------
.. _cmd-version-option-print:
``--print``
***********
Print the next version that will be applied, respecting the other command line options
that are supplied, and exit. This flag is useful if you just want to see what the next
version will be.
Note that instead of printing nothing at all, if no release will be made, the current
version is printed.
For example, you can experiment with which versions would be applied using the other
command line options::
semantic-release version --print
semantic-release version --patch --print
semantic-release version --prerelease --print
.. _cmd-version-option-print-tag:
``--print-tag``
***************
Same as the :ref:`cmd-version-option-print` flag but prints the complete tag
name (ex. ``v1.0.0`` or ``py-v1.0.0``) instead of the raw version number
(``1.0.0``).
.. _cmd-version-option-print-last-released:
``--print-last-released``
*************************
Print the last released version based on the Git tags. This flag is useful if you just
want to see the released version without determining what the next version will be.
Note if the version can not be found nothing will be printed.
.. _cmd-version-option-print-last-released-tag:
``--print-last-released-tag``
*****************************
Same as the :ref:`cmd-version-option-print-last-released` flag but prints the
complete tag name (ex. ``v1.0.0`` or ``py-v1.0.0``) instead of the raw version
number (``1.0.0``).
.. _cmd-version-option-force-level:
``--major/--minor/--patch/--prerelease``
****************************************
Force the next version to increment the major, minor or patch digits, or the prerelease revision,
respectively. These flags are optional but mutually exclusive, so only one may be supplied, or
none at all. Using these flags overrides the usual calculation for the next version; this can
be useful, say, when a project wants to release its initial 1.0.0 version.
.. warning::
Using these flags will override the configured value of ``prerelease`` (configured
in your :ref:`Release Group`),
**regardless of your configuration or the current version**.
To produce a prerelease with the appropriate digit incremented you should also
supply the :ref:`cmd-version-option-as-prerelease` flag. If you do not, using these flags will force
a full (non-prerelease) version to be created.
For example, suppose your project's current version is ``0.2.1-rc.1``. The following
shows how these options can be combined with ``--as-prerelease`` to force different
versions:
.. code-block:: bash
semantic-release version --prerelease --print
# 0.2.1-rc.2
semantic-release version --patch --print
# 0.2.2
semantic-release version --minor --print
# 0.3.0
semantic-release version --major --print
# 1.0.0
semantic-release version --minor --as-prerelease --print
# 0.3.0-rc.1
semantic-release version --prerelease --as-prerelease --print
# 0.2.1-rc.2
These options are forceful overrides, but there is no action required for subsequent releases
performed using the usual calculation algorithm.
Supplying ``--prerelease`` will cause Python Semantic Release to scan your project history
for any previous prereleases with the same major, minor and patch versions as the latest
version and the same :ref:`prerelease token` as the
one passed by command-line or configuration. If one is not found, ``--prerelease`` will
produce the next version according to the following format:
.. code-block:: python
f"{latest_version.major}.{latest_version.minor}.{latest_version.patch}-{prerelease_token}.1"
However, if Python Semantic Release identifies a previous *prerelease* version with the same
major, minor and patch digits as the latest version, *and* the same prerelease token as the
one supplied by command-line or configuration, then Python Semantic Release will increment
the revision found on that previous prerelease version in its new version.
For example, if ``"0.2.1-rc.1"`` and already exists as a previous version, and the latest version
is ``"0.2.1"``, invoking the following command will produce ``"0.2.1-rc.2"``:
.. code-block:: bash
semantic-release version --prerelease --prerelease-token "rc" --print
.. warning::
This is true irrespective of the branch from which ``"0.2.1-rc.1"`` was released from.
The check for previous prereleases "leading up to" this normal version is intended to
help prevent collisions in git tags to an extent, but isn't foolproof. As the example
shows it is possible to release a prerelease for a normal version that's already been
released when using this flag, which would in turn be ignored by tools selecting
versions by `SemVer precedence rules`_.
.. _SemVer precedence rules: https://semver.org/#spec-item-11
.. seealso::
- :ref:`configuration`
- :ref:`config-branches`
.. _cmd-version-option-as-prerelease:
``--as-prerelease``
*******************
After performing the normal calculation of the next version, convert the resulting next version
to a prerelease before applying it. As with :ref:`cmd-version-option-force-level`, this option
is a forceful override, but no action is required to resume calculating versions as normal on the
subsequent releases. The main distinction between ``--prerelease`` and ``--as-prerelease`` is that
the latter will not *force* a new version if one would not have been released without supplying
the flag.
This can be useful when making a single prerelease on a branch that would typically release
normal versions.
If not specified in :ref:`cmd-version-option-prerelease-token`, the prerelease token is identified
using the :ref:`Multibranch Release Configuration `
See the examples alongside :ref:`cmd-version-option-force-level` for how to use this flag.
.. _cmd-version-option-prerelease-token:
``--prerelease-token [VALUE]``
******************************
Force the next version to use the value as the prerelease token. This overrides the configured
value if one is present. If not used during a release producing a prerelease version, this
option has no effect.
.. _cmd-version-option-build-metadata:
``--build-metadata [VALUE]``
****************************
If given, append the value to the newly calculated version. This can be used, for example,
to attach a run number from a CI service or a date to the version and tag that are created.
This value can also be set using the environment variable ``PSR_BUILD_METADATA``
For example, assuming a project is currently at version 1.2.3::
$ semantic-release version --minor --print
1.3.0
$ semantic-release version --minor --print --build-metadata "run.12345"
1.3.0+run.12345
.. _cmd-version-option-commit:
``--commit/--no-commit``
************************
Whether or not to perform a ``git commit`` on modifications to source files made by ``semantic-release`` during this
command invocation, and to run ``git tag`` on this new commit with a tag corresponding to the new version.
If ``--no-commit`` is supplied, it may disable other options derivatively; please see below.
**Default:** ``--commit``
.. seealso::
- :ref:`tag_format `
.. _cmd-version-option-tag:
``--tag/--no-tag``
************************
Whether or not to perform a ``git tag`` to apply a tag of the corresponding to the new version during this
command invocation. This option manages the tag application separate from the commit handled by the ``--commit``
option.
If ``--no-tag`` is supplied, it may disable other options derivatively; please see below.
**Default:** ``--tag``
.. _cmd-version-option-changelog:
``--changelog/--no-changelog``
******************************
Whether or not to update the changelog file with changes introduced as part of the new
version released.
**Default:** ``--changelog``
.. seealso::
- :ref:`config-changelog`
- :ref:`changelog-templates`
.. _cmd-version-option-push:
``--push/--no-push``
********************
Whether or not to push new commits and/or tags to the remote repository.
**Default:** ``--no-push`` if :ref:`--no-commit ` and
:ref:`--no-tag ` is also supplied, otherwise ``push`` is the default.
.. _cmd-version-option-vcs-release:
``--vcs-release/--no-vcs-release``
**********************************
Whether or not to create a "release" in the remote VCS service, if supported. Currently
releases in GitHub and Gitea remotes are supported. If releases aren't supported in a
remote VCS, this option will not cause a command failure, but will produce a warning.
**Default:** ``--no-vcs-release`` if ``--no-push`` is supplied (including where this is
implied by supplying only ``--no-commit``), otherwise ``--vcs-release``
.. _cmd-version-option-skip_build:
``--skip-build``
****************
If passed, skip execution of the :ref:`build_command ` after
version stamping and changelog generation.
.. _cmd-publish:
``semantic-release publish``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Publish a distribution to a VCS release. Uploads using :ref:`config-publish`
.. seealso::
- :ref:`config-publish`
- :ref:`config-build_command`
.. _cmd-publish-options:
Options:
--------
.. _cmd-publish-option-tag:
``--tag``
*********
The tag associated with the release to publish to. If not given or set to
"latest", then Python Semantic Release will examine the Git tags in your
repository to identify the latest version, and attempt to publish to a
Release corresponding to this version.
**Default:** "latest"
.. _cmd-generate-config:
``semantic-release generate-config``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Generate default configuration for semantic-release, to help you get started
quickly. You can inspect the defaults, write to a file and then edit according to
your needs.
For example, to append the default configuration to your pyproject.toml
file, you can use the following command::
$ semantic-release generate-config -f toml --pyproject >> pyproject.toml
If your project doesn't already leverage TOML files for configuration, it might better
suit your project to use JSON instead::
$ semantic-release generate-config -f json
If you would like to add JSON configuration to a shared file, e.g. ``package.json``, you
can then simply add the output from this command as a **top-level** key to the file.
**Note:** Because there is no "null" or "nil" concept in TOML (see the relevant
`GitHub issue`_), configuration settings which are ``None`` by default are omitted
from the default configuration.
.. _`GitHub issue`: https://github.com/toml-lang/toml/issues/30
.. seealso::
- :ref:`configuration`
.. _cmd-generate-config-options:
Options:
--------
.. _cmd-generate-config-option-format:
``-f/--format [FORMAT]``
************************
The format that the default configuration should be generated in. Valid choices are
``toml`` and ``json`` (case-insensitive).
**Default:** toml
.. _cmd-generate-config-option-pyproject:
``--pyproject``
***************
If used alongside ``--format json``, this option has no effect. When using
``--format=toml``, if specified the configuration will sit under a top-level key
of ``tool.semantic_release`` to comply with `PEP 518`_; otherwise, the configuration
will sit under a top-level key of ``semantic_release``.
.. _PEP 518: https://peps.python.org/pep-0518/#tool-table
.. _cmd-changelog:
``semantic-release changelog``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Generate and optionally publish a changelog for your project. The changelog
is generated based on a template which can be customized.
Python Semantic Release uses Jinja_ as its templating engine; as a result templates
need to be written according to the `Template Designer Documentation`_.
.. _Jinja: https://jinja.palletsprojects.com/
.. _`Template Designer Documentation`: https://jinja.palletsprojects.com/en/3.1.x/templates/
.. seealso::
- :ref:`config-changelog`
- :ref:`config-changelog-environment`
- :ref:`changelog-templates`
Options:
--------
.. _cmd-changelog-option-post-to-release-tag:
``--post-to-release-tag [TAG]``
*******************************
If supplied, attempt to find a release in the remote VCS corresponding to the Git tag
``TAG``, and post the generated changelog to that release. If the tag exists but no
corresponding release is found in the remote VCS, then Python Semantic Release will
attempt to create one.
If using this option, the relevant authentication token *must* be supplied via the
relevant environment variable. For more information, see :ref:`index-creating-vcs-releases`.
python-semantic-release-9.21.0/docs/commit_parsing.rst 0000664 0000000 0000000 00000107131 14756704352 0023060 0 ustar 00root root 0000000 0000000 .. _commit-parsing:
Commit Parsing
==============
One of the core components of Python Semantic Release (PSR) is the commit parser. The
commit parser is responsible for parsing a Project's Git Repository commit history
to extract insights about project changes and make decisions based on this insight.
The primary decision that PSR makes based on the commit history is whether or not
to release a new version of the project, and if so, what version number to release.
This decision is made based on the commit message descriptions of the change impact
introduced by the commit. The change impact describes the impact to the end consumers
of the project. Depending on the type of change, the version number will be
incremented according to the `Semantic Versioning`_ specification (semver).
It is the commit parser's job to extract the change impact from the commit message to
determine the severity of the changes and then subsequently determine the semver level
that the version should be bumped to for the next release.
The commit parser is also responsible for interpreting other aspects of the commit
message which can be used to generate a helpful and detailed changelog. This includes
extracting the type of change, the scope of the change, any breaking change descriptions,
any linked pull/merge request numbers, and any linked issue numbers.
PSR provides several :ref:`built-in commit parsers ` to handle
a variety of different commit message styles. If the built-in parsers do not meet your
needs, you can write your own :ref:`custom parser `
to handle your specific commit message style.
.. warning::
PSR's built-in commit parsers are designed to be flexible enough to provide a
convenient way to generate the most effective changelogs we can, which means some
features are added beyond the scope of the original commit message style guidelines.
Other tools may not follow the same conventions as PSR's guideline extensions, so
if you plan to use any similar programs in tandem with PSR, you should be aware of the
differences in feature support and fall back to the official format guidelines if
necessary.
.. _Semantic Versioning: https://semver.org/
----
.. _commit_parser-builtin:
Built-in Commit Parsers
-----------------------
The following parsers are built in to Python Semantic Release:
- :ref:`ConventionalCommitParser `
- :ref:`AngularCommitParser ` *(deprecated in v9.19.0)*
- :ref:`EmojiCommitParser `
- :ref:`ScipyCommitParser `
- :ref:`TagCommitParser ` *(deprecated in v9.12.0)*
----
.. _commit_parser-builtin-conventional:
Conventional Commits Parser
"""""""""""""""""""""""""""
*Introduced in v9.19.0*
A parser that is designed to parse commits formatted according to the
`Conventional Commits Specification`_. The parser is implemented with the following
logic in relation to how PSR's core features:
- **Version Bump Determination**: This parser extracts the commit type from the subject
line of the commit (the first line of a commit message). This type is matched against
the configuration mapping to determine the level bump for the specific commit. If the
commit type is not found in the configuration mapping, the commit is considered a
non-parsable commit and will return it as a ParseError object and ultimately a commit
of type ``"unknown"``. The configuration mapping contains lists of commit types that
correspond to the level bump for each commit type. Some commit types are still valid
do not trigger a level bump, such as ``"chore"`` or ``"docs"``. You can also configure
the default level bump
:ref:`commit_parser_options.default_level_bump ` if desired.
To trigger a major release, the commit message body must contain a paragraph that begins
with ``BREAKING CHANGE:``. This will override the level bump determined by the commit type.
- **Changelog Generation**: PSR will group commits in the changelog by the commit type used
in the commit message. The commit type shorthand is converted to a more human-friendly
section heading and then used as the version section title of the changelog and release
notes. Under the section title, the parsed commit descriptions are listed out in full. If
the commit includes an optional scope, then the scope is prefixed on to the first line of
the commit description. If a commit has any breaking change prefixed paragraphs in the
commit message body, those paragraphs are separated out into a "Breaking Changes" section
in the changelog (Breaking Changes section is available from the default changelog in
v9.15.0). Each breaking change paragraph is listed in a bulleted list format across the
entire version. A single commit is allowed to have more than one breaking change
prefixed paragraph (as opposed to the `Conventional Commits Specification`_). Commits
with an optional scope and a breaking change will have the scope prefixed on to the
breaking change paragraph. Parsing errors will return a ParseError object and ultimately
a commit of type ``"unknown"``. Unknown commits are consolidated into an "Unknown" section
in the changelog by the default template. To remove unwanted commits from the changelog
that normally are placed in the "unknown" section, consider the use of the configuration
option :ref:`changelog.exclude_commit_patterns `
to ignore those commit styles.
- **Pull/Merge Request Identifier Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-linked_merge_request_detection` to identify and extract
pull/merge request numbers. The parser will return a string value if a pull/merge
request number is found in the commit message. If no pull/merge request number is
found, the parser will return an empty string.
- **Linked Issue Identifier Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-issue_number_detection` to identify and extract issue numbers.
The parser will return a tuple of issue numbers as strings if any are found in the commit
message. If no issue numbers are found, the parser will return an empty tuple.
- **Squash Commit Evaluation**: This parser implements PSR's
:ref:`commit_parser-builtin-squash_commit_evaluation` to identify and extract each commit
message as a separate commit message within a single squashed commit. You can toggle this
feature on/off via the :ref:`config-commit_parser_options` setting.
- **Release Notice Footer Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-release_notice_footer_detection`, which is a custom extension
to traditional `Conventional Commits Specification`_ to use the ``NOTICE`` keyword as a git
footer to document additional release information that is not considered a breaking change.
**Limitations**:
- Commits with the ``revert`` type are not currently supported. Track the implementation
of this feature in the issue `#402`_.
If no commit parser options are provided via the configuration, the parser will use PSR's
built-in
:py:class:`defaults `.
.. _#402: https://github.com/python-semantic-release/python-semantic-release/issues/402
.. _Conventional Commits Specification: https://www.conventionalcommits.org/en/v1.0.0
----
.. _commit_parser-builtin-angular:
Angular Commit Parser
"""""""""""""""""""""
.. warning::
This parser was deprecated in ``v9.19.0``. It will be removed in a future release.
This parser is being replaced by the :ref:`commit_parser-builtin-conventional`.
A parser that is designed to parse commits formatted according to the
`Angular Commit Style Guidelines`_. The parser is implemented with the following
logic in relation to how PSR's core features:
- **Version Bump Determination**: This parser extracts the commit type from the subject
line of the commit (the first line of a commit message). This type is matched against
the configuration mapping to determine the level bump for the specific commit. If the
commit type is not found in the configuration mapping, the commit is considered a
non-parsable commit and will return it as a ParseError object and ultimately a commit
of type ``"unknown"``. The configuration mapping contains lists of commit types that
correspond to the level bump for each commit type. Some commit types are still valid
do not trigger a level bump, such as ``"chore"`` or ``"docs"``. You can also configure
the default level bump
:ref:`commit_parser_options.default_level_bump ` if desired.
To trigger a major release, the commit message body must contain a paragraph that begins
with ``BREAKING CHANGE:``. This will override the level bump determined by the commit type.
- **Changelog Generation**: PSR will group commits in the changelog by the commit type used
in the commit message. The commit type shorthand is converted to a more human-friendly
section heading and then used as the version section title of the changelog and release
notes. Under the section title, the parsed commit descriptions are listed out in full. If
the commit includes an optional scope, then the scope is prefixed on to the first line of
the commit description. If a commit has any breaking change prefixed paragraphs in the
commit message body, those paragraphs are separated out into a "Breaking Changes" section
in the changelog (Breaking Changes section is available from the default changelog in
v9.15.0). Each breaking change paragraph is listed in a bulleted list format across the
entire version. A single commit is allowed to have more than one breaking change
prefixed paragraph (as opposed to the `Angular Commit Style Guidelines`_). Commits
with an optional scope and a breaking change will have the scope prefixed on to the
breaking change paragraph. Parsing errors will return a ParseError object and ultimately
a commit of type ``"unknown"``. Unknown commits are consolidated into an "Unknown" section
in the changelog by the default template. To remove unwanted commits from the changelog
that normally are placed in the "unknown" section, consider the use of the configuration
option :ref:`changelog.exclude_commit_patterns `
to ignore those commit styles.
- **Pull/Merge Request Identifier Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-linked_merge_request_detection` to identify and extract
pull/merge request numbers. The parser will return a string value if a pull/merge
request number is found in the commit message. If no pull/merge request number is
found, the parser will return an empty string. *Feature available in v9.13.0+.*
- **Linked Issue Identifier Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-issue_number_detection` to identify and extract issue numbers.
The parser will return a tuple of issue numbers as strings if any are found in the commit
message. If no issue numbers are found, the parser will return an empty tuple. *Feature
available in v9.15.0+.*
- **Squash Commit Evaluation**: This parser implements PSR's
:ref:`commit_parser-builtin-squash_commit_evaluation` to identify and extract each commit
message as a separate commit message within a single squashed commit. You can toggle this
feature on/off via the :ref:`config-commit_parser_options` setting. *Feature available in
v9.17.0+.*
- **Release Notice Footer Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-release_notice_footer_detection`, which is a custom extension
to traditional `Angular Commit Style Guidelines`_ to use the ``NOTICE`` keyword as a git
footer to document additional release information that is not considered a breaking change.
*Feature available in v9.18.0+.*
**Limitations**:
- Commits with the ``revert`` type are not currently supported. Track the implementation
of this feature in the issue `#402`_.
If no commit parser options are provided via the configuration, the parser will use PSR's
built-in :py:class:`defaults `.
.. _#402: https://github.com/python-semantic-release/python-semantic-release/issues/402
.. _Angular Commit Style Guidelines: https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits
----
.. _commit_parser-builtin-emoji:
Emoji Commit Parser
"""""""""""""""""""
A parser that is designed to parse commits formatted to the `Gitmoji Specification`_
with a few additional features that the specification does not cover but provide similar
functionality expected from a Semantic Release tool. As the `Gitmoji Specification`_
describes, the emojis can be specified in either the unicode format or the shortcode
text format. See the `Gitmoji Specification`_ for the pros and cons for which format
to use, but regardless, the configuration options must match the format used in the
commit messages. The parser is implemented with the following logic in relation to
how PSR's core features:
- **Version Bump Determination**: This parser only looks for emojis in the subject
line of the commit (the first line of a commit message). If more than one emoji is
found, the emoji configured with the highest priority is selected for the change impact
for the specific commit. The emoji with the highest priority is the one configured in the
``major`` configuration option, followed by the ``minor``, and ``patch`` in descending
priority order. If no emoji is found in the subject line, the commit is classified as
other and will default to the level bump defined by the configuration option
:ref:`commit_parser_options.default_level_bump `.
- **Changelog Generation**: PSR will group commits in the changelog by the emoji type used
in the commit message. The emoji is used as the version section title and the commit
descriptions are listed under that section. No emojis are removed from the commit message
so each will be listed in the changelog and release notes. When more than one emoji is
found in the subject line of a commit, the emoji with the highest priority is the one
that will influence the grouping of the commit in the changelog. Commits containing no
emojis or non-configured emojis are consolidated into an "Other" section. To remove
unwanted commits from the changelog that would normally be added into the "other"
section, consider the use of the configuration option
:ref:`changelog.exclude_commit_patterns `
to ignore those commit styles.
- **Pull/Merge Request Identifier Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-linked_merge_request_detection` to identify and extract
pull/merge request numbers. The parser will return a string value if a pull/merge
request number is found in the commit message. If no pull/merge request number is
found, the parser will return an empty string. *Feature available in v9.13.0+.*
- **Linked Issue Identifier Detection**: [Disabled by default] This parser implements PSR's
:ref:`commit_parser-builtin-issue_number_detection` to identify and extract issue numbers.
The parser will return a tuple of issue numbers as strings if any are found in the commit
message. If no issue numbers are found, the parser will return an empty tuple. This feature
is disabled by default since it is not a part of the `Gitmoji Specification`_ but can be
enabled by setting the configuration option ``commit_parser_options.parse_linked_issues``
to ``true``. *Feature available in v9.15.0+.*
- **Squash Commit Evaluation**: This parser implements PSR's
:ref:`commit_parser-builtin-squash_commit_evaluation` to identify and extract each commit
message as a separate commit message within a single squashed commit. You can toggle this
feature on/off via the :ref:`config-commit_parser_options` setting. *Feature available in
v9.17.0+.*
- **Release Notice Footer Detection**: This parser implements PSR's
:ref:`commit_parser-builtin-release_notice_footer_detection`, which is a custom extension
that uses the ``NOTICE`` keyword as a git footer to document additional release information
that is not considered a breaking change. *Feature available in v9.18.0+.*
If no commit parser options are provided via the configuration, the parser will use PSR's
built-in :py:class:`defaults `.
.. _Gitmoji Specification: https://gitmoji.dev/specification
----
.. _commit_parser-builtin-scipy:
Scipy Commit Parser
"""""""""""""""""""
A parser that is designed to parse commits formatted according to the
`Scipy Commit Style Guidelines`_. This is essentially a variation of the `Angular Commit Style
Guidelines`_ with all different commit types. Because of this small variance, this parser
only extends our :ref:`commit_parser-builtin-angular` parser with pre-defined scipy commit types
in the default Scipy Parser Options and all other features are inherited.
If no commit parser options are provided via the configuration, the parser will use PSR's
built-in :py:class:`defaults `.
.. _Scipy Commit Style Guidelines: https://scipy.github.io/devdocs/dev/contributor/development_workflow.html#writing-the-commit-message
----
.. _commit_parser-builtin-tag:
Tag Commit Parser
"""""""""""""""""
.. warning::
This parser was deprecated in ``v9.12.0``. It will be removed in a future release.
The original parser from v1.0.0 of Python Semantic Release. Similar to the
emoji parser above, but with less features.
If no commit parser options are provided via the configuration, the parser will use PSR's
built-in :py:class:`defaults `.
----
.. _commit_parser-builtin-linked_merge_request_detection:
Common Linked Merge Request Detection
"""""""""""""""""""""""""""""""""""""
*Introduced in v9.13.0*
All of the PSR built-in parsers implement common pull/merge request identifier detection
logic to extract pull/merge request numbers from the commit message regardless of the
VCS platform. The parsers evaluate the subject line for a parenthesis-enclosed number
at the end of the line. PSR's parsers will return a string value if a pull/merge request
number is found in the commit message. If no pull/merge request number is found, the
parsers will return an empty string.
**Examples**:
*All of the following will extract a MR number of "x123", where 'x' is the character prefix*
1. BitBucket: ``Merged in feat/my-awesome-feature (pull request #123)``
2. GitHub: ``feat: add new feature (#123)``
3. GitLab: ``fix: resolve an issue (!123)``
----
.. _commit_parser-builtin-issue_number_detection:
Common Issue Identifier Detection
"""""""""""""""""""""""""""""""""
*Introduced in v9.15.0*
All of the PSR built-in parsers implement common issue identifier detection logic,
which is similar to many VCS platforms such as GitHub, GitLab, and BitBucket. The
parsers will look for common issue closure text prefixes in the `Git Trailer format`_
in the commit message to identify and extract issue numbers. The detection logic is
not strict to any specific issue tracker as we try to provide a flexible approach
to identifying issue numbers but in order to be flexible, it is **required** to the
use the `Git Trailer format`_ with a colon (``:``) as the token separator.
PSR attempts to support all variants of issue closure text prefixes, but not all will work
for your VCS. PSR supports the following case-insensitive prefixes and their conjugations
(plural, present, & past tense):
- close (closes, closing, closed)
- fix (fixes, fixing, fixed)
- resolve (resolves, resolving, resolved)
- implement (implements, implementing, implemented)
PSR also allows for a more flexible approach to identifying more than one issue number without
the need of extra git trailers (although PSR does support multiple git trailers). PSR support
various list formats which can be used to identify more than one issue in a list. This format
will not necessarily work on your VCS. PSR currently support the following list formats:
- comma-separated (ex. ``Closes: #123, #456, #789``)
- space-separated (ex. ``resolve: #123 #456 #789``)
- semicolon-separated (ex. ``Fixes: #123; #456; #789``)
- slash-separated (ex. ``close: #123/#456/#789``)
- ampersand-separated (ex. ``Implement: #123 & #789``)
- and-separated (ex. ``Resolve: #123 and #456 and #789``)
- mixed (ex. ``Closed: #123, #456, and #789`` or ``Fixes: #123, #456 & #789``)
All the examples above use the most common issue number prefix (``#``) but PSR is flexible
to support other prefixes used by VCS platforms or issue trackers such as JIRA (ex. ``ABC-###``).
The parsers will return a tuple of issue numbers as strings if any are found in the commit
message. Strings are returned to ensure that the any issue number prefix characters are
preserved (ex. ``#123`` or ``ABC-123``). If no issue numbers are found, the parsers will
return an empty tuple.
**References**:
- `BitBucket: Resolving Issues Automatically `_
- `GitHub: Linking Issue to PR `_
- `GitLab: Default Closing Patterns `_
.. _Git Trailer format: https://git-scm.com/docs/git-interpret-trailers
----
.. _commit_parser-builtin-release_notice_footer_detection:
Common Release Notice Footer Detection
""""""""""""""""""""""""""""""""""""""
*Introduced in v9.18.0**
All of the PSR built-in parsers implement common release notice footer detection logic
to identify and extract a ``NOTICE`` git trailer that documents any additional release
information the developer wants to provide to the software consumer. The idea extends
from the concept of the ``BREAKING CHANGE:`` git trailer to document any breaking change
descriptions but the ``NOTICE`` trailer is intended to document any information that is
below the threshold of a breaking change while still important for the software consumer
to be aware of. Common uses would be to provide deprecation warnings or more detailed
change usage information for that release. Parsers will collapse single newlines after
the ``NOTICE`` trailer into a single line paragraph. Commits may have more than one
``NOTICE`` trailer in a single commit message. Each
:py:class:`ParsedCommit ` will have
a ``release_notices`` attribute that is a tuple of string paragraphs to identify each
release notice.
In the default changelog and release notes template, these release notices will be
formatted into their own section called **Additional Release Information**. Each will
include any commit scope defined and each release notice in alphabetical order.
----
.. _commit_parser-builtin-squash_commit_evaluation:
Common Squash Commit Evaluation
"""""""""""""""""""""""""""""""
*Introduced in v9.17.0*
All of the PSR built-in parsers implement common squash commit evaluation logic to identify
and extract individual commit messages from a single squashed commit. The parsers will
look for common squash commit delimiters and multiple matches of the commit message
format to identify each individual commit message that was squashed. The parsers will
return a list containing each commit message as a separate commit object. Squashed commits
will be evaluated individually for both the level bump and changelog generation. If no
squash commits are found, a list with the single commit object will be returned.
Currently, PSR has been tested against GitHub, BitBucket, and official ``git`` squash
merge commit messages. GitLab does not have a default template for squash commit messages
but can be customized per project or server. If you are using GitLab, you will need to
ensure that the squash commit message format is similar to the example below.
**Example**:
*The following example will extract three separate commit messages from a single GitHub
formatted squash commit message of conventional commit style:*
.. code-block:: text
feat(config): add new config option (#123)
* refactor(config): change the implementation of config loading
* docs(configuration): defined new config option for the project
When parsed with the default conventional-commit parser with squash commits toggled on,
the version bump will be determined by the highest level bump of the three commits (in
this case, a minor bump because of the feature commit) and the release notes would look
similar to the following:
.. code-block:: markdown
## Features
- **config**: add new config option (#123)
## Documentation
- **configuration**: defined new config option for the project (#123)
## Refactoring
- **config**: change the implementation of config loading (#123)
Merge request numbers and commit hash values will be the same across all extracted
commits. Additionally, any :ref:`config-changelog-exclude_commit_patterns` will be
applied individually to each extracted commit so if you are have an exclusion match
for ignoring ``refactor`` commits, the second commit in the example above would be
excluded from the changelog.
.. important::
When squash commit evaluation is enabled, if you squashed a higher level bump commit
into the body of a lower level bump commit, the higher level bump commit will be
evaluated as the level bump for the entire squashed commit. This includes breaking
change descriptions.
----
.. _commit_parser-builtin-customization:
Customization
"""""""""""""
Each of the built-in parsers can be customized by providing overrides in the
:ref:`config-commit_parser_options` setting of the configuration file. This can
be used to toggle parsing features on and off or to add, modify, or remove the
commit types that are used to determine the level bump for a commit. Review the
API documentation for the specific parser's options class to see what changes to
the default behavior can be made.
----
.. _commit_parser-custom_parser:
Custom Parsers
--------------
Custom parsers can be written to handle commit message styles that are not covered
by the built-in parsers or by option customization of the built-in parsers.
Python Semantic Release provides several building blocks to help you write your parser.
To maintain compatibility with how Python Semantic Release will invoke your parser, you
should use the appropriate object as described below, or create your own object as a
subclass of the original which maintains the same interface. Type parameters are defined
where appropriate to assist with static type-checking.
The :ref:`commit_parser ` option, if set to a string which
does not match one of Python Semantic Release's built-in commit parsers, will be
used to attempt to dynamically import a custom commit parser class.
In order to use your custom parser, you must provide how to import the module and class
via the configuration option. There are two ways to provide the import string:
1. **File Path & Class**: The format is ``"path/to/module_file.py:ClassName"``. This
is the easiest way to provide a custom parser. This method allows you to store your
custom parser directly in the repository with no additional installation steps. PSR
will locate the file, load the module, and instantiate the class. Relative paths are
recommended and it should be provided relative to the current working directory. This
import variant is available in v9.16.0 and later.
2. **Module Path & Class**: The format is ``"package.module_name:ClassName"``. This
method allows you to store your custom parser in a package that is installed in the
same environment as PSR. This method is useful if you want to share your custom parser
across multiple repositories. To share it across multiple repositories generally you will
need to publish the parser as its own separate package and then ``pip install`` it into
the current virtual environment. You can also keep it in the same repository as your
project as long as it is in the current directory of the virtual environment and is
locatable by the Python import system. You may need to set the ``PYTHONPATH`` environment
variable if you have a more complex directory structure. This import variant is available
in v8.0.0 and later.
To test that your custom parser is importable, you can run the following command in the
directory where PSR will be executed:
.. code-block:: bash
python -c "from package.module_name import ClassName"
.. note::
Remember this is basic python import rules so the package name is optional and generally
packages are defined by a directory with ``__init__.py`` files.
.. _commit_parser-tokens:
Tokens
""""""
The tokens built into Python Semantic Release's commit parsing mechanism are inspired
by both the error-handling mechanism in `Rust's error handling`_ and its
implementation in `black`_. It is documented that `catching exceptions in Python is
slower`_ than the equivalent guard implemented using ``if/else`` checking when
exceptions are actually caught, so although ``try/except`` blocks are cheap if no
exception is raised, commit parsers should always return an object such as
:py:class:`ParseError `
instead of raising an error immediately. This is to avoid catching a potentially large
number of parsing errors being caught as the commit history of a repository is being
parsed. Python Semantic Release does not raise an exception if a commit cannot be parsed.
Python Semantic Release uses :py:class:`ParsedCommit `
as the return type of a successful parse operation, and
:py:class:`ParseError `
as the return type from an unsuccessful parse of a commit. You should review the API
documentation linked to understand the fields available on each of these objects.
It is important to note, the :py:class:`ParseError `
implements an additional method, ``raise_error``. This method raises a
:py:class:`CommitParseError ` with the message
contained in the ``error`` field, as a convenience.
In Python Semantic Release, the type ``semantic_release.commit_parser.token.ParseResult``
is defined as ``ParseResultType[ParsedCommit, ParseError]``, as a convenient shorthand.
:py:class:`ParseResultType ` is a
generic type, which is the ``Union`` of its two type parameters. One of the types in this
union should be the type returned on a successful parse of the ``commit``, while the other
should be the type returned on an unsuccessful parse of the ``commit``.
A custom parser result type, therefore, could be implemented as follows:
* ``MyParsedCommit`` subclasses :py:class:`ParsedCommit `
* ``MyParseError`` subclasses :py:class:`ParseError `
* ``MyParseResult = ParseResultType[MyParsedCommit, MyParseError]``
Internally, Python Semantic Release uses ``isinstance()`` to determine if the result
of parsing a commit was a success or not, so you should check that your custom result
and error types return ``True`` from ``isinstance(