Skip to content
Draft
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
73 changes: 51 additions & 22 deletions .github/workflows/create_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,28 +40,43 @@ on:
channel:
type: string
required: true
# TEMPORARY TEST SCAFFOLDING (arm64-native-test): build_linux/build_macos/build_web
# default to false below (only for this manual-trigger input block; the workflow_call
# inputs above are untouched) so a workflow_dispatch test run exercises only the
# Windows path. collect_results reads these same inputs to decide which platforms
# are "disabled" and excludes them from its pass/fail rollup, so this does not make
# the run report a spurious failure. Restore all three to `default: true` before merge.
build_linux:
description: Build Linux artifacts.
type: boolean
default: true
default: false
build_windows:
description: Build Windows artifacts.
type: boolean
default: true
build_macos:
description: Build macOS artifacts.
type: boolean
default: true
default: false
build_web:
description: Build web artifacts.
type: boolean
default: true
default: false

env:
CARGO_TERM_COLOR: always
CONFIG_FILE: ".github/workflows/release_configurations.json"

jobs:
# ============================================================================
# TEMPORARY TEST SCAFFOLDING (arm64-native-test) — DO NOT MERGE THIS COMMIT.
# See the workflow_dispatch build_linux/build_macos/build_web inputs above
# (defaulted to false) and the matrix.include comments on
# build_windows_tui_binaries, release_windows_tui, and release_windows below
# for the full mechanism. It isolates a manual test run to the Windows arm64
# path only. Revert this single, self-contained commit before this PR merges.
# ============================================================================

# Perform all once-per-release steps. Dependent jobs will build release
# assets and upload them as appropriate.
prepare_release:
Expand Down Expand Up @@ -2036,16 +2051,21 @@ jobs:

build_windows_tui_binaries:
name: Build Release Binary (Windows TUI ${{ matrix.arch }})
runs-on: windows-latest-large
runs-on: ${{ matrix.runner }}
needs: prepare_release
if: ${{ inputs.build_windows != false }}
timeout-minutes: 150
strategy:
fail-fast: false
matrix:
include:
- arch: x64
# TEMPORARY TEST SCAFFOLDING (arm64-native-test): the x64 entry is removed from this
# matrix (not gated by `if:`, which cannot see the `matrix` context at the job level)
# to isolate the Windows arm64 job. Restore this entry before merge.
# - arch: x64
# runner: windows-latest-large
- arch: arm64
runner: windows-11-arm
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6

Expand All @@ -2058,11 +2078,6 @@ jobs:
install_release_deps: true
ssh_key: ${{ secrets.WARP_CHANNEL_CONFIG_ACCESS_SSH_KEY }}

- name: Add arm64 target
if: ${{ matrix.arch == 'arm64' }}
run: rustup target add aarch64-pc-windows-msvc
shell: bash

- name: Get channel configuration
id: get-config
uses: ./.github/actions/get_channel_config/
Expand Down Expand Up @@ -2109,18 +2124,23 @@ jobs:
# parallel), then adds the canonical schema and signs it.
release_windows_tui:
name: Build Release (Windows TUI ${{ matrix.arch }})
runs-on: windows-latest-large
runs-on: ${{ matrix.runner }}
needs: [prepare_release, build_windows_binaries, build_windows_tui_binaries]
if: ${{ inputs.build_windows != false }}
timeout-minutes: 150
strategy:
fail-fast: false
matrix:
include:
- arch: x64
release_arch: x86_64
# TEMPORARY TEST SCAFFOLDING (arm64-native-test): the x64 entry is removed from this
# matrix (not gated by `if:`, which cannot see the `matrix` context at the job level)
# to isolate the Windows arm64 job. Restore this entry before merge.
# - arch: x64
# release_arch: x86_64
# runner: windows-latest-large
- arch: arm64
release_arch: aarch64
runner: windows-11-arm
env:
TRUSTED_SIGNING_ENDPOINT: https://eus.codesigning.azure.net/
TRUSTED_SIGNING_ACCOUNT: warpdotdev
Expand Down Expand Up @@ -2189,6 +2209,10 @@ jobs:
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
# The action's dependency cache is not keyed by runner architecture, so x64 and arm64
# legs of this matrix can clobber each other's cached tools when they run concurrently
# (Azure/artifact-signing-action#146).
cache-dependencies: false
- name: Build sign-tool command for Inno Setup
id: setup_signing
shell: pwsh
Expand Down Expand Up @@ -2255,6 +2279,9 @@ jobs:
name: Build Release Binary (Windows ${{ matrix.arch }})
runs-on: ${{ matrix.runner }}
needs: prepare_release
# Not restricted to arm64 by the TEMPORARY TEST SCAFFOLDING below: the x64 leg still runs
# here because it alone produces the canonical Windows settings schema artifact that the
# arm64 legs of release_windows/release_windows_tui download.
if: ${{ inputs.build_windows != false }}
timeout-minutes: 150
strategy:
Expand All @@ -2263,7 +2290,7 @@ jobs:
- arch: x64
runner: windows-latest-large
- arch: arm64
runner: windows-latest-large
runner: windows-11-arm
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6

Expand All @@ -2276,11 +2303,6 @@ jobs:
install_release_deps: true
ssh_key: ${{ secrets.WARP_CHANNEL_CONFIG_ACCESS_SSH_KEY }}

- name: Add arm64 target
if: ${{ matrix.arch == 'arm64' }}
run: rustup target add aarch64-pc-windows-msvc
shell: bash

- name: Get channel configuration
id: get-config
uses: ./.github/actions/get_channel_config/
Expand Down Expand Up @@ -2335,10 +2357,13 @@ jobs:
strategy:
matrix:
include:
- arch: x64
runner: windows-latest-large
# TEMPORARY TEST SCAFFOLDING (arm64-native-test): the x64 entry is removed from this
# matrix (not gated by `if:`, which cannot see the `matrix` context at the job level)
# to isolate the Windows arm64 job. Restore this entry before merge.
# - arch: x64
# runner: windows-latest-large
- arch: arm64
runner: windows-latest-large
runner: windows-11-arm
env:
TRUSTED_SIGNING_ENDPOINT: https://eus.codesigning.azure.net/
TRUSTED_SIGNING_ACCOUNT: warpdotdev
Expand Down Expand Up @@ -2401,6 +2426,10 @@ jobs:
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
# The action's dependency cache is not keyed by runner architecture, so x64 and arm64
# legs of this matrix can clobber each other's cached tools when they run concurrently
# (Azure/artifact-signing-action#146).
cache-dependencies: false

# The azure/artifact-signing-action above downloads signtool.exe and the Trusted Signing dlib.
# We locate them so ISCC can call signtool during compilation to sign the inner setup engine
Expand Down
14 changes: 13 additions & 1 deletion script/install_cargo_binstall
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ archive_sha256() {
echo "c55962a0115f9716b709216de7f8bdd59d6ba8738779e60b051b4593f677717a" ;;
cargo-binstall-x86_64-pc-windows-msvc.zip)
echo "89706aa5215c164d8d091597a470fee72308ac87e8553af395ea77db844a888c" ;;
cargo-binstall-aarch64-pc-windows-msvc.zip)
echo "c6873e81457d9e44973a8e9a849795f2c83765fce0af8ad68b597b5b40dec418" ;;
esac
}

Expand All @@ -41,7 +43,17 @@ archive_for_platform() {
echo "cargo-binstall-$(uname -m)-unknown-linux-musl.tgz" ;;
*)
if [ "${OS-}" = "Windows_NT" ]; then
echo "cargo-binstall-$(uname -m)-pc-windows-msvc.zip"
# uname -m is unreliable here: Git for Windows' MSYS runtime reports the
# emulated x86_64 host under WOW64, or "unknown" on a native arm64 host,
# rather than the real machine architecture. PROCESSOR_ARCHITEW6432 (set
# only under emulation, to the true native architecture) falling back to
# PROCESSOR_ARCHITECTURE reports it correctly in both cases.
case "${PROCESSOR_ARCHITEW6432:-${PROCESSOR_ARCHITECTURE-}}" in
ARM64)
echo "cargo-binstall-aarch64-pc-windows-msvc.zip" ;;
AMD64)
echo "cargo-binstall-x86_64-pc-windows-msvc.zip" ;;
esac
fi
;;
esac
Expand Down