fix(ci): bundle linux codex cli instead of dmg mac binary #11
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Release (DEB + AppImage + APT Repo) | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-and-publish: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Install APT tooling | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y dpkg-dev | |
| - name: Install npm dependencies | |
| run: npm install | |
| - name: Install Linux Codex CLI payload | |
| run: npm install --no-save @openai/codex@0.112.0 | |
| - name: Download Codex DMG | |
| run: curl -fL "https://persistent.oaistatic.com/codex-app-prod/Codex.dmg" -o Codex.dmg | |
| - name: Resolve Linux Codex CLI binary path | |
| id: linux_cli | |
| run: | | |
| set -euo pipefail | |
| CLI_BIN="$(find node_modules/@openai -type f -path "*/@openai/codex-linux-*/vendor/*/path/codex" | head -n 1)" | |
| if [[ -z "${CLI_BIN}" ]]; then | |
| echo "Could not locate Linux codex binary under node_modules/@openai." >&2 | |
| exit 1 | |
| fi | |
| echo "path=${CLI_BIN}" >> "${GITHUB_OUTPUT}" | |
| file "${CLI_BIN}" | |
| - name: Setup app payload for packaging | |
| run: CODEX_CLI_SOURCE_PATH="${{ steps.linux_cli.outputs.path }}" SKIP_APP_INSTALL=1 bash scripts/setup.sh ./Codex.dmg | |
| - name: Verify CLI payload extracted | |
| run: | | |
| test -x app_resources/bin/codex | |
| ls -l app_resources/bin/codex | |
| file app_resources/bin/codex | |
| file app_resources/bin/codex | grep -E "ELF" | |
| - name: Build DEB and AppImage | |
| run: npm run build:linux | |
| - name: Verify packaged CLI binary | |
| run: | | |
| test -x dist/linux-unpacked/resources/bin/codex | |
| ls -l dist/linux-unpacked/resources/bin/codex | |
| file dist/linux-unpacked/resources/bin/codex | |
| file dist/linux-unpacked/resources/bin/codex | grep -E "ELF" | |
| - name: Create or update GitHub release | |
| uses: softprops/action-gh-release@v2 | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| files: | | |
| dist/*.deb | |
| dist/*.AppImage | |
| - name: Check DEB size for gh-pages | |
| id: deb_size | |
| run: | | |
| set -euo pipefail | |
| LIMIT_BYTES=$((100 * 1024 * 1024)) | |
| DEB_FILE="$(ls -1 dist/*.deb | head -n 1)" | |
| DEB_SIZE_BYTES="$(stat -c%s "${DEB_FILE}")" | |
| echo "deb_file=${DEB_FILE}" >> "${GITHUB_OUTPUT}" | |
| echo "deb_size_bytes=${DEB_SIZE_BYTES}" >> "${GITHUB_OUTPUT}" | |
| if [[ "${DEB_SIZE_BYTES}" -lt "${LIMIT_BYTES}" ]]; then | |
| echo "publish_apt=true" >> "${GITHUB_OUTPUT}" | |
| else | |
| echo "publish_apt=false" >> "${GITHUB_OUTPUT}" | |
| fi | |
| - name: Build APT repository files | |
| if: steps.deb_size.outputs.publish_apt == 'true' | |
| run: | | |
| mkdir -p apt-public | |
| cp dist/*.deb apt-public/ | |
| bash scripts/build-apt-repo.sh apt-public | |
| bash scripts/generate-apt-install-script.sh "${{ github.repository_owner }}" "${{ github.event.repository.name }}" apt-public | |
| REPO_URL="https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}" | |
| cat > apt-public/index.html <<EOF | |
| <!doctype html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <title>Codex Desktop APT Repository</title> | |
| </head> | |
| <body> | |
| <h1>Codex Desktop APT Repository</h1> | |
| <p>Install:</p> | |
| <pre><code>curl -fsSL ${REPO_URL}/install.sh | sudo bash</code></pre> | |
| <p>Or manually:</p> | |
| <pre><code>echo "deb [trusted=yes] ${REPO_URL}/ stable main" | sudo tee /etc/apt/sources.list.d/codex-desktop.list | |
| sudo apt update | |
| sudo apt install codex-desktop</code></pre> | |
| </body> | |
| </html> | |
| EOF | |
| - name: Skip APT publish (DEB exceeds GitHub 100MB file limit) | |
| if: steps.deb_size.outputs.publish_apt != 'true' | |
| run: | | |
| echo "Skipping gh-pages APT publish." | |
| echo "DEB file: ${{ steps.deb_size.outputs.deb_file }}" | |
| echo "Size bytes: ${{ steps.deb_size.outputs.deb_size_bytes }}" | |
| echo "Reason: GitHub blocks files >= 100MB on git pushes (gh-pages branch)." | |
| - name: Publish APT repo to gh-pages | |
| if: steps.deb_size.outputs.publish_apt == 'true' | |
| uses: peaceiris/actions-gh-pages@v4 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| publish_branch: gh-pages | |
| publish_dir: ./apt-public |