diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 664a081a..22acd9a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,3 +51,21 @@ jobs: nativeParent/test "project jsParent" testSequential + wasm: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 + with: + java-version: 21 + distribution: temurin + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + with: + node-version: 22 + - uses: coursier/cache-action@142d2738bd29f0eb9d44610828acb3a19809feab # v6.4.6 + - run: ./sbt -v + -jvm-opts .github/workflows/.jvmopts + -Dscala_js_wasm + "project jsParent" + testSequential diff --git a/project/build.scala b/project/build.scala index a80cd43e..b700ddfc 100644 --- a/project/build.scala +++ b/project/build.scala @@ -12,6 +12,7 @@ import scalajscrossproject.ScalaJSCrossPlugin.autoImport.* import scalanative.sbtplugin.ScalaNativePlugin.autoImport.* import scalanativecrossproject.ScalaNativeCrossPlugin.autoImport.* import org.portablescala.sbtplatformdeps.PlatformDepsPlugin.autoImport.* +import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport.* object build { type Sett = Def.Setting[?] @@ -161,6 +162,26 @@ object build { mimaPreviousArtifacts := previousVersions.value.map { n => organization.value %% s"${Keys.name.value}_sjs1" % n }.toSet, + if (sys.props.isDefinedAt("scala_js_wasm")) { + Def.settings( + scalaJSLinkerConfig ~= (_.withExperimentalUseWebAssembly(true).withModuleKind(ModuleKind.ESModule)), + jsEnv := { + import org.scalajs.jsenv.nodejs.NodeJSEnv + val config = NodeJSEnv + .Config() + .withArgs( + List( + "--experimental-wasm-exnref", + "--experimental-wasm-imported-strings", + "--turboshaft-wasm", + ) + ) + new NodeJSEnv(config) + }, + ) + } else { + Def.settings() + }, scalacOptions += { val a = (LocalRootProject / baseDirectory).value.toURI.toString val g = "https://raw.githubusercontent.com/argonaut-io/argonaut/" + tagOrHash.value