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 - uses: cachix/cachix-action@v13 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 -Dstatic=true -Dapp-runtime=glfw -Dtarget=${{ matrix.target }} build-nix: runs-on: ubuntu-latest 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@v24 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@v13 with: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - name: Test NixOS package build run: nix build .#ghostty 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 - uses: cachix/cachix-action@v13 with: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" # 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: runs-on: ubuntu-latest 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 - uses: cachix/cachix-action@v13 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 -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 - uses: cachix/cachix-action@v13 with: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - 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 - uses: cachix/cachix-action@v13 with: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - name: alejandra check run: nix develop -c alejandra --check .