Build example projects (#76)

Build the Examples in CI.

### Motivation:

`swift-metrics-extras` now has an `Example/ServiceIntegration`, which
depends on the package, but is not verified in the CI.

### Modifications:

- `Scripts/test-examples.sh` added (inspired by the
[`swift-configuration/Scripts/test-examples.sh`](https://github.com/apple/swift-configuration/blob/main/Scripts/test-examples.sh),
but the structure is different and this one is more simple).
- `pull_request` and `main` workflows use shared
`apple/swift-nio/.github/workflows/swift_test_matrix.yml@main` to run
the script.

### Result:

`Example/ServiceIntegration` is being built in CI on Linux
This commit is contained in:
Vladimir Kukushkin
2025-12-18 11:18:33 +00:00
committed by GitHub
parent 4c90e01c73
commit ece01fd2a2
4 changed files with 95 additions and 0 deletions
+29
View File
@@ -34,3 +34,32 @@ jobs:
release-builds:
name: Release builds
uses: apple/swift-nio/.github/workflows/release_builds.yml@main
construct-example-packages-matrix:
name: Construct example packages matrix
runs-on: ubuntu-latest
outputs:
example-packages-matrix: '${{ steps.generate-matrix.outputs.example-packages-matrix }}'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- id: generate-matrix
run: echo "example-packages-matrix=$(curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
env:
MATRIX_LINUX_SETUP_COMMAND: git config --global --add safe.directory /swift-metrics-extras
MATRIX_LINUX_COMMAND: ./Scripts/test-examples.sh
MATRIX_LINUX_5_10_ENABLED: false
MATRIX_LINUX_6_0_ENABLED: false
MATRIX_LINUX_6_1_ENABLED: false
MATRIX_LINUX_NIGHTLY_NEXT_ENABLED: false
MATRIX_LINUX_NIGHTLY_MAIN_ENABLED: false
example-packages:
name: Example packages
needs: construct-example-packages-matrix
uses: apple/swift-nio/.github/workflows/swift_test_matrix.yml@main
with:
name: "Example packages"
matrix_string: '${{ needs.construct-example-packages-matrix.outputs.example-packages-matrix }}'
+29
View File
@@ -38,3 +38,32 @@ jobs:
release-builds:
name: Release builds
uses: apple/swift-nio/.github/workflows/release_builds.yml@main
construct-example-packages-matrix:
name: Construct example packages matrix
runs-on: ubuntu-latest
outputs:
example-packages-matrix: '${{ steps.generate-matrix.outputs.example-packages-matrix }}'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- id: generate-matrix
run: echo "example-packages-matrix=$(curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
env:
MATRIX_LINUX_SETUP_COMMAND: git config --global --add safe.directory /swift-metrics-extras
MATRIX_LINUX_COMMAND: ./Scripts/test-examples.sh
MATRIX_LINUX_5_10_ENABLED: false
MATRIX_LINUX_6_0_ENABLED: false
MATRIX_LINUX_6_1_ENABLED: false
MATRIX_LINUX_NIGHTLY_NEXT_ENABLED: false
MATRIX_LINUX_NIGHTLY_MAIN_ENABLED: false
example-packages:
name: Build Examples
needs: construct-example-packages-matrix
uses: apple/swift-nio/.github/workflows/swift_test_matrix.yml@main
with:
name: "Example packages"
matrix_string: '${{ needs.construct-example-packages-matrix.outputs.example-packages-matrix }}'
+1
View File
@@ -33,3 +33,4 @@ Dockerfile
Snippets/*
dev/git.commit.template
.unacceptablelanguageignore
Scripts/*
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
set -euo pipefail
log() { printf -- "** %s\n" "$*" >&2; }
error() { printf -- "** ERROR: %s\n" "$*" >&2; }
fatal() { error "$@"; exit 1; }
log "Checking required executables..."
SWIFT_BIN=${SWIFT_BIN:-$(command -v swift || xcrun -f swift)} || fatal "SWIFT_BIN unset and no swift on PATH"
CURRENT_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
REPO_ROOT="$(git -C "${CURRENT_SCRIPT_DIR}" rev-parse --show-toplevel)"
PACKAGE_NAME=$(basename "$REPO_ROOT")
TMP_DIR=$(/usr/bin/mktemp -d -p "${TMPDIR-/tmp}" "$(basename "$0").XXXXXXXXXX")
WORK_DIR="$TMP_DIR/$PACKAGE_NAME"
/bin/mkdir -p "$WORK_DIR"
git archive HEAD "${REPO_ROOT}" --format tar | tar -C "${WORK_DIR}" -xvf-
EXAMPLES_PATH="$WORK_DIR/Examples"
for EXAMPLE_PACKAGE_PATH in $(find "${EXAMPLES_PATH}" -maxdepth 2 -name Package.swift -type f -print0 | xargs -0 dirname | sort); do
EXAMPLE_PACKAGE_NAME=$(basename "$EXAMPLE_PACKAGE_PATH")
log "Building example package: ${EXAMPLE_PACKAGE_NAME}"
"${SWIFT_BIN}" build --build-tests \
--package-path "${EXAMPLE_PACKAGE_PATH}" \
--skip-update
log "✅ Successfully built the example package ${EXAMPLE_PACKAGE_NAME}."
if [ -d "${EXAMPLE_PACKAGE_PATH}/Tests" ]; then
log "Running tests for example package: ${EXAMPLE_PACKAGE_NAME}"
"${SWIFT_BIN}" test \
--package-path "${EXAMPLE_PACKAGE_PATH}" \
--skip-update
log "✅ Passed the tests for the example package ${EXAMPLE_PACKAGE_NAME}."
fi
done