From 5796ddff03a5ed592bb12fff5de78c0c8a22d566 Mon Sep 17 00:00:00 2001 From: Si Beaumont Date: Tue, 5 May 2026 14:55:35 +0100 Subject: [PATCH 1/2] Update CI scripts to support dependency overrides where traits are used --- scripts/run-integration-test.sh | 16 ++++++++++++++-- scripts/test-examples.sh | 31 +++++++++++++++---------------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/scripts/run-integration-test.sh b/scripts/run-integration-test.sh index 84a698c1e..d28d091b8 100755 --- a/scripts/run-integration-test.sh +++ b/scripts/run-integration-test.sh @@ -39,8 +39,20 @@ log "Extracting name for Swift package: ${PACKAGE_PATH}" PACKAGE_NAME=$(swift package --package-path "${PACKAGE_PATH}" describe --type json | "${JQ_BIN}" -r .name) log "Overriding dependency in ${INTEGRATION_TEST_PACKAGE_PATH} on ${PACKAGE_NAME} to use ${PACKAGE_PATH}" -swift package --package-path "${INTEGRATION_TEST_PACKAGE_PATH}" \ - edit "${PACKAGE_NAME}" --path "${PACKAGE_PATH}" +cat >> "${INTEGRATION_TEST_PACKAGE_PATH}/Package.swift" << EOF +// BEGIN: Local override for integration testing +guard let dependencyToOverride = package.dependencies.firstIndex(where: { dependency in + switch dependency.kind { + case .sourceControl(_, let location, _) where location.hasSuffix("/${PACKAGE_NAME}"): true + case .registry("${PACKAGE_NAME}", _): true + case .fileSystem("${PACKAGE_NAME}", _): true + default: false + } +}) else { fatalError("Failed to find dependency to override") } +package.dependencies.remove(at: dependencyToOverride) +package.dependencies.append(.package(name: "${PACKAGE_NAME}", path: "${PACKAGE_PATH}")) +// END: Local override for integration testing +EOF log "Building integration test package: ${INTEGRATION_TEST_PACKAGE_PATH}" swift build --package-path "${INTEGRATION_TEST_PACKAGE_PATH}" diff --git a/scripts/test-examples.sh b/scripts/test-examples.sh index fb90d572a..58659edb7 100755 --- a/scripts/test-examples.sh +++ b/scripts/test-examples.sh @@ -51,26 +51,26 @@ for EXAMPLE_PACKAGE_PATH in $(find "${EXAMPLES_PACKAGE_PATH}" -maxdepth 2 -name log "Updating mtime of example contents..." find "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" -print0 | xargs -0 -n1 touch -m - log "Re-overriding dependency in ${EXAMPLE_PACKAGE_NAME} to use ${PACKAGE_PATH}" - "${SWIFT_BIN}" package \ - --package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \ - --cache-path "${SHARED_PACKAGE_CACHE_PATH}" \ - --skip-update \ - --scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" \ - unedit swift-openapi-generator || : - "${SWIFT_BIN}" package \ - --package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \ - --cache-path "${SHARED_PACKAGE_CACHE_PATH}" \ - --skip-update \ - --scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" \ - edit swift-openapi-generator \ - --path "${PACKAGE_PATH}" + log "Overriding swift-openapi-generator dependency in ${EXAMPLE_PACKAGE_NAME} to use ${PACKAGE_PATH}" + cat >> "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}/Package.swift" << EOF +// BEGIN: Local override for example package testing +guard let dependencyToOverride = package.dependencies.firstIndex(where: { dependency in + switch dependency.kind { + case .sourceControl(_, let location, _) where location.hasSuffix("/swift-openapi-generator"): true + case .registry("swift-openapi-generator", _): true + case .fileSystem("swift-openapi-generator", _): true + default: false + } +}) else { fatalError("Failed to find dependency to override") } +package.dependencies.remove(at: dependencyToOverride) +package.dependencies.append(.package(name: "swift-openapi-generator", path: "${PACKAGE_PATH}")) +// END: Local override for example package testing +EOF log "Building example package: ${EXAMPLE_PACKAGE_NAME}" "${SWIFT_BIN}" build --build-tests \ --package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \ --cache-path "${SHARED_PACKAGE_CACHE_PATH}" \ - --skip-update \ --scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" log "✅ Successfully built the example package ${EXAMPLE_PACKAGE_NAME}." @@ -79,7 +79,6 @@ for EXAMPLE_PACKAGE_PATH in $(find "${EXAMPLES_PACKAGE_PATH}" -maxdepth 2 -name "${SWIFT_BIN}" test \ --package-path "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}" \ --cache-path "${SHARED_PACKAGE_CACHE_PATH}" \ - --skip-update \ --scratch-path "${SHARED_PACKAGE_SCRATCH_PATH}" log "✅ Passed the tests for the example package ${EXAMPLE_PACKAGE_NAME}." fi From b0dd905a261bc73c372387c47a99b8cfd8e17fe6 Mon Sep 17 00:00:00 2001 From: Si Beaumont Date: Tue, 5 May 2026 15:47:52 +0100 Subject: [PATCH 2/2] Use if-let because the manual examples don't have package dependency to override --- scripts/test-examples.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/test-examples.sh b/scripts/test-examples.sh index 58659edb7..e3e369762 100755 --- a/scripts/test-examples.sh +++ b/scripts/test-examples.sh @@ -54,16 +54,17 @@ for EXAMPLE_PACKAGE_PATH in $(find "${EXAMPLES_PACKAGE_PATH}" -maxdepth 2 -name log "Overriding swift-openapi-generator dependency in ${EXAMPLE_PACKAGE_NAME} to use ${PACKAGE_PATH}" cat >> "${SHARED_EXAMPLE_HARNESS_PACKAGE_PATH}/Package.swift" << EOF // BEGIN: Local override for example package testing -guard let dependencyToOverride = package.dependencies.firstIndex(where: { dependency in +if let dependencyToOverride = package.dependencies.firstIndex(where: { dependency in switch dependency.kind { case .sourceControl(_, let location, _) where location.hasSuffix("/swift-openapi-generator"): true case .registry("swift-openapi-generator", _): true case .fileSystem("swift-openapi-generator", _): true default: false } -}) else { fatalError("Failed to find dependency to override") } -package.dependencies.remove(at: dependencyToOverride) -package.dependencies.append(.package(name: "swift-openapi-generator", path: "${PACKAGE_PATH}")) +}) { + package.dependencies.remove(at: dependencyToOverride) + package.dependencies.append(.package(name: "swift-openapi-generator", path: "${PACKAGE_PATH}")) +} // END: Local override for example package testing EOF