2023-12-12 11:38:39 -06:00

160 lines
5.1 KiB
YAML

on: [push, pull_request]
name: Test
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
target: [
aarch64-linux,
x86_64-linux,
x86-windows-gnu,
x86_64-windows-gnu,
# We don't support cross-compiling to macOS because the macOS build
# requires xcode due to the swift harness.
#aarch64-macos,
#x86_64-macos,
]
runs-on: ${{ matrix.os }}
needs: test
env:
# Needed for macos SDK
AGREE: "true"
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@v24
with:
nix_path: nixpkgs=channel:nixos-unstable
# 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 -Dstatic=true -Dapp-runtime=glfw -Dtarget=${{ matrix.target }}
build-macos:
runs-on: ghcr.io/cirruslabs/macos-ventura-xcode:latest
needs: test
env:
# Needed for macos SDK
AGREE: "true"
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@v24
with:
nix_path: nixpkgs=channel:nixos-unstable
# 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 -Dstatic=true
# 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
build-windows:
runs-on: windows-2019
# 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 = 'const required_zig = "(.*?)";'
$zigVersion = [regex]::Match($fileContent, $pattern).Groups[1].Value
Write-Output $version
$version = "zig-windows-x86_64-$zigVersion"
$uri = "https://ziglang.org/builds/$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 SiltentlyContinue
- name: Dump logs
shell: pwsh
run: Get-Content -Path ".\build.log"
test:
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
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@v24
with:
nix_path: nixpkgs=channel:nixos-unstable
- 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 -Dgtk-libadwaita=true
- name: Test GLFW Build
run: nix develop -c zig build -Dapp-runtime=glfw
- name: Test Dynamic Build
run: nix develop -c zig build -Dstatic=false
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # Check out repo so we can lint it
- uses: cachix/install-nix-action@v24
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: prettier check
run: nix develop -c prettier --check .
alejandra:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # Check out repo so we can lint it
- uses: cachix/install-nix-action@v24
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: alejandra check
run: nix develop -c alejandra --check .