• v2.0.0 fe5afa029d

    ModelGrid v2.0.0
    CI / Build & Test (push) Successful in 4m7s
    Release / build-and-release (push) Successful in 16m52s

    jkunz released this 2026-10-15 07:51:29 +00:00 | 12 commits to main since this release

    Breaking Changes

    • ship ModelGrid as Node.js 26.11.1 single executables instead of Deno binaries (runtime)
      • The executable names stay the same: modelgrid-linux-x64, -linux-arm64, -macos-x64, -macos-arm64 and -windows-x64.exe.
      • Linux hosts need glibc 2.28 or later plus libstdc++6 and libatomic1; without libatomic.so.1 the executable does not start. Alpine/musl is not supported.
      • The Windows executable is built but not run in tests.
      • The Deno source run (mod.ts, deno.json tasks) is gone; run from source with pnpm run dev.
      • The executables trust the operating system's CA store in addition to Node's bundled CAs.
    • remove the npm launcher package; ModelGrid is distributed only through Gitea releases and install.sh (distribution)
      • The npm wrapper (bin/modelgrid-wrapper.js) and its postinstall downloader were never published and are deleted; the package is private.
    • install and update ModelGrid with the gitzone-managed installer (installer)
      • install.sh verifies the downloaded executable and its third-party notices against the release's SHA256SUMS.txt and runs the executable with --version before it touches the installation; a mismatch, a missing entry or missing checksums are refused. It needs sha256sum or shasum besides curl.
      • An update moves the previous installation aside instead of deleting /opt/modelgrid first, restarts a running modelgrid service with the new version, and restores the previous installation and service when any step fails. Every failure exits non-zero with the failed step.
      • The installation directory holds the executable, its notices (<name>.third-party-notices.txt and .json) and uninstall.sh. The command link is always /usr/local/bin/modelgrid; the old installer used /usr/bin when /usr/local/bin was not on PATH.
      • --version takes a SemVer 2.0 version with an optional v (or latest), and the release tag the Gitea API names must have that form. Downloads use HTTPS only, also on redirects, with connect, idle and transfer time limits. The new --dry-run checks, without root and without changing the system, that the release carries every file the installation needs.
      • The installer installs only releases that carry the third-party notice files, which starts with 2.0.0: install.sh --version naming 1.1.0 or an earlier release fails before it changes the installation.
    • release with the gitzone-managed release workflow (release)
      • A v* tag builds the five executables with Node.js tooling only, after checking that the package.json version equals the tag.
      • The release carries exactly the executables, their third-party notices, uninstall.sh and SHA256SUMS.txt; its description is the version's changelog section.
      • A published asset is never replaced: a release that already has an asset of the same name fails before anything uploads; the old workflow deleted and recreated the release. Releases older than the newest three are still deleted.
    • remove the ui.assetSource setting and the UI_ASSET_SOURCE override (ui)
      • The executable serves the console from its embedded ui asset tree; runs from source serve ts_web/ from disk. An existing ui.assetSource key is ignored with a warning.
      • A missing embedded UI is an error instead of a silent switch to disk.

    Fixes

    • report the release version everywhere: --version, update, the API health response and the systemd status read it from the release metadata instead of a stale constant (cli)
    • modelgrid uninstall works on installed hosts: install.sh now installs uninstall.sh next to the executable, the CLI runs it from the executable's directory instead of two directories above argv[1], and the script removes the systemd unit, the command link and the installation directory it lives in instead of a fixed /opt/modelgrid; it refuses a directory without the modelgrid executable (cli, installer)
    • the API and UI servers report the port they actually listen on (api, ui)

    Maintenance

    • build with tsbuild, test with tstest, bundle with tsbundle and package with tssea; CI runs pnpm build and tests on Node.js (tooling)
    • generate install.sh, the release workflow and scripts/gitzone-binary-release.mjs from @git.zone/cli 9.1.0 binaryCli managed assets and drop the unused .gitea/release-template.md (tooling)
    • @git.zone/tsbundle 3.6.1 (tooling)
    Downloads