Skip to content

Prepare Codux 2.0.0 rc.3 #69

Prepare Codux 2.0.0 rc.3

Prepare Codux 2.0.0 rc.3 #69

Workflow file for this run

name: Release GPUI Desktop
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "Source tag to build, for example v1.0.0-beta.1."
required: false
default: v1.0.0-beta.1
type: string
channel:
description: "Update channel to publish."
required: false
default: auto
type: choice
options:
- auto
- beta
- stable
permissions:
contents: write
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
MACOSX_DEPLOYMENT_TARGET: "14.0"
CMAKE_OSX_DEPLOYMENT_TARGET: "14.0"
jobs:
metadata:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.meta.outputs.version }}
channel: ${{ steps.meta.outputs.channel }}
source_ref: ${{ steps.ref.outputs.source_ref }}
env:
SOURCE_REF: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref }}
- name: Resolve source ref
id: ref
shell: bash
run: echo "source_ref=${SOURCE_REF}" >> "$GITHUB_OUTPUT"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Resolve release metadata
id: meta
shell: bash
env:
RELEASE_NOTES_PATH: dist/release-notes.md
run: |
mkdir -p dist
requested_channel="${{ github.event_name == 'workflow_dispatch' && inputs.channel || 'auto' }}"
node apps/desktop/scripts/release/prepare-release.mjs "${SOURCE_REF}" "${requested_channel}"
- name: Upload release notes
uses: actions/upload-artifact@v4
with:
name: release-notes
path: dist/release-notes.md
if-no-files-found: error
build:
needs: metadata
strategy:
fail-fast: false
matrix:
include:
- id: macos-aarch64
os: macos-26
target: aarch64-apple-darwin
artifact_suffix: -debug
- id: macos-x86_64
os: macos-26
target: x86_64-apple-darwin
artifact_suffix: -debug
- id: windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.os }}
env:
CARGO_BUILD_TARGET: ${{ matrix.target }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.metadata.outputs.source_ref }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.targets || matrix.target }}
- name: Restore Rust cache
uses: actions/cache/restore@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: rust-release-${{ runner.os }}-${{ matrix.id }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
rust-release-${{ runner.os }}-${{ matrix.id }}-
rust-release-${{ runner.os }}-
- name: Apply release version
shell: bash
env:
RELEASE_NOTES_PATH: dist/release-notes.md
run: |
mkdir -p dist
node apps/desktop/scripts/release/prepare-release.mjs "${{ needs.metadata.outputs.source_ref }}" "${{ needs.metadata.outputs.channel }}"
- name: Build
shell: bash
run: |
if [[ "${RUNNER_OS}" == "Windows" ]]; then
pwsh -NoProfile -ExecutionPolicy Bypass -File tools/build-windows.ps1 -Target "${CARGO_BUILD_TARGET}"
else
cargo build --release --target "${CARGO_BUILD_TARGET}"
fi
- name: Stage built binary
shell: bash
run: |
rm -rf dist/binary
mkdir -p dist/binary
if [[ "${RUNNER_OS}" == "Windows" ]]; then
cp "target/${CARGO_BUILD_TARGET}/release/codux.exe" dist/binary/codux.exe
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
cp "target/${CARGO_BUILD_TARGET}/release/codux" dist/binary/codux
else
cp "target/${CARGO_BUILD_TARGET}/release/codux" dist/binary/codux
fi
- name: Upload built binary
uses: actions/upload-artifact@v4
with:
name: built-binary-${{ matrix.id }}
path: dist/binary/*
if-no-files-found: error
- name: Save Rust cache
if: always()
continue-on-error: true
uses: actions/cache/save@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: rust-release-${{ runner.os }}-${{ matrix.id }}-${{ hashFiles('Cargo.lock') }}-${{ github.run_id }}
package:
needs:
- metadata
- build
strategy:
fail-fast: false
matrix:
include:
- id: macos-aarch64
os: macos-26
target: aarch64-apple-darwin
artifact_suffix: -debug
- id: macos-x86_64
os: macos-26
target: x86_64-apple-darwin
artifact_suffix: -debug
- id: windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.os }}
env:
CARGO_BUILD_TARGET: ${{ matrix.target }}
RELEASE_BUILD_ID: ${{ matrix.id }}
RELEASE_STAGE_DIR: release-artifacts
RELEASE_ARTIFACT_SUFFIX: ${{ matrix.artifact_suffix || '' }}
MACOS_ADHOC_SIGN: ${{ startsWith(matrix.id, 'macos-') && 'true' || '' }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.metadata.outputs.source_ref }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install NSIS
if: runner.os == 'Windows'
shell: powershell
run: choco install nsis -y --no-progress
- name: Apply release version
shell: bash
env:
RELEASE_NOTES_PATH: dist/release-notes.md
run: |
mkdir -p dist
node apps/desktop/scripts/release/prepare-release.mjs "${{ needs.metadata.outputs.source_ref }}" "${{ needs.metadata.outputs.channel }}"
- name: Download built binary
uses: actions/download-artifact@v4
with:
name: built-binary-${{ matrix.id }}
path: dist/binary
- name: Restore built binary
shell: bash
run: |
mkdir -p "target/${CARGO_BUILD_TARGET}/release"
if [[ "${RUNNER_OS}" == "Windows" ]]; then
cp dist/binary/codux.exe "target/${CARGO_BUILD_TARGET}/release/codux.exe"
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
cp dist/binary/codux "target/${CARGO_BUILD_TARGET}/release/codux"
chmod +x "target/${CARGO_BUILD_TARGET}/release/codux"
else
cp dist/binary/codux "target/${CARGO_BUILD_TARGET}/release/codux"
chmod +x "target/${CARGO_BUILD_TARGET}/release/codux"
fi
- name: Package
shell: bash
run: node apps/desktop/scripts/release/package-gpui.mjs
- name: Upload package artifacts
uses: actions/upload-artifact@v4
with:
name: package-${{ matrix.id }}
path: release-artifacts/${{ matrix.id }}/*
if-no-files-found: error
publish:
needs:
- metadata
- package
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.metadata.outputs.version }}
RELEASE_CHANNEL: ${{ needs.metadata.outputs.channel }}
RELEASE_TAG: ${{ needs.metadata.outputs.source_ref }}
RELEASE_NOTES_PATH: dist/release-notes.md
RELEASE_ARTIFACTS_DIR: release-artifacts
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.metadata.outputs.source_ref }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Download release notes
uses: actions/download-artifact@v4
with:
name: release-notes
path: dist
- name: Download packages
uses: actions/download-artifact@v4
with:
pattern: package-*
path: release-artifacts
merge-multiple: true
- name: Publish GitHub release and update metadata
run: node apps/desktop/scripts/release/publish-github-release.mjs