mirror of
https://github.com/openai/codex.git
synced 2026-09-10 20:26:47 +00:00
## What changed Add a downstream workflow that builds the Python SDK and runtime from the stable CLI release commit, using the CLI version for both packages and the SDK's exact runtime dependency. Publish and verify the runtime on PyPI before publishing the SDK. Require a successful CLI `release` job, an unchanged release tag, and complete runtime assets. Skip CLI prereleases and allow publication despite unrelated publisher failures. Support retries by CLI workflow run ID and accept existing PyPI uploads while verifying the complete release. Document release setup, retry procedures, and independent SDK releases. ## Testing Add resolver unit tests covering tag resolution, prerelease skipping, partial reruns, pagination, invalid runs, moved tags, missing assets, and equivalent automatic and manual release resolution. GitOrigin-RevId: 4ec6b2e77c94c851507dbe7200ea420994fce36e
115 lines
4.2 KiB
YAML
115 lines
4.2 KiB
YAML
name: python-runtime-build
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
source_ref:
|
|
description: "Source revision to build; defaults to the calling workflow revision."
|
|
required: false
|
|
type: string
|
|
runtime_version:
|
|
description: "Runtime version to build, for example 0.136.0, 0.136.0a2, or 0.136.0a2.post1."
|
|
required: true
|
|
type: string
|
|
outputs:
|
|
python_version:
|
|
value: ${{ jobs.build-python-runtime.outputs.python_version }}
|
|
|
|
jobs:
|
|
build-python-runtime:
|
|
if: github.repository == 'openai/codex'
|
|
name: build-python-runtime
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
outputs:
|
|
python_version: ${{ steps.python_runtime.outputs.python_version }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
ref: ${{ inputs.source_ref || github.sha }}
|
|
persist-credentials: false
|
|
|
|
- name: Validate and resolve Python runtime release
|
|
id: python_runtime
|
|
shell: bash
|
|
env:
|
|
REQUESTED_RUNTIME_VERSION: ${{ inputs.runtime_version }}
|
|
run: |
|
|
set -euo pipefail
|
|
python3 sdk/python/release_version.py \
|
|
"$REQUESTED_RUNTIME_VERSION" \
|
|
--github-output "$GITHUB_OUTPUT"
|
|
|
|
- name: Download Python runtime release artifacts
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PYTHON_RUNTIME_VERSION: ${{ steps.python_runtime.outputs.python_version }}
|
|
RELEASE_TAG: ${{ steps.python_runtime.outputs.release_tag }}
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p dist/python-runtime dist/python-runtime-packages
|
|
gh release download "$RELEASE_TAG" \
|
|
--repo "${GITHUB_REPOSITORY}" \
|
|
--pattern "openai_codex_cli_bin-${PYTHON_RUNTIME_VERSION}-*.whl" \
|
|
--dir dist/python-runtime
|
|
gh release download "$RELEASE_TAG" \
|
|
--repo "${GITHUB_REPOSITORY}" \
|
|
--pattern "codex-package-*-unknown-linux-musl.tar.gz" \
|
|
--dir dist/python-runtime-packages
|
|
|
|
shopt -s nullglob
|
|
wheels=(dist/python-runtime/*.whl)
|
|
if [[ "${#wheels[@]}" -ne 6 ]]; then
|
|
echo "Expected 6 Python runtime wheels for ${PYTHON_RUNTIME_VERSION}, found ${#wheels[@]}."
|
|
exit 1
|
|
fi
|
|
packages=(dist/python-runtime-packages/*.tar.gz)
|
|
if [[ "${#packages[@]}" -ne 2 ]]; then
|
|
echo "Expected 2 Linux package archives for ${PYTHON_RUNTIME_VERSION}, found ${#packages[@]}."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Build musllinux Python runtime wheels
|
|
env:
|
|
RELEASE_TAG: ${{ steps.python_runtime.outputs.release_tag }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
python3 -m venv "${RUNNER_TEMP}/python-runtime-build-venv"
|
|
"${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m pip install build
|
|
|
|
while read -r target platform_tag; do
|
|
stage_dir="${RUNNER_TEMP}/openai-codex-cli-bin-${target}-${platform_tag}"
|
|
python3 sdk/python/scripts/update_sdk_artifacts.py \
|
|
stage-runtime \
|
|
"$stage_dir" \
|
|
"dist/python-runtime-packages/codex-package-${target}.tar.gz" \
|
|
--codex-version "$RELEASE_TAG" \
|
|
--platform-tag "$platform_tag"
|
|
"${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m build \
|
|
--wheel \
|
|
--outdir dist/python-runtime \
|
|
"$stage_dir"
|
|
done <<'EOF'
|
|
aarch64-unknown-linux-musl musllinux_1_1_aarch64
|
|
x86_64-unknown-linux-musl musllinux_1_1_x86_64
|
|
EOF
|
|
|
|
shopt -s nullglob
|
|
wheels=(dist/python-runtime/*.whl)
|
|
if [[ "${#wheels[@]}" -ne 8 ]]; then
|
|
echo "Expected 8 Python runtime wheels, found ${#wheels[@]}."
|
|
exit 1
|
|
fi
|
|
ls -lh dist/python-runtime
|
|
|
|
- name: Upload Python runtime wheels
|
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
|
with:
|
|
name: python-runtime-wheels
|
|
path: dist/python-runtime/*
|
|
if-no-files-found: error
|