carton/CHANGELOG.md

58 KiB

0.20.0 (5 Aug 2023)

This release adds SwiftWasm 5.9 toolchain support.

0.19.1 (9 May 2023)

This release fixes the wrong toolchain version installed in docker image. It was accidentally not updated to 5.8.0 in the last release.

0.19.0 (8 May 2023)

This release adds SwiftWasm 5.8 toolchain support.

Merged pull requests:

0.18.0 (3 April 2023)

This release adds an extra size stripping optimization.

Merged pull requests:

0.17.0 (30 September 2022)

This release adds SwiftWasm 5.7 toolchain support.

Merged pull requests:

0.16.1 (22 July 2022)

This release fixes an issue when carton test doesn't execute the all of async tests, and doesn't handle JS exception.

Merged pull requests:

0.16.0 (15 June 2022)

This release adds several enhancements in carton test, and allows you to customize optimization strategy. One of the notable enhancement is --headless option added in carton test, which runs tests using W3C WebDriver protocol

Merged pull requests:

0.15.3 (24 May 2022)

This release fixes an issue when carton test wouldn't be finished after large number of test suites, and improved HTML 5 compatibility.

Merged pull requests:

0.15.2 (23 May 2022)

This release fixes an issue when JS entrypoints weren't unpacked during carton test --environment node runs.

Merged pull requests:

0.15.1 (23 May 2022)

This release fixes an issue when temporary symlinks weren't cleaned up after running carton test --environment node.

Merged pull requests:

0.15.0 (20 May 2022)

This release of carton includes enhancements and bugfixes. Namely:

  • Compatibility with JavaScriptKit 0.15.0 and later. The long-standing incompatibility between different versions of carton and JavaScriptKit is resolved now. All version combinations of carton and JavaScriptKit higher than 0.15 should be compatible with each other. This is achieved by supplying JavaScriptKit runtime via SwiftPM resources, instead of embedding within .js entrypoints as we did previously. If you relied on the previous behavior, please open an issue describing your use case.
  • carton test can now run your test suite with Node.js when that is installed. Run it as carton test --environment node to enable this.
  • SwiftPM resources from sub-dependencies of your package are now available on the web server with carton dev and bundled with carton bundle. Resources from each target are still isolated in subdirectories named with \(packageName)_\(targetName).resources format, which is hardcoded by SwiftPM. Resources from the main target you're building are still available at the root path, also accessible via Bundle.main.path(forResource:ofType:) function when you import Foundation (mind the binary size overhead when relying on Foundation). Incorrect paths accessed via Bundle.module are a known issue, which we track as swiftwasm/swift#4573.

Many thanks to @AntonioCandinho, @j-f1, and @kateinoigakukun for contributions!

Closed issues:

  • Re-read supplied index.html on updates (#341)
  • carton dev stops rebuilding/reloading after error (#339)
  • Avoid applying I64ImportTransformer when JS BigInt support is enabled (#326)
  • swjs_create_typed_array error on carton test (#322)
  • Host JSKit entrypoint assets on GH Pages CDN (#317)

Merged pull requests:

0.14.2 (30 April 2022)

This is a bugfix release resolving an issue with JavaScript entrypoint code.

Many thanks to @fjtrujy for the contribution!

Closed issues:

  • Apply clock_res_get patch in all entrypoints (#321)

Merged pull requests:

0.14.1 (11 April 2022)

This is a bugfix release that resolves an issue with carton test introduced in 0.14.0. Many thanks to @SDGGiesbrecht for reporting, and to @kateinoigakukun for fixing it!

Closed issues:

  • “carton test” fails to run as of 0.14.0 (#313)

Merged pull requests:

0.14.0 (9 April 2022)

This release uses SwiftWasm 5.6.0 as the default toolchain. Additionally, issue with rebuilding projects when watching for file changes with carton dev has been fixed. Also refer to release details for carton 0.13.0 for more information on new recently introduced flags.

Many thanks to @kateinoigakukun for contributions!

Closed issues:

  • Watcher doesn't see my changes (#295)

Merged pull requests:

0.13.0 (31 March 2022)

This is a small feature release with a few bugfixes. Namely, new -Xswiftc option was added for forwarding flags to underlying swiftc invocations. Also, new --debug-info flag allows keeping debug information even for release builds. Additionally, we've fixed a crash with executableTarget declarations in Package.swift manifests, and switched to SwiftPM 5.6 API in preparation for the imminent SwiftWasm 5.6 release.

This version of carton now ships with JavaScriptKit 0.13.0 runtime.

WARNING: this release of carton is not compatible with latest Tokamak or SwiftWasm 5.6 snapshots or releases yet. You should stay with carton 0.12.2 for now if you're building apps and libraries with Tokamak. A future release of carton will resolve this incompatibility.

Thanks to @kateinoigakukun and @yonihemi for contributions, and to @pedrovgs for additional testing and bug reports.

Closed issues:

  • Detecting completion of Wasm module instantiation (#290)
  • Add support for Swift 5.6 package description format (#285)
  • Add support for -Xswiftc arguments (#277)

Merged pull requests:

0.12.2 (16 February 2022)

This release features a massive refactor by @MaxDesiatov to use Swift 5.5's async/await and actors, reducing its size, improving readability and removing Combine/OpenCombine dependency, as well as CI and Linux installation improvements. JavaScriptKit and Tokamak versions in templates were bumped to 0.12.0 and 0.9.1 respectively.

Merged pull requests:

0.12.1 (1 December 2021)

This is a bugfix release that fixes linking issues with ICU that some users could've experienced with carton dev and carton bundle. Many thanks to @Sefford for reporting this and providing detailed issue description!

Closed issues:

  • Carton 0.12.0 with SwiftWasm 5.5.0 fails with linker command (#268)

Merged pull requests:

0.12.0 (27 November 2021)

This release bumps the default version of SwiftWasm distribution to 5.5.0. For projects that don't specify their preferred version of SwiftWasm in .swift-version, carton will now download SwiftWasm 5.5.0.

Since SwiftWasm 5.5.0 now provides distributions for Apple Silicon, carton will download such distributions by default on compatible hardware. Run carton under Rosetta if you prefer to use x86_64 builds of SwiftWasm on macOS.

JavaScriptKit and Tokamak versions in templates were bumped to 0.11.1 and 0.9.0 respectively.

Additionally, a bug with demangling of stack traces was fixed. Thanks to @Feuermurmel for the contribution!

Closed issues:

  • Download Apple Silicon builds for releases that have them available (#262)
  • Stack trace demangling (#248)
  • Docker tag for 0.10.0? (#246)

Merged pull requests:

0.11.1 (2 September 2021)

This is a bugfix release that fixes an issue with dynamic linking to libSwiftPMDataModel.so in Ubuntu images for Docker.

0.11.0 (2 September 2021)

This release bumps the default version of SwiftWasm distribution to 5.4.0. For projects that don't specify their preferred version of SwiftWasm in .swift-version, starting with this version carton will download SwiftWasm 5.4.0.

No other major changes are included in this release.

Merged pull requests:

0.10.0 (30 May 2021)

This is a bugfix release that resolves issues with incorrect or missing diagnostic output, improves our end-to-end test coverage, and updates dependencies and carton init templates.

Additionally, we improved support for demangling stack traces in different browsers, and added a stack overflow sanitizer that's enabled by default for debug builds.

Many thanks (in alphabetical order) to @j-f1, @kateinoigakukun, @literalpie, @thecb4, and @yonihemi for their contributions to this release!

Closed issues:

  • carton test command unable to find gtk+3 using --template tokamak (#241)
  • carton also requires zlib.h to compile from source (#237)
  • carton test --environment defaultBrowser broken on GitHub Actions (#200)
  • Add --host option to carton dev and carton test (#193)
  • Replace hard-coded path delimiters (#183)
  • Use libSwiftPM instead of custom model types (#120)

Merged pull requests:

0.9.1 (19 December 2020)

This is a bugfix release that fixes parsing of Package.swift manifests that contain dependencies on system targets. It also adds support for Chrome and Safari stack traces. Many thanks to @j-f1 for the contribution!

Merged pull requests:

0.9.0 (4 December 2020)

This release adds multiple changes and new features:

  • New --environment option on carton test, which when passed --environment defaultBrowser runs test suites of a given package in your default browser, allowing you to use JavaScriptKit and other browser-specific dependencies in your tests. Another available option is --environment wasmer, which is the old and still the default behavior, which runs the test suite in wasmer.

  • Now when your SwiftWasm app crashes in Firefox, the strack trace will printed by carton dev and carton test in terminal with function symbols demangled, which makes crashes much easier to debug. Since different browsers format their stack traces differently, support for browsers other than Firefox will be added separately in a future version of carton.

  • carton dev and carton bundle now serve SwiftPM resources declared on targets of executable products from the root / path, in addition to a subpath automatically generated for Bundle.module. This was a necessary change to allow the Image view to work properly in Tokamak.

  • Support for JavaScriptKit 0.9.0, which allows catching JavaScript exceptions in Swift code.

  • The default SwiftWasm toolchain is now 5.3.1, which is a recommended bugfix update for all of our users.

Merged pull requests:

0.8.2 (9 November 2020)

This patch release updates the default version of Tokamak in the carton init template to fix autocomplete in Xcode.

Merged pull requests:

0.8.1 (9 November 2020)

This patch release updates the default version of Tokamak in templates used by carton init.

Merged pull requests:

0.8.0 (8 November 2020)

This is a bugfix and feature release that coincides with the stable 5.3.0 release of SwiftWasm, uses it as the default toolchain, and enables compatibility with it. This is the recommended version of SwiftWasm, and older development snapshots are no longer supported in carton. We also discourage you from adding .swift-version files to your project or using new development snapshots, unless you'd like to try a preview of a new Swift feature. If there's anything that prevents you from using the 5.3.0 release of SwiftWasm instead of a specific 5.3 development snapshot, please report it as a bug.

Many thanks to @carson-katri, @kateinoigakukun for their contributions to this release!

Notable changes:

  • carton test now parses output of XCTest and reformats as a clear test summary with colors highlighted in terminals that support it.
  • Our WasmTransformer dependency now can strip debug information from release bundles, which means carton bundle no longer requires WABT with its wasm-strip utility to run.
  • carton test previously built all targets in a SwiftPM package even when they weren't direct or indirect dependencies of test targets, which mirrored the behavior of swift test. This could cause issues with packages that have some targets that are incompatible with the WASI platform, but are excluded from dependency trees otherwise. This is no longer the case, carton test now only builds targets that are actually needed to run the tests in a given package.
  • SwiftPM included in the SwiftWasm 5.3.0 toolchain produces executable binaries with the .wasm extension. This version of carton now assumes this extension is present in filenames of WebAssembly binaries, which makes old development snapshots incompatible.
  • carton now looks for SwiftWasm SDKs installed in the /Library/Developer/Toolchains directory in addition to the ~/.carton/sdk and ~/Library/Developer/Toolchains directories on macOS.

Closed issues:

  • Search /Library/Developer/Toolchains also (#146)

Merged pull requests:

0.7.1 (22 October 2020)

This is a bugfix release that prevents carton commands from re-downloading .pkg toolchains on macOS on every CLI invocation.

0.7.0 (22 October 2020)

This release contains bugfixes and improvements.

Now SwiftWasm binaries built with carton are fully compatible with Safari, even when they use functions that return 64-bit integers. This was caused by the lack of support for conversions between i64 and BigInt types in Safari.

Additionally, when you run carton dev a new tab with your app is opened in your default browser automatically. You can now also specify a port to use for the development server with the --port option (-p for short).

All carton commands that build Swift code now pretty-print error messages in case of failures. If an error message points to a specific location in your code, surrounding code has its syntax highlighted in terminals.

carton test now automatically passes --enable-test-discovery flag when building your tests, so you no longer need to manually maintain LinuxMain.swift and XCTestManifests.swift files in your test suites.

carton now uses the wasm-5.3-SNAPSHOT-2020-10-21-a toolchain and SDK by default. This and most of our recent snapshots are built for both Ubuntu 18.04 and 20.04, the latter supported in carton for the first time. carton automatically detects the version of your OS and downloads an appropriate snapshot. Recent snapshots for macOS are also tested on macOS Big Sur on Intel CPUs (Apple Silicon is not supported yet), and are signed and distributed as .pkg files, which carton fully supports now.

Lastly, we've prepared a prebuilt Docker image for you that you can get by running

docker pull ghcr.io/swiftwasm/carton:latest

This image has the toolchain and all required dependencies preinstalled.

Many thanks to @carson-katri, @kateinoigakukun, and @yonihemi for their contributions to this release!

Closed issues:

  • Method with i64 return type fails on Safari 13+14 (#127)
  • Provide a Dockerfile for easier distribution and testing on Linux (#119)
  • Support downloading Ubuntu 20.04 SDK (#114)
  • carton dev should open a browser window when server starts (#92)

Merged pull requests:

0.6.1 (29 September 2020)

This release fixes basic carton init template that was pulling an incompatible version of JavaScriptKit in carton 0.6.0.

0.6.0 (28 September 2020)

This release introduces a new carton bundle command that produces an optimized build of your app and writes it to the Bundle subdirectory of your package. Additionally, SwiftPM resources are supported by both carton dev (served as static files) and carton bundle (copied with the rest of the assets), if any package resources are declared in your Package.swift.

New carton package command is introduced, which proxies its subcommands to swift package invocations on the currently-installed toolchain. This may be useful in situations where you'd like to generate an Xcode project file for your app with something like carton package generate-xcodeproj. It would be equivalent to swift package generate-xcodeproj, but invoked with the SwiftWasm toolchain instead of the toolchain supplied by Xcode. Many thanks to @kateinoigakukun for the implementation!

Compatibility with Safari 14 is fixed for carton dev and is maintained for the new carton bundle command as well.

This version of carton ships with new JavaScript runtime compatible with JavaScriptKit 0.7. You should update JavaScriptKit dependency to 0.7 if you had an older version specified in Package.swift of your project.

A regression in carton test was fixed in the latest 5.3 toolchain snapshot, which became the default snapshot version in this version of carton. In general we advise against having a .swift-version file in your project, but if you need one, please specify wasm-5.3-SNAPSHOT-2020-09-25-a snapshot or a later one from the 5.3 branch in this file for carton test to work.

Closed issues:

  • carton crashes when it fails to instantiate TerminalController (#112)
  • Allow carton to use a provided HTML template file (#100)
  • Add static file support (#38)
  • Demo cannot be run on Safari 14 (#25)
  • Implement carton bundle command (#16)

Merged pull requests:

0.5.0 (20 August 2020)

This release updates both basic and tokamak templates in carton init for compatibility with the latest JavaScriptKit and Tokamak versions. Additionally, carton dev now cleans build logs from previous builds when its watcher is triggered. New --verbose flag was added, which restores the previous behavior with all build logs listed on the same screen.

carton dev and carton test now install 5.3 SwiftWasm snapshots by default, which in general are more stable than the previously used SwiftWasm development snapshots, and are compatible with Xcode 12 betas. You can now also add direct dependencies on a specific JavaScriptKit version instead of a revision with these 5.3 snapshots, as they contain a workaround for the unsafe flags issue reproducible with SwiftWasm development snapshots.

Allowing carton to select a default snapshot is now the recommended approach, so in general we suggest avoiding .swif-version files in projects that use carton.

The issue where carton dev hangs on exit after establishing at least one WebSocket connection with a browser is now fixed in our Vapor dependency. Kudos to @tanner0101 for diagnosing and fixing the issue!

Thanks to @carson-katri, @RayZhao1998 for their contributions to this release!

Closed issues:

  • Compiling swift packages that depend on Darwin or Glibc (#89)
  • Detect the currently selected version of Xcode and warn if it's 12 beta (#81)
  • Print the error output of swift package dump-package (#78)
  • JavaScriptKit dependency missing in the basic template (#77)
  • carton sdk install crashes when passed an invalid version (#72)
  • No package found when invoking carton dev (#71)
  • Xcode 12 beta 3 compatibility (#65)
  • Delay on Ctrl-C with error: Could not stop HTTP server (#7)

Merged pull requests:

0.4.1 (22 July 2020)

This release modifies the tokamak template for carton init to use the main branch of Tokamak. This fixes dependency resolution issues caused by unsafe build flags in JavaScriptKit. Please see swiftwasm/JavaScriptKit#6 for more details.

0.4.0 (21 July 2020)

This release adds a few major features, namely carton init and carton test commands, carton sdk local subcommand, and enables support for linking with Foundation automatically.

Thanks to @carson-katri, @RayZhao1998, @JaapWijnen and @broadwaylamb for their contributions to this release!

New features:

Firstly, carton dev no longer requires a --destination flag with a manually crafted destination.json file to link with Foundation. If your project has import Foundation anywhere in its source code, a subset of Foundation provided with SwiftWasm is automatically linked. Please check the list of Foundation types currently unavailable in SwiftWasm for more details on Foundation compatibility (mostly filesystem, socket, multi-threading, and APIs depending on those are disabled).

The new carton init command initializes a new SwiftWasm project for you (similarly to swift package init) with multiple templates available at your choice. carton init --template tokamak creates a new Tokamak project, while carton init --template basic (equivalent to carton init) creates an empty SwiftWasm project with no dependencies. Also, carton init list-templates provides a complete list of templates (with only basic and tokamak available currently).

The new carton test command runs your test suite in the wasmer environment. Unfortunately, this currently requires a presence of LinuxMain.swift file and explicit test manifests, --enable-test-discovery flag is not supported yet. Projects that can build their test suite on macOS can use swift test --generate-linuxmain command to generate this file.

Breaking changes:

The bundled carton dev JavaScript entrypoint has been updated to fix runtime issues in the Swift-to-JavaScript bridge API. Because of this, projects that depend on JavaScriptKit should specify c90e82f revision as a dependency:

  dependencies: [
    .package(url: "https://github.com/kateinoigakukun/JavaScriptKit", .revision("c90e82f")),
  ],

Unfortunately, specifying a JavaScriptKit version in Package.swift as a dependency is not supported by SwiftPM due to the use of unsafe flags, see swiftwasm/JavaScriptKit#6 for more details.

Closed issues:

  • Avoid running the tests if can't build them (#56)
  • Verify SDK is already installed before installing the same version (#45)
  • Automatically create destination JSON to allow linking Foundation (#4)
  • Watcher should detect custom paths in Package.swift (#1)

Merged pull requests:

0.3.1 (7 July 2020)

This is a bugfix release that fixes SwiftWasm backtrace reporting in certain cases and also enables sorting for the output of the carton sdk versions subcommand.

Merged pull requests:

0.3.0 (7 July 2020)

This is a release that adds a new carton sdk versions subcommand, new --release flag and a new --destination option to the carton dev command. Additionally, archive size is logged when a new SDK is downloaded, and backtrace logging is improved in browser consoles for crashing SwiftWasm apps. Many thanks to @RayZhao1998 and @ratranqu for their contributions! 👏

Closed issues:

  • Support linking with Foundation/CoreFoundation (#11)

Merged pull requests:

0.2.0 (26 June 2020)

This release introduces a new carton sdk install command that allows you to quickly install the SwftWasm toolchain and SDK without requiring any additional dependencies such as swiftenv. Also, carton dev now automatically installs SwiftWasm through the same code paths as carton sdk install, when no suitable SDK is detected.

0.1.5 (22 June 2020)

This is a refinement release that adds a --version flag. Additionally, the dev command is no longer the default, now a simple carton invocation without any arguments prints a help message describing available commands.

0.1.4 (21 June 2020)

This is a bugfix release that fixes the dev.js bundle broken in 0.1.3.

0.1.3 (21 June 2020)

This is a bugfix release that includes the latest version of JavaScriptKit runtime in the dev.js bundle. It fixes a bug with reference counting of JSObjectRef instances, which could lead to crashes.

0.1.2 (19 June 2020)

This is a bugfix release that fixes stdout and stderr WASI output in async handlers. Previously stdout output was redirected with console.log only on the first pass of execution of top-level code, while none of the output from async handlers (such as DOM listeners) was redirected. Now in this release, stdout and stderr output is consistently redirected with console.log and console.error respectively, in all cases.

0.1.1 (19 June 2020)

This is a bugfix release that fixes dependency downloads on Linux. The issue was caused by Foundation not supporting HTTP redirects in Swift 5.2 on Linux, and is now resolved by using AsyncHTTPClient instead of Foundation's URLSession for dependency downloads.

0.1.0 (16 June 2020)

Since SwiftPM doesn't always build an executable target even if one is present without an explicit --product option, the dev command now requires the presence of an executable target in your Package.swift. Use the new --product option instead of --target to disambiguate between multiple executable targets.

0.0.5 (16 June 2020)

Pass --target option to swift build when running the dev command.

0.0.4 (16 June 2020)

Fix index page body served by HTTP when running the dev command.

0.0.3 (9 June 2020)

Fix expected polyfill hashes and a fatal error triggered when hashes didn't match.

0.0.2 (9 June 2020)

Fix watching and reloading, allow multiple WebSocket connections in the watcher code. The latter allows multiple browser windows to stay open and get reloaded simultaneously.

0.0.1 (6 June 2020)

First preview release, only a basic dev command is implemented.