Skip to content
Merged
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
32 changes: 28 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ jobs:
actions: write
contents: write
id-token: write
pull-requests: write
steps:
- name: 📥 checkout
uses: actions/checkout@v7
Expand All @@ -33,6 +34,13 @@ jobs:
release_sha=$(git rev-parse HEAD)
release_branch="release/${release_tag}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
git push origin "HEAD:refs/heads/${release_branch}"
release_pr_body=$'# Problem\n\n- Generated release metadata must pass protected-main checks.\n\n# Solution\n\n- Apply the version and changelog generated by Python Semantic Release.'
release_pr_url=$(gh pr create \
--base main \
--head "$release_branch" \
--title "chore(release): ${release_tag}" \
--body "$release_pr_body")
release_pr_number=$(gh pr view "$release_pr_url" --json number --jq .number)
gh workflow run ci.yml --ref "$release_branch"

ci_run_id=""
Expand All @@ -56,10 +64,26 @@ jobs:
fi

gh run watch "$ci_run_id" --exit-status
git push --atomic origin \
"HEAD:refs/heads/main" \
"refs/tags/${release_tag}:refs/tags/${release_tag}"
git push origin --delete "$release_branch"
merge_response=$(gh api \
--method PUT \
"repos/${GITHUB_REPOSITORY}/pulls/${release_pr_number}/merge" \
-f merge_method=squash \
-f sha="$release_sha" \
-f commit_title="chore(release): ${release_tag}" \
-f commit_message="Automatically generated by python-semantic-release")
if [[ "$(jq -r .merged <<< "$merge_response")" != "true" ]]; then
jq -r .message <<< "$merge_response" >&2
exit 1
fi

merge_sha=$(jq -r .sha <<< "$merge_response")
git fetch origin main
git merge-base --is-ancestor "$merge_sha" origin/main
git tag --force --annotate "$release_tag" "$merge_sha" --message "$release_tag"
git push origin "refs/tags/${release_tag}:refs/tags/${release_tag}"
if git ls-remote --exit-code --heads origin "$release_branch" >/dev/null; then
git push origin --delete "$release_branch"
fi
gh workflow run doc.yml --ref "$release_tag"
uv run semantic-release changelog --post-to-release-tag "$release_tag"
echo "🙆🏽 Publishing on PyPI"
Expand Down
Loading