mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-13 19:15:48 +00:00
Add a "Run Example" step to the build-examples-cmake-windows job so that each CMake example is executed after it is built, verifying the resulting binaries actually work. The executable name is derived from the matrix directory name by replacing hyphens with underscores, matching the project convention.
1590 lines
53 KiB
YAML
1590 lines
53 KiB
YAML
on:
|
|
push: {}
|
|
pull_request: {}
|
|
workflow_dispatch: {}
|
|
|
|
name: Test
|
|
|
|
# We only want the latest commit to test for any non-main ref.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref_name != 'main' && github.ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Determines whether other jobs should be skipped. Modify this if there
|
|
# are other fast skip conditions, and add it as an output. Then modify
|
|
# other tests `needs/if` to check them. Document the outputs.
|
|
skip:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
outputs:
|
|
# 'true' when all changed files are non-code (e.g. only VOUCHED.td),
|
|
# signaling that all other jobs can be skipped entirely.
|
|
skip: ${{ steps.determine.outputs.skip }}
|
|
# Path-based filters to gate specific linter/formatter jobs.
|
|
actions_pins: ${{ steps.filter_any.outputs.actions_pins }}
|
|
blueprints: ${{ steps.filter_any.outputs.blueprints }}
|
|
macos: ${{ steps.filter_any.outputs.macos }}
|
|
nix: ${{ steps.filter_any.outputs.nix }}
|
|
shell: ${{ steps.filter_any.outputs.shell }}
|
|
zig: ${{ steps.filter_any.outputs.zig }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
|
|
id: filter_every
|
|
with:
|
|
token: ""
|
|
predicate-quantifier: "every"
|
|
filters: |
|
|
code:
|
|
- '**'
|
|
- '!.github/VOUCHED.td'
|
|
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
|
|
id: filter_any
|
|
with:
|
|
token: ""
|
|
filters: |
|
|
macos:
|
|
- '.swiftlint.yml'
|
|
- 'macos/**'
|
|
actions_pins:
|
|
- '.github/workflows/**'
|
|
- '.github/pinact.yml'
|
|
shell:
|
|
- '**/*.sh'
|
|
- '**/*.bash'
|
|
nix:
|
|
- 'nix/**'
|
|
- '*.nix'
|
|
- 'flake.nix'
|
|
- 'flake.lock'
|
|
- 'default.nix'
|
|
- 'shell.nix'
|
|
zig:
|
|
- '**/*.zig'
|
|
- 'build.zig*'
|
|
blueprints:
|
|
- 'src/apprt/gtk/**/*.blp'
|
|
- 'nix/build-support/check-blueprints.sh'
|
|
|
|
- id: determine
|
|
name: Determine skip
|
|
run: |
|
|
if [ "${{ steps.filter_every.outputs.code }}" = "false" ]; then
|
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "skip=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
required:
|
|
name: "Required Checks: Test"
|
|
if: always()
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs:
|
|
- skip
|
|
- build-bench
|
|
- build-dist
|
|
- build-examples-zig
|
|
- build-examples-cmake
|
|
- build-examples-cmake-windows
|
|
- build-cmake
|
|
- build-flatpak
|
|
- build-libghostty-vt
|
|
- build-libghostty-vt-android
|
|
- build-libghostty-vt-macos
|
|
- build-libghostty-vt-windows
|
|
- build-linux
|
|
- build-linux-libghostty
|
|
- build-nix
|
|
- build-macos
|
|
- build-macos-freetype
|
|
- build-snap
|
|
- test
|
|
- test-simd
|
|
- test-gtk
|
|
- test-sentry-linux
|
|
- test-i18n
|
|
- test-fuzz-libghostty
|
|
- test-lib-vt
|
|
- test-macos
|
|
- pinact
|
|
- prettier
|
|
- swiftlint
|
|
- alejandra
|
|
- typos
|
|
- shellcheck
|
|
- translations
|
|
- blueprint-compiler
|
|
- test-pkg-linux
|
|
- test-debian-13
|
|
- valgrind
|
|
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build Benchmarks
|
|
run: nix develop -c zig build -Demit-bench
|
|
|
|
list-examples:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
outputs:
|
|
zig: ${{ steps.list.outputs.zig }}
|
|
cmake: ${{ steps.list.outputs.cmake }}
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- id: list
|
|
name: List example directories
|
|
run: |
|
|
zig=$(ls example/*/build.zig.zon 2>/dev/null | xargs -n1 dirname | xargs -n1 basename | jq -R -s -c 'split("\n") | map(select(. != ""))')
|
|
echo "$zig" | jq .
|
|
echo "zig=$zig" >> "$GITHUB_OUTPUT"
|
|
cmake=$(ls example/*/CMakeLists.txt 2>/dev/null | xargs -n1 dirname | xargs -n1 basename | jq -R -s -c 'split("\n") | map(select(. != ""))')
|
|
echo "$cmake" | jq .
|
|
echo "cmake=$cmake" >> "$GITHUB_OUTPUT"
|
|
|
|
build-examples-zig:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
dir: ${{ fromJSON(needs.list-examples.outputs.zig) }}
|
|
name: Example ${{ matrix.dir }}
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs: [test, list-examples]
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build Example
|
|
run: |
|
|
cd example/${{ matrix.dir }}
|
|
nix develop -c zig build
|
|
|
|
build-examples-cmake:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
dir: ${{ fromJSON(needs.list-examples.outputs.cmake) }}
|
|
name: Example ${{ matrix.dir }}
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs: [test, list-examples]
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build Example
|
|
run: |
|
|
cd example/${{ matrix.dir }}
|
|
nix develop -c cmake -B build -DFETCHCONTENT_SOURCE_DIR_GHOSTTY=${{ github.workspace }}
|
|
nix develop -c cmake --build build
|
|
|
|
build-examples-cmake-windows:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
dir: ${{ fromJSON(needs.list-examples.outputs.cmake) }}
|
|
name: Example ${{ matrix.dir }} (Windows)
|
|
runs-on: windows-2025
|
|
continue-on-error: true
|
|
timeout-minutes: 45
|
|
needs: [test, list-examples]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Install zig
|
|
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
|
|
|
|
- name: Build Example
|
|
shell: pwsh
|
|
run: |
|
|
cd example/${{ matrix.dir }}
|
|
cmake -B build -DFETCHCONTENT_SOURCE_DIR_GHOSTTY=${{ github.workspace }}
|
|
cmake --build build
|
|
|
|
- name: Run Example
|
|
shell: pwsh
|
|
run: |
|
|
$name = "${{ matrix.dir }}" -replace '-','_'
|
|
$exe = "example/${{ matrix.dir }}/build/Debug/${name}.exe"
|
|
if (!(Test-Path $exe)) { $exe = "example/${{ matrix.dir }}/build/${name}.exe" }
|
|
& $exe
|
|
|
|
build-cmake:
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build
|
|
run: |
|
|
nix develop -c cmake -B build
|
|
nix develop -c cmake --build build
|
|
|
|
- name: Verify artifacts
|
|
run: |
|
|
test -f zig-out/lib/libghostty-vt.so.0.1.0
|
|
test -d zig-out/include/ghostty
|
|
ls -la zig-out/lib/
|
|
ls -la zig-out/include/ghostty/
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build with Flatpak
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dflatpak
|
|
|
|
build-snap:
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build with Snap
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dsnap
|
|
|
|
build-libghostty-vt:
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
[
|
|
aarch64-macos,
|
|
x86_64-macos,
|
|
aarch64-linux,
|
|
x86_64-linux,
|
|
x86_64-linux-musl,
|
|
x86_64-windows,
|
|
wasm32-freestanding,
|
|
]
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Build
|
|
run: |
|
|
nix develop -c zig build -Demit-lib-vt \
|
|
-Dtarget=${{ matrix.target }} \
|
|
-Dsimd=false
|
|
|
|
# lib-vt requires macOS runner for macOS/iOS builds because it requires the `apple_sdk` path
|
|
build-libghostty-vt-macos:
|
|
strategy:
|
|
matrix:
|
|
target: [aarch64-macos, x86_64-macos, aarch64-ios]
|
|
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
cache: |
|
|
xcode
|
|
path: |
|
|
/Users/runner/zig
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.2.app
|
|
|
|
- name: Build
|
|
run: |
|
|
nix develop -c zig build -Demit-lib-vt \
|
|
-Dtarget=${{ matrix.target }}
|
|
|
|
# lib-vt requires the Android NDK for Android builds
|
|
build-libghostty-vt-android:
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
[aarch64-linux-android, x86_64-linux-android, arm-linux-androideabi]
|
|
runs-on: namespace-profile-ghostty-sm
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
ANDROID_NDK_VERSION: r29
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Setup Android NDK
|
|
uses: nttld/setup-ndk@ed92fe6cadad69be94a966a7ee3271275e62f779 # v1.6.0
|
|
id: setup-ndk
|
|
with:
|
|
ndk-version: r29
|
|
add-to-path: false
|
|
link-to-sdk: false
|
|
local-cache: true
|
|
|
|
- name: Build
|
|
run: |
|
|
nix develop -c zig build -Demit-lib-vt \
|
|
-Dtarget=${{ matrix.target }}
|
|
env:
|
|
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
|
|
|
build-libghostty-vt-windows:
|
|
runs-on: windows-2025
|
|
continue-on-error: true
|
|
timeout-minutes: 45
|
|
needs: test
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Zig
|
|
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
|
|
|
|
# TODO: Work towards passing the full test suite on Windows.
|
|
- name: Test libghostty-vt
|
|
run: zig build test-lib-vt
|
|
|
|
- name: Build libghostty-vt
|
|
run: zig build -Demit-lib-vt
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test Build
|
|
run: nix develop -c zig build
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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 '.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 '.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
|
|
outputs:
|
|
artifact-id: ${{ steps.upload-artifact.outputs.artifact-id }}
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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
|
|
id: upload-artifact
|
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
|
with:
|
|
name: source-tarball
|
|
path: |-
|
|
ghostty-source.tar.gz
|
|
|
|
trigger-snap:
|
|
if: github.event_name != 'pull_request'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs: [build-dist, build-snap]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Trigger Snap workflow
|
|
run: |
|
|
gh workflow run \
|
|
snap.yml \
|
|
--ref ${{ github.ref_name || 'main' }} \
|
|
--field source-run-id=${{ github.run_id }} \
|
|
--field source-artifact-id=${{ needs.build-dist.outputs.artifact-id }}
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
trigger-flatpak:
|
|
if: github.event_name != 'pull_request'
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
needs: [build-dist, build-flatpak]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Trigger Flatpak workflow
|
|
run: |
|
|
gh workflow run \
|
|
flatpak.yml \
|
|
--ref ${{ github.ref_name || 'main' }} \
|
|
--field source-run-id=${{ github.run_id }} \
|
|
--field source-artifact-id=${{ needs.build-dist.outputs.artifact-id }}
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
build-macos:
|
|
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
cache: |
|
|
xcode
|
|
path: |
|
|
/Users/runner/zig
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.2.app
|
|
|
|
- name: Xcode Version
|
|
run: xcodebuild -version
|
|
|
|
- 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 }} -Demit-macos-app=false
|
|
|
|
# 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 \
|
|
COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \
|
|
COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES
|
|
|
|
# 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" \
|
|
COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \
|
|
COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES
|
|
|
|
build-macos-freetype:
|
|
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
cache: |
|
|
xcode
|
|
path: |
|
|
/Users/runner/zig
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.2.app
|
|
|
|
- name: Xcode Version
|
|
run: xcodebuild -version
|
|
|
|
- name: get the Zig deps
|
|
id: deps
|
|
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT
|
|
|
|
# We run tests with an empty test filter so it runs all unit tests
|
|
# but skips Xcode tests
|
|
- name: Test All
|
|
run: |
|
|
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Drenderer=metal -Dfont-backend=coretext_freetype -Dtest-filter=""
|
|
|
|
- name: Build All
|
|
run: |
|
|
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=coretext_freetype
|
|
|
|
test:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
runs-on: namespace-profile-ghostty-md
|
|
outputs:
|
|
zig_version: ${{ steps.zig.outputs.version }}
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Get required Zig version
|
|
id: zig
|
|
run: |
|
|
echo "version=$(sed -n -E 's/^\s*\.?minimum_zig_version\s*=\s*"([^"]+)".*/\1/p' build.zig.zon)" >> $GITHUB_OUTPUT
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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 -Demit-webdata
|
|
|
|
# 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-lib-vt:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test
|
|
run: nix develop -c zig build test-lib-vt
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dapp-runtime=gtk \
|
|
-Dgtk-x11=${{ matrix.x11 }} \
|
|
-Dgtk-wayland=${{ matrix.wayland }} \
|
|
test
|
|
|
|
- name: Build
|
|
run: |
|
|
nix develop -c \
|
|
zig build \
|
|
-Dapp-runtime=gtk \
|
|
-Dgtk-x11=${{ matrix.x11 }} \
|
|
-Dgtk-wayland=${{ matrix.wayland }}
|
|
|
|
test-simd:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
simd: ["true", "false"]
|
|
name: Build -Dsimd=${{ matrix.simd }}
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test
|
|
run: |
|
|
nix develop -c zig build test -Dsimd=${{ matrix.simd }}
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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-tahoe
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
cache: |
|
|
xcode
|
|
path: |
|
|
/Users/runner/zig
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Xcode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_26.2.app
|
|
|
|
- name: Xcode Version
|
|
run: xcodebuild -version
|
|
|
|
- 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 }}
|
|
|
|
test-i18n:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
i18n: ["true", "false"]
|
|
name: Build -Di18n=${{ matrix.i18n }}
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test
|
|
run: |
|
|
nix develop -c zig build -Di18n=${{ matrix.i18n }}
|
|
|
|
test-fuzz-libghostty:
|
|
name: Build test/fuzz-libghostty
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Install AFL++ and LLVM
|
|
run: |
|
|
sudo apt-get update
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y afl++ llvm
|
|
|
|
- name: Verify AFL++ and LLVM are available
|
|
run: |
|
|
afl-cc --version
|
|
if command -v llvm-config >/dev/null 2>&1; then
|
|
llvm-config --version
|
|
else
|
|
llvm-config-18 --version
|
|
fi
|
|
|
|
- name: Build fuzzer harness
|
|
run: |
|
|
nix develop -c sh -c 'cd test/fuzz-libghostty && zig build'
|
|
|
|
zig-fmt:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.zig == 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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 .
|
|
|
|
pinact:
|
|
name: "GitHub Actions Pins"
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.actions_pins == 'true'
|
|
needs: skip
|
|
runs-on: namespace-profile-ghostty-xsm
|
|
timeout-minutes: 60
|
|
permissions:
|
|
contents: read
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: pinact check
|
|
run: nix develop -c pinact run --check
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
prettier:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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 .
|
|
|
|
swiftlint:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.macos == 'true'
|
|
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
needs: skip
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
cache: |
|
|
xcode
|
|
path: |
|
|
/Users/runner/zig
|
|
|
|
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
- uses: DeterminateSystems/nix-installer-action@main
|
|
with:
|
|
determinate: true
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
|
|
- name: swiftlint check
|
|
run: nix develop -c swiftlint lint --strict
|
|
|
|
alejandra:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.nix == 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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
|
|
|
|
shellcheck:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.shell == 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: shellcheck
|
|
run: |
|
|
nix develop -c shellcheck \
|
|
--check-sourced \
|
|
--color=always \
|
|
--severity=warning \
|
|
$(find . \( -name "*.sh" -o -name "*.bash" \) -type f ! -path "./zig-out/*" ! -path "./macos/build/*" ! -path "./.git/*" | sort)
|
|
|
|
translations:
|
|
if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.blueprints == 'true'
|
|
needs: skip
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
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-13:
|
|
name: Test build on Debian 13
|
|
runs-on: namespace-profile-ghostty-sm
|
|
timeout-minutes: 10
|
|
needs: [test, build-dist]
|
|
steps:
|
|
- name: Install and configure Namespace CLI
|
|
uses: namespacelabs/nscloud-setup@df198f982fcecfb8264bea3f1274b56a61b6dfdc # v0.0.12
|
|
|
|
- name: Configure Namespace powered Buildx
|
|
uses: namespacelabs/nscloud-setup-buildx-action@d059ed7184f0bc7c8b27e8810cea153d02bcc6dd # v0.0.23
|
|
|
|
- name: Download Source Tarball Artifacts
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
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@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
|
|
with:
|
|
context: dist
|
|
file: dist/src/build/docker/debian/Dockerfile
|
|
build-args: |
|
|
DISTRO_VERSION=13
|
|
|
|
valgrind:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-lg
|
|
timeout-minutes: 30
|
|
needs: test
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@1ca7d21a94afc7c957383a2d217460d980de4934 # v31.10.1
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: valgrind deps
|
|
run: |
|
|
sudo apt update -y
|
|
sudo apt install -y valgrind libc6-dbg
|
|
|
|
- name: valgrind
|
|
run: |
|
|
nix develop -c zig build test-valgrind
|
|
|
|
# build-freebsd:
|
|
# name: Build on FreeBSD
|
|
# needs: test
|
|
# runs-on: namespace-profile-mitchellh-sm-systemd
|
|
# strategy:
|
|
# matrix:
|
|
# release:
|
|
# - "14.3"
|
|
# - "15.0"
|
|
# timeout-minutes: 10
|
|
# steps:
|
|
# - name: Checkout Ghostty
|
|
# uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
#
|
|
# - name: Start SSH
|
|
# run: |
|
|
# sudo systemctl start ssh
|
|
#
|
|
# - name: Set up FreeBSD VM
|
|
# uses: vmactions/freebsd-vm@487ce35b96fae3e60d45b521735f5aa436ecfade # v1.2.4
|
|
# with:
|
|
# release: ${{ matrix.release }}
|
|
# copyback: false
|
|
# usesh: true
|
|
# prepare: |
|
|
# pkg install -y \
|
|
# devel/blueprint-compiler \
|
|
# devel/gettext \
|
|
# devel/git \
|
|
# devel/pkgconf \
|
|
# ftp/curl \
|
|
# graphics/wayland \
|
|
# security/ca_root_nss \
|
|
# textproc/hs-pandoc \
|
|
# x11-fonts/jetbrains-mono \
|
|
# x11-toolkits/libadwaita \
|
|
# x11-toolkits/gtk40 \
|
|
# x11-toolkits/gtk4-layer-shell
|
|
# curl -L -o /tmp/zig.tar.xz "https://ziglang.org/download/${{ needs.test.outputs.zig_version }}/zig-x86_64-freebsd-${{ needs.test.outputs.zig_version }}.tar.xz" && \
|
|
# mkdir /opt && \
|
|
# tar -xf /tmp/zig.tar.xz -C /opt && \
|
|
# rm /tmp/zig.tar.xz && \
|
|
# ln -s "/opt/zig-x86_64-freebsd-${{ needs.test.outputs.zig_version }}/zig" /usr/local/bin/zig
|
|
#
|
|
# run: |
|
|
# zig env
|
|
#
|
|
# - name: Run tests
|
|
# shell: freebsd {0}
|
|
# run: |
|
|
# cd $GITHUB_WORKSPACE
|
|
# zig build test
|
|
#
|
|
# - name: Build GTK app runtime
|
|
# shell: freebsd {0}
|
|
# run: |
|
|
# cd $GITHUB_WORKSPACE
|
|
# zig build
|
|
# ./zig-out/bin/ghostty +version
|