Skip to content

Commit 29823e4

Browse files
authored
[CI] Test examples (#50)
### Motivation As we evolve the API and the examples, we want to make sure the examples continue to build successfully. ### Modifications Added CI setup for the Examples directory. ### Result Better test coverage of examples. ### Test Plan Ran the script locally, will check again on CI that it's green.
1 parent d142b30 commit 29823e4

File tree

4 files changed

+136
-0
lines changed

4 files changed

+136
-0
lines changed

.github/workflows/main.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,30 @@ jobs:
8181
with:
8282
name: "Integration test"
8383
matrix_string: '${{ needs.construct-linkage-test-matrix.outputs.integration-test-matrix }}'
84+
85+
construct-example-packages-matrix:
86+
name: Construct example packages matrix
87+
runs-on: ubuntu-latest
88+
outputs:
89+
example-packages-matrix: '${{ steps.generate-matrix.outputs.example-packages-matrix }}'
90+
steps:
91+
- name: Checkout repository
92+
uses: actions/checkout@v4
93+
with:
94+
persist-credentials: false
95+
- id: generate-matrix
96+
run: echo "example-packages-matrix=$(curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
97+
env:
98+
MATRIX_LINUX_SETUP_COMMAND: git config --global --add safe.directory /swift-configuration
99+
MATRIX_LINUX_COMMAND: ./Scripts/test-examples.sh
100+
MATRIX_LINUX_5_10_ENABLED: false
101+
MATRIX_LINUX_6_0_ENABLED: false
102+
MATRIX_LINUX_NIGHTLY_MAIN_ENABLED: false
103+
104+
example-packages:
105+
name: Example packages
106+
needs: construct-example-packages-matrix
107+
uses: apple/swift-nio/.github/workflows/swift_test_matrix.yml@main
108+
with:
109+
name: "Example packages"
110+
matrix_string: '${{ needs.construct-example-packages-matrix.outputs.example-packages-matrix }}'

.github/workflows/pull_request.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,30 @@ jobs:
8888
with:
8989
name: "Integration test"
9090
matrix_string: '${{ needs.construct-linkage-test-matrix.outputs.integration-test-matrix }}'
91+
92+
construct-example-packages-matrix:
93+
name: Construct example packages matrix
94+
runs-on: ubuntu-latest
95+
outputs:
96+
example-packages-matrix: '${{ steps.generate-matrix.outputs.example-packages-matrix }}'
97+
steps:
98+
- name: Checkout repository
99+
uses: actions/checkout@v4
100+
with:
101+
persist-credentials: false
102+
- id: generate-matrix
103+
run: echo "example-packages-matrix=$(curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/generate_matrix.sh | bash)" >> "$GITHUB_OUTPUT"
104+
env:
105+
MATRIX_LINUX_SETUP_COMMAND: git config --global --add safe.directory /swift-configuration
106+
MATRIX_LINUX_COMMAND: ./Scripts/test-examples.sh
107+
MATRIX_LINUX_5_10_ENABLED: false
108+
MATRIX_LINUX_6_0_ENABLED: false
109+
MATRIX_LINUX_NIGHTLY_MAIN_ENABLED: false
110+
111+
example-packages:
112+
name: Example packages
113+
needs: construct-example-packages-matrix
114+
uses: apple/swift-nio/.github/workflows/swift_test_matrix.yml@main
115+
with:
116+
name: "Example packages"
117+
matrix_string: '${{ needs.construct-example-packages-matrix.outputs.example-packages-matrix }}'

NOTICE.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,12 @@ This repository contains the gyb script from the swiftlang/swift repository.
3434
* https://github.com/swiftlang/swift
3535

3636
---
37+
38+
This repository contains a modified copy of the test-examples.sh script the apple/swift-openapi-generator repository.
39+
40+
* LICENSE (Apache License 2.0):
41+
* https://www.apache.org/licenses/LICENSE-2.0
42+
* HOMEPAGE:
43+
* https://github.com/apple/swift-openapi-generator
44+
45+
---

Scripts/test-examples.sh

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
log() { printf -- "** %s\n" "$*" >&2; }
5+
error() { printf -- "** ERROR: %s\n" "$*" >&2; }
6+
fatal() { error "$@"; exit 1; }
7+
8+
log "Checking required executables..."
9+
SWIFT_BIN=${SWIFT_BIN:-$(command -v swift || xcrun -f swift)} || fatal "SWIFT_BIN unset and no swift on PATH"
10+
11+
CURRENT_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
12+
REPO_ROOT="$(git -C "${CURRENT_SCRIPT_DIR}" rev-parse --show-toplevel)"
13+
TMP_DIR=$(/usr/bin/mktemp -d -p "${TMPDIR-/tmp}" "$(basename "$0").XXXXXXXXXX")
14+
15+
PACKAGE_PATH=${PACKAGE_PATH:-${REPO_ROOT}}
16+
EXAMPLES_PACKAGE_PATH="${PACKAGE_PATH}/Examples"
17+
SHARED_EXAMPLE_HARNESS_PACKAGE_PATH="${TMP_DIR}/example-harness"
18+
SHARED_PACKAGE_SCRATCH_PATH="${TMP_DIR}/example-cache"
19+
SHARED_PACKAGE_CACHE_PATH="${TMP_DIR}/example-scratch"
20+
21+
for EXAMPLE_PACKAGE_PATH in $(find "${EXAMPLES_PACKAGE_PATH}" -maxdepth 2 -name Package.swift -type f -print0 | xargs -0 dirname | sort); do
22+
23+
EXAMPLE_PACKAGE_NAME="$(basename "${EXAMPLE_PACKAGE_PATH}")"
24+
25+
if [[ "${SINGLE_EXAMPLE_PACKAGE:-${EXAMPLE_PACKAGE_NAME}}" != "${EXAMPLE_PACKAGE_NAME}" ]]; then
26+
log "Skipping example: ${EXAMPLE_PACKAGE_NAME}"
27+
continue
28+
fi
29+
30+
log "Recreating shared example harness directory: ${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}"
31+
rm -rf "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}"
32+
mkdir -v "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}"
33+
34+
log "Copying example contents from ${EXAMPLE_PACKAGE_NAME} to ${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}"
35+
git archive HEAD "${EXAMPLE_PACKAGE_PATH}" --format tar | tar -C "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" -xvf- --strip-components 2
36+
37+
# GNU tar has --touch, but BSD tar does not, so we'll use touch directly.
38+
log "Updating mtime of example contents..."
39+
find "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" -print0 | xargs -0 -n1 touch -m
40+
41+
log "Re-overriding dependency in ${EXAMPLE_PACKAGE_NAME} to use ${PACKAGE_PATH}"
42+
"${SWIFT_BIN}" package \
43+
--package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \
44+
--cache-path "${SHARED_PACKAGE_CACHE_PATH}" \
45+
--skip-update \
46+
--scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" \
47+
unedit swift-configuration || :
48+
"${SWIFT_BIN}" package \
49+
--package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \
50+
--cache-path "${SHARED_PACKAGE_CACHE_PATH}" \
51+
--skip-update \
52+
--scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" \
53+
edit swift-configuration \
54+
--path "${PACKAGE_PATH}"
55+
56+
log "Building example package: ${EXAMPLE_PACKAGE_NAME}"
57+
"${SWIFT_BIN}" build --build-tests \
58+
--package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \
59+
--cache-path "${SHARED_PACKAGE_CACHE_PATH}" \
60+
--skip-update \
61+
--scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}"
62+
log "✅ Successfully built the example package ${EXAMPLE_PACKAGE_NAME}."
63+
64+
if [ -d "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}/Tests" ]; then
65+
log "Running tests for example package: ${EXAMPLE_PACKAGE_NAME}"
66+
"${SWIFT_BIN}" test \
67+
--package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \
68+
--cache-path "${SHARED_PACKAGE_CACHE_PATH}" \
69+
--skip-update \
70+
--scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}"
71+
log "✅ Passed the tests for the example package ${EXAMPLE_PACKAGE_NAME}."
72+
fi
73+
done

0 commit comments

Comments
 (0)