mirror of
https://github.com/lexmount/moli.git
synced 2026-09-23 08:01:28 +00:00
Use pointer-compressed rusty_v8 archives and their bundled PartitionAlloc shim on Linux x86_64 GNU and macOS. Preserve the existing jemalloc or system allocator on unsupported targets, and remove the custom archive-mutation workaround.
76 lines
3.6 KiB
Markdown
76 lines
3.6 KiB
Markdown
# Releasing Moli
|
|
|
|
The release workflow builds six native archives with stable asset names:
|
|
|
|
| System | Rust target | Archive |
|
|
| --- | --- | --- |
|
|
| Linux x86_64 | `x86_64-unknown-linux-gnu` | `moli-x86_64-unknown-linux-gnu.tar.gz` |
|
|
| Linux ARM64 | `aarch64-unknown-linux-gnu` | `moli-aarch64-unknown-linux-gnu.tar.gz` |
|
|
| macOS Intel | `x86_64-apple-darwin` | `moli-x86_64-apple-darwin.tar.gz` |
|
|
| macOS Apple Silicon | `aarch64-apple-darwin` | `moli-aarch64-apple-darwin.tar.gz` |
|
|
| Windows x86_64 | `x86_64-pc-windows-msvc` | `moli-x86_64-pc-windows-msvc.zip` |
|
|
| Windows ARM64 | `aarch64-pc-windows-msvc` | `moli-aarch64-pc-windows-msvc.zip` |
|
|
|
|
Every archive contains the `moli` executable, project licenses, README,
|
|
version marker, and third-party license notices. The workflow also publishes
|
|
`moli-installer.sh` and `moli-installer.ps1`. Skills are maintained separately
|
|
in the repository and are not included in release assets.
|
|
|
|
Stable names are intentional: the latest non-prerelease asset is always
|
|
available at
|
|
`https://github.com/lexmount/moli/releases/latest/download/<asset-name>`.
|
|
The installers use those URLs, select the archive for the current platform,
|
|
and install the executable.
|
|
|
|
Each artifact is built on its native GitHub-hosted runner. The packager strips
|
|
only a staging copy, leaving the binary under `target/release` unchanged for
|
|
debugging. Because stripping invalidates a Mach-O signature, macOS staging
|
|
binaries are ad-hoc signed again and verified before packaging. They are not
|
|
Developer ID signed or notarized. Windows executables are not Authenticode
|
|
signed. Linux x86_64 and both macOS targets use the allocator shim bundled in
|
|
their official pointer-compressed V8 archives, routing native allocations to
|
|
PartitionAlloc. Targets without such an archive retain their existing
|
|
allocator: Linux ARM64 uses jemalloc and Windows uses the system allocator.
|
|
|
|
Release builds use one code-generation unit. The release workflow and the CI
|
|
release-regression binaries both invoke Cargo with `--release`, so they consume
|
|
the same production profile. Normal development and unit-test builds retain
|
|
their separate profiles and parallel code generation.
|
|
|
|
## Prepare the release
|
|
|
|
1. Update `version` in `moli/Cargo.toml` and refresh `Cargo.lock`.
|
|
2. Commit and push those changes to the ref that should be released.
|
|
3. Optionally build the package for your current operating system locally.
|
|
|
|
Linux or macOS:
|
|
|
|
```bash
|
|
python3 scripts/release.py --version 0.1.1
|
|
```
|
|
|
|
Windows PowerShell:
|
|
|
|
```powershell
|
|
python scripts/release.py --version 0.1.1
|
|
```
|
|
|
|
Artifacts are written to `dist/`. The packager rejects a version that does
|
|
not match `moli/Cargo.toml`, checks the native Rust target, strips the staged
|
|
executable, and verifies the packaged binary's reported version.
|
|
|
|
## Trigger GitHub Release
|
|
|
|
1. Open **Actions** in GitHub and choose the **Release** workflow.
|
|
2. Select **Run workflow** and choose the Git ref containing the release.
|
|
3. Enter the version (with or without a leading `v`).
|
|
4. Choose whether the release should be a prerelease or a draft, then run it.
|
|
|
|
The workflow validates the selected commit, builds all six native artifacts
|
|
in parallel, verifies the expected archives, creates the corresponding
|
|
`vX.Y.Z` tag, generates release notes, and uploads eight assets: six archives
|
|
and two installers. It stops without creating a release if any platform fails,
|
|
if the requested version does not match the manifest, or if the tag already
|
|
exists. A published, non-prerelease release is explicitly marked as the latest
|
|
release so the stable installer URLs switch to it immediately.
|