From b513d0e662e1e12b2017df59032ba6bd12d2efa0 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 01:13:53 +0100 Subject: [PATCH 01/14] Use SwiftSyntax prebuilt action in CI --- .github/workflows/test.yml | 40 ++++++++++++++++++++++++------ Examples/ActorOnWebWorker/build.sh | 2 +- Examples/Basic/build.sh | 2 +- Examples/Embedded/build.sh | 2 +- Examples/Multithreading/build.sh | 2 +- Examples/OffscrenCanvas/build.sh | 2 +- Examples/PlayBridgeJS/build.sh | 2 +- Makefile | 5 +++- Utilities/bridge-js-generate.sh | 2 +- 9 files changed, 44 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ef72ca352..1ad0ab767 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,7 @@ jobs: - os: ubuntu-24.04 toolchain: download-url: https://download.swift.org/development/ubuntu2404/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a-ubuntu24.04.tar.gz + swift-syntax-version: "603.0.2" wasi-backend: Node target: "wasm32-unknown-wasip1" env: | @@ -22,11 +23,13 @@ jobs: - os: ubuntu-24.04 toolchain: download-url: https://download.swift.org/swift-6.3-branch/ubuntu2404/swift-6.3-DEVELOPMENT-SNAPSHOT-2026-03-05-a/swift-6.3-DEVELOPMENT-SNAPSHOT-2026-03-05-a-ubuntu24.04.tar.gz + swift-syntax-version: "603.0.2" wasi-backend: Node target: "wasm32-unknown-wasip1" - os: ubuntu-22.04 toolchain: download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a-ubuntu22.04.tar.gz + swift-syntax-version: "603.0.2" wasi-backend: Node target: "wasm32-unknown-wasip1-threads" @@ -53,17 +56,25 @@ jobs: run: | echo "SWIFT_SDK_ID=${{ steps.setup-swiftwasm.outputs.swift-sdk-id }}" >> $GITHUB_ENV echo "SWIFT_BIN_PATH=$(dirname $(which swiftc))" >> $GITHUB_ENV + - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + id: swiftsyntax-prebuilts + with: + swift-syntax-version: ${{ matrix.entry.swift-syntax-version }} - run: make bootstrap - run: make unittest # Skip unit tests with uwasi because its proc_exit throws # unhandled promise rejection. if: ${{ matrix.entry.wasi-backend != 'MicroWASI' }} + env: + SWIFT_PACKAGE_FLAGS: ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} - name: Check if SwiftPM resources are stale run: | make regenerate_swiftpm_resources git diff --exit-code Sources/JavaScriptKit/Runtime - - run: swift test --package-path ./Plugins/PackageToJS - - run: swift test --package-path ./Plugins/BridgeJS + - run: swift test ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} --package-path ./Plugins/PackageToJS + - run: swift test ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} --package-path ./Plugins/BridgeJS + env: + BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }} - name: Validate BridgeJS TypeScript declarations run: npm run check:bridgejs-dts @@ -73,7 +84,7 @@ jobs: matrix: entry: - image: "swift:6.3" - swift-syntax-version: "603.0.0" + swift-syntax-version: "603.0.2" runs-on: ubuntu-latest container: image: ${{ matrix.entry.image }} @@ -85,12 +96,14 @@ jobs: node-version: '20' - name: Install TypeScript run: npm install + - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + id: swiftsyntax-prebuilts + with: + swift-syntax-version: ${{ matrix.entry.swift-syntax-version }} - name: Validate BridgeJS TypeScript declarations run: npm run check:bridgejs-dts - name: Run BridgeJS tests - # NOTE: Seems like the prebuilt SwiftSyntax binaries are not compatible with - # non-macro dependents, so disable experimental prebuilts for now. - run: swift test --disable-experimental-prebuilts --package-path ./Plugins/BridgeJS + run: swift test ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} --package-path ./Plugins/BridgeJS env: BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }} @@ -144,8 +157,14 @@ jobs: - uses: ./.github/actions/install-swift with: download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a-ubuntu22.04.tar.gz + - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + id: swiftsyntax-prebuilts + with: + swift-syntax-version: "600.0.1" - run: make bootstrap - run: ./Utilities/bridge-js-generate.sh + env: + SWIFT_PACKAGE_FLAGS: ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} - name: Check if BridgeJS generated files are up-to-date run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -167,10 +186,17 @@ jobs: - uses: swiftwasm/setup-swiftwasm@v2 id: setup-wasm32-unknown-wasip1-threads with: { target: wasm32-unknown-wasip1-threads } - - run: ./Utilities/build-examples.sh + - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + id: swiftsyntax-prebuilts + with: + swift-syntax-version: "603.0.2" + - run: | + swift --version + ./Utilities/build-examples.sh env: SWIFT_SDK_ID_wasm32_unknown_wasip1_threads: ${{ steps.setup-wasm32-unknown-wasip1-threads.outputs.swift-sdk-id }} SWIFT_SDK_ID_wasm32_unknown_wasip1: ${{ steps.setup-wasm32-unknown-wasip1.outputs.swift-sdk-id }} + SWIFT_PACKAGE_FLAGS: ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} - run: ./Utilities/prepare-gh-pages.sh - name: Upload static files as artifact id: deployment diff --git a/Examples/ActorOnWebWorker/build.sh b/Examples/ActorOnWebWorker/build.sh index 66c10a2c4..9951d45a4 100755 --- a/Examples/ActorOnWebWorker/build.sh +++ b/Examples/ActorOnWebWorker/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -euxo pipefail -swift package --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release diff --git a/Examples/Basic/build.sh b/Examples/Basic/build.sh index 07f436c4b..1ff707b36 100755 --- a/Examples/Basic/build.sh +++ b/Examples/Basic/build.sh @@ -1,3 +1,3 @@ #!/bin/bash set -euxo pipefail -swift package --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" js --use-cdn -c "${1:-debug}" +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" js --use-cdn -c "${1:-debug}" diff --git a/Examples/Embedded/build.sh b/Examples/Embedded/build.sh index 486f3581d..008297345 100755 --- a/Examples/Embedded/build.sh +++ b/Examples/Embedded/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -euxo pipefail package_dir="$(cd "$(dirname "$0")" && pwd)" -swift package --build-system native --package-path "$package_dir" \ +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --package-path "$package_dir" \ --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}-embedded" js -c release diff --git a/Examples/Multithreading/build.sh b/Examples/Multithreading/build.sh index 66c10a2c4..9951d45a4 100755 --- a/Examples/Multithreading/build.sh +++ b/Examples/Multithreading/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -euxo pipefail -swift package --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release diff --git a/Examples/OffscrenCanvas/build.sh b/Examples/OffscrenCanvas/build.sh index 66c10a2c4..9951d45a4 100755 --- a/Examples/OffscrenCanvas/build.sh +++ b/Examples/OffscrenCanvas/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -euxo pipefail -swift package --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release diff --git a/Examples/PlayBridgeJS/build.sh b/Examples/PlayBridgeJS/build.sh index eb444a899..af0fb6ab1 100755 --- a/Examples/PlayBridgeJS/build.sh +++ b/Examples/PlayBridgeJS/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -euxo pipefail -swift package --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" \ +swift package ${SWIFT_PACKAGE_FLAGS:-} --build-system native --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c "${1:-debug}" diff --git a/Makefile b/Makefile index 4b174e347..1e1eab91c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ SWIFT_SDK_ID ?= +SWIFT_PACKAGE_FLAGS ?= ifeq ($(JAVASCRIPTKIT_DISABLE_TRACING_TRAIT),1) TRACING_ARGS := else @@ -16,7 +17,9 @@ unittest: echo "SWIFT_SDK_ID is not set. Run 'swift sdk list' and pass a matching SDK, e.g. 'make unittest SWIFT_SDK_ID='."; \ exit 2; \ } - swift package --build-system native --swift-sdk "$(SWIFT_SDK_ID)" \ + swift package $(SWIFT_PACKAGE_FLAGS) \ + --build-system native \ + --swift-sdk "$(SWIFT_SDK_ID)" \ $(TRACING_ARGS) \ --disable-sandbox \ js test --prelude ./Tests/prelude.mjs -Xnode --expose-gc diff --git a/Utilities/bridge-js-generate.sh b/Utilities/bridge-js-generate.sh index 77bdd0833..5e0086a0f 100755 --- a/Utilities/bridge-js-generate.sh +++ b/Utilities/bridge-js-generate.sh @@ -2,7 +2,7 @@ set -euxo pipefail -swift build --package-path ./Plugins/BridgeJS --product BridgeJSTool +swift build ${SWIFT_PACKAGE_FLAGS:-} --package-path ./Plugins/BridgeJS --product BridgeJSTool ./Plugins/BridgeJS/.build/debug/BridgeJSTool generate --project ./tsconfig.json --module-name BridgeJSRuntimeTests --target-dir ./Tests/BridgeJSRuntimeTests --output-dir ./Tests/BridgeJSRuntimeTests/Generated ./Plugins/BridgeJS/.build/debug/BridgeJSTool generate --project ./tsconfig.json --module-name BridgeJSGlobalTests --target-dir ./Tests/BridgeJSGlobalTests --output-dir ./Tests/BridgeJSGlobalTests/Generated From 347fc7b2f974b0980ba1baca7d75fcaa264a52c4 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 02:15:41 +0100 Subject: [PATCH 02/14] Match example CI runner to Swift snapshot --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1ad0ab767..769174145 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -174,7 +174,7 @@ jobs: } build-examples: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 - uses: ./.github/actions/install-swift From d0eafd06591064a1fdada4c4b418722b6296284c Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 10:44:43 +0100 Subject: [PATCH 03/14] Avoid local SwiftSyntax prebuild in Swift release CI --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 769174145..3ca45fdef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -96,14 +96,14 @@ jobs: node-version: '20' - name: Install TypeScript run: npm install - - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 - id: swiftsyntax-prebuilts - with: - swift-syntax-version: ${{ matrix.entry.swift-syntax-version }} - name: Validate BridgeJS TypeScript declarations run: npm run check:bridgejs-dts - name: Run BridgeJS tests - run: swift test ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} --package-path ./Plugins/BridgeJS + # NOTE: This job runs in the swift Docker image, whose compiler tag is + # swift-6.3.2-RELEASE. No matching release asset is currently published + # for the setup action, so using it falls back to a local SwiftSyntax + # prebuild and makes the job slower than building normally. + run: swift test --disable-experimental-prebuilts --package-path ./Plugins/BridgeJS env: BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }} From 9906fbceabeed4df13e2115a0661d043d60b37e9 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 11:39:38 +0100 Subject: [PATCH 04/14] Rerun CI with fixed SwiftSyntax prebuilts From 273780340651cfd99e98fc5b5e0206c5567f66bb Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 12:46:29 +0100 Subject: [PATCH 05/14] Test CI with validated SwiftSyntax prebuilt action --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3ca45fdef..3c41d833a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,7 +56,7 @@ jobs: run: | echo "SWIFT_SDK_ID=${{ steps.setup-swiftwasm.outputs.swift-sdk-id }}" >> $GITHUB_ENV echo "SWIFT_BIN_PATH=$(dirname $(which swiftc))" >> $GITHUB_ENV - - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + - uses: swiftwasm/setup-swift-syntax-prebuilts@yt/support-swiftpm-triple-build-dir id: swiftsyntax-prebuilts with: swift-syntax-version: ${{ matrix.entry.swift-syntax-version }} @@ -157,7 +157,7 @@ jobs: - uses: ./.github/actions/install-swift with: download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a/swift-DEVELOPMENT-SNAPSHOT-2026-05-27-a-ubuntu22.04.tar.gz - - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + - uses: swiftwasm/setup-swift-syntax-prebuilts@yt/support-swiftpm-triple-build-dir id: swiftsyntax-prebuilts with: swift-syntax-version: "600.0.1" @@ -186,7 +186,7 @@ jobs: - uses: swiftwasm/setup-swiftwasm@v2 id: setup-wasm32-unknown-wasip1-threads with: { target: wasm32-unknown-wasip1-threads } - - uses: swiftwasm/setup-swift-syntax-prebuilts@v1 + - uses: swiftwasm/setup-swift-syntax-prebuilts@yt/support-swiftpm-triple-build-dir id: swiftsyntax-prebuilts with: swift-syntax-version: "603.0.2" From 09736d3734a825c530c8857a34df26ebcab002fb Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 13:16:11 +0100 Subject: [PATCH 06/14] Temporarily narrow prebuilt CI iteration --- .github/workflows/test.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3c41d833a..08f136dbc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,6 +8,7 @@ concurrency: cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} jobs: test: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. name: Build and Test strategy: matrix: @@ -79,6 +80,7 @@ jobs: run: npm run check:bridgejs-dts test-bridgejs-against-swift-versions: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. name: Test BridgeJS against Swift versions strategy: matrix: @@ -108,6 +110,7 @@ jobs: BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }} native-build: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. # Check native build to make it easy to develop applications by Xcode name: Build for native target strategy: @@ -126,6 +129,7 @@ jobs: DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer/ prettier: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -136,6 +140,7 @@ jobs: - run: npx prettier --check Runtime/src format: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. runs-on: ubuntu-latest container: image: swift:6.3 @@ -151,6 +156,7 @@ jobs: } check-bridgejs-generated: + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 @@ -175,6 +181,7 @@ jobs: build-examples: runs-on: ubuntu-22.04 + timeout-minutes: 20 steps: - uses: actions/checkout@v6 - uses: ./.github/actions/install-swift @@ -192,20 +199,27 @@ jobs: swift-syntax-version: "603.0.2" - run: | swift --version - ./Utilities/build-examples.sh + echo "SwiftSyntax restore source: ${{ steps.swiftsyntax-prebuilts.outputs.restore-source }}" + echo "SwiftSyntax cache hit: ${{ steps.swiftsyntax-prebuilts.outputs.cache-hit }}" + echo "SwiftSyntax prebuilts path: ${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" + find "${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" -maxdepth 3 -type f | sort + cd Examples/ActorOnWebWorker + ./build.sh release env: SWIFT_SDK_ID_wasm32_unknown_wasip1_threads: ${{ steps.setup-wasm32-unknown-wasip1-threads.outputs.swift-sdk-id }} SWIFT_SDK_ID_wasm32_unknown_wasip1: ${{ steps.setup-wasm32-unknown-wasip1.outputs.swift-sdk-id }} SWIFT_PACKAGE_FLAGS: ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} - - run: ./Utilities/prepare-gh-pages.sh + - if: false # TEMP: skip pages packaging while debugging one example. + run: ./Utilities/prepare-gh-pages.sh - name: Upload static files as artifact + if: false # TEMP: skip pages artifact upload while debugging one example. id: deployment uses: actions/upload-pages-artifact@v5 with: path: ./_site deploy-examples: runs-on: ubuntu-latest - if: github.event_name == 'push' && github.ref == 'refs/heads/main' + if: false # TEMP: narrow CI while debugging SwiftSyntax prebuilt consumption. environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} From 6a0b7a3ba3914d7b7834c9f66744f3f2db839820 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 13:29:34 +0100 Subject: [PATCH 07/14] Pre-resolve example with SwiftSyntax prebuilts --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 08f136dbc..5be165e93 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -203,6 +203,9 @@ jobs: echo "SwiftSyntax cache hit: ${{ steps.swiftsyntax-prebuilts.outputs.cache-hit }}" echo "SwiftSyntax prebuilts path: ${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" find "${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" -maxdepth 3 -type f | sort + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --package-path Examples/ActorOnWebWorker resolve + find Examples/ActorOnWebWorker/.build/prebuilts -maxdepth 5 -print 2>/dev/null | sort || true + find Examples/ActorOnWebWorker/.build -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true cd Examples/ActorOnWebWorker ./build.sh release env: From 8dba3ac0593a5dc450bdb11a6c1892f6b2a98f1c Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 13:46:43 +0100 Subject: [PATCH 08/14] Rerun CI with SwiftPM-compatible manifest signing From d249489b54d5e8ff3ab6a1d38f1494d53ef83b9a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 13:59:13 +0100 Subject: [PATCH 09/14] Rerun CI with validated release restore From 3d16ff284ea71f04826db0326ef3420f4cc704e6 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 14:21:40 +0100 Subject: [PATCH 10/14] Test example prebuilt consumption without native build system --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5be165e93..f685ecce7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -207,7 +207,10 @@ jobs: find Examples/ActorOnWebWorker/.build/prebuilts -maxdepth 5 -print 2>/dev/null | sort || true find Examples/ActorOnWebWorker/.build -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true cd Examples/ActorOnWebWorker - ./build.sh release + swift package --verbose ${SWIFT_PACKAGE_FLAGS} \ + --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ + plugin --allow-writing-to-package-directory \ + js --use-cdn --output ./Bundle -c release env: SWIFT_SDK_ID_wasm32_unknown_wasip1_threads: ${{ steps.setup-wasm32-unknown-wasip1-threads.outputs.swift-sdk-id }} SWIFT_SDK_ID_wasm32_unknown_wasip1: ${{ steps.setup-wasm32-unknown-wasip1.outputs.swift-sdk-id }} From 4a4042510c27fdcb1ee11b1136341bf9999074ea Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 14:26:13 +0100 Subject: [PATCH 11/14] Test example prebuilt consumption with swiftbuild --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f685ecce7..81091c476 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -207,7 +207,7 @@ jobs: find Examples/ActorOnWebWorker/.build/prebuilts -maxdepth 5 -print 2>/dev/null | sort || true find Examples/ActorOnWebWorker/.build -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true cd Examples/ActorOnWebWorker - swift package --verbose ${SWIFT_PACKAGE_FLAGS} \ + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system swiftbuild \ --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release From 10ca7e9762d46e17776249713495bcddabe94432 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 14:31:56 +0100 Subject: [PATCH 12/14] Test explicit product prebuild before example plugin --- .github/workflows/test.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 81091c476..ea7072b40 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -198,6 +198,7 @@ jobs: with: swift-syntax-version: "603.0.2" - run: | + set -o pipefail swift --version echo "SwiftSyntax restore source: ${{ steps.swiftsyntax-prebuilts.outputs.restore-source }}" echo "SwiftSyntax cache hit: ${{ steps.swiftsyntax-prebuilts.outputs.cache-hit }}" @@ -207,10 +208,23 @@ jobs: find Examples/ActorOnWebWorker/.build/prebuilts -maxdepth 5 -print 2>/dev/null | sort || true find Examples/ActorOnWebWorker/.build -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true cd Examples/ActorOnWebWorker - swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system swiftbuild \ + + swift build --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native \ + --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ + --product MyApp -c release \ + -Xswiftc -static-stdlib \ + -Xswiftc -Xclang-linker -Xswiftc -mexec-model=reactor \ + -Xlinker --export-if-defined=__main_argc_argv 2>&1 | tee prebuilt-warmup.log + + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native \ --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ - js --use-cdn --output ./Bundle -c release + js --use-cdn --output ./Bundle -c release 2>&1 | tee plugin-build.log + + if grep -E "Compiling (SwiftSyntax|SwiftBasicFormat|SwiftDiagnostics|SwiftParser|SwiftOperators|SwiftIfConfig|SwiftCompilerPlugin|SwiftSyntaxMacros|SwiftSyntaxMacroExpansion|SwiftCompilerPluginMessageHandling)" prebuilt-warmup.log plugin-build.log; then + echo "::error::SwiftSyntax was built from source instead of using prebuilts" + exit 1 + fi env: SWIFT_SDK_ID_wasm32_unknown_wasip1_threads: ${{ steps.setup-wasm32-unknown-wasip1-threads.outputs.swift-sdk-id }} SWIFT_SDK_ID_wasm32_unknown_wasip1: ${{ steps.setup-wasm32-unknown-wasip1.outputs.swift-sdk-id }} From 4612a39939659ca114bda00af0011b874f9605ba Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 14:53:04 +0100 Subject: [PATCH 13/14] Test runtime-only example dependency view --- .github/workflows/test.yml | 80 ++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ea7072b40..86e95fad1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -204,24 +204,80 @@ jobs: echo "SwiftSyntax cache hit: ${{ steps.swiftsyntax-prebuilts.outputs.cache-hit }}" echo "SwiftSyntax prebuilts path: ${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" find "${{ steps.swiftsyntax-prebuilts.outputs.prebuilts-path }}" -maxdepth 3 -type f | sort - swift package --verbose ${SWIFT_PACKAGE_FLAGS} --package-path Examples/ActorOnWebWorker resolve - find Examples/ActorOnWebWorker/.build/prebuilts -maxdepth 5 -print 2>/dev/null | sort || true - find Examples/ActorOnWebWorker/.build -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true - cd Examples/ActorOnWebWorker - swift build --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native \ - --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ - --product MyApp -c release \ - -Xswiftc -static-stdlib \ - -Xswiftc -Xclang-linker -Xswiftc -mexec-model=reactor \ - -Xlinker --export-if-defined=__main_argc_argv 2>&1 | tee prebuilt-warmup.log + runtime_view="$RUNNER_TEMP/JavaScriptKitRuntimeOnly" + rm -rf "$runtime_view" + cp -R "$GITHUB_WORKSPACE" "$runtime_view" + rm -rf "$runtime_view/.git" + + cat > "$runtime_view/Package.swift" <<'EOF' + // swift-tools-version:6.2 + + import CompilerPluginSupport + import PackageDescription + + let package = Package( + name: "JavaScriptKit", + platforms: [ + .macOS(.v13), + .iOS(.v13), + .tvOS(.v13), + .watchOS(.v6), + .macCatalyst(.v13), + ], + products: [ + .library(name: "JavaScriptKit", targets: ["JavaScriptKit"]), + .library(name: "JavaScriptEventLoop", targets: ["JavaScriptEventLoop"]), + .plugin(name: "PackageToJS", targets: ["PackageToJS"]), + ], + dependencies: [ + .package(url: "https://github.com/swiftlang/swift-syntax", "600.0.0"..<"604.0.0") + ], + targets: [ + .target( + name: "JavaScriptKit", + dependencies: ["_CJavaScriptKit", "BridgeJSMacros"], + exclude: ["Runtime"], + swiftSettings: [ + .enableExperimentalFeature("Extern"), + ] + ), + .target(name: "_CJavaScriptKit"), + .macro( + name: "BridgeJSMacros", + dependencies: [ + .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), + .product(name: "SwiftCompilerPlugin", package: "swift-syntax"), + ] + ), + .target( + name: "JavaScriptEventLoop", + dependencies: ["JavaScriptKit", "_CJavaScriptEventLoop"] + ), + .target(name: "_CJavaScriptEventLoop"), + .plugin( + name: "PackageToJS", + capability: .command( + intent: .custom(verb: "js", description: "Convert a Swift package to a JavaScript package") + ), + path: "Plugins/PackageToJS/Sources" + ), + ] + ) + EOF + + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --package-path "$runtime_view/Examples/ActorOnWebWorker" resolve + find "$runtime_view/Examples/ActorOnWebWorker/.build/prebuilts" -maxdepth 5 -print 2>/dev/null | sort || true + find "$runtime_view/Examples/ActorOnWebWorker/.build" -name workspace-state.json -print -exec sed -n '1,240p' {} \; || true + + cd "$runtime_view/Examples/ActorOnWebWorker" - swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native \ + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native --package JavaScriptKit \ --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release 2>&1 | tee plugin-build.log - if grep -E "Compiling (SwiftSyntax|SwiftBasicFormat|SwiftDiagnostics|SwiftParser|SwiftOperators|SwiftIfConfig|SwiftCompilerPlugin|SwiftSyntaxMacros|SwiftSyntaxMacroExpansion|SwiftCompilerPluginMessageHandling)" prebuilt-warmup.log plugin-build.log; then + if grep -E "Compiling (SwiftSyntax|SwiftBasicFormat|SwiftDiagnostics|SwiftParser|SwiftOperators|SwiftIfConfig|SwiftCompilerPlugin|SwiftSyntaxMacros|SwiftSyntaxMacroExpansion|SwiftCompilerPluginMessageHandling)|SwiftSyntax-tool\.build|SwiftCompilerPlugin-tool\.build|SwiftSyntaxMacros-tool\.build" plugin-build.log; then echo "::error::SwiftSyntax was built from source instead of using prebuilts" exit 1 fi From 991a8f520875543e5ad7bd0f08a2ad3196de45cc Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 11 Jun 2026 14:57:09 +0100 Subject: [PATCH 14/14] Fix runtime-only plugin invocation --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 86e95fad1..1dfe43cf1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -272,7 +272,7 @@ jobs: cd "$runtime_view/Examples/ActorOnWebWorker" - swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native --package JavaScriptKit \ + swift package --verbose ${SWIFT_PACKAGE_FLAGS} --build-system native \ --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \ plugin --allow-writing-to-package-directory \ js --use-cdn --output ./Bundle -c release 2>&1 | tee plugin-build.log