diff --git a/.github/workflows/create-github-release.yml b/.github/workflows/create-github-release.yml index 8630cd5..2987102 100644 --- a/.github/workflows/create-github-release.yml +++ b/.github/workflows/create-github-release.yml @@ -2,15 +2,24 @@ name: Create GitHub release on: push: - tags: - - v* + branches: + - master jobs: release: runs-on: ubuntu-latest + permissions: + contents: write steps: - - name: Build and release on GitHub - uses: "marvinpinto/action-automatic-releases@v1.2.1" + - name: Check out repository code + uses: actions/checkout@v4 with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - prerelease: false + fetch-depth: 0 + - name: "Get previous tag" + id: latest-tag + uses: "WyriHaximus/github-action-get-previous-tag@v1" + - uses: ncipollo/release-action@v1 + with: + tag: ${{ steps.latest-tag.outputs.tag }} + generateReleaseNotes: true + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/create-pypi-release.yml b/.github/workflows/create-pypi-release.yml index 4d11d12..f220906 100644 --- a/.github/workflows/create-pypi-release.yml +++ b/.github/workflows/create-pypi-release.yml @@ -2,8 +2,8 @@ name: Create PyPI release on: push: - tags: - - v* + branches: + - master jobs: release: diff --git a/.github/workflows/create-release-pr.yml b/.github/workflows/create-release-pr.yml index 6792e42..e8f76aa 100644 --- a/.github/workflows/create-release-pr.yml +++ b/.github/workflows/create-release-pr.yml @@ -30,10 +30,31 @@ jobs: - name: Bump version run: | poetry run -q invoke release.build -- -v ${{ github.event.inputs.version }} + - name: Update changelog + uses: orhun/git-cliff-action@v2 + id: cliff-changelog + with: + config: cliff.toml + args: --tag ${{ github.event.inputs.version }} + env: + OUTPUT: CHANGELOG.md + - name: Get changelog entry + uses: orhun/git-cliff-action@v2 + id: cliff-entry + with: + config: cliff.toml + args: --unreleased --strip header + env: + OUTPUT: ENTRY.md - name: Create pull request uses: peter-evans/create-pull-request@v5.0.2 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: "release: v${{ github.event.inputs.version }}" title: "release: v${{ github.event.inputs.version }}" + body: "${{ steps.cliff-entry.outputs.content }}" branch: release/${{ github.event.inputs.version }} + - uses: rickstaa/action-create-tag@v1 + with: + tag: v${{ github.event.inputs.version }} + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index 8407efa..187552e 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -23,22 +23,21 @@ jobs: didn't match the configured pattern. Please ensure that the subject doesn't start with an uppercase character. types: | + build chore + ci + docs feat fix + perf refactor release revert + style + tests scopes: | - build - ci deps - docs git - perf pkg - test - style - #\d+ env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/tag-version-commit.yml b/.github/workflows/tag-version-commit.yml deleted file mode 100644 index 2b48a5f..0000000 --- a/.github/workflows/tag-version-commit.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Tag version commit - -on: - push: - branches: - - master - -jobs: - tag: - permissions: write-all - runs-on: ubuntu-latest - steps: - - name: Check out repository code - uses: actions/checkout@v4 - - name: Generate tag - uses: christophebedard/tag-version-commit@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - version_regex: 'release\: (v[0-9]+\.[0-9]+\.[0-9]+[a-z0-9]*)' diff --git a/.gitignore b/.gitignore index ab14169..5025358 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,6 @@ venv.bak/ # Ruff .ruff_cache + +# Changelog entry +ENTRY.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..96901b2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,65 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.1.0a3] - 2023-12-04 + +### Build System + +- use cliff for changelog generation (#51) +- correctly access changelog entry content (#53) +- fix `tag-version-commit` workflow (#55) +- tag in create-release-pr workflow (#56) +- prefix tag with `v` (#57) +- use `rickstaa/action-create-tag` to create tags (#64) + +### Miscellaneous Tasks + +- add `cliff.toml` (#50) + +## [0.1.0a2] - 2023-12-04 + +### Bug Fixes + +- use `actions/checkout@v4` and fix permissions (#28) +- add `write-all` permissions to `create-release-pr` workflow (#29) +- provide version to `auto-changelog` (#31) +- fix multi-line `create-release-pr` workflow output (#32) +- fetch tags in `create-release-pr` workflow (#34) +- use `fetch-depth: 0` for workflow checkout (#36) +- use temporary file for changelog entry (#37) +- remove invalid `)` from `create-release-pr` workflow (#38) +- use EOF for multi-line changelog output (#40) +- silence `release.install` invoke task (#42) +- remove `entry.md` from `create-release-pr` workflow (#44) +- provide start/stop commit to `create-release-pr` workflow (#46) + +### Refactor + +- remove `CHANGELOG.md` (#48) + +### Release + + +- v0.1.0a2 (#49) + +## [0.1.0a1] - 2023-12-03 + +### Features + +- add `semantic-pull-request` action (#21) +- add `tag-version-commit` workflow (#22) +- add `poetry-publish` workflow (#24) +- add `action-automatic-releases` workflow (#25) +- add `create-release-pr` workflow (#26) + +### Miscellaneous Tasks + +- remove `pkg` scope from `tag-version-commit` workflow (#23) + +### Release + + +- v0.1.0a1 (#27) + + diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 0000000..1f6e21e --- /dev/null +++ b/cliff.toml @@ -0,0 +1,83 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[changelog] +# changelog header +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} +{% if commit.message is matching("^.*\\(#\\d+\\)$") %}\ + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message }}\ +{% endif %}\ + {% endfor %} +{% endfor %}\n +""" +# remove the leading and trailing whitespace from the template +trim = true +# changelog footer +footer = """ + +""" +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, # replace issue numbers +] + +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^build", group = "Build System" }, + { message = "^chore|ci", group = "Miscellaneous Tasks" }, + { message = "^doc", group = "Documentation" }, + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "^perf", group = "Performance" }, + { message = "^refactor", group = "Refactor" }, + { message = "^release", group = "Release" }, + { message = "^revert", group = "Reversions" }, + { message = "^style", group = "Styling" }, + { message = "^test", group = "Testing" }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = false +# regex for matching git tags +tag_pattern = "v[0-9].*" + +# regex for skipping tags +skip_tags = "v0.1.0-beta.1" +# regex for ignoring tags +ignore_tags = "" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" +# limit the number of commits included in the changelog. +# limit_commits = 42 diff --git a/docs/source/conf.py b/docs/source/conf.py index a80654b..745a172 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -20,7 +20,7 @@ project = "feud" copyright = "2023-2025, Feud Developers" # noqa: A001 author = "Edwin Onuonga (eonu)" -release = "0.1.0a2" +release = "0.1.0a3" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/feud/__init__.py b/feud/__init__.py index 4e76361..1333fcb 100644 --- a/feud/__init__.py +++ b/feud/__init__.py @@ -7,7 +7,7 @@ Not all arguments are bad. """ -__version__ = "0.1.0a2" +__version__ = "0.1.0a3" from feud import click as click from feud import exceptions as exceptions diff --git a/pyproject.toml b/pyproject.toml index 80d05ec..b9f83fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "feud" -version = "0.1.0a2" +version = "0.1.0a3" license = "MIT" authors = ["Edwin Onuonga "] maintainers = ["Edwin Onuonga "] @@ -45,6 +45,7 @@ include = [ "feud", "make", "tests", + "CHANGELOG.md", "LICENSE", "Makefile", "pyproject.toml",