From 66646fad2e37d01bb0b76657d1eeaae3ed9ea31d Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <10815391+schchit@users.noreply.github.com> Date: Sun, 13 Sep 2026 11:04:48 +0800 Subject: [PATCH] Prepare verified distributions and complete deployment support --- .github/workflows/release.yml | 55 +++++++++++++++++++++++++++++++++++ RELEASE-NOTES.md | 5 ++++ VERSION | 1 + pyproject.toml | 8 ++--- 4 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 RELEASE-NOTES.md create mode 100644 VERSION diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d2f47d5 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +name: Publish versioned release +on: + push: + branches: [main] + paths: [VERSION, '.github/workflows/release.yml'] + workflow_dispatch: +permissions: + contents: read +concurrency: + group: release-${{ github.repository }} + cancel-in-progress: false +jobs: + release: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - run: pip install build twine pytest pytest-asyncio httpx -e . + - run: python -m pytest tests -q + - run: python -m build && twine check dist/* + - name: Validate release version + run: | + python -c "import pathlib,re; v=pathlib.Path('VERSION').read_text().strip(); assert re.fullmatch(r'[0-9]+\.[0-9]+\.[0-9]+(?:a[0-9]+)?',v)" + - uses: actions/upload-artifact@v4 + with: + name: distributions + path: dist/ + - name: Publish versioned GitHub release + env: + GH_TOKEN: ${{ github.token }} + run: | + version=$(cat VERSION) + if gh release view "v$version" >/dev/null 2>&1; then + echo 'This version already has a release; refusing to overwrite it.' + exit 1 + fi + gh release create "v$version" --target "$GITHUB_SHA" --title "v$version" --notes-file RELEASE-NOTES.md dist/* + pypi: + needs: release + runs-on: ubuntu-latest + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v4 + with: + name: distributions + path: downloaded/ + - run: mkdir dist && cp downloaded/*.whl downloaded/*.tar.gz dist/ + - name: Publish to PyPI using the configured trusted publisher + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md new file mode 100644 index 0000000..b1c086d --- /dev/null +++ b/RELEASE-NOTES.md @@ -0,0 +1,5 @@ +# Release 0.6.1 + +Includes the reviewed September 2026 integrity, replay, persistence, async-lifecycle and compatibility repairs applicable to this repository. Wire/profile versions are unchanged unless explicitly described in the repository hardening notes. + +See HARDENING.md for supported verification scopes and migration boundaries. Registry publication and service deployment are reported by their workflows; a source merge alone is not a published package. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..ee6cdce --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.6.1 diff --git a/pyproject.toml b/pyproject.toml index 9471216..a9157e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "jep-cli" -version = "0.6.0" +version = "0.6.1" description = "Command-line tool for creating and verifying JEP v0.6 events through the JEP API" readme = "README.md" license = { text = "MIT" } @@ -29,9 +29,9 @@ dev = [ jep = "jep_cli.main:main" [project.urls] -Homepage = "https://github.com/hjs-spec/jep-cli" -Repository = "https://github.com/hjs-spec/jep-cli" -Issues = "https://github.com/hjs-spec/jep-cli/issues" +Homepage = "https://github.com/hjs-spec/cli" +Repository = "https://github.com/hjs-spec/cli" +Issues = "https://github.com/hjs-spec/cli/issues" [tool.setuptools.packages.find] include = ["jep_cli*"]