diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 9c069b12f6f..c1fdd08c945 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -44,6 +44,14 @@
$(DefineConstants);ARM64
+
+
+ $(DefineConstants);PPC64LE
+
+
+
+ $(DefineConstants);S390X
+
diff --git a/src/Misc/externals.sh b/src/Misc/externals.sh
index 8806a20fa8f..adf5622326a 100755
--- a/src/Misc/externals.sh
+++ b/src/Misc/externals.sh
@@ -187,3 +187,15 @@ fi
if [[ "$PACKAGERUNTIME" == "linux-arm" ]]; then
acquireExternalTool "$NODE_URL/v${NODE20_VERSION}/node-v${NODE20_VERSION}-linux-armv7l.tar.gz" node20 fix_nested_dir
fi
+
+# PowerPC 64-bit LE: Download Node.js binaries for JavaScript action execution
+if [[ "$PACKAGERUNTIME" == "linux-ppc64le" ]]; then
+ acquireExternalTool "$NODE_URL/v${NODE20_VERSION}/node-v${NODE20_VERSION}-linux-ppc64le.tar.gz" node20 fix_nested_dir
+ acquireExternalTool "$NODE_URL/v${NODE24_VERSION}/node-v${NODE24_VERSION}-linux-ppc64le.tar.gz" node24 fix_nested_dir
+fi
+
+# IBM Z mainframe: Download Node.js binaries for JavaScript action execution
+if [[ "$PACKAGERUNTIME" == "linux-s390x" ]]; then
+ acquireExternalTool "$NODE_URL/v${NODE20_VERSION}/node-v${NODE20_VERSION}-linux-s390x.tar.gz" node20 fix_nested_dir
+ acquireExternalTool "$NODE_URL/v${NODE24_VERSION}/node-v${NODE24_VERSION}-linux-s390x.tar.gz" node24 fix_nested_dir
+fi
diff --git a/src/Misc/layoutroot/config.sh b/src/Misc/layoutroot/config.sh
index 14cc6bab0c3..a5ac863fe6c 100755
--- a/src/Misc/layoutroot/config.sh
+++ b/src/Misc/layoutroot/config.sh
@@ -9,7 +9,8 @@ if [ $user_id -eq 0 -a -z "$RUNNER_ALLOW_RUNASROOT" ]; then
fi
# Check dotnet Core 6.0 dependencies for Linux
-if [[ (`uname` == "Linux") ]]
+# Skip dependency checks for ppc64le/s390x (non-self-contained deployment uses system .NET runtime)
+if [[ (`uname` == "Linux") && (`uname -m` != "ppc64le") && (`uname -m` != "s390x") ]]
then
command -v ldd > /dev/null
if [ $? -ne 0 ]
diff --git a/src/Runner.Common/Constants.cs b/src/Runner.Common/Constants.cs
index 583958981a9..fe2eff91b67 100644
--- a/src/Runner.Common/Constants.cs
+++ b/src/Runner.Common/Constants.cs
@@ -59,7 +59,9 @@ public enum Architecture
X86,
X64,
Arm,
- Arm64
+ Arm64,
+ Ppc64le, // PowerPC 64-bit Little Endian (IBM Power Systems)
+ S390x // IBM Z mainframe architecture
}
public static class Runner
@@ -82,6 +84,12 @@ public static class Runner
public static readonly Architecture PlatformArchitecture = Architecture.Arm;
#elif ARM64
public static readonly Architecture PlatformArchitecture = Architecture.Arm64;
+#elif PPC64LE
+ // PowerPC 64-bit LE: Detected when built with PPC64LE symbol (set by Directory.Build.props)
+ public static readonly Architecture PlatformArchitecture = Architecture.Ppc64le;
+#elif S390X
+ // IBM Z mainframe: Detected when built with S390X symbol (set by Directory.Build.props)
+ public static readonly Architecture PlatformArchitecture = Architecture.S390x;
#else
public static readonly Architecture PlatformArchitecture = Architecture.X64;
#endif
diff --git a/src/Runner.Common/Runner.Common.csproj b/src/Runner.Common/Runner.Common.csproj
index 6c4635626a2..a4c0b23a2a9 100644
--- a/src/Runner.Common/Runner.Common.csproj
+++ b/src/Runner.Common/Runner.Common.csproj
@@ -4,6 +4,9 @@
net8.0
Library
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Runner.Common/Util/VarUtil.cs b/src/Runner.Common/Util/VarUtil.cs
index 97273a1adb3..2895111049b 100644
--- a/src/Runner.Common/Util/VarUtil.cs
+++ b/src/Runner.Common/Util/VarUtil.cs
@@ -53,6 +53,10 @@ public static string OSArchitecture
return "ARM";
case Constants.Architecture.Arm64:
return "ARM64";
+ case Constants.Architecture.Ppc64le:
+ return "PPC64LE"; // Used in RUNNER_ARCH environment variable
+ case Constants.Architecture.S390x:
+ return "S390X"; // Used in RUNNER_ARCH environment variable
default:
throw new NotSupportedException(); // Should never reach here.
}
diff --git a/src/Runner.Listener/Runner.Listener.csproj b/src/Runner.Listener/Runner.Listener.csproj
index 68df8fbbc67..09a213120d3 100644
--- a/src/Runner.Listener/Runner.Listener.csproj
+++ b/src/Runner.Listener/Runner.Listener.csproj
@@ -5,6 +5,9 @@
Exe
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
true
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Runner.PluginHost/Runner.PluginHost.csproj b/src/Runner.PluginHost/Runner.PluginHost.csproj
index 81a8d2e4304..658df2d6dfc 100644
--- a/src/Runner.PluginHost/Runner.PluginHost.csproj
+++ b/src/Runner.PluginHost/Runner.PluginHost.csproj
@@ -5,6 +5,9 @@
Exe
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
true
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Runner.Plugins/Runner.Plugins.csproj b/src/Runner.Plugins/Runner.Plugins.csproj
index a786cf1cd1b..a5470d94344 100644
--- a/src/Runner.Plugins/Runner.Plugins.csproj
+++ b/src/Runner.Plugins/Runner.Plugins.csproj
@@ -5,6 +5,9 @@
Library
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
true
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Runner.Sdk/Runner.Sdk.csproj b/src/Runner.Sdk/Runner.Sdk.csproj
index 55dbf12627c..d0427c0951b 100644
--- a/src/Runner.Sdk/Runner.Sdk.csproj
+++ b/src/Runner.Sdk/Runner.Sdk.csproj
@@ -5,6 +5,9 @@
Library
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
true
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Runner.Worker/Runner.Worker.csproj b/src/Runner.Worker/Runner.Worker.csproj
index 4470920e10c..633d61c86d2 100644
--- a/src/Runner.Worker/Runner.Worker.csproj
+++ b/src/Runner.Worker/Runner.Worker.csproj
@@ -5,6 +5,9 @@
Exe
win-x64;win-x86;linux-x64;linux-arm64;linux-arm;osx-x64;osx-arm64;win-arm64
true
+
+ false
+ false
true
NU1701;NU1603;SYSLIB0050;SYSLIB0051
$(Version)
diff --git a/src/Test/L0/ConstantGenerationL0.cs b/src/Test/L0/ConstantGenerationL0.cs
index f3c1b8f9eaf..aaede893d19 100644
--- a/src/Test/L0/ConstantGenerationL0.cs
+++ b/src/Test/L0/ConstantGenerationL0.cs
@@ -20,6 +20,8 @@ public void BuildConstantGenerateSucceed()
"linux-x64",
"linux-arm",
"linux-arm64",
+ "linux-ppc64le", // PowerPC 64-bit LE (IBM Power Systems)
+ "linux-s390x", // IBM Z mainframe
"osx-x64",
"osx-arm64"
};
diff --git a/src/Test/L0/Listener/SelfUpdaterL0.cs b/src/Test/L0/Listener/SelfUpdaterL0.cs
index 8003dd071f1..80cec5e2e12 100644
--- a/src/Test/L0/Listener/SelfUpdaterL0.cs
+++ b/src/Test/L0/Listener/SelfUpdaterL0.cs
@@ -1,4 +1,6 @@
-#if !(OS_WINDOWS && ARM64)
+// Skip self-updater tests on Windows ARM64, ppc64le, and s390x
+// These architectures don't have official runner packages available for self-update
+#if !(OS_WINDOWS && ARM64) && !PPC64LE && !S390X
using System;
using System.Collections.Generic;
using System.IO;
diff --git a/src/Test/L0/Listener/SelfUpdaterV2L0.cs b/src/Test/L0/Listener/SelfUpdaterV2L0.cs
index a91e112730e..2dd481195a1 100644
--- a/src/Test/L0/Listener/SelfUpdaterV2L0.cs
+++ b/src/Test/L0/Listener/SelfUpdaterV2L0.cs
@@ -1,4 +1,6 @@
-#if !(OS_WINDOWS && ARM64)
+// Skip self-updater tests on Windows ARM64, ppc64le, and s390x
+// These architectures don't have official runner packages available for self-update
+#if !(OS_WINDOWS && ARM64) && !PPC64LE && !S390X
using System;
using System.Collections.Generic;
using System.IO;
diff --git a/src/dev.sh b/src/dev.sh
index 716fa08e677..5bca226f154 100755
--- a/src/dev.sh
+++ b/src/dev.sh
@@ -54,6 +54,8 @@ elif [[ "$CURRENT_PLATFORM" == 'linux' ]]; then
case $CPU_NAME in
armv7l) RUNTIME_ID="linux-arm";;
aarch64) RUNTIME_ID="linux-arm64";;
+ ppc64le) RUNTIME_ID="linux-ppc64le";; # PowerPC 64-bit LE (IBM Power)
+ s390x) RUNTIME_ID="linux-s390x";; # IBM Z mainframe
esac
fi
elif [[ "$CURRENT_PLATFORM" == 'darwin' ]]; then
@@ -72,7 +74,7 @@ fi
# Make sure current platform support publish the dotnet runtime
# Windows can publish win-x86/x64/arm64
-# Linux can publish linux-x64/arm/arm64
+# Linux can publish linux-x64/x86/arm/arm64/ppc64le/s390x
# OSX can publish osx-x64/arm64
if [[ "$CURRENT_PLATFORM" == 'windows' ]]; then
if [[ ("$RUNTIME_ID" != 'win-x86') && ("$RUNTIME_ID" != 'win-x64') && ("$RUNTIME_ID" != 'win-arm64') ]]; then
@@ -80,7 +82,7 @@ if [[ "$CURRENT_PLATFORM" == 'windows' ]]; then
exit 1
fi
elif [[ "$CURRENT_PLATFORM" == 'linux' ]]; then
- if [[ ("$RUNTIME_ID" != 'linux-x64') && ("$RUNTIME_ID" != 'linux-x86') && ("$RUNTIME_ID" != 'linux-arm64') && ("$RUNTIME_ID" != 'linux-arm') ]]; then
+ if [[ ("$RUNTIME_ID" != 'linux-x64') && ("$RUNTIME_ID" != 'linux-x86') && ("$RUNTIME_ID" != 'linux-arm64') && ("$RUNTIME_ID" != 'linux-arm') && ("$RUNTIME_ID" != 'linux-ppc64le') && ("$RUNTIME_ID" != 'linux-s390x') ]]; then
echo "Failed: Can't build $RUNTIME_ID package $CURRENT_PLATFORM" >&2
exit 1
fi
@@ -200,7 +202,8 @@ function package ()
}
# Install .NET SDK
-if [[ (! -d "${DOTNETSDK_INSTALLDIR}") || (! -e "${DOTNETSDK_INSTALLDIR}/.${DOTNETSDK_VERSION}") || (! -e "${DOTNETSDK_INSTALLDIR}/dotnet") ]]; then
+# Skip SDK installation for ppc64le/s390x (use system-installed .NET runtime)
+if [[ ("$RUNTIME_ID" != "linux-ppc64le") && ("$RUNTIME_ID" != "linux-s390x") && ((! -d "${DOTNETSDK_INSTALLDIR}") || (! -e "${DOTNETSDK_INSTALLDIR}/.${DOTNETSDK_VERSION}") || (! -e "${DOTNETSDK_INSTALLDIR}/dotnet")) ]]; then
# Download dotnet SDK to ../_dotnetsdk directory
heading "Ensure Dotnet SDK"
diff --git a/src/dir.proj b/src/dir.proj
index 056a312e8f8..8c06d3a3091 100644
--- a/src/dir.proj
+++ b/src/dir.proj
@@ -42,7 +42,9 @@
-
+
+
+