ci: validate macOS managed behavior on Ubuntu and stabilize shutdown

This commit is contained in:
dh
2026-10-03 11:30:29 +02:00
parent bd35ebc4c8
commit 1164c26846
10 changed files with 201 additions and 72 deletions
@@ -9,6 +9,7 @@ using Microsoft.Data.Sqlite;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.Abstractions;
using System.Net.Http.Json;
@@ -19,18 +20,15 @@ public sealed class MacOsMeetingAudioSourceTests
[Fact]
public void MacOsServiceLauncherDefinesStablePrivacyIdentity()
{
if (!OperatingSystem.IsMacOS())
var repositoryDirectory = new DirectoryInfo(AppContext.BaseDirectory);
while (repositoryDirectory is not null &&
!File.Exists(Path.Combine(repositoryDirectory.FullName, "MeetingAssistant", "MeetingAssistant.csproj")))
{
return;
repositoryDirectory = repositoryDirectory.Parent;
}
var projectDirectory = Path.GetFullPath(Path.Combine(
AppContext.BaseDirectory,
"..",
"..",
"..",
"..",
"MeetingAssistant"));
Assert.NotNull(repositoryDirectory);
var projectDirectory = Path.Combine(repositoryDirectory.FullName, "MeetingAssistant");
var launcherDirectory = Path.Combine(projectDirectory, "Native", "MacOsLauncher");
var infoPlistPath = Path.Combine(launcherDirectory, "Info.plist");
var launcherSourcePath = Path.Combine(launcherDirectory, "main.swift");
@@ -54,14 +52,9 @@ public sealed class MacOsMeetingAudioSourceTests
StringComparison.Ordinal);
}
[Fact]
[MacOsFact]
public void NativeAudioCaptureIsPackagedAsSignedMacOsAppForPersistentPrivacyGrant()
{
if (!OperatingSystem.IsMacOS())
{
return;
}
var configuration = new DirectoryInfo(AppContext.BaseDirectory)
.Parent?.Name ?? "Debug";
var appPath = Path.GetFullPath(Path.Combine(
@@ -191,6 +184,10 @@ public sealed class MacOsMeetingAudioSourceTests
});
builder.ConfigureTestServices(services =>
{
// The endpoint fixture supplies its own transcription pipeline and does not warm external pyannote models.
services.Remove(services.Single(descriptor =>
descriptor.ServiceType == typeof(IHostedService) &&
descriptor.ImplementationType == typeof(PyannoteDiarizationWarmupHostedService)));
services.RemoveAll<IMeetingAudioSource>();
services.RemoveAll<IMacOsAudioCaptureProcessFactory>();
PortableMeetingAudioRegistration.Add(services, isMacOs: true);