Skip to content

Commit 0a80b0c

Browse files
authored
Merge branch 'main' into feature/mtls-proxy-support
2 parents 72b5069 + c6a124e commit 0a80b0c

22 files changed

Lines changed: 763 additions & 71 deletions

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"features": {
55
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
66
"ghcr.io/devcontainers/features/dotnet": {
7-
"version": "8.0.420"
7+
"version": "8.0.421"
88
},
99
"ghcr.io/devcontainers/features/node:1": {
1010
"version": "20"

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ TestResults
2727
TestLogs
2828
.DS_Store
2929
.mono
30-
**/*.DotSettings.user
30+
**/*.DotSettings.user
31+
**/*.lscache

docs/start/envlinux.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ The `installdependencies.sh` script should install all required dependencies on
2525

2626
Debian based OS (Debian, Ubuntu, Linux Mint)
2727

28-
- liblttng-ust1 or liblttng-ust0
28+
- liblttng-ust1t64, liblttng-ust1 or liblttng-ust0
2929
- libkrb5-3
3030
- zlib1g
3131
- libssl3t64, libssl3, libssl1.1, libssl1.0.2 or libssl1.0.0
32-
- libicu76, libicu75, ..., libicu66, libicu65, libicu63, libicu60, libicu57, libicu55, or libicu52
32+
- libicu80, libicu79, ..., libicu66, libicu65, libicu63, libicu60, libicu57, libicu55, or libicu52
3333

3434
Fedora based OS (Fedora, Red Hat Enterprise Linux, CentOS, Oracle Linux 7)
3535

images/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ ARG TARGETOS
55
ARG TARGETARCH
66
ARG RUNNER_VERSION
77
ARG RUNNER_CONTAINER_HOOKS_VERSION=0.7.0
8-
ARG DOCKER_VERSION=29.4.0
9-
ARG BUILDX_VERSION=0.33.0
8+
ARG DOCKER_VERSION=29.5.0
9+
ARG BUILDX_VERSION=0.34.0
1010

1111
RUN apt update -y && apt install curl unzip -y
1212

src/Misc/externals.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ NODE_ALPINE_URL=https://github.com/actions/alpine_nodejs/releases/download
77
# When you update Node versions you must also create a new release of alpine_nodejs at that updated version.
88
# Follow the instructions here: https://github.com/actions/alpine_nodejs?tab=readme-ov-file#getting-started
99
NODE20_VERSION="20.20.2"
10-
NODE24_VERSION="24.15.0"
10+
NODE24_VERSION="24.16.0"
1111

1212
get_abs_path() {
1313
# exploits the fact that pwd will print abs path when no args

src/Misc/layoutbin/installdependencies.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ then
9494
fi
9595
}
9696

97-
apt_get_with_fallbacks liblttng-ust1 liblttng-ust0
97+
apt_get_with_fallbacks liblttng-ust1t64 liblttng-ust1 liblttng-ust0
9898
if [ $? -ne 0 ]
9999
then
100100
echo "'$apt_get' failed with exit code '$?'"
@@ -110,7 +110,7 @@ then
110110
exit 1
111111
fi
112112

113-
apt_get_with_fallbacks libicu76 libicu75 libicu74 libicu73 libicu72 libicu71 libicu70 libicu69 libicu68 libicu67 libicu66 libicu65 libicu63 libicu60 libicu57 libicu55 libicu52
113+
apt_get_with_fallbacks libicu80 libicu79 libicu78 libicu77 libicu76 libicu75 libicu74 libicu73 libicu72 libicu71 libicu70 libicu69 libicu68 libicu67 libicu66 libicu65 libicu63 libicu60 libicu57 libicu55 libicu52
114114
if [ $? -ne 0 ]
115115
then
116116
echo "'$apt_get' failed with exit code '$?'"

src/Runner.Common/Constants.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ public static class Features
179179
public static readonly string EmitCompositeMarkers = "actions_runner_emit_composite_markers";
180180
public static readonly string BatchActionResolution = "actions_batch_action_resolution";
181181
public static readonly string UseBearerTokenForCodeload = "actions_use_bearer_token_for_codeload";
182+
public static readonly string OverrideDebuggerWelcomeMessage = "actions_runner_override_debugger_welcome_message";
182183
}
183184

184185
// Node version migration related constants
@@ -205,7 +206,7 @@ public static class NodeMigration
205206
public static readonly string Node20DeprecationUrl = "https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/";
206207

207208
// Node 20 migration dates (hardcoded fallbacks, can be overridden via job variables)
208-
public static readonly string Node24DefaultDate = "June 2nd, 2026";
209+
public static readonly string Node24DefaultDate = "June 16th, 2026";
209210
public static readonly string Node20RemovalDate = "September 16th, 2026";
210211

211212
// Variable keys for server-overridable dates

src/Runner.Worker/Dap/DapDebugger.cs

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public sealed class DapDebugger : RunnerService, IDapDebugger
6363
private volatile DapSessionState _state = DapSessionState.NotStarted;
6464
private CancellationTokenRegistration? _cancellationRegistration;
6565
private bool _isFirstStep = true;
66+
private bool _welcomeMessageSent;
6667

6768
// Dev Tunnel relay host for remote debugging
6869
private TunnelRelayTunnelHost _tunnelRelayHost;
@@ -490,6 +491,11 @@ internal async Task HandleMessageAsync(string messageJson, CancellationToken can
490491
});
491492
Trace.Info("Sent initialized event");
492493
}
494+
495+
if (request.Command == "configurationDone")
496+
{
497+
SendWelcomeMessage();
498+
}
493499
}
494500
catch (Exception ex)
495501
{
@@ -508,6 +514,7 @@ internal async Task HandleMessageAsync(string messageJson, CancellationToken can
508514
internal void HandleClientConnected()
509515
{
510516
_isClientConnected = true;
517+
_welcomeMessageSent = false;
511518
Trace.Info("Client connected to debug session");
512519

513520
// If we're paused, re-send the stopped event so the new client
@@ -818,6 +825,34 @@ private void SendOutput(string category, string text)
818825
});
819826
}
820827

828+
internal void SendWelcomeMessage()
829+
{
830+
if (_welcomeMessageSent)
831+
{
832+
return;
833+
}
834+
_welcomeMessageSent = true;
835+
836+
var debuggerConfig = _jobContext?.Global?.Debugger;
837+
if (debuggerConfig?.OverrideWelcomeMessage == true)
838+
{
839+
if (!string.IsNullOrEmpty(debuggerConfig.WelcomeMessage))
840+
{
841+
SendOutput("console", debuggerConfig.WelcomeMessage);
842+
Trace.Info("Sent custom welcome message");
843+
}
844+
else
845+
{
846+
Trace.Info("Welcome message suppressed by override");
847+
}
848+
}
849+
else
850+
{
851+
SendOutput("console", DapReplParser.GetGeneralHelp());
852+
Trace.Info("Sent default welcome message");
853+
}
854+
}
855+
821856
internal async Task OnStepStartingAsync(IStep step, bool isFirstStep)
822857
{
823858
bool pauseOnNextStep;
@@ -860,6 +895,9 @@ internal async Task OnStepStartingAsync(IStep step, bool isFirstStep)
860895
// Send stopped event to debugger (only if client is connected)
861896
SendStoppedEvent(reason, description);
862897

898+
// Emit a banner so the user knows where REPL commands will execute
899+
SendExecutionContextBanner();
900+
863901
// Wait for debugger command
864902
await WaitForCommandAsync(cancellationToken);
865903
}
@@ -1195,7 +1233,12 @@ private async Task<EvaluateResponseBody> DispatchReplCommandAsync(
11951233

11961234
case RunCommand run:
11971235
var context = GetExecutionContextForFrame(frameId);
1198-
return await _replExecutor.ExecuteRunCommandAsync(run, context, cancellationToken);
1236+
bool isActionStep;
1237+
lock (_stateLock)
1238+
{
1239+
isActionStep = _currentStep is IActionRunner;
1240+
}
1241+
return await _replExecutor.ExecuteRunCommandAsync(run, context, isActionStep, cancellationToken);
11991242

12001243
default:
12011244
return new EvaluateResponseBody
@@ -1407,6 +1450,40 @@ private void SendStoppedEvent(string reason, string description)
14071450
});
14081451
}
14091452

1453+
/// <summary>
1454+
/// Emits a console output banner telling the user whether REPL
1455+
/// commands will execute on the host or inside the job container.
1456+
/// </summary>
1457+
private void SendExecutionContextBanner()
1458+
{
1459+
if (!_isClientConnected)
1460+
{
1461+
return;
1462+
}
1463+
1464+
bool isActionStep = _currentStep is IActionRunner;
1465+
var container = _jobContext?.Global?.Container;
1466+
1467+
string target;
1468+
if (isActionStep && container != null &&
1469+
(!string.IsNullOrEmpty(container.ContainerId) ||
1470+
FeatureManager.IsContainerHooksEnabled(_jobContext?.Global?.Variables)))
1471+
{
1472+
var image = container.ContainerImage ?? "container";
1473+
var shortId = !string.IsNullOrEmpty(container.ContainerId) && container.ContainerId.Length >= 12
1474+
? container.ContainerId.Substring(0, 12)
1475+
: container.ContainerId ?? "";
1476+
var idSuffix = !string.IsNullOrEmpty(shortId) ? $" ({shortId})" : "";
1477+
target = $"job container: {image}{idSuffix}";
1478+
}
1479+
else
1480+
{
1481+
target = "runner host";
1482+
}
1483+
1484+
SendOutput("console", $"\nCommands will run on {target}\n");
1485+
}
1486+
14101487
private string MaskUserVisibleText(string value)
14111488
{
14121489
if (string.IsNullOrEmpty(value))

0 commit comments

Comments
 (0)