Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
74e0161
Release 0.132.0-alpha.1
shijie-oai May 18, 2026
13595c3
## New Features
shijie-oai May 19, 2026
5fde543
Apply Termux compatibility patch
wallentx May 20, 2026
285aa5a
Disable realtime audio on Android builds
wallentx May 12, 2026
7ead295
Update Termux v8 dependency
wallentx May 20, 2026
eb1e521
Merge branch 'main' into wallentx/termux-target
wallentx May 20, 2026
14d5179
Release 0.133.0-alpha.1
shijie-oai May 20, 2026
0e4b5a7
Merge branch 'main' into wallentx/termux-target
wallentx May 20, 2026
33bef1d
Seed Termux release automation
github-actions[bot] May 20, 2026
bb38ff1
Prepare Termux rust-v0.132.0
github-actions[bot] May 20, 2026
a234e07
Merge pull request #156 from wallentx/upstream/rust-v0.132.0
wallentx May 20, 2026
6058330
Merge commit 'a234e07f3bcfa9ba3b6bd24cdaa96c9b61ab3840' into checkpoi…
github-actions[bot] May 20, 2026
b32aadb
Merge pull request #157 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 20, 2026
d84294c
Seed Termux release automation
github-actions[bot] May 20, 2026
820e9df
Prepare Termux rust-v0.133.0-alpha.1
github-actions[bot] May 20, 2026
5180a72
Merge pull request #158 from wallentx/upstream/rust-v0.133.0
wallentx May 20, 2026
4feaa4d
Merge commit '5180a72112f60b2c016bead62e6207c8708aa37b' into checkpoi…
github-actions[bot] May 20, 2026
8012432
Merge pull request #159 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 20, 2026
b5d89d1
Release 0.133.0-alpha.3
shijie-oai May 20, 2026
a282351
Seed Termux release automation
github-actions[bot] May 21, 2026
289dd1e
Prepare Termux rust-v0.133.0-alpha.3
github-actions[bot] May 21, 2026
cf55321
Merge pull request #160 from wallentx/upstream/rust-v0.133.0
wallentx May 21, 2026
0514706
Merge commit 'cf55321c25b5208ace7a0a28fd72be9f1dd3bdd2' into checkpoi…
github-actions[bot] May 21, 2026
e9d18f7
Merge pull request #161 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 21, 2026
9474e5c
## New Features
shijie-oai May 21, 2026
5382ed7
Seed Termux release automation
github-actions[bot] May 21, 2026
2255597
Prepare Termux rust-v0.133.0
github-actions[bot] May 21, 2026
7bcabc2
Merge pull request #163 from wallentx/upstream/rust-v0.133.0
wallentx May 21, 2026
6cc4ab5
Merge commit '7bcabc22ebc36157275ca96f56a532f9a6e71f06' into checkpoi…
github-actions[bot] May 21, 2026
be39933
Merge pull request #164 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 21, 2026
811db95
Release 0.134.0-alpha.2
shijie-oai May 22, 2026
52ce382
Seed Termux release automation
github-actions[bot] May 22, 2026
99614a6
Prepare Termux rust-v0.134.0-alpha.2
github-actions[bot] May 22, 2026
aa25730
Merge branch 'release/0.134.0' into upstream/rust-v0.134.0
wallentx May 22, 2026
b11a7c1
Release 0.134.0-alpha.3
shijie-oai May 23, 2026
382b2ad
Merge pull request #165 from wallentx/upstream/rust-v0.134.0
wallentx May 23, 2026
7967092
Merge commit '382b2ad95859e23397bfd2d0b9ac85662c2263a6' into checkpoi…
github-actions[bot] May 23, 2026
f9ffdd5
Merge pull request #166 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 23, 2026
8a8bb21
Seed Termux release automation
github-actions[bot] May 23, 2026
00ce948
Prepare Termux rust-v0.134.0-alpha.3
github-actions[bot] May 23, 2026
0a84df1
Merge pull request #167 from wallentx/upstream/rust-v0.134.0
wallentx May 23, 2026
d5ee18c
Merge commit '0a84df1e3328a290c9ad91ea7bf808e5110d7fd9' into checkpoi…
github-actions[bot] May 23, 2026
f008348
Merge pull request #168 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 23, 2026
a75c443
## New Features
shijie-oai May 26, 2026
9e518fe
Seed Termux release automation
github-actions[bot] May 26, 2026
113163f
Prepare Termux rust-v0.134.0
github-actions[bot] May 26, 2026
04e72fc
Merge pull request #169 from wallentx/upstream/rust-v0.134.0
wallentx May 26, 2026
6103e89
Merge commit '04e72fc5230f166a8aefee9a64cffd1df8394921' into checkpoi…
github-actions[bot] May 26, 2026
7d53d86
Merge pull request #170 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 26, 2026
75b2877
Release 0.135.0-alpha.2
celia-oai May 27, 2026
45dfbbb
Seed Termux release automation
github-actions[bot] May 27, 2026
88f148c
Prepare Termux rust-v0.135.0-alpha.2
github-actions[bot] May 27, 2026
b2679b9
Resolve Termux rust-v0.135.0-alpha.2 merge
wallentx May 27, 2026
e395743
Merge pull request #171 from wallentx/upstream/rust-v0.135.0
wallentx May 28, 2026
d88c79f
Merge commit 'e3957436d89ab3f087b6310e905fee122db63846' into checkpoi…
github-actions[bot] May 28, 2026
d0bdfe5
Merge pull request #172 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 28, 2026
4daceea
## New Features
shijie-oai May 28, 2026
49726f3
Seed Termux release automation
github-actions[bot] May 28, 2026
0538cb6
Prepare Termux rust-v0.135.0
github-actions[bot] May 28, 2026
60f3618
Merge pull request #173 from wallentx/upstream/rust-v0.135.0
wallentx May 28, 2026
0dc2abf
Merge commit '60f36188b99d5dcc6211bd7aad7da9b5a3b5e85a' into checkpoi…
github-actions[bot] May 28, 2026
b925d17
Merge pull request #174 from wallentx/checkpoint/wallentx_termux-targ…
wallentx May 28, 2026
97a43e2
checkpoint: into wallentx/termux-target from release/0.136.0 @ 1e6e8b…
unemployabot[bot] May 29, 2026
4eac96b
Release 0.136.0-alpha.2
shijie-oai May 31, 2026
ea37804
Seed Termux release automation
github-actions[bot] May 31, 2026
328b1e6
Termux rust-v0.136.0-alpha.2 (#177)
unemployabot[bot] Jun 1, 2026
6aff9e2
checkpoint: prepare release/0.136.0 for wallentx/termux-target
github-actions[bot] Jun 1, 2026
c1dcb61
Merge remote-tracking branch 'origin/wallentx/termux-target' into res…
wallentx Jun 1, 2026
4a58298
Merge pull request #178 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 1, 2026
7ca6113
## New Features
shijie-oai Jun 1, 2026
e93ce45
Seed Termux release automation
github-actions[bot] Jun 1, 2026
2fa36ab
Prepare Termux rust-v0.136.0
github-actions[bot] Jun 1, 2026
ef24924
Merge pull request #179 from wallentx/upstream/rust-v0.136.0
wallentx Jun 1, 2026
64b1e20
Merge commit 'ef249245184850edb00998bf5da5cff43ba1a81f' into checkpoi…
github-actions[bot] Jun 1, 2026
1d7709f
Merge pull request #180 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 1, 2026
de1021f
Release 0.137.0-alpha.4
shijie-oai Jun 3, 2026
0186a96
Seed Termux release automation
github-actions[bot] Jun 3, 2026
cda3c00
Prepare Termux rust-v0.137.0-alpha.4
github-actions[bot] Jun 3, 2026
33af81f
Merge remote-tracking branch 'origin/release/0.137.0' into resolve/pr…
wallentx Jun 3, 2026
48435f3
Merge pull request #181 from wallentx/upstream/rust-v0.137.0
wallentx Jun 3, 2026
97bfdea
Merge commit '48435f30bb83a3a419340ae1199e1c4d9891937a' into checkpoi…
github-actions[bot] Jun 3, 2026
3d4a65c
Merge pull request #182 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 3, 2026
e162387
Release 0.137.0-alpha.5
shijie-oai Jun 3, 2026
b152c38
Seed Termux release automation
github-actions[bot] Jun 3, 2026
c884e66
Prepare Termux rust-v0.137.0-alpha.5
github-actions[bot] Jun 3, 2026
14fa2b3
Merge pull request #183 from wallentx/upstream/rust-v0.137.0
wallentx Jun 3, 2026
03fe85c
Merge commit '14fa2b3596ab61ec1a018c171f4646c5d1748423' into checkpoi…
github-actions[bot] Jun 3, 2026
f655106
Merge pull request #184 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 3, 2026
f221438
## New Features
shijie-oai Jun 3, 2026
549c128
Seed Termux release automation
github-actions[bot] Jun 4, 2026
0751c4f
Prepare Termux rust-v0.137.0
github-actions[bot] Jun 4, 2026
dc5fa52
Merge pull request #185 from wallentx/upstream/rust-v0.137.0
wallentx Jun 4, 2026
fdbdad7
Merge commit 'dc5fa52740290f1d6df7231f6c0647522caa57de' into checkpoi…
github-actions[bot] Jun 4, 2026
f9a6e05
Merge pull request #186 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 4, 2026
62cb054
Release 0.138.0-alpha.1
shijie-oai Jun 4, 2026
e604181
Seed Termux release automation
github-actions[bot] Jun 4, 2026
16dc7ce
Prepare Termux rust-v0.138.0-alpha.1
github-actions[bot] Jun 4, 2026
f11a600
Merge remote-tracking branch 'origin/release/0.138.0' into resolve/pr…
wallentx Jun 4, 2026
6361794
Merge pull request #187 from wallentx/upstream/rust-v0.138.0
wallentx Jun 4, 2026
23b8c3b
Merge commit '6361794b1ec710a7e726520528c07166de081e0a' into checkpoi…
github-actions[bot] Jun 4, 2026
711e99f
Merge pull request #188 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 4, 2026
eaa0505
Release 0.138.0-alpha.2
shijie-oai Jun 4, 2026
4f726fb
Seed Termux release automation
github-actions[bot] Jun 4, 2026
a123cbd
Prepare Termux rust-v0.138.0-alpha.2
github-actions[bot] Jun 4, 2026
e8ef822
Merge pull request #189 from wallentx/upstream/rust-v0.138.0
wallentx Jun 4, 2026
f40738b
Merge commit 'e8ef8225a03997015e214e6a3277f20dfc8241e6' into checkpoi…
github-actions[bot] Jun 4, 2026
c6e2964
Merge pull request #190 from wallentx/checkpoint/wallentx_termux-targ…
wallentx Jun 4, 2026
05538df
Prepare Termux rust-v0.138.0-alpha.4
github-actions[bot] Jun 5, 2026
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
6 changes: 0 additions & 6 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
# Core crate ownership.
/codex-rs/core/ @openai/codex-core-agent-team
/codex-rs/ext/extension-api/ @openai/codex-core-agent-team
/codex-rs/prompts/ @openai/codex-core-agent-team

# Keep macOS AKV signing changes reviewed by Codex maintainers.
/.github/actions/setup-akv-pkcs11-codesigning/ @openai/codex-core-agent-team
/.github/scripts/macos-signing/ @openai/codex-core-agent-team
/.github/workflows/rust-release.yml @openai/codex-core-agent-team

# Keep ownership changes reviewed by the same team.
/.github/CODEOWNERS @openai/codex-core-agent-team
259 changes: 259 additions & 0 deletions .github/actions/macos-code-sign/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
name: macos-code-sign
description: Configure, sign, notarize, and clean up macOS code signing artifacts.
inputs:
target:
description: Rust compilation target triple (e.g. aarch64-apple-darwin).
required: true
binaries:
description: Space-delimited binary basenames to sign and notarize.
default: "codex codex-responses-api-proxy"
sign-binaries:
description: Whether to sign and notarize the macOS binaries.
required: false
default: "true"
sign-dmg:
description: Whether to sign and notarize the macOS dmg.
required: false
default: "true"
apple-certificate:
description: Base64-encoded Apple signing certificate (P12).
required: true
apple-certificate-password:
description: Password for the signing certificate.
required: true
apple-notarization-key-p8:
description: Base64-encoded Apple notarization key (P8).
required: true
apple-notarization-key-id:
description: Apple notarization key ID.
required: true
apple-notarization-issuer-id:
description: Apple notarization issuer ID.
required: true
runs:
using: composite
steps:
- name: Configure Apple code signing
shell: bash
env:
KEYCHAIN_PASSWORD: actions
APPLE_CERTIFICATE: ${{ inputs.apple-certificate }}
APPLE_CERTIFICATE_PASSWORD: ${{ inputs.apple-certificate-password }}
run: |
set -euo pipefail

if [[ -z "${APPLE_CERTIFICATE:-}" ]]; then
echo "APPLE_CERTIFICATE is required for macOS signing"
exit 1
fi

if [[ -z "${APPLE_CERTIFICATE_PASSWORD:-}" ]]; then
echo "APPLE_CERTIFICATE_PASSWORD is required for macOS signing"
exit 1
fi

cert_path="${RUNNER_TEMP}/apple_signing_certificate.p12"
echo "$APPLE_CERTIFICATE" | base64 -d > "$cert_path"

keychain_path="${RUNNER_TEMP}/codex-signing.keychain-db"
security create-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path"
security set-keychain-settings -lut 21600 "$keychain_path"
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path"

keychain_args=()
cleanup_keychain() {
if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "${keychain_args[@]}" || true
security default-keychain -s "${keychain_args[0]}" || true
else
security list-keychains -s || true
fi
if [[ -f "$keychain_path" ]]; then
security delete-keychain "$keychain_path" || true
fi
}

while IFS= read -r keychain; do
[[ -n "$keychain" ]] && keychain_args+=("$keychain")
done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g')

if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "$keychain_path" "${keychain_args[@]}"
else
security list-keychains -s "$keychain_path"
fi

security default-keychain -s "$keychain_path"
security import "$cert_path" -k "$keychain_path" -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security
security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$keychain_path" > /dev/null

codesign_hashes=()
while IFS= read -r hash; do
[[ -n "$hash" ]] && codesign_hashes+=("$hash")
done < <(security find-identity -v -p codesigning "$keychain_path" \
| sed -n 's/.*\([0-9A-F]\{40\}\).*/\1/p' \
| sort -u)

if ((${#codesign_hashes[@]} == 0)); then
echo "No signing identities found in $keychain_path"
cleanup_keychain
rm -f "$cert_path"
exit 1
fi

if ((${#codesign_hashes[@]} > 1)); then
echo "Multiple signing identities found in $keychain_path:"
printf ' %s\n' "${codesign_hashes[@]}"
cleanup_keychain
rm -f "$cert_path"
exit 1
fi

APPLE_CODESIGN_IDENTITY="${codesign_hashes[0]}"

rm -f "$cert_path"

echo "APPLE_CODESIGN_IDENTITY=$APPLE_CODESIGN_IDENTITY" >> "$GITHUB_ENV"
echo "APPLE_CODESIGN_KEYCHAIN=$keychain_path" >> "$GITHUB_ENV"
echo "::add-mask::$APPLE_CODESIGN_IDENTITY"

- name: Sign macOS binaries
if: ${{ inputs.sign-binaries == 'true' }}
shell: bash
env:
TARGET: ${{ inputs.target }}
BINARIES: ${{ inputs.binaries }}
run: |
set -euo pipefail

if [[ -z "${APPLE_CODESIGN_IDENTITY:-}" ]]; then
echo "APPLE_CODESIGN_IDENTITY is required for macOS signing"
exit 1
fi

keychain_args=()
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then
keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}")
fi

entitlements_path="$GITHUB_ACTION_PATH/codex.entitlements.plist"

for binary in ${BINARIES}; do
path="codex-rs/target/${TARGET}/release/${binary}"
codesign --force --options runtime --timestamp --entitlements "$entitlements_path" --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$path"
done

- name: Notarize macOS binaries
if: ${{ inputs.sign-binaries == 'true' }}
shell: bash
env:
TARGET: ${{ inputs.target }}
BINARIES: ${{ inputs.binaries }}
APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }}
APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }}
APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }}
run: |
set -euo pipefail

for var in APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do
if [[ -z "${!var:-}" ]]; then
echo "$var is required for notarization"
exit 1
fi
done

notary_key_path="${RUNNER_TEMP}/notarytool.key.p8"
echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path"
cleanup_notary() {
rm -f "$notary_key_path"
}
trap cleanup_notary EXIT

source "$GITHUB_ACTION_PATH/notary_helpers.sh"

notarize_binary() {
local binary="$1"
local source_path="codex-rs/target/${TARGET}/release/${binary}"
local archive_path="${RUNNER_TEMP}/${binary}.zip"

if [[ ! -f "$source_path" ]]; then
echo "Binary $source_path not found"
exit 1
fi

rm -f "$archive_path"
ditto -c -k --keepParent "$source_path" "$archive_path"

notarize_submission "$binary" "$archive_path" "$notary_key_path"
}

for binary in ${BINARIES}; do
notarize_binary "${binary}"
done

- name: Sign and notarize macOS dmg
if: ${{ inputs.sign-dmg == 'true' }}
shell: bash
env:
TARGET: ${{ inputs.target }}
APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }}
APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }}
APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }}
run: |
set -euo pipefail

for var in APPLE_CODESIGN_IDENTITY APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do
if [[ -z "${!var:-}" ]]; then
echo "$var is required"
exit 1
fi
done

notary_key_path="${RUNNER_TEMP}/notarytool.key.p8"
echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path"
cleanup_notary() {
rm -f "$notary_key_path"
}
trap cleanup_notary EXIT

source "$GITHUB_ACTION_PATH/notary_helpers.sh"

dmg_name="codex-${TARGET}.dmg"
dmg_path="codex-rs/target/${TARGET}/release/${dmg_name}"

if [[ ! -f "$dmg_path" ]]; then
echo "dmg $dmg_path not found"
exit 1
fi

keychain_args=()
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then
keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}")
fi

codesign --force --timestamp --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$dmg_path"
notarize_submission "$dmg_name" "$dmg_path" "$notary_key_path"
xcrun stapler staple "$dmg_path"

- name: Remove signing keychain
if: ${{ always() }}
shell: bash
env:
APPLE_CODESIGN_KEYCHAIN: ${{ env.APPLE_CODESIGN_KEYCHAIN }}
run: |
set -euo pipefail
if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" ]]; then
keychain_args=()
while IFS= read -r keychain; do
[[ "$keychain" == "$APPLE_CODESIGN_KEYCHAIN" ]] && continue
[[ -n "$keychain" ]] && keychain_args+=("$keychain")
done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g')
if ((${#keychain_args[@]} > 0)); then
security list-keychains -s "${keychain_args[@]}"
security default-keychain -s "${keychain_args[0]}"
fi

if [[ -f "$APPLE_CODESIGN_KEYCHAIN" ]]; then
security delete-keychain "$APPLE_CODESIGN_KEYCHAIN"
fi
fi
46 changes: 46 additions & 0 deletions .github/actions/macos-code-sign/notary_helpers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env bash

notarize_submission() {
local label="$1"
local path="$2"
local notary_key_path="$3"

if [[ -z "${APPLE_NOTARIZATION_KEY_ID:-}" || -z "${APPLE_NOTARIZATION_ISSUER_ID:-}" ]]; then
echo "APPLE_NOTARIZATION_KEY_ID and APPLE_NOTARIZATION_ISSUER_ID are required for notarization"
exit 1
fi

if [[ -z "$notary_key_path" || ! -f "$notary_key_path" ]]; then
echo "Notary key file $notary_key_path not found"
exit 1
fi

if [[ ! -f "$path" ]]; then
echo "Notarization payload $path not found"
exit 1
fi

local submission_json
submission_json=$(xcrun notarytool submit "$path" \
--key "$notary_key_path" \
--key-id "$APPLE_NOTARIZATION_KEY_ID" \
--issuer "$APPLE_NOTARIZATION_ISSUER_ID" \
--output-format json \
--wait)

local status submission_id
status=$(printf '%s\n' "$submission_json" | jq -r '.status // "Unknown"')
submission_id=$(printf '%s\n' "$submission_json" | jq -r '.id // ""')

if [[ -z "$submission_id" ]]; then
echo "Failed to retrieve submission ID for $label"
exit 1
fi

echo "::notice title=Notarization::$label submission ${submission_id} completed with status ${status}"

if [[ "$status" != "Accepted" ]]; then
echo "Notarization failed for ${label} (submission ${submission_id}, status ${status})"
exit 1
fi
}
Loading
Loading