| 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 |
| 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 |
| with: |
| name: python-runtime-wheels |
| path: dist/python-runtime/* |
| if-no-files-found: error |
|
|