mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-12 10:48:39 +03:00

This introduces the concept of a "dist resource" (specifically a `GhosttyDist.Resource` type). This is a resource that may be present in dist tarballs but not in the source tree. If the resource is present and we're not in a Git checkout, then we use it directly instead of generating it. This is used for the first time in this commit for the gresource c/h files, which depend on a variety of external tools (blueprint-compiler, glib-compile-resources, etc.) that we do not want to require downstream users/packagers to have and we also do not want to worry about them having the right versions. This also adds a check for `distcheck` to ensure our distribution contains all the expected files.
864 lines
27 KiB
YAML
864 lines
27 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-matrix
|
|
- build-windows
|
|
- build-windows-cross
|
|
- 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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: Test NixOS package build
|
|
run: nix build .#ghostty
|
|
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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
|
|
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@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: XCode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_16.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
|
|
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@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: XCode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_16.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
|
|
env:
|
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
- name: Setup Cache
|
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- run: sudo apt install -y udev
|
|
- run: sudo systemctl start systemd-udevd
|
|
- uses: snapcore/action-build@v1
|
|
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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
|
|
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@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
|
|
- name: XCode Select
|
|
run: sudo xcode-select -s /Applications/Xcode_16.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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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-sm
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
with:
|
|
name: ghostty
|
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
skipPush: true
|
|
useDaemon: false # sometimes fails on short jobs
|
|
- name: check translations
|
|
run: |
|
|
old_pot=$(mktemp)
|
|
cp po/com.mitchellh.ghostty.pot "$old_pot"
|
|
nix develop -c zig build update-translations
|
|
|
|
# Compare previous POT to current POT
|
|
msgcmp "$old_pot" po/com.mitchellh.ghostty.pot --use-untranslated
|
|
|
|
# Compare all other POs to current POT
|
|
for f in po/*.po; do
|
|
# Ignore untranslated entries
|
|
msgcmp --use-untranslated "$f" po/com.mitchellh.ghostty.pot;
|
|
done
|
|
|
|
blueprint-compiler:
|
|
if: github.repository == 'ghostty-org/ghostty'
|
|
runs-on: namespace-profile-ghostty-sm
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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.0
|
|
with:
|
|
path: |
|
|
/nix
|
|
/zig
|
|
|
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
- uses: cachix/install-nix-action@v30
|
|
with:
|
|
nix_path: nixpkgs=channel:nixos-unstable
|
|
- uses: cachix/cachix-action@v15
|
|
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: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- 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: Build and push
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: src/build/docker/debian/Dockerfile
|
|
build-args: |
|
|
DISTRO_VERSION=12
|