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
12 changes: 5 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
JAVASCRIPTKIT_DISABLE_TRACING_TRAIT=1
- os: ubuntu-24.04
toolchain:
download-url: https://download.swift.org/development/ubuntu2404/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-ubuntu24.04.tar.gz
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
wasi-backend: Node
target: "wasm32-unknown-wasip1"
- os: ubuntu-24.04
Expand All @@ -31,7 +31,7 @@ jobs:
target: "wasm32-unknown-wasip1"
- os: ubuntu-22.04
toolchain:
download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-ubuntu22.04.tar.gz
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
wasi-backend: Node
target: "wasm32-unknown-wasip1-threads"

Expand Down Expand Up @@ -152,7 +152,7 @@ jobs:
- uses: actions/checkout@v6
- uses: ./.github/actions/install-swift
with:
download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a/swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a-ubuntu22.04.tar.gz
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
- run: make bootstrap
- run: ./Utilities/bridge-js-generate.sh
- name: Check if BridgeJS generated files are up-to-date
Expand All @@ -169,16 +169,14 @@ jobs:
- uses: actions/checkout@v6
- uses: ./.github/actions/install-swift
with:
download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2026-03-09-a/swift-DEVELOPMENT-SNAPSHOT-2026-03-09-a-ubuntu22.04.tar.gz
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-swiftwasm@v2
id: setup-wasm32-unknown-wasip1
with: { target: wasm32-unknown-wasip1 }
- uses: swiftwasm/setup-swiftwasm@v2
id: setup-wasm32-unknown-wasip1-threads
with: { target: wasm32-unknown-wasip1-threads }
- run: |
swift --version
./Utilities/build-examples.sh
- run: ./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 }}
Expand Down
2 changes: 1 addition & 1 deletion Examples/ActorOnWebWorker/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euxo pipefail
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \
swift package --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 changes: 1 addition & 1 deletion Examples/Basic/build.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/bash
set -euxo pipefail
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" js --use-cdn -c "${1:-debug}"
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}"
2 changes: 1 addition & 1 deletion Examples/Embedded/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euxo pipefail
package_dir="$(cd "$(dirname "$0")" && pwd)"
swift package --package-path "$package_dir" \
swift package --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
2 changes: 1 addition & 1 deletion Examples/Multithreading/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euxo pipefail
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \
swift package --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 changes: 1 addition & 1 deletion Examples/OffscrenCanvas/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euxo pipefail
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1_threads:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1-threads}}" \
swift package --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 changes: 1 addition & 1 deletion Examples/PlayBridgeJS/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euxo pipefail
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" \
swift package --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}"
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ unittest:
echo "SWIFT_SDK_ID is not set. Run 'swift sdk list' and pass a matching SDK, e.g. 'make unittest SWIFT_SDK_ID=<id>'."; \
exit 2; \
}
swift package --swift-sdk "$(SWIFT_SDK_ID)" \
swift package --build-system native --swift-sdk "$(SWIFT_SDK_ID)" \
$(TRACING_ARGS) \
--disable-sandbox \
js test --prelude ./Tests/prelude.mjs -Xnode --expose-gc
Expand Down
64 changes: 48 additions & 16 deletions Plugins/PackageToJS/Tests/ExampleTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -246,11 +246,26 @@ extension Trait where Self == ConditionTrait {
func basic() throws {
let swiftSDKID = try #require(Self.getSwiftSDKID())
try withPackage(at: "Examples/Basic") { packageDir, _, runSwift in
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "dwarf"], [:])
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "name"], [:])
try runSwift(["package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js"], [:])
try runSwift(
["package", "--swift-sdk", swiftSDKID, "-Xswiftc", "-DJAVASCRIPTKIT_WITHOUT_WEAKREFS", "js"],
[
"package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js", "--debug-info-format",
"dwarf",
],
[:]
)
try runSwift(
[
"package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js", "--debug-info-format",
"name",
],
[:]
)
try runSwift(
[
"package", "--build-system", "native", "--swift-sdk", swiftSDKID, "-Xswiftc",
"-DJAVASCRIPTKIT_WITHOUT_WEAKREFS", "js",
],
[:]
)
}
Expand All @@ -266,7 +281,10 @@ extension Trait where Self == ConditionTrait {
try runProcess(which("npm"), ["install"], [:])
try runProcess(which("npx"), ["playwright", "install", "chromium-headless-shell"], [:])

try runSwift(["package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"], [:])
try runSwift(
["package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"],
[:]
)
try withTemporaryDirectory(body: { tempDir, _ in
let scriptContent = """
const fs = require('fs');
Expand All @@ -278,7 +296,8 @@ extension Trait where Self == ConditionTrait {
let scriptPath = tempDir.appending(path: "script.js")
try runSwift(
[
"package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test",
"package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js",
"test",
"-Xnode=--require=\(scriptPath.path)",
],
[:]
Expand All @@ -291,7 +310,10 @@ extension Trait where Self == ConditionTrait {
)
})
try runSwift(
["package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test", "--environment", "browser"],
[
"package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test",
"--environment", "browser",
],
[:]
)
}
Expand All @@ -304,7 +326,10 @@ extension Trait where Self == ConditionTrait {
let swiftPath = try #require(Self.getSwiftPath())
try withPackage(at: "Examples/Testing") { packageDir, runProcess, runSwift in
try runSwift(
["package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test", "--enable-code-coverage"],
[
"package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test",
"--enable-code-coverage",
],
[
"LLVM_PROFDATA_PATH": URL(fileURLWithPath: swiftPath).appending(path: "llvm-profdata").path
]
Expand Down Expand Up @@ -332,23 +357,23 @@ extension Trait where Self == ConditionTrait {
func multithreading() throws {
let swiftSDKID = try #require(Self.getSwiftSDKID())
try withPackage(at: "Examples/Multithreading") { packageDir, _, runSwift in
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
try runSwift(["package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js"], [:])
}
}

@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
func offscreenCanvas() throws {
let swiftSDKID = try #require(Self.getSwiftSDKID())
try withPackage(at: "Examples/OffscrenCanvas") { packageDir, _, runSwift in
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
try runSwift(["package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js"], [:])
}
}

@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
func actorOnWebWorker() throws {
let swiftSDKID = try #require(Self.getSwiftSDKID())
try withPackage(at: "Examples/ActorOnWebWorker") { packageDir, _, runSwift in
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
try runSwift(["package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js"], [:])
}
}

Expand All @@ -359,7 +384,7 @@ extension Trait where Self == ConditionTrait {
let swiftSDKID = try #require(Self.getEmbeddedSwiftSDKID())
try withPackage(at: "Examples/Embedded") { packageDir, _, runSwift in
try runSwift(
["package", "--swift-sdk", swiftSDKID, "js", "-c", "release"],
["package", "--build-system", "native", "--swift-sdk", swiftSDKID, "js", "-c", "release"],
[
"JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM": "true"
]
Expand All @@ -375,7 +400,10 @@ extension Trait where Self == ConditionTrait {
at: "Plugins/PackageToJS/Fixtures/ContinuationLeakInTest/XCTest",
assertTerminationStatus: { $0 != 0 }
) { packageDir, _, runSwift in
try runSwift(["package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"], [:])
try runSwift(
["package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"],
[:]
)
}
}

Expand All @@ -388,7 +416,10 @@ extension Trait where Self == ConditionTrait {
at: "Plugins/PackageToJS/Fixtures/ContinuationLeakInTest/SwiftTesting",
assertTerminationStatus: { $0 != 0 }
) { packageDir, _, runSwift in
try runSwift(["package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"], [:])
try runSwift(
["package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test"],
[:]
)
}
}
#endif
Expand All @@ -405,7 +436,7 @@ extension Trait where Self == ConditionTrait {

try runSwift(
["package", "--disable-sandbox"] + Self.stackSizeLinkerFlags + [
"--swift-sdk", swiftSDKID, "js", "test", "--environment", "browser",
"--build-system", "native", "--swift-sdk", swiftSDKID, "js", "test", "--environment", "browser",
"--playwright-expose", "../expose.js",
],
[:]
Expand All @@ -427,7 +458,8 @@ extension Trait where Self == ConditionTrait {

try runSwift(
[
"package", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test", "--environment", "browser",
"package", "--build-system", "native", "--disable-sandbox", "--swift-sdk", swiftSDKID, "js", "test",
"--environment", "browser",
"--playwright-expose", "../expose.js",
],
[:]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,12 @@ extension JavaScriptEventLoop: SchedulingExecutor {
#endif // #if compiler(>=6.4) (Embedded)
#else // #if hasFeature(Embedded)
let duration: Duration
// Handle clocks we know
if let _ = clock as? ContinuousClock {
duration = delay as! ContinuousClock.Duration
} else if let _ = clock as? SuspendingClock {
duration = delay as! SuspendingClock.Duration
} else {
#if compiler(>=6.4)
// Hand-off the scheduling work to Clock implementation for unknown clocks.
// Clock.enqueue is only available in the development branch (6.4+).
clock.enqueue(
job,
on: self,
at: clock.now.advanced(by: delay),
tolerance: tolerance
)
return
#else
fatalError("Unsupported clock type; only ContinuousClock and SuspendingClock are supported")
#endif // #if compiler(>=6.4) (non-Embedded)
}
let milliseconds = Self.delayInMilliseconds(from: duration)
self.enqueue(
Expand Down
14 changes: 8 additions & 6 deletions Utilities/build-examples.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ EXCLUDED_EXAMPLES=()

for example in Examples/*; do
skip_example=false
for excluded in "${EXCLUDED_EXAMPLES[@]}"; do
if [[ "$example" == *"$excluded"* ]]; then
skip_example=true
break
fi
done
if ((${#EXCLUDED_EXAMPLES[@]})); then
for excluded in "${EXCLUDED_EXAMPLES[@]}"; do
if [[ "$example" == *"$excluded"* ]]; then
skip_example=true
break
fi
done
fi
if [ "$skip_example" = true ]; then
echo "Skipping $example"
continue
Expand Down
Loading