mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-12-29 17:44:49 +00:00
Resolves #7591 This moves our CI to build macOS on Sequoia (macOS 15) with Xcode 26, including the new macOS 26 beta SDK. Importantly, this will make our builds on macOS 26 use the new styling. I've added a new job that ensures we can continue to build with Xcode 16 and the macOS 15 SDK, as well, although I think that might come to an end when we switch over to an IconComposer-based icon. I'll verify then. For now, we continue to support both. I've also removed our `hasLiquidGlass` check, since this will now always be true for macOS 26 builds.
1017 lines
33 KiB
YAML
1017 lines
33 KiB
YAML
on:
|
|
push: {}
|
|
pull_request: {}
|
|
workflow_dispatch: {}
|
|
|
|
name: Test
|
|
|
|
jobs:
|
|
required:
|
|
name: "Required Checks: Test"
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs:
|
|
- build-bench
|
|
- build-dist
|
|
- build-flatpak
|
|
- build-linux
|
|
- build-linux-libghostty
|
|
- build-nix
|
|
- build-snap
|
|
- build-macos
|
|
- build-macos-sequoia-stable
|
|
- build-macos-tahoe
|
|
- build-macos-matrix
|
|
- build-windows
|
|
- build-windows-cross
|
|
- flatpak-check-zig-cache
|
|
- flatpak
|
|
- test
|
|
- test-gtk
|
|
- test-sentry-linux
|
|
- test-macos
|
|
- prettier
|
|
- alejandra
|
|
- typos
|
|
- translations
|
|
- blueprint-compiler
|
|
- test-pkg-linux
|
|
- test-debian-12
|
|
- zig-fmt
|
|
steps:
|
|
- id: status
|
|
name: Determine status
|
|
run: |
|
|
results=$(tr -d '\n' <<< '${{ toJSON(needs.*.result) }}')
|
|
if ! grep -q -v -E '(failure|cancelled)' <<< "$results"; then
|
|
result="failed"
|
|
else
|
|
result="success"
|
|
fi
|
|
{
|
|
echo "result=${result}"
|
|
echo "results=${results}"
|
|
} | tee -a "$GITHUB_OUTPUT"
|
|
- if: always() && steps.status.outputs.result != 'success'
|
|
name: Check for failed status
|
|
run: |
|
|
echo "One or more required build workflows failed: ${{ steps.status.outputs.results }}"
|
|
exit 1
|
|
|
|
build-bench:
|
|
# We build benchmarks on large because it uses ReleaseFast
|
|
runs-on: namespace-profile-ghostty-lg
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build Benchmarks
|
|
run: nix develop -c zig build -Dapp-runtime=glfw -Demit-bench
|
|
|
|
build-flatpak:
|
|
strategy:
|
|
fail-fast: false
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build with Flatpak
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dflatpak=true
|
|
|
|
build-linux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [namespace-profile-ghostty-md, namespace-profile-ghostty-md-arm64]
|
|
runs-on: ${{ matrix.os }}
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test Build
|
|
run: nix develop -c zig build -Dapp-runtime=glfw
|
|
|
|
build-linux-libghostty:
|
|
runs-on: namespace-profile-ghostty-md
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build Libghostty
|
|
run: nix develop -c zig build -Dapp-runtime=none
|
|
|
|
build-nix:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [namespace-profile-ghostty-md, namespace-profile-ghostty-md-arm64]
|
|
runs-on: ${{ matrix.os }}
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test release NixOS package build
|
|
run: nix build .#ghostty-releasefast
|
|
|
|
- name: Check version
|
|
run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.ReleaseFast'
|
|
|
|
- name: Check to see if the binary has been stripped
|
|
run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'no symbols'
|
|
|
|
- name: Test debug NixOS package build
|
|
run: nix build .#ghostty-debug
|
|
|
|
- name: Check version
|
|
run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.Debug'
|
|
|
|
- name: Check to see if the binary has not been stripped
|
|
run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'main_ghostty.main'
|
|
|
|
build-dist:
|
|
runs-on: namespace-profile-ghostty-md
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build and Check Source Tarball
|
|
run: |
|
|
rm -rf zig-out/dist
|
|
nix develop -c zig build distcheck
|
|
cp zig-out/dist/*.tar.gz ghostty-source.tar.gz
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: source-tarball
|
|
path: |-
|
|
ghostty-source.tar.gz
|
|
|
|
build-macos:
|
|
runs-on: namespace-profile-ghostty-macos-sequoia
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
# GhosttyKit is the framework that is built from Zig for our native
|
|
# Mac app to access.
|
|
- name: Build GhosttyKit
|
|
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }}
|
|
|
|
# The native app is built with native Xcode tooling. This also does
|
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
|
# Nix breaks xcodebuild so this has to be run outside.
|
|
- name: Build Ghostty.app
|
|
run: cd macos && xcodebuild -target Ghostty
|
|
|
|
# Build the iOS target without code signing just to verify it works.
|
|
- name: Build Ghostty iOS
|
|
run: |
|
|
cd macos
|
|
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
|
|
|
build-macos-sequoia-stable:
|
|
runs-on: namespace-profile-ghostty-macos-sequoia
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_16.4.app
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
# GhosttyKit is the framework that is built from Zig for our native
|
|
# Mac app to access.
|
|
- name: Build GhosttyKit
|
|
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }}
|
|
|
|
# The native app is built with native Xcode tooling. This also does
|
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
|
# Nix breaks xcodebuild so this has to be run outside.
|
|
- name: Build Ghostty.app
|
|
run: cd macos && xcodebuild -target Ghostty
|
|
|
|
# Build the iOS target without code signing just to verify it works.
|
|
- name: Build Ghostty iOS
|
|
run: |
|
|
cd macos
|
|
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
|
|
|
build-macos-tahoe:
|
|
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
# GhosttyKit is the framework that is built from Zig for our native
|
|
# Mac app to access.
|
|
- name: Build GhosttyKit
|
|
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }}
|
|
|
|
# The native app is built with native Xcode tooling. This also does
|
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
|
# Nix breaks xcodebuild so this has to be run outside.
|
|
- name: Build Ghostty.app
|
|
run: cd macos && xcodebuild -target Ghostty
|
|
|
|
# Build the iOS target without code signing just to verify it works.
|
|
- name: Build Ghostty iOS
|
|
run: |
|
|
cd macos
|
|
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
|
|
|
build-macos-matrix:
|
|
runs-on: namespace-profile-ghostty-macos-sequoia
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
- name: Test All
|
|
run: |
|
|
# OpenGL
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape
|
|
|
|
# Metal
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape
|
|
|
|
- name: Build All
|
|
run: |
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape
|
|
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape
|
|
|
|
build-snap:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
[namespace-profile-ghostty-snap, namespace-profile-ghostty-snap-arm64]
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [test, build-dist]
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Download Source Tarball Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: source-tarball
|
|
- name: Extract tarball
|
|
run: |
|
|
mkdir dist
|
|
tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- run: sudo apt install -y udev
|
|
- run: sudo systemctl start systemd-udevd
|
|
# Workaround until this is fixed: https://github.com/canonical/lxd-pkg-snap/pull/789
|
|
- run: |
|
|
_LXD_SNAP_DEVCGROUP_CONFIG="/var/lib/snapd/cgroup/snap.lxd.device"
|
|
sudo mkdir -p /var/lib/snapd/cgroup
|
|
echo 'self-managed=true' | sudo tee "${_LXD_SNAP_DEVCGROUP_CONFIG}"
|
|
- uses: snapcore/action-build@v1
|
|
with:
|
|
path: dist
|
|
|
|
build-windows:
|
|
runs-on: windows-2022
|
|
# this will not stop other jobs from running
|
|
continue-on-error: true
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# This could be from a script if we wanted to but inlining here for now
|
|
# in one place.
|
|
# Using powershell so that we do not need to install WSL components. Also,
|
|
# WSLv1 is only installed on Github runners.
|
|
- name: Install zig
|
|
shell: pwsh
|
|
run: |
|
|
# Get the zig version from build.zig so that it only needs to be updated
|
|
$fileContent = Get-Content -Path "build.zig" -Raw
|
|
$pattern = 'buildpkg\.requireZig\("(.*?)"\);'
|
|
$zigVersion = [regex]::Match($fileContent, $pattern).Groups[1].Value
|
|
$version = "zig-windows-x86_64-$zigVersion"
|
|
Write-Output $version
|
|
$uri = "https://ziglang.org/download/$zigVersion/$version.zip"
|
|
Invoke-WebRequest -Uri "$uri" -OutFile ".\zig-windows.zip"
|
|
Expand-Archive -Path ".\zig-windows.zip" -DestinationPath ".\" -Force
|
|
Remove-Item -Path ".\zig-windows.zip"
|
|
Rename-Item -Path ".\$version" -NewName ".\zig"
|
|
Write-Host "Zig installed."
|
|
.\zig\zig.exe version
|
|
|
|
- name: Generate build testing script
|
|
shell: pwsh
|
|
run: |
|
|
# Generate a script so that we can swallow the errors
|
|
$scriptContent = @"
|
|
.\zig\zig.exe build test 2>&1 | Out-File -FilePath "build.log" -Append
|
|
exit 0
|
|
"@
|
|
$scriptPath = "zigbuild.ps1"
|
|
# Write the script content to a file
|
|
$scriptContent | Set-Content -Path $scriptPath
|
|
Write-Host "Script generated at: $scriptPath"
|
|
|
|
- name: Test Windows
|
|
shell: pwsh
|
|
run: .\zigbuild.ps1 -ErrorAction SilentlyContinue
|
|
|
|
- name: Generate build script
|
|
shell: pwsh
|
|
run: |
|
|
# Generate a script so that we can swallow the errors
|
|
$scriptContent = @"
|
|
.\zig\zig.exe build 2>&1 | Out-File -FilePath "build.log" -Append
|
|
exit 0
|
|
"@
|
|
$scriptPath = "zigbuild.ps1"
|
|
# Write the script content to a file
|
|
$scriptContent | Set-Content -Path $scriptPath
|
|
Write-Host "Script generated at: $scriptPath"
|
|
|
|
- name: Build Windows
|
|
shell: pwsh
|
|
run: .\zigbuild.ps1 -ErrorAction SilentlyContinue
|
|
|
|
- name: Dump logs
|
|
shell: pwsh
|
|
run: Get-Content -Path ".\build.log"
|
|
|
|
build-windows-cross:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: ["namespace-profile-ghostty-md"]
|
|
|
|
target: [
|
|
x86-windows-gnu,
|
|
x86_64-windows-gnu,
|
|
# We don't support cross-compiling to macOS or Linux because
|
|
# we require system libraries.
|
|
#aarch64-linux,
|
|
#x86_64-linux,
|
|
#aarch64-macos,
|
|
#x86_64-macos,
|
|
]
|
|
runs-on: ${{ matrix.os }}
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
# Cross-compile the binary. We always use static building for this
|
|
# because its the only way to access the headers.
|
|
- name: Test Build
|
|
run: nix develop -c zig build -Dapp-runtime=glfw -Dtarget=${{ matrix.target }}
|
|
|
|
test:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-md
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: test
|
|
run: nix develop -c zig build -Dapp-runtime=none test
|
|
|
|
- name: Test GTK Build
|
|
run: nix develop -c zig build -Dapp-runtime=gtk -Demit-docs
|
|
|
|
- name: Test GLFW Build
|
|
run: nix develop -c zig build -Dapp-runtime=glfw
|
|
|
|
# This relies on the cache being populated by the commands above.
|
|
- name: Test System Build
|
|
run: nix develop -c zig build --system ${ZIG_GLOBAL_CACHE_DIR}/p
|
|
|
|
test-gtk:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
x11: ["true", "false"]
|
|
wayland: ["true", "false"]
|
|
name: GTK x11=${{ matrix.x11 }} wayland=${{ matrix.wayland }}
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test GTK Build
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dapp-runtime=gtk \
|
|
-Dgtk-x11=${{ matrix.x11 }} \
|
|
-Dgtk-wayland=${{ matrix.wayland }}
|
|
|
|
test-sentry-linux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sentry: ["true", "false"]
|
|
name: Build -Dsentry=${{ matrix.sentry }}
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test Sentry Build
|
|
run: |
|
|
nix develop -c zig build -Dsentry=${{ matrix.sentry }}
|
|
|
|
test-macos:
|
|
runs-on: namespace-profile-ghostty-macos-sequoia
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
- name: test
|
|
run: nix develop -c zig build test --system ${{ steps.deps.outputs.deps }}
|
|
|
|
zig-fmt:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: zig fmt
|
|
run: nix develop -c zig fmt --check .
|
|
|
|
prettier:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: prettier check
|
|
run: nix develop -c prettier --check .
|
|
|
|
alejandra:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: alejandra check
|
|
run: nix develop -c alejandra --check .
|
|
|
|
typos:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: typos check
|
|
run: nix develop -c typos
|
|
|
|
translations:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: check translations
|
|
run: nix develop -c .github/scripts/check-translations.sh
|
|
|
|
blueprint-compiler:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: check blueprints
|
|
run: nix develop -c ./nix/build-support/check-blueprints.sh
|
|
- name: check unchanged
|
|
run: git diff --exit-code
|
|
|
|
test-pkg-linux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
pkg: ["wuffs"]
|
|
name: Test pkg/${{ matrix.pkg }}
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test ${{ matrix.pkg }} Build
|
|
run: |
|
|
nix develop -c sh -c "cd pkg/${{ matrix.pkg }} ; zig build test"
|
|
|
|
test-debian-12:
|
|
name: Test build on Debian 12
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: [test, build-dist]
|
|
steps:
|
|
- name: Install and configure Namespace CLI
|
|
uses: namespacelabs/nscloud-setup@v0
|
|
|
|
- name: Configure Namespace powered Buildx
|
|
uses: namespacelabs/nscloud-setup-buildx-action@v0
|
|
|
|
- name: Download Source Tarball Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: source-tarball
|
|
|
|
- name: Extract tarball
|
|
run: |
|
|
mkdir dist
|
|
tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz
|
|
|
|
- name: Build and push
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: dist
|
|
file: dist/src/build/docker/debian/Dockerfile
|
|
build-args: |
|
|
DISTRO_VERSION=12
|
|
|
|
flatpak-check-zig-cache:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.8
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- name: Setup Nix
|
|
uses: cachix/install-nix-action@v31
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v16
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: Check Flatpak Zig Dependencies
|
|
run: nix develop -c ./flatpak/build-support/check-zig-cache.sh
|
|
|
|
flatpak:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
name: "Flatpak"
|
|
container:
|
|
image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-47
|
|
options: --privileged
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
variant:
|
|
- arch: x86_64
|
|
runner: namespace-profile-ghostty-md
|
|
- arch: aarch64
|
|
runner: namespace-profile-ghostty-md-arm64
|
|
runs-on: ${{ matrix.variant.runner }}
|
|
needs: [flatpak-check-zig-cache, test]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
|
with:
|
|
bundle: com.mitchellh.ghostty
|
|
manifest-path: flatpak/com.mitchellh.ghostty.yml
|
|
cache-key: flatpak-builder-${{ github.sha }}
|
|
arch: ${{ matrix.variant.arch }}
|
|
verbose: true
|