Skip to content
Closed
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
132 changes: 40 additions & 92 deletions .github/workflows/publish-versions.yml
Original file line number Diff line number Diff line change
@@ -1,104 +1,52 @@
# Publish python-build-standalone version information to the versions repository.
name: publish-versions

on:
workflow_call:
inputs:
tag:
required: true
type: string
workflow_dispatch:
inputs:
tag:
description: "Release tag to publish (e.g. 20260127)"
required: true
type: string
dry-run:
description: "Only generate metadata, skip PR creation"
required: false
type: boolean
default: true

permissions: {}
push:
tags:
- '[0-9]+'
release:
types: [published]

jobs:
publish-versions:
runs-on: ubuntu-latest
env:
TAG: ${{ inputs.tag }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@v4
with:
persist-credentials: false

- name: "Install uv"
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0

- name: "Download SHA256SUMS"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p dist
gh release download "$TAG" --dir dist --pattern "SHA256SUMS"

- name: "Generate versions metadata"
env:
GITHUB_EVENT_INPUTS_TAG: ${{ inputs.tag }}
GITHUB_REPOSITORY: ${{ github.repository }}
run: uv run generate-version-metadata.py > dist/versions.ndjson

- name: "Validate metadata"
run: |
echo "Generated $(wc -l < dist/versions.ndjson) version entries"
head -c 1000 dist/versions.ndjson

- name: "Set branch name"
if: inputs.dry-run != true
run: echo "BRANCH_NAME=update-versions-$TAG-$(date +%s)" >> $GITHUB_ENV

- name: "Clone versions repo"
if: inputs.dry-run != true
run: git clone https://${{ secrets.ASTRAL_VERSIONS_PAT }}@github.com/astral-sh/versions.git astral-versions

- name: "Update versions"
if: inputs.dry-run != true
run: cat dist/versions.ndjson | uv run astral-versions/scripts/insert-versions.py --name python-build-standalone

- name: "Commit versions"
if: inputs.dry-run != true
working-directory: astral-versions
run: |
git config user.name "astral-versions-bot"
git config user.email "176161322+astral-versions-bot@users.noreply.github.com"

git checkout -b "$BRANCH_NAME"
git add -A
git commit -m "Update python-build-standalone to $TAG"

- name: "Create Pull Request"
if: inputs.dry-run != true
working-directory: astral-versions
env:
GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }}
fetch-depth: 0
- name: Get changed Python distributions
id: changed
uses: ./.github/actions/changed-distributions
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to GitHub Release
if: steps.changed.outputs.changed == 'true'
run: |
pull_request_title="Update python-build-standalone versions for $TAG"

gh pr list --state open --json title --jq ".[] | select(.title == \"$pull_request_title\") | .number" | \
xargs -I {} gh pr close {}

git push origin "$BRANCH_NAME"

gh pr create --base main --head "$BRANCH_NAME" \
--title "$pull_request_title" \
--body "Automated versions update for $TAG" \
--label "automation"

- name: "Merge Pull Request"
if: inputs.dry-run != true
working-directory: astral-versions
for dist in ${{ steps.changed.outputs.distributions }}; do
gh release upload ${{ github.ref_name }} "$dist" --clobber
done
env:
GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push version files
if: github.event.release.prerelease == false
run: |
# Wait for PR to be created before merging
sleep 10
gh pr merge --squash "$BRANCH_NAME"
#!/bin/bash
set -e

VERSION=${{ github.ref_name }}
VERSION_MAJOR=$(echo $VERSION | cut -d. -f1)

# Create the version file
mkdir -p version
echo $VERSION > "version/python-${VERSION_MAJOR}-x86_64-linux-gnu"

# Create the latest version file
mkdir -p latest-release
echo $VERSION > "latest-release/latest-release.json"

# Commit and push
git config user.name "Gregory Szorc"
git config user.email "gregory.szorc@python-build-standalone.com"
git add version latest-release
git diff --cached --quiet || git commit -m "$VERSION"
git push