From b8e64b2ab10a08e8ea223ac594066b8b35653471 Mon Sep 17 00:00:00 2001 From: Max Horstmann Date: Thu, 26 Feb 2026 15:58:19 -0500 Subject: [PATCH 1/2] add dummy bind mounts for testing --- src/Runner.Worker/JobExtension.cs | 22 ++++++++++++++++++++++ src/Runner.Worker/JobRunner.cs | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Runner.Worker/JobExtension.cs b/src/Runner.Worker/JobExtension.cs index c210ebeb80a..214946d6bff 100644 --- a/src/Runner.Worker/JobExtension.cs +++ b/src/Runner.Worker/JobExtension.cs @@ -536,6 +536,28 @@ public async Task FinalizeJob(IExecutionContext jobContext, Pipelines.AgentJobRe context.Start(); context.Debug("Starting: Complete job"); + // Tear down bind mount /mnt/foo1 + Trace.Info("Tearing down bind mount."); + try + { + var umountProcess = HostContext.CreateService(); + umountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); + umountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); + await umountProcess.ExecuteAsync( + workingDirectory: "/", + fileName: "umount", + arguments: "/mnt/foo1", + environment: null, + requireExitCodeZero: false, + cancellationToken: jobContext.CancellationToken); + Trace.Info("Bind mount /mnt/foo1 unmounted successfully."); + } + catch (Exception ex) + { + Trace.Warning($"Failed to unmount bind mount: {ex.Message}"); + context.Warning($"Failed to unmount /mnt/foo1: {ex.Message}"); + } + Trace.Info("Initialize Env context"); #if OS_WINDOWS diff --git a/src/Runner.Worker/JobRunner.cs b/src/Runner.Worker/JobRunner.cs index 72ee5a403ad..770bd5b614b 100644 --- a/src/Runner.Worker/JobRunner.cs +++ b/src/Runner.Worker/JobRunner.cs @@ -178,6 +178,30 @@ public async Task RunAsync(AgentJobRequestMessage message, Cancellat _tempDirectoryManager = HostContext.GetService(); _tempDirectoryManager.InitializeTempDirectory(jobContext); + // Create bind mount /mnt/foo1 -> /tmp/foo1 + Trace.Info("Setting up bind mount."); + try + { + Directory.CreateDirectory("/tmp/foo1"); + Directory.CreateDirectory("/mnt/foo1"); + var mountProcess = HostContext.CreateService(); + mountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); + mountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); + await mountProcess.ExecuteAsync( + workingDirectory: workDirectory, + fileName: "mount", + arguments: "--bind /tmp/foo1 /mnt/foo1", + environment: null, + requireExitCodeZero: true, + cancellationToken: jobContext.CancellationToken); + Trace.Info("Bind mount /mnt/foo1 -> /tmp/foo1 created successfully."); + } + catch (Exception ex) + { + Trace.Warning($"Failed to create bind mount: {ex.Message}"); + jobContext.Warning($"Failed to create bind mount /mnt/foo1: {ex.Message}"); + } + // Get the job extension. Trace.Info("Getting job extension."); IJobExtension jobExtension = HostContext.CreateService(); From 0c27e9388f5f33d83b6a87d5f8c6f58771ad0f6c Mon Sep 17 00:00:00 2001 From: Max Horstmann Date: Thu, 26 Feb 2026 16:31:22 -0500 Subject: [PATCH 2/2] check OS --- src/Runner.Worker/JobRunner.cs | 45 ++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/Runner.Worker/JobRunner.cs b/src/Runner.Worker/JobRunner.cs index 770bd5b614b..30107101541 100644 --- a/src/Runner.Worker/JobRunner.cs +++ b/src/Runner.Worker/JobRunner.cs @@ -178,28 +178,31 @@ public async Task RunAsync(AgentJobRequestMessage message, Cancellat _tempDirectoryManager = HostContext.GetService(); _tempDirectoryManager.InitializeTempDirectory(jobContext); - // Create bind mount /mnt/foo1 -> /tmp/foo1 - Trace.Info("Setting up bind mount."); - try - { - Directory.CreateDirectory("/tmp/foo1"); - Directory.CreateDirectory("/mnt/foo1"); - var mountProcess = HostContext.CreateService(); - mountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); - mountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); - await mountProcess.ExecuteAsync( - workingDirectory: workDirectory, - fileName: "mount", - arguments: "--bind /tmp/foo1 /mnt/foo1", - environment: null, - requireExitCodeZero: true, - cancellationToken: jobContext.CancellationToken); - Trace.Info("Bind mount /mnt/foo1 -> /tmp/foo1 created successfully."); - } - catch (Exception ex) + // Create bind mount /mnt/foo1 -> /tmp/foo1 (Linux only) + if (Constants.Runner.Platform == Constants.OSPlatform.Linux) { - Trace.Warning($"Failed to create bind mount: {ex.Message}"); - jobContext.Warning($"Failed to create bind mount /mnt/foo1: {ex.Message}"); + Trace.Info("Setting up bind mount."); + try + { + Directory.CreateDirectory("/tmp/foo1"); + Directory.CreateDirectory("/mnt/foo1"); + var mountProcess = HostContext.CreateService(); + mountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); + mountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); + await mountProcess.ExecuteAsync( + workingDirectory: workDirectory, + fileName: "mount", + arguments: "--bind /tmp/foo1 /mnt/foo1", + environment: null, + requireExitCodeZero: true, + cancellationToken: jobContext.CancellationToken); + Trace.Info("Bind mount /mnt/foo1 -> /tmp/foo1 created successfully."); + } + catch (Exception ex) + { + Trace.Warning($"Failed to create bind mount: {ex.Message}"); + jobContext.Warning($"Failed to create bind mount /mnt/foo1: {ex.Message}"); + } } // Get the job extension.