Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/workflows/preprelease-testpypi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Pre-release to TestPyPI

on:
push:
branches:
- 'release/*'

jobs:
testpypi-pre-release:
name: Pre-release to TestPyPI
runs-on: ubuntu-latest
environment: "publish-testpypi"
permissions:
id-token: write # required for trusted publishing

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Needed to count commits

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: "0.7.13"

- name: Extract version base and pre-release number
id: versioning
run: |
branch="${GITHUB_REF##*/}" # e.g., release/0.1.2
base_version="${branch#release/}"

# Count commits since main (or fallback if main is not present)
git fetch origin main
rc_number=$(git rev-list --count origin/main..HEAD)

full_version="${base_version}rc${rc_number}"
echo "Setting version to $full_version"

echo "full_version=$full_version" >> $GITHUB_OUTPUT

- name: Set version
run: |
uv version ${{ steps.versioning.outputs.full_version }}

- name: Install dependencies
run: |
uv sync --all-extras

- name: Build and publish to TestPyPI
run: |
uv build
uv publish --index testpypi --trusted-publishing always
2 changes: 1 addition & 1 deletion .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ name: Build & Upload package

on:
release:
types: [created]
types: [published]

jobs:
ci-check:
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/tag-on-release-branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Tag & Prepare Final Release

on:
push:
branches:
- main

jobs:
release-from-merge:
if: startsWith(github.event.head_commit.message, 'Merge pull request') # Only for PR merges
runs-on: ubuntu-latest

steps:
- name: Check out repo
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Detect if merged from release/* branch
id: detect
run: |
# Get merged branch name from commit message
pr_source=$(git log -1 --pretty=%B | grep -oE 'release/[0-9]+\.[0-9]+\.[0-9]+')
echo "source_branch=$pr_source" >> $GITHUB_OUTPUT
version="${pr_source#release/}"
echo "version=$version" >> $GITHUB_OUTPUT

- name: Abort if not a release branch
if: ${{ steps.detect.outputs.source_branch == '' }}
run: |
echo "Not a release/* merge, skipping."
exit 0

- name: Set and commit final version
run: |
version="${{ steps.detect.outputs.version }}"
uv version $version
git config user.name "github-actions"
git config user.email "github-actions@github.com"
git commit -am "🔖 Set final version $version"
git push origin main

- name: Create tag
run: |
version="${{ steps.detect.outputs.version }}"
git tag v$version
git push origin v$version

- name: Create GitHub Release (draft)
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.detect.outputs.version }}
name: v${{ steps.detect.outputs.version }}
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,3 @@ __pycache__
src/*.egg-info
/build
/dist

# uv-specific files
/uv.lock
6 changes: 6 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,9 @@ default-groups = ["dev"]
[tool.uv.build-backend]
module-name = "tsdata"
module-root = "src"

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true
Loading