Skip to content

Keep selection updates synchronous on engine invalidate. #4

Keep selection updates synchronous on engine invalidate.

Keep selection updates synchronous on engine invalidate. #4

Workflow file for this run

name: Build Terminal
on:
push:
branches:
- "**"
paths-ignore:
- ".github/workflows/build-ghostty.yml"
pull_request:
paths-ignore:
- ".github/workflows/build-ghostty.yml"
permissions:
contents: read
concurrency:
group: build-terminal-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build and test
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Cache native libraries
uses: actions/cache@v4
with:
path: |
artifacts/tools
artifacts/ghostty-src
native/ghostty
native/linux-pty
native/noto-emoji/NotoColorEmoji.ttf
key: native-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/ghostty/ghostty-upstream.json', 'native/linux-pty/dt-pty-host.c', 'native/noto-emoji/noto-emoji.json') }}
restore-keys: |
native-${{ runner.os }}-${{ runner.arch }}-
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Restore
run: dotnet restore Devolutions.Terminal.slnx
- name: Build
run: dotnet build Devolutions.Terminal.slnx -c Release --no-restore
- name: Test
run: dotnet test Devolutions.Terminal.slnx -c Release --no-build
native-aot:
name: NativeAOT ${{ matrix.rid }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
rid:
- win-x64
- win-arm64
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Cache native libraries
uses: actions/cache@v4
with:
path: |
artifacts/tools
artifacts/ghostty-src
native/ghostty
native/linux-pty
native/noto-emoji/NotoColorEmoji.ttf
native/noto-emoji/NotoColorEmoji.ttf
key: native-${{ runner.os }}-${{ runner.arch }}-${{ matrix.rid }}-${{ hashFiles('native/ghostty/ghostty-upstream.json', 'native/linux-pty/dt-pty-host.c', 'native/noto-emoji/noto-emoji.json') }}
restore-keys: |
native-${{ runner.os }}-${{ runner.arch }}-
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Publish
run: >
dotnet publish src/Devolutions.Terminal/Devolutions.Terminal.csproj
-c Release
-r ${{ matrix.rid }}
--self-contained
-o artifacts/${{ matrix.rid }}
- name: Upload native executable
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: DevolutionsTerminal-${{ matrix.rid }}
path: artifacts/${{ matrix.rid }}
if-no-files-found: error
linux-managed:
name: Linux managed and metadata tests
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Cache native libraries
uses: actions/cache@v4
with:
path: |
artifacts/tools
artifacts/ghostty-src
native/ghostty
native/linux-pty
native/noto-emoji/NotoColorEmoji.ttf
key: native-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/ghostty/ghostty-upstream.json', 'native/linux-pty/dt-pty-host.c', 'native/noto-emoji/noto-emoji.json') }}
restore-keys: |
native-${{ runner.os }}-${{ runner.arch }}-
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Restore
run: dotnet restore Devolutions.Terminal.slnx
- name: Run managed tests
run: dotnet test Devolutions.Terminal.slnx -c Release --no-restore
- name: Validate Linux scripts and metadata
run: bash scripts/Test-LinuxPackagingMetadata.sh
macos-managed:
name: macOS managed and metadata tests
runs-on: macos-14
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Cache native libraries
uses: actions/cache@v4
with:
path: |
artifacts/tools
artifacts/ghostty-src
native/ghostty
native/linux-pty
native/noto-emoji/NotoColorEmoji.ttf
key: native-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/ghostty/ghostty-upstream.json', 'native/linux-pty/dt-pty-host.c', 'native/noto-emoji/noto-emoji.json') }}
restore-keys: |
native-${{ runner.os }}-${{ runner.arch }}-
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Restore
run: dotnet restore Devolutions.Terminal.slnx
- name: Run managed tests
run: dotnet test Devolutions.Terminal.slnx -c Release --no-restore
- name: Validate macOS scripts and metadata
run: bash scripts/Test-MacOsPackagingMetadata.sh
macos-native-aot:
name: macOS NativeAOT osx-arm64
runs-on: macos-14
needs: macos-managed
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Cache native libraries
uses: actions/cache@v4
with:
path: |
artifacts/tools
artifacts/ghostty-src
native/ghostty
native/linux-pty
native/noto-emoji/NotoColorEmoji.ttf
key: native-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/ghostty/ghostty-upstream.json', 'native/linux-pty/dt-pty-host.c', 'native/noto-emoji/noto-emoji.json') }}
restore-keys: |
native-${{ runner.os }}-${{ runner.arch }}-
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: NativeAOT publish
run: >
dotnet publish src/Devolutions.Terminal/Devolutions.Terminal.csproj
-c Release
-r osx-arm64
--self-contained true
-p:DebugSymbols=false
-p:DebugType=None
-p:NativeDebugSymbols=false
-o artifacts/publish/osx-arm64
- name: Build app bundle and zip
env:
MACOS_PUBLISH_DIR: ${{ github.workspace }}/artifacts/publish/osx-arm64
SOURCE_DATE_EPOCH: "1704067200"
run: bash scripts/Build-MacOsPackage.sh osx-arm64 "0.1.${{ github.run_number }}" artifacts/macos-packages
- name: Validate package without launching UI
run: bash scripts/Test-MacOsPackage.sh osx-arm64 artifacts/macos-packages/*.zip
- name: Run native non-UI gates
run: bash scripts/Test-MacOsRuntime.sh artifacts/macos-packages
- name: Upload macOS package artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: DevolutionsTerminal-osx-arm64-packages
path: artifacts/macos-packages
if-no-files-found: error
linux-packages:
name: Linux packages ${{ matrix.rid }}
runs-on: ubuntu-24.04
needs: linux-managed
strategy:
fail-fast: false
matrix:
include:
- rid: linux-x64
appimage_arch: x86_64
runtime_sha256: 2fca8b443c92510f1483a883f60061ad09b46b978b2631c807cd873a47ec260d
- rid: linux-arm64
appimage_arch: aarch64
runtime_sha256: 00cbdfcf917cc6c0ff6d3347d59e0ca1f7f45a6df1a428a0d6d8a78664d87444
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Install package inspection tools
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends \
appstream desktop-file-utils rpm squashfs-tools
- name: Install ARM64 cross toolchain
if: matrix.rid == 'linux-arm64'
run: |
sudo apt-get install --no-install-recommends \
binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu
- name: Fetch pinned AppImage runtime
env:
GH_TOKEN: ${{ github.token }}
run: |
mkdir -p artifacts/tools
gh release download 20251108 --repo AppImage/type2-runtime \
--pattern "runtime-${{ matrix.appimage_arch }}" \
--dir artifacts/tools
echo "${{ matrix.runtime_sha256 }} artifacts/tools/runtime-${{ matrix.appimage_arch }}" |
sha256sum --check
- name: NativeAOT publish
shell: bash
run: |
extra=()
if [[ "${{ matrix.rid }}" == linux-arm64 ]]; then
extra+=("-p:ObjCopyName=aarch64-linux-gnu-objcopy")
fi
dotnet publish src/Devolutions.Terminal/Devolutions.Terminal.csproj \
-c Release -r "${{ matrix.rid }}" --self-contained true \
-p:DebugSymbols=false -p:DebugType=None -p:NativeDebugSymbols=false \
-o "artifacts/publish/${{ matrix.rid }}" "${extra[@]}"
- name: Build deterministic tar, DEB, RPM, and AppImage
env:
APPIMAGE_RUNTIME_FILE: ${{ github.workspace }}/artifacts/tools/runtime-${{ matrix.appimage_arch }}
LINUX_PUBLISH_DIR: ${{ github.workspace }}/artifacts/publish/${{ matrix.rid }}
SOURCE_DATE_EPOCH: "1704067200"
run: |
bash scripts/Build-LinuxPackage.sh \
"${{ matrix.rid }}" "0.1.${{ github.run_number }}" \
artifacts/linux-packages all
- name: Validate packages without launching UI
run: |
bash scripts/Test-LinuxPackage.sh "${{ matrix.rid }}" \
artifacts/linux-packages/*-"${{ matrix.rid }}".tar.gz \
artifacts/linux-packages/*-"${{ matrix.rid }}".deb \
artifacts/linux-packages/*-"${{ matrix.rid }}".rpm \
artifacts/linux-packages/*-"${{ matrix.rid }}".AppImage
- name: Rebuild and compare x64 packages
if: matrix.rid == 'linux-x64'
env:
APPIMAGE_RUNTIME_FILE: ${{ github.workspace }}/artifacts/tools/runtime-${{ matrix.appimage_arch }}
LINUX_PUBLISH_DIR: ${{ github.workspace }}/artifacts/publish/${{ matrix.rid }}
SOURCE_DATE_EPOCH: "1704067200"
run: |
bash scripts/Build-LinuxPackage.sh \
"${{ matrix.rid }}" "0.1.${{ github.run_number }}" \
artifacts/linux-packages-rebuilt all
cmp artifacts/linux-packages/*-"${{ matrix.rid }}".sha256 \
artifacts/linux-packages-rebuilt/*-"${{ matrix.rid }}".sha256
- name: Upload Linux package artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: DevolutionsTerminal-${{ matrix.rid }}-packages
path: artifacts/linux-packages
if-no-files-found: error
linux-arm64-hardware:
name: Linux ARM64 native runtime (ubuntu-24.04-arm)
runs-on: ubuntu-24.04-arm
needs: linux-packages
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Verify native ARM64 runner
shell: bash
run: |
case "$(uname -m)" in
aarch64|arm64) ;;
*)
echo "::error::linux-arm64-hardware requires native ARM64; uname -m returned '$(uname -m)'. QEMU is not an accepted fallback."
exit 78
;;
esac
- name: Set up .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: 10.0.x
- name: Install package inspection tools
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends \
appstream cpio desktop-file-utils rpm squashfs-tools
- name: Download ARM64 packages
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: DevolutionsTerminal-linux-arm64-packages
path: artifacts/linux-arm64-packages
- name: Run native non-UI ARM64 gates
shell: bash
run: bash scripts/Test-LinuxArm64Runtime.sh artifacts/linux-arm64-packages
msix:
name: Unsigned MSIX packages
needs: native-aot
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Set up WinApp CLI
uses: microsoft/setup-WinAppCli@cc8ea9a08b3ee3db43d5aa6bddda4a0e87d800f7 # v0.1
with:
version: v0.6.0
- name: Download x64 publish
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: DevolutionsTerminal-win-x64
path: artifacts/msix/layout/win-x64
- name: Download arm64 publish
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: DevolutionsTerminal-win-arm64
path: artifacts/msix/layout/win-arm64
- name: Build unsigned MSIX packages and bundle
shell: pwsh
run: >
./src/Devolutions.Terminal.Package/Scripts/Build-Packages.ps1
-SkipPublish
-OutputDirectory ./artifacts/msix
-Version "0.1.${{ github.run_number }}.0"
- name: Validate package structure
shell: pwsh
run: >
./src/Devolutions.Terminal.Package/Scripts/Test-Packages.ps1
-PackagePath (Get-ChildItem ./artifacts/msix/packages -File |
Where-Object Extension -In ".msix", ".msixbundle" |
ForEach-Object FullName)
- name: Upload unsigned MSIX artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: DevolutionsTerminal-MSIX-unsigned
path: artifacts/msix/packages
if-no-files-found: error