diff --git a/.github/workflows/semver.yml b/.github/workflows/semver.yml new file mode 100644 index 0000000..7b6f37c --- /dev/null +++ b/.github/workflows/semver.yml @@ -0,0 +1,21 @@ +name: Semver Check +on: + pull_request: + types: + - opened + - reopened + - synchronize + - ready_for_review + branches: [main] + +jobs: + semver: + # skip draft PRs + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Check Semver + run: ./scripts/semver-check.sh diff --git a/.semversioner/0.0.1.json b/.semversioner/0.0.1.json new file mode 100644 index 0000000..d17a0a9 --- /dev/null +++ b/.semversioner/0.0.1.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "description": "Initial Release", + "type": "patch" + } + ], + "created_at": "2025-06-04T14:17:23+00:00", + "version": "0.0.1" +} \ No newline at end of file diff --git a/.semversioner/0.0.2.json b/.semversioner/0.0.2.json new file mode 100644 index 0000000..9a43241 --- /dev/null +++ b/.semversioner/0.0.2.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "description": "Download bug fixes + Docs", + "type": "patch" + } + ], + "created_at": "2025-06-04T14:18:13+00:00", + "version": "0.0.2" +} \ No newline at end of file diff --git a/.semversioner/next-release/patch-20250604141858053121.json b/.semversioner/next-release/patch-20250604141858053121.json new file mode 100644 index 0000000..41a6b87 --- /dev/null +++ b/.semversioner/next-release/patch-20250604141858053121.json @@ -0,0 +1,4 @@ +{ + "type": "patch", + "description": "Add semver" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ae3f172 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog +Note: version releases in the 0.x.y range may introduce breaking changes. + +## 0.0.2 + +- patch: Download bug fixes + Docs + +## 0.0.1 + +- patch: Initial Release diff --git a/pyproject.toml b/pyproject.toml index 21c73f4..5e8b676 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ dependencies = [ "statsmodels>=0.14.4", "tiktoken>=0.9.0", "typer>=0.15.1", + "semversioner>=2.0.6", ] [dependency-groups] @@ -95,6 +96,23 @@ test_coverage = [ ] test_only = "pytest -v -k" +_semversioner_release = "semversioner release" +semversioner_add = "semversioner add-change" + +[[tool.poe.tasks._semversioner_create_tag]] +shell = "git tag release/v$(semversioner current-version)" + +[[tool.poe.tasks._semversioner_changelog]] +cmd = "semversioner changelog" +capture_stdout = "CHANGELOG.md" + +[[tool.poe.tasks.release]] +sequence = [ + '_semversioner_release', + '_semversioner_changelog', + '_semversioner_create_tag', +] + # https://github.com/microsoft/pyright/blob/9f81564a4685ff5c55edd3959f9b39030f590b2f/docs/configuration.md#sample-pyprojecttoml-file [tool.pyright] include = ["benchmark_qed", "tests"] diff --git a/scripts/semver-check.sh b/scripts/semver-check.sh new file mode 100755 index 0000000..80a5350 --- /dev/null +++ b/scripts/semver-check.sh @@ -0,0 +1,10 @@ +#!/bin/sh +changes=$(git diff --name-only origin/main) +has_change_doc=$(echo $changes | grep .semversioner/next-release) +has_impacting_changes=$(echo $changes | grep benchmark-qed) + +if [ "$has_impacting_changes" ] && [ -z "$has_change_doc" ]; then + echo "Check failed. Run 'uv run semversioner add-change' to update the next release version" + exit 1 +fi +echo "OK" \ No newline at end of file diff --git a/uv.lock b/uv.lock index e03f412..345b98f 100644 --- a/uv.lock +++ b/uv.lock @@ -240,6 +240,7 @@ dependencies = [ { name = "pyyaml" }, { name = "scikit-learn" }, { name = "scipy" }, + { name = "semversioner" }, { name = "statsmodels" }, { name = "tiktoken" }, { name = "typer" }, @@ -281,6 +282,7 @@ requires-dist = [ { name = "pyyaml", specifier = ">=6.0.2" }, { name = "scikit-learn", specifier = ">=1.6.1" }, { name = "scipy", specifier = ">=1.14.1" }, + { name = "semversioner", specifier = ">=2.0.6" }, { name = "statsmodels", specifier = ">=0.14.4" }, { name = "tiktoken", specifier = ">=0.9.0" }, { name = "typer", specifier = ">=0.15.1" }, @@ -2562,6 +2564,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload_time = "2025-05-08T16:08:27.627Z" }, ] +[[package]] +name = "semversioner" +version = "2.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "jinja2" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/b9/922cfdf95a3c986c16984212b823fcc0acde5eb62184f578e5c6202c90e3/semversioner-2.0.6.tar.gz", hash = "sha256:af7cf180c63601880e7de86cdc1fae0dd993339c5911769d9728c583b92af15c", size = 15617, upload_time = "2025-04-24T12:40:21.656Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/29/1fde3f7427b3e4595567d2354cb345004c34ab2747efe1d5192ee50e42ef/semversioner-2.0.6-py2.py3-none-any.whl", hash = "sha256:b43cb76118a9cd7b5e122ec25703b93f8cf96cda445f8b881abac362ec2d03f3", size = 13457, upload_time = "2025-04-24T12:40:20.677Z" }, +] + [[package]] name = "shellingham" version = "1.5.4"