Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/release-cargo-mono.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ jobs:
asset_os: linux
asset_arch: amd64
archive_ext: tar.gz
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
asset_os: linux
asset_arch: arm64
archive_ext: tar.gz
- os: macos-15-intel
target: x86_64-apple-darwin
asset_os: darwin
Expand All @@ -83,6 +88,11 @@ jobs:
asset_os: windows
asset_arch: amd64
archive_ext: zip
- os: windows-11-arm
target: aarch64-pc-windows-msvc
asset_os: windows
asset_arch: arm64
archive_ext: zip
steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down
24 changes: 23 additions & 1 deletion .github/workflows/release-nodeup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ jobs:
asset_os: linux
asset_arch: amd64
archive_ext: tar.gz
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
asset_os: linux
asset_arch: arm64
archive_ext: tar.gz
- os: macos-15-intel
target: x86_64-apple-darwin
asset_os: darwin
Expand All @@ -83,6 +88,11 @@ jobs:
asset_os: windows
asset_arch: amd64
archive_ext: zip
- os: windows-11-arm
target: aarch64-pc-windows-msvc
asset_os: windows
asset_arch: arm64
archive_ext: zip
steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -201,6 +211,10 @@ jobs:
linux_amd64_sha="$(grep " ${linux_amd64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_amd64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_amd64_asset}"

linux_arm64_asset="nodeup-linux-arm64.tar.gz"
linux_arm64_sha="$(grep " ${linux_arm64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_arm64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_arm64_asset}"

./scripts/release/update-homebrew.sh \
--project nodeup \
--version "$RELEASE_VERSION" \
Expand All @@ -210,6 +224,8 @@ jobs:
--darwin-arm64-sha256 "$darwin_arm64_sha" \
--linux-amd64-url "$linux_amd64_url" \
--linux-amd64-sha256 "$linux_amd64_sha" \
--linux-arm64-url "$linux_arm64_url" \
--linux-arm64-sha256 "$linux_arm64_sha" \
--dry-run >/dev/null

- name: Submit Homebrew update
Expand All @@ -234,6 +250,10 @@ jobs:
linux_amd64_sha="$(grep " ${linux_amd64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_amd64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_amd64_asset}"

linux_arm64_asset="nodeup-linux-arm64.tar.gz"
linux_arm64_sha="$(grep " ${linux_arm64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_arm64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_arm64_asset}"

./scripts/release/update-homebrew.sh \
--project nodeup \
--version "$RELEASE_VERSION" \
Expand All @@ -242,4 +262,6 @@ jobs:
--darwin-arm64-url "$darwin_arm64_url" \
--darwin-arm64-sha256 "$darwin_arm64_sha" \
--linux-amd64-url "$linux_amd64_url" \
--linux-amd64-sha256 "$linux_amd64_sha"
--linux-amd64-sha256 "$linux_amd64_sha" \
--linux-arm64-url "$linux_arm64_url" \
--linux-arm64-sha256 "$linux_arm64_sha"
24 changes: 23 additions & 1 deletion .github/workflows/release-with-watch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ jobs:
asset_os: linux
asset_arch: amd64
archive_ext: tar.gz
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
asset_os: linux
asset_arch: arm64
archive_ext: tar.gz
- os: macos-15-intel
target: x86_64-apple-darwin
asset_os: darwin
Expand All @@ -83,6 +88,11 @@ jobs:
asset_os: windows
asset_arch: amd64
archive_ext: zip
- os: windows-11-arm
target: aarch64-pc-windows-msvc
asset_os: windows
asset_arch: arm64
archive_ext: zip
steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -203,6 +213,10 @@ jobs:
linux_amd64_sha="$(grep " ${linux_amd64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_amd64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_amd64_asset}"

linux_arm64_asset="with-watch-linux-arm64.tar.gz"
linux_arm64_sha="$(grep " ${linux_arm64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_arm64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_arm64_asset}"

./scripts/release/update-homebrew.sh \
--project with-watch \
--version "$RELEASE_VERSION" \
Expand All @@ -212,6 +226,8 @@ jobs:
--darwin-arm64-sha256 "$darwin_arm64_sha" \
--linux-amd64-url "$linux_amd64_url" \
--linux-amd64-sha256 "$linux_amd64_sha" \
--linux-arm64-url "$linux_arm64_url" \
--linux-arm64-sha256 "$linux_arm64_sha" \
--dry-run >/dev/null

- name: Submit Homebrew update
Expand All @@ -236,6 +252,10 @@ jobs:
linux_amd64_sha="$(grep " ${linux_amd64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_amd64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_amd64_asset}"

linux_arm64_asset="with-watch-linux-arm64.tar.gz"
linux_arm64_sha="$(grep " ${linux_arm64_asset}$" dist/SHA256SUMS | awk '{print $1}')"
linux_arm64_url="https://github.com/delinoio/oss/releases/download/${RELEASE_TAG}/${linux_arm64_asset}"

./scripts/release/update-homebrew.sh \
--project with-watch \
--version "$RELEASE_VERSION" \
Expand All @@ -244,4 +264,6 @@ jobs:
--darwin-arm64-url "$darwin_arm64_url" \
--darwin-arm64-sha256 "$darwin_arm64_sha" \
--linux-amd64-url "$linux_amd64_url" \
--linux-amd64-sha256 "$linux_amd64_sha"
--linux-amd64-sha256 "$linux_amd64_sha" \
--linux-arm64-url "$linux_arm64_url" \
--linux-arm64-sha256 "$linux_arm64_sha"
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,16 +334,16 @@ Release automation baseline:
- Required secret contract: `CARGO_REGISTRY_TOKEN` (crate publish) and `GH_TOKEN` (tag push authentication and Homebrew release workflow PR submissions). `GH_TOKEN` must be a dedicated non-`GITHUB_TOKEN` credential so tag pushes emit downstream `push` events for tag-triggered workflows.
- `release-cargo-mono` is defined in `.github/workflows/release-cargo-mono.yml`.
- Trigger contract: runs on tag push `cargo-mono@v*` and supports `workflow_dispatch` (`version`, `dry_run`).
- Distribution contract: publishes signed multi-OS cargo-mono release artifacts to GitHub Releases.
- Distribution contract: publishes signed multi-OS cargo-mono release artifacts to GitHub Releases for `linux/amd64`, `linux/arm64`, `darwin/amd64`, `darwin/arm64`, `windows/amd64`, and `windows/arm64`.
- `release-nodeup` is defined in `.github/workflows/release-nodeup.yml`.
- Trigger contract: runs on tag push `nodeup@v*` and supports `workflow_dispatch` (`version`, `dry_run`).
- Distribution contract: publishes signed multi-OS nodeup release artifacts, including standalone prebuilt binaries (`nodeup-<os>-<arch>[.exe]`) and archive assets (`nodeup-<os>-<arch>.tar.gz|zip`), then updates Homebrew (`nodeup`).
- Distribution contract: publishes signed multi-OS nodeup release artifacts for `linux/amd64`, `linux/arm64`, `darwin/amd64`, `darwin/arm64`, `windows/amd64`, and `windows/arm64`, including standalone prebuilt binaries (`nodeup-<os>-<arch>[.exe]`) and archive assets (`nodeup-<os>-<arch>.tar.gz|zip`), then updates Homebrew (`nodeup`) from prebuilt archives for `darwin/amd64`, `darwin/arm64`, `linux/amd64`, and `linux/arm64`.
- `release-derun` is defined in `.github/workflows/release-derun.yml`.
- Trigger contract: runs on tag push `derun@v*` and supports `workflow_dispatch` (`version`, `dry_run`).
- Distribution contract: publishes signed multi-OS derun release artifacts and updates Homebrew (`derun`) from GitHub release prebuilt archives (`darwin-amd64`, `darwin-arm64`, `linux-amd64`).
- `release-with-watch` is defined in `.github/workflows/release-with-watch.yml`.
- Trigger contract: runs on tag push `with-watch@v*` and supports `workflow_dispatch` (`version`, `dry_run`).
- Distribution contract: publishes signed multi-OS with-watch release artifacts, including standalone prebuilt binaries (`with-watch-<os>-<arch>[.exe]`) and archive assets (`with-watch-<os>-<arch>.tar.gz|zip`), then updates Homebrew (`with-watch`) from GitHub release prebuilt archives (`darwin-amd64`, `darwin-arm64`, `linux-amd64`).
- Distribution contract: publishes signed multi-OS with-watch release artifacts for `linux/amd64`, `linux/arm64`, `darwin/amd64`, `darwin/arm64`, `windows/amd64`, and `windows/arm64`, including standalone prebuilt binaries (`with-watch-<os>-<arch>[.exe]`) and archive assets (`with-watch-<os>-<arch>.tar.gz|zip`), then updates Homebrew (`with-watch`) from GitHub release prebuilt archives (`darwin-amd64`, `darwin-arm64`, `linux-amd64`, `linux-arm64`).
- `release-dexdex` is defined in `.github/workflows/release-dexdex.yml`.
- Trigger contract: runs on tag push `dexdex@v*` and supports `workflow_dispatch` (`version`, `dry_run`).
- Distribution contract: publishes signed DexDex desktop + main/worker server artifacts and applies desktop signing/notarization secrets, then updates Homebrew (`dexdex`, `dexdex-main-server`, `dexdex-worker-server`) where DexDex server formulas consume prebuilt release artifacts for `darwin/amd64`, `darwin/arm64`, and `linux/amd64`.
Expand Down
60 changes: 60 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions apps/public-docs/nodeup.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ Tag contract:
Package manager:

- macOS/Linux: `brew install delinoio/tap/nodeup`
- Homebrew installs prebuilt archives on macOS Intel, macOS Apple Silicon, and Linux amd64
- Linux arm64 is not yet published for the Homebrew package
- Homebrew installs prebuilt archives on macOS Intel, macOS Apple Silicon, Linux amd64, and Linux arm64

Windows direct install:

- `./scripts/install/nodeup.ps1 -Version latest -Method direct`
- The PowerShell installer selects the `windows/amd64` or `windows/arm64` archive automatically based on the host architecture

Script installer:

Expand All @@ -43,6 +43,7 @@ Script installer:
```

Direct installers verify Sigstore bundle sidecars (`*.sigstore.json`) and only support bundle-enabled releases.
`nodeup toolchain install` supports `macOS`, `Linux`, and `Windows` x64/arm64 hosts.

## Common workflows

Expand Down
1 change: 1 addition & 0 deletions apps/public-docs/with-watch.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Tag contract:
Package manager:

- macOS/Linux: `brew install delinoio/tap/with-watch`
- Homebrew installs prebuilt archives on macOS Intel, macOS Apple Silicon, Linux amd64, and Linux arm64

Cargo:

Expand Down
1 change: 1 addition & 0 deletions crates/nodeup/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ toml = "0.8.20"
tracing = "0.1.41"
tracing-subscriber = { version = "0.3.19", features = ["fmt", "env-filter"] }
xz2 = "0.1.7"
zip = { version = "0.6.6", default-features = false, features = ["deflate"] }

[dev-dependencies]
assert_cmd = "2.0.16"
Expand Down
2 changes: 1 addition & 1 deletion crates/nodeup/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ pub enum ToolchainCommand {
Link {
/// Alias used to reference the linked runtime.
name: String,
/// Path to a runtime directory containing `bin/node`.
/// Path to a runtime directory containing `bin/node` or `bin/node.exe`.
path: String,
},
}
Expand Down
10 changes: 6 additions & 4 deletions crates/nodeup/src/commands/toolchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use crate::{
errors::{NodeupError, Result},
resolver::ResolvedRuntimeTarget,
selectors::{is_reserved_channel_selector_token, is_valid_linked_name, RuntimeSelector},
store::runtime_executable_path,
NodeupApp,
};

Expand Down Expand Up @@ -397,12 +398,12 @@ fn link(
"Linked runtime path is not a directory: {}",
runtime_path.display()
),
"Provide a runtime directory that contains a `bin/node` executable.",
"Provide a runtime directory that contains a `bin/node` or `bin/node.exe` executable.",
));
}

let absolute = fs::canonicalize(&runtime_path)?;
let node_executable = absolute.join("bin").join("node");
let node_executable = runtime_executable_path(&absolute, "node");
if !node_executable.exists() {
info!(
command_path = "nodeup.toolchain.link",
Expand All @@ -416,10 +417,11 @@ fn link(
);
return Err(NodeupError::invalid_input_with_hint(
format!(
"Linked runtime path must contain `bin/node`: {}",
"Linked runtime path must contain a node executable under `bin/`: {}",
absolute.display()
),
"Verify the runtime root path and ensure `<path>/bin/node` exists before linking.",
"Verify the runtime root path and ensure `<path>/bin/node` or `<path>/bin/node.exe` \
exists before linking.",
));
}

Expand Down
2 changes: 1 addition & 1 deletion crates/nodeup/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ fn default_hint_for_kind(kind: ErrorKind) -> &'static str {
"Check the command arguments with `nodeup --help` and try again."
}
ErrorKind::UnsupportedPlatform => {
"Run this command on a supported macOS/Linux x64/arm64 host."
"Run this command on a supported macOS/Linux/Windows x64/arm64 host."
}
ErrorKind::Network => {
"Check your network connection and retry. If it keeps failing, run again with \
Expand Down
Loading
Loading