Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ on:
description: "Boolean to enable the Windows nightly main Swift version matrix job. Currently has no effect!" # TODO: implement Windows benchmarking
default: false

linux_env_vars:
type: string
description: "Environment variables for Linux jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"

jobs:
construct-matrix:
name: Construct Benchmarks matrix
Expand All @@ -80,7 +85,16 @@ jobs:
with:
persist-credentials: false
- id: generate-matrix
run: echo "benchmarks-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
run: |
# Validate JSON environment variables
linux_env_vars_json='${{ inputs.linux_env_vars }}'

if ! echo "$linux_env_vars_json" | jq empty 2>/dev/null; then
echo "Error: linux_env_vars is not valid JSON"
exit 1
fi

echo "benchmarks-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | MATRIX_LINUX_ENV_VARS_JSON="${linux_env_vars_json}" bash)" >> "$GITHUB_OUTPUT"
env:
MATRIX_LINUX_COMMAND: "curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/check_benchmark_thresholds.sh | BENCHMARK_PACKAGE_PATH=${{ inputs.benchmark_package_path }} bash"
MATRIX_LINUX_SETUP_COMMAND: "swift --version && apt-get update -y -q && apt-get install -y -q curl libjemalloc-dev && git config --global --add safe.directory /$(basename ${{ github.workspace }})"
Expand Down
26 changes: 25 additions & 1 deletion .github/workflows/cxx_interop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,15 @@ on:
description: "Boolean to enable the Windows nightly main Swift version matrix job. Defaults to false. Currently has no effect!" # TODO: implement Windows Cxx compat checking
default: false

linux_env_vars:
type: string
description: "Environment variables for Linux jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"
windows_env_vars:
type: string
description: "Environment variables for Windows jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"

jobs:
construct-matrix:
name: Construct Cxx interop matrix
Expand All @@ -73,7 +82,22 @@ jobs:
with:
persist-credentials: false
- id: generate-matrix
run: echo "cxx-interop-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
run: |
# Validate JSON environment variables
linux_env_vars_json='${{ inputs.linux_env_vars }}'
windows_env_vars_json='${{ inputs.windows_env_vars }}'

if ! echo "$linux_env_vars_json" | jq empty 2>/dev/null; then
echo "Error: linux_env_vars is not valid JSON"
exit 1
fi

if ! echo "$windows_env_vars_json" | jq empty 2>/dev/null; then
echo "Error: windows_env_vars is not valid JSON"
exit 1
fi

echo "cxx-interop-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | MATRIX_LINUX_ENV_VARS_JSON="${linux_env_vars_json}" MATRIX_WINDOWS_ENV_VARS_JSON="${windows_env_vars_json}" bash)" >> "$GITHUB_OUTPUT"
env:
MATRIX_LINUX_COMMAND: "curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/check-cxx-interop-compatibility.sh | bash"
MATRIX_LINUX_SETUP_COMMAND: "swift --version && apt-get update -y -q && apt-get install -y -q curl jq"
Expand Down
44 changes: 36 additions & 8 deletions .github/workflows/macos_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,11 @@ on:
description: "The runner pool which will be requested."
default: "nightly"

env_vars:
type: string
description: "Environment variables for jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"

jobs:
construct-matrix:
name: Construct Darwin matrix
Expand All @@ -206,6 +211,15 @@ jobs:
persist-credentials: false
- id: generate-matrix
run: |
# Validate and use JSON environment variables directly
env_vars_json='${{ inputs.env_vars }}'

# Validate JSON format
if ! echo "$env_vars_json" | jq empty 2>/dev/null; then
echo "Error: env_vars is not valid JSON"
exit 1
fi

cat >> "$GITHUB_OUTPUT" << EOM
darwin-matrix=$(
runner_pool="${MATRIX_RUNNER_POOL:="nightly"}"
Expand Down Expand Up @@ -255,7 +269,8 @@ jobs:
--arg build_arguments_override "$xcode_15_4_build_arguments_override" \
--arg test_arguments_override "$xcode_15_4_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 15.4", "xcode_version": "15.4", "xcode_app": "Xcode_15.4.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 15.4", "xcode_version": "15.4", "xcode_app": "Xcode_15.4.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_16_0_enabled" == "true" ]]; then
Expand All @@ -264,7 +279,8 @@ jobs:
--arg build_arguments_override "$xcode_16_0_build_arguments_override" \
--arg test_arguments_override "$xcode_16_0_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 16.0", "xcode_version": "16.0", "xcode_app": "Xcode_16.0.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 16.0", "xcode_version": "16.0", "xcode_app": "Xcode_16.0.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_16_1_enabled" == "true" ]]; then
Expand All @@ -273,7 +289,8 @@ jobs:
--arg build_arguments_override "$xcode_16_1_build_arguments_override" \
--arg test_arguments_override "$xcode_16_1_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 16.1", "xcode_version": "16.1", "xcode_app": "Xcode_16.1.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 16.1", "xcode_version": "16.1", "xcode_app": "Xcode_16.1.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_16_2_enabled" == "true" ]]; then
Expand All @@ -282,7 +299,8 @@ jobs:
--arg build_arguments_override "$xcode_16_2_build_arguments_override" \
--arg test_arguments_override "$xcode_16_2_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 16.2", "xcode_version": "16.2", "xcode_app": "Xcode_16.2.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 16.2", "xcode_version": "16.2", "xcode_app": "Xcode_16.2.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_16_3_enabled" == "true" ]]; then
Expand All @@ -291,7 +309,8 @@ jobs:
--arg build_arguments_override "$xcode_16_3_build_arguments_override" \
--arg test_arguments_override "$xcode_16_3_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 16.3", "xcode_version": "16.3", "xcode_app": "Xcode_16.3.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 16.3", "xcode_version": "16.3", "xcode_app": "Xcode_16.3.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_16_4_enabled" == "true" ]]; then
Expand All @@ -300,7 +319,8 @@ jobs:
--arg build_arguments_override "$xcode_16_4_build_arguments_override" \
--arg test_arguments_override "$xcode_16_4_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 16.4", "xcode_version": "16.4", "xcode_app": "Xcode_16.4.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 16.4", "xcode_version": "16.4", "xcode_app": "Xcode_16.4.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_26_0_enabled" == "true" ]]; then
Expand All @@ -309,7 +329,8 @@ jobs:
--arg build_arguments_override "$xcode_26_0_build_arguments_override" \
--arg test_arguments_override "$xcode_26_0_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode 26.0", "xcode_version": "26.0", "xcode_app": "Xcode_26.0.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode 26.0", "xcode_version": "26.0", "xcode_app": "Xcode_26.0.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

if [[ "$xcode_latest_beta_enabled" == "true" ]]; then
Expand All @@ -318,7 +339,8 @@ jobs:
--arg build_arguments_override "$xcode_latest_beta_build_arguments_override" \
--arg test_arguments_override "$xcode_latest_beta_test_arguments_override" \
--arg runner_pool "$runner_pool" \
'.config[.config| length] |= . + { "name": "Xcode latest beta", "xcode_version": "latest beta", "xcode_app": "Xcode-latest.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
--argjson env_vars "$env_vars_json" \
'.config[.config| length] |= . + { "name": "Xcode latest beta", "xcode_version": "latest beta", "xcode_app": "Xcode-latest.app", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool, "env": $env_vars }')
fi

echo "$matrix" | jq -c
Expand Down Expand Up @@ -377,6 +399,12 @@ jobs:
with:
persist-credentials: false
submodules: true
- name: Export environment variables
if: ${{ matrix.config.env != '' && matrix.config.env != '{}'}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point, isn't the schema defining env as type object? If so, is the first boolean statement in this expression necessary?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Relatedly, I think we're really starting to grow beyond the current method. I understand that "inputs" only have restricted types (string, choice, boolean). Clearly it'd be out of scope for this PR, but would moving these to be Actions-proper support having richer inputs? e.g.

uses: our-thing/thing-action@v1
with:
  env:
     - this: is
     - a: proper
     - map: type
     - just: like
     - normal: env

run: |
echo "Exporting environment variables from matrix configuration..."
echo '${{ toJSON(matrix.config.env) }}' | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> $GITHUB_ENV
echo '${{ toJSON(matrix.config.env) }}' | jq -r 'to_entries[] | "exporting \(.key)=\(.value)"'
- name: Setup command
if: ${{ matrix.config.setup_command != '' }}
run: bash -c "${{ matrix.config.setup_command }}"
Expand Down
26 changes: 25 additions & 1 deletion .github/workflows/release_builds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,15 @@ on:
description: "The arguments passed to swift test in the Windows nightly main Swift version matrix job."
default: ""

linux_env_vars:
type: string
description: "Environment variables for Linux jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"
windows_env_vars:
type: string
description: "Environment variables for Windows jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"

jobs:
construct-matrix:
name: Construct release build matrix
Expand All @@ -105,7 +114,22 @@ jobs:
with:
persist-credentials: false
- id: generate-matrix
run: echo "release-build-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
run: |
# Validate JSON environment variables
linux_env_vars_json='${{ inputs.linux_env_vars }}'
windows_env_vars_json='${{ inputs.windows_env_vars }}'

if ! echo "$linux_env_vars_json" | jq empty 2>/dev/null; then
echo "Error: linux_env_vars is not valid JSON"
exit 1
fi

if ! echo "$windows_env_vars_json" | jq empty 2>/dev/null; then
echo "Error: windows_env_vars is not valid JSON"
exit 1
fi

echo "release-build-matrix=$(curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | MATRIX_LINUX_ENV_VARS_JSON="${linux_env_vars_json}" MATRIX_WINDOWS_ENV_VARS_JSON="${windows_env_vars_json}" bash)" >> "$GITHUB_OUTPUT"
env:
MATRIX_LINUX_SETUP_COMMAND: "swift --version"
MATRIX_LINUX_COMMAND: "swift build -c release"
Expand Down
83 changes: 58 additions & 25 deletions .github/workflows/static_sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,69 @@ name: Static SDK

on:
workflow_call:
inputs:
env_vars:
type: string
description: "Environment variables for jobs as JSON (e.g., '{\"DEBUG\":\"1\",\"LOG_LEVEL\":\"info\"}')."
default: "{}"

jobs:
construct-matrix:
name: Construct Static SDK matrix
runs-on: ubuntu-latest
outputs:
static-sdk-matrix: '${{ steps.generate-matrix.outputs.static-sdk-matrix }}'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- id: generate-matrix
run: |
# Validate and use JSON environment variables directly
env_vars_json='${{ inputs.env_vars }}'

# Validate JSON format
if ! echo "$env_vars_json" | jq empty 2>/dev/null; then
echo "Error: env_vars is not valid JSON"
exit 1
fi

# Generate matrix with parsed environment variables
cat >> "$GITHUB_OUTPUT" << EOM
static-sdk-matrix=$(echo '{
"config":[
{
"name":"latest-release Jammy",
"swift_version":"latest-release",
"platform":"Linux",
"runner":"ubuntu-latest",
"image":"ubuntu:jammy",
"setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_static_sdk.sh | INSTALL_SWIFT_STATIC_SDK_VERSION=latest INSTALL_SWIFT_STATIC_SDK_ARCH=x86_64 bash && hash -r",
"command":"swift build",
"command_arguments":"--swift-sdk x86_64-swift-linux-musl",
"env":'"$env_vars_json"'
},
{
"name":"main Jammy",
"swift_version":"main",
"platform":"Linux",
"runner":"ubuntu-latest",
"image":"ubuntu:jammy",
"setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_static_sdk.sh | INSTALL_SWIFT_STATIC_SDK_BRANCH=main INSTALL_SWIFT_STATIC_SDK_ARCH=x86_64 bash && hash -r",
"command":"swift build",
"command_arguments":"--swift-sdk x86_64-swift-linux-musl",
"env":'"$env_vars_json"'
}
]
}' | jq -c)
EOM

static-sdk:
name: Static SDK
needs: construct-matrix
# Workaround https://github.com/nektos/act/issues/1875
uses: apple/swift-nio/.github/workflows/swift_test_matrix.yml@main
with:
name: "Static SDK"
matrix_string: >-
{
"config":[
{
"name":"latest-release Jammy",
"swift_version":"latest-release",
"platform":"Linux",
"runner":"ubuntu-latest",
"image":"ubuntu:jammy",
"setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_static_sdk.sh | INSTALL_SWIFT_STATIC_SDK_VERSION=latest INSTALL_SWIFT_STATIC_SDK_ARCH=x86_64 bash && hash -r",
"command":"swift build",
"command_arguments":"--swift-sdk x86_64-swift-linux-musl"
},
{
"name":"main Jammy",
"swift_version":"main",
"platform":"Linux",
"runner":"ubuntu-latest",
"image":"ubuntu:jammy",
"setup_command":"apt update -q && apt install -y -q curl jq tar && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_swift_prerequisites.sh | bash && curl -s --retry 3 https://raw.githubusercontent.com/apple/swift-nio/main/scripts/install_static_sdk.sh | INSTALL_SWIFT_STATIC_SDK_BRANCH=main INSTALL_SWIFT_STATIC_SDK_ARCH=x86_64 bash && hash -r",
"command":"swift build",
"command_arguments":"--swift-sdk x86_64-swift-linux-musl"
}
]
}
matrix_string: '${{ needs.construct-matrix.outputs.static-sdk-matrix }}'
Loading
Loading