diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d516aaaf3..b81be7b05 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -172,6 +172,41 @@ jobs: cd macos xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO" + build-macos-matrix: + strategy: + fail-fast: false + matrix: + renderer: [opengl, metal] + + font_backend: + [ + freetype, + coretext, + coretext_freetype, + coretext_harfbuzz, + coretext_noshape, + ] + 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@v26 + with: + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@v14 + with: + name: ghostty + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: Test + run: nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=${{ matrix.renderer }} -Dfont-backend=${{ matrix.font_backend }} + + - name: Build + run: nix develop -c zig build -Dapp-runtime=glfw -Drenderer=${{ matrix.renderer }} -Dfont-backend=${{ matrix.font_backend }} + build-windows: runs-on: windows-2019 # this will not stop other jobs from running diff --git a/src/font/CodepointResolver.zig b/src/font/CodepointResolver.zig index a0073f9ad..543378c4f 100644 --- a/src/font/CodepointResolver.zig +++ b/src/font/CodepointResolver.zig @@ -380,32 +380,35 @@ test getIndex { var c = try Collection.init(alloc); c.load_options = .{ .library = lib }; - _ = try c.add(alloc, .regular, .{ .loaded = try Face.init( - lib, - testFont, - .{ .size = .{ .points = 12, .xdpi = 96, .ydpi = 96 } }, - ) }); - if (font.options.backend != .coretext) { - // Coretext doesn't support Noto's format + { + errdefer c.deinit(alloc); + _ = try c.add(alloc, .regular, .{ .loaded = try Face.init( + lib, + testFont, + .{ .size = .{ .points = 12, .xdpi = 96, .ydpi = 96 } }, + ) }); + if (comptime !font.options.backend.hasCoretext()) { + // Coretext doesn't support Noto's format + _ = try c.add( + alloc, + .regular, + .{ .loaded = try Face.init( + lib, + testEmoji, + .{ .size = .{ .points = 12 } }, + ) }, + ); + } _ = try c.add( alloc, .regular, .{ .loaded = try Face.init( lib, - testEmoji, + testEmojiText, .{ .size = .{ .points = 12 } }, ) }, ); } - _ = try c.add( - alloc, - .regular, - .{ .loaded = try Face.init( - lib, - testEmojiText, - .{ .size = .{ .points = 12 } }, - ) }, - ); var r: CodepointResolver = .{ .collection = c }; defer r.deinit(alloc); @@ -429,7 +432,7 @@ test getIndex { { const idx = r.getIndex(alloc, 0x270C, .regular, .text).?; try testing.expectEqual(Style.regular, idx.style); - const text_idx = if (font.options.backend == .coretext) 1 else 2; + const text_idx = if (comptime font.options.backend.hasCoretext()) 1 else 2; try testing.expectEqual(@as(Collection.Index.IndexInt, text_idx), idx.idx); } { diff --git a/src/font/SharedGridSet.zig b/src/font/SharedGridSet.zig index add1e8339..daf39b54f 100644 --- a/src/font/SharedGridSet.zig +++ b/src/font/SharedGridSet.zig @@ -233,7 +233,7 @@ fn collection( // people add other emoji fonts to their system, we always want to // prefer the official one. Users can override this by explicitly // specifying a font-family for emoji. - if (comptime builtin.target.isDarwin()) apple_emoji: { + if (comptime builtin.target.isDarwin() and Discover != void) apple_emoji: { const disco = try self.discover() orelse break :apple_emoji; var disco_it = try disco.discover(self.alloc, .{ .family = "Apple Color Emoji", diff --git a/src/font/shaper/harfbuzz.zig b/src/font/shaper/harfbuzz.zig index c34a57627..11adecb76 100644 --- a/src/font/shaper/harfbuzz.zig +++ b/src/font/shaper/harfbuzz.zig @@ -1213,7 +1213,7 @@ fn testShaperWithFont(alloc: Allocator, font_req: TestFont) !TestShaper { .{ .size = .{ .points = 12 } }, ) }); - if (font.options.backend != .coretext) { + if (comptime !font.options.backend.hasCoretext()) { // Coretext doesn't support Noto's format _ = try c.add(alloc, .regular, .{ .loaded = try Face.init( lib,