diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 149e28a5d..8e3f2ea66 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -47,9 +47,6 @@ jobs: restore-keys: | ${{ runner.os }}-elm- - - name: Download dependencies - run: npm ci - - name: Build run: npm run build --if-present diff --git a/.mise/tasks/build/cli.ts b/.mise/tasks/build/cli.ts index 75eb7d2ea..0598d296d 100755 --- a/.mise/tasks/build/cli.ts +++ b/.mise/tasks/build/cli.ts @@ -6,16 +6,14 @@ import { elmMake, log, PATHS } from "../_lib.ts"; log("build:cli", "Compiling CLI Elm modules..."); -// Build both CLI and DevCLI in parallel -await Promise.all([ - elmMake(["src/Morphir/Elm/CLI.elm"], { - cwd: PATHS.cli, - output: "Morphir.Elm.CLI.js", - }), - elmMake(["src/Morphir/Elm/DevCLI.elm"], { - cwd: PATHS.cli, - output: "Morphir.Elm.DevCLI.js", - }), -]); +// Sequential: concurrent elm make on a cold ~/.elm cache causes race conditions on Windows +await elmMake(["src/Morphir/Elm/CLI.elm"], { + cwd: PATHS.cli, + output: "Morphir.Elm.CLI.js", +}); +await elmMake(["src/Morphir/Elm/DevCLI.elm"], { + cwd: PATHS.cli, + output: "Morphir.Elm.DevCLI.js", +}); log("build:cli", "Done"); diff --git a/.mise/tasks/build/cli2.ts b/.mise/tasks/build/cli2.ts index e447dd175..dbb6bc6fc 100755 --- a/.mise/tasks/build/cli2.ts +++ b/.mise/tasks/build/cli2.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun //MISE description="Build CLI2 (TypeScript + Elm in parallel)" -//MISE depends=["build:check-elm-docs"] +//MISE depends=["build:cli"] import { elmMake, log, PATHS, join } from "../_lib.ts"; import { mkdir, rm } from "fs/promises"; diff --git a/.mise/tasks/build/dev-server.ts b/.mise/tasks/build/dev-server.ts index dcdd7f8bd..9f07fcc41 100755 --- a/.mise/tasks/build/dev-server.ts +++ b/.mise/tasks/build/dev-server.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun //MISE description="Build development server Elm components" -//MISE depends=["build:check-elm-docs"] +//MISE depends=["build:cli"] import { elmMake, log, PATHS } from "../_lib.ts"; diff --git a/.mise/tasks/build/morphir-ts.ts b/.mise/tasks/build/morphir-ts.ts index e9566e51b..a7380c5be 100755 --- a/.mise/tasks/build/morphir-ts.ts +++ b/.mise/tasks/build/morphir-ts.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun //MISE description="Build Morphir TypeScript library" -//MISE depends=["build:cli"] +//MISE depends=["build:cli", "build:cli2"] import { del, morphirMake, morphirGen, exec, log, PATHS, ROOT_DIR, copyGlob, join } from "../_lib.ts"; diff --git a/.mise/tasks/build/try-morphir.ts b/.mise/tasks/build/try-morphir.ts index 773dacbd4..cd873f1c7 100755 --- a/.mise/tasks/build/try-morphir.ts +++ b/.mise/tasks/build/try-morphir.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun //MISE description="Build Try Morphir web app" -//MISE depends=["build:check-elm-docs"] +//MISE depends=["build:cli"] import { elmMake, log, PATHS } from "../_lib.ts"; diff --git a/.mise/tasks/default.ts b/.mise/tasks/default.ts index 6c8a60945..9200b0f8a 100755 --- a/.mise/tasks/default.ts +++ b/.mise/tasks/default.ts @@ -1,7 +1,10 @@ #!/usr/bin/env bun //MISE description="Full build pipeline (clean, check, setup, build)" -//MISE depends=["clean", "test:check-package-lock", "test:check-node-version", "setup", "build"] +//MISE depends=["clean", "test:check-package-lock", "test:check-node-version", "setup"] -import { log } from "./_lib.ts"; +import { exec, log, ROOT_DIR } from "./_lib.ts"; + +// setup has completed — now run build phase (elm requires node_modules from setup) +await exec("mise", ["run", "build"], { cwd: ROOT_DIR }); log("default", "Full build pipeline completed"); diff --git a/.mise/tasks/setup.ts b/.mise/tasks/setup.ts index a79f872fd..4b2eb358e 100755 --- a/.mise/tasks/setup.ts +++ b/.mise/tasks/setup.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun //MISE description="Run all setup tasks" -//MISE depends=["setup:elm-tooling", "setup:morphir-jvm"] +//MISE depends=["setup:npm", "setup:elm-tooling", "setup:morphir-jvm"] import { log } from "./_lib.ts"; diff --git a/.mise/tasks/setup/elm-tooling.ts b/.mise/tasks/setup/elm-tooling.ts index b2582f7c0..f9830e0fb 100755 --- a/.mise/tasks/setup/elm-tooling.ts +++ b/.mise/tasks/setup/elm-tooling.ts @@ -1,5 +1,6 @@ #!/usr/bin/env bun //MISE description="Install Elm tooling" +//MISE depends=["setup:npm"] import { exec, log } from "../_lib.ts"; diff --git a/.mise/tasks/setup/npm.ts b/.mise/tasks/setup/npm.ts new file mode 100755 index 000000000..c5dc364cd --- /dev/null +++ b/.mise/tasks/setup/npm.ts @@ -0,0 +1,8 @@ +#!/usr/bin/env bun +//MISE description="Install npm dependencies (npm ci)" + +import { exec, log } from "../_lib.ts"; + +log("setup:npm", "Installing npm dependencies..."); +await exec("npm", ["ci"]); +log("setup:npm", "Done"); diff --git a/DEVELOPING.md b/DEVELOPING.md index 5db26b9b3..858d73bfc 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -20,11 +20,7 @@ curl https://mise.run | sh # Trust the project configuration mise trust -# Install tools (node, bun) and dependencies -mise install -npm ci - -# Run the full build pipeline +# Install tools (node, bun) and all dependencies (npm ci, elm-tooling, etc.) mise run default ``` @@ -70,6 +66,7 @@ This project uses [mise](https://mise.jdx.dev/) with [Bun](https://bun.sh/) for | Task | Description | |------|-------------| +| `mise run setup:npm` | Install npm dependencies (`npm ci`) | | `mise run setup:elm-tooling` | Install Elm tooling binaries | | `mise run setup:morphir-jvm` | Clone and setup Morphir JVM SDK assets | @@ -86,8 +83,8 @@ npm run build:cli # Build CLI only npm run build:cli2 # Build CLI2 only ``` -`npm ci` automatically runs `setup-elm-tooling` via the `prepare` hook, -which installs `elm`, `elm-test`, `elm-format`, and `elm-json` into +`mise run setup` handles all npm and tooling setup, including running the +`prepare` hook which installs `elm`, `elm-test`, `elm-format`, and `elm-json` into `node_modules/.bin/`. `mise.toml` prepends `./node_modules/.bin` to PATH so mise tasks resolve those binaries. @@ -118,6 +115,7 @@ test file. │ │ ├── integration.ts │ │ └── ... │ └── setup/ # Setup subtasks +│ ├── npm.ts │ ├── elm-tooling.ts │ └── morphir-jvm.ts cli/ # CLI v1 (Elm + JavaScript) @@ -184,7 +182,6 @@ mise run setup:elm-tooling ### Missing dependencies ```bash -npm ci mise run setup ``` diff --git a/elm-tooling.json b/elm-tooling.json index 39fe1cde5..abd550d16 100644 --- a/elm-tooling.json +++ b/elm-tooling.json @@ -1,7 +1,7 @@ { "tools": { "elm": "0.19.1", - "elm-format": "0.8.7", + "elm-format": "0.8.8", "elm-json": "0.2.13", "elm-test-rs": "3.0.0" } diff --git a/package-lock.json b/package-lock.json index ef4ca564a..7416003bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,7 @@ "@typespec/compiler": "^0.59.1", "del-cli": "^5.1.0", "elm-test": "^0.19.1-revision6", - "elm-tooling": "^1.15.0", + "elm-tooling": "^1.17.0", "json-schema": "^0.4.0", "node-elm-compiler": "^5.0.6", "package-json": "^8.1.1", @@ -3338,9 +3338,9 @@ } }, "node_modules/elm-tooling": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.1.tgz", - "integrity": "sha512-+rRYa7gzz6l2/Ip2i197MqkW5abOwPOP/+WlyyatLDeDhh+JR0HUMlZJYenCYodBeG/xW5xW3pRYQ2onf5bIAw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.17.0.tgz", + "integrity": "sha512-Y6umJYX7w/tV08pgmNF95nkvPq+xOvhirJz6LIt4YUj2I9V2W0V4Yb1E0IUZ/9X9yUgiEcFpKyObav4QMWCPrg==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 52cbd52a0..84a46546f 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@typespec/compiler": "^0.59.1", "del-cli": "^5.1.0", "elm-test": "^0.19.1-revision6", - "elm-tooling": "^1.15.0", + "elm-tooling": "^1.17.0", "json-schema": "^0.4.0", "node-elm-compiler": "^5.0.6", "package-json": "^8.1.1",