Skip to content
Merged
Show file tree
Hide file tree
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
47 changes: 47 additions & 0 deletions .github/actions/winget-submit/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Winget Submit
description: Template + validate + submission of WinGet manifests for Codex
inputs:
version:
description: Release version (e.g., 0.58.0)
required: true
windows_x64_sha256:
description: Windows x64 SHA256 for codex-x86_64-pc-windows-msvc.exe
required: true
windows_arm64_sha256:
description: Windows arm64 SHA256 for codex-aarch64-pc-windows-msvc.exe
required: true
runs:
using: composite
steps:
- name: Build manifest directory
shell: bash
continue-on-error: true
run: |
set -euo pipefail
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI, I think GitHub sets this for shell: bash.

# Mirror the winget-pkgs repo layout so validation matches what
# we will submit:
# manifests/<first-letter-lowercase>/<Publisher>/<PackageName>/<Version>/
# For OpenAI.Codex vX.Y.Z → manifests/o/OpenAI/Codex/X.Y.Z
VERSION="${{ inputs.version }}"
X64_SHA="${{ inputs.windows_x64_sha256 }}"
ARM_SHA="${{ inputs.windows_arm64_sha256 }}"
root="manifests/o/OpenAI/Codex/$VERSION"
tpl=".github/winget_templates"
mkdir -p "$root"
for f in OpenAI.Codex.yaml OpenAI.Codex.locale.en-US.yaml OpenAI.Codex.installer.yaml; do
sed -e "s/{{VERSION}}/$VERSION/g" \
-e "s/{{X64_SHA256}}/$X64_SHA/g" \
-e "s/{{ARM64_SHA256}}/$ARM_SHA/g" \
"$tpl/$f" > "$root/$f"
done
echo "Manifest staged at $root"
- name: Install WinGet Create
shell: bash
continue-on-error: true
run: winget install --id Microsoft.WingetCreate -e --accept-package-agreements --accept-source-agreements

- name: Validate manifests
shell: bash
continue-on-error: true
run: winget validate "manifests/o/OpenAI/Codex/${{ inputs.version }}"
17 changes: 17 additions & 0 deletions .github/winget_templates/OpenAI.Codex.installer.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
PackageIdentifier: OpenAI.Codex
PackageVersion: {{VERSION}}
Installers:
- Architecture: x64
InstallerType: portable
InstallerUrl: https://github.com/openai/codex/releases/download/rust-v{{VERSION}}/codex-x86_64-pc-windows-msvc.exe
InstallerSha256: {{X64_SHA256}}
Commands:
- codex
- Architecture: arm64
InstallerType: portable
InstallerUrl: https://github.com/openai/codex/releases/download/rust-v{{VERSION}}/codex-aarch64-pc-windows-msvc.exe
InstallerSha256: {{ARM64_SHA256}}
Commands:
- codex
ManifestType: installer
ManifestVersion: 1.5.0
19 changes: 19 additions & 0 deletions .github/winget_templates/OpenAI.Codex.locale.en-US.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
PackageIdentifier: OpenAI.Codex
PackageVersion: {{VERSION}}
PackageLocale: en-US
Publisher: OpenAI
PublisherUrl: https://github.com/openai
PublisherSupportUrl: https://github.com/openai/codex/issues
PrivacyUrl: https://openai.com/policies/privacy-policy
PackageName: Codex
PackageUrl: https://github.com/openai/codex
License: Proprietary
ShortDescription: Native Codex CLI (Rust) for terminal and TUI workflows.
Moniker: codex
Tags:
- codex
- cli
- ai
- agent
ManifestType: defaultLocale
ManifestVersion: 1.5.0
5 changes: 5 additions & 0 deletions .github/winget_templates/OpenAI.Codex.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
PackageIdentifier: OpenAI.Codex
PackageVersion: {{VERSION}}
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.5.0
26 changes: 25 additions & 1 deletion .github/workflows/rust-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,8 @@ jobs:
tag: ${{ github.ref_name }}
should_publish_npm: ${{ steps.npm_publish_settings.outputs.should_publish }}
npm_tag: ${{ steps.npm_publish_settings.outputs.npm_tag }}
windows_x64_sha256: ${{ steps.win_hash.outputs.windows_x64_sha256 }}
windows_arm64_sha256: ${{ steps.win_hash.outputs.windows_arm64_sha256 }}

steps:
- name: Checkout repository
Expand All @@ -395,6 +397,16 @@ jobs:
- name: List
run: ls -R dist/

- name: Compute SHA256 for Windows EXEs
id: win_hash
shell: bash
run: |
set -euo pipefail
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this one too, btw

x64_sha=$(sha256sum "dist/x86_64-pc-windows-msvc/codex-rs/dist/x86_64-pc-windows-msvc/codex-x86_64-pc-windows-msvc.exe" | awk '{print $1}')
arm_sha=$(sha256sum "dist/aarch64-pc-windows-msvc/codex-rs/dist/aarch64-pc-windows-msvc/codex-aarch64-pc-windows-msvc.exe" | awk '{print $1}')
echo "windows_x64_sha256=${x64_sha}" >> "$GITHUB_OUTPUT"
echo "windows_arm64_sha256=${arm_sha}" >> "$GITHUB_OUTPUT"

- name: Define release name
id: release_name
run: |
Expand Down Expand Up @@ -549,4 +561,16 @@ jobs:
repos/${GITHUB_REPOSITORY}/git/refs/heads/latest-alpha-cli \
-X PATCH \
-f sha="${GITHUB_SHA}" \
-F force=true
-F force=true
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undo this un-indent?


winget:
needs: release
runs-on: windows-latest
steps:
- uses: actions/checkout@v5
- name: Validate WinGet manifests
uses: ./.github/actions/winget-submit
with:
version: ${{ needs.release.outputs.version }}
windows_x64_sha256: ${{ needs.release.outputs.windows_x64_sha256 }}
windows_arm64_sha256: ${{ needs.release.outputs.windows_arm64_sha256 }}
36 changes: 36 additions & 0 deletions codex-rs/cli/packaging/winget/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
WinGet manifests for the Codex CLI
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about we make this .github/workflows/winget.md instead?


Local testing

- Validate: `winget validate .\manifests\o\OpenAI\Codex\0.57.0`
- Install from local manifests: `winget install --manifest .\manifests\o\OpenAI\Codex\0.57.0`
- Verify: `codex --version` and `where codex`
- Uninstall: `winget uninstall OpenAI.Codex`

Submitting to winget-pkgs

- Ensure URLs and SHA256 match the public GitHub Release for this version.
- Submit with `wingetcreate submit <path>` or copy this tree into a fork of `microsoft/winget-pkgs` under the same path.
Winget manifests

- Templates live under `.github/winget_templates/` and use placeholders:
- `{{VERSION}}`, `{{X64_SHA256}}`, `{{ARM64_SHA256}}`
- The CI calls a composite action (`.github/actions/winget-submit`) from the release job:
- Fills the templates using the release version and precomputed SHA256s,
- Validates the manifests with `winget validate` (submission is separate).

Setup

- Ensure releases include raw Windows assets:
- `codex-x86_64-pc-windows-msvc.exe`
- `codex-aarch64-pc-windows-msvc.exe`
- Add a repo secret `WINGET_PUBLISH_PAT` with `repo` (or `public_repo`) scope for PR submission.

Local test

- Build a versioned manifest set:
- Replace placeholders in the files under `template/` and stage under `manifests/o/OpenAI/Codex/<VERSION>/`.
- Validate:
- `wingetcreate validate manifests/o/OpenAI/Codex/<VERSION>`
- Install locally:
- `winget install --manifest manifests/o/OpenAI/Codex/<VERSION>`
Loading