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
62 changes: 62 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,65 @@ jobs:
dist/SHA256SUMS
fail_on_unmatched_files: true
generate_release_notes: true

linux:
name: Linux static musl (x64 + arm64)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

# Both musl targets; built fully STATIC so the published binary has zero
# glibc/libc dependency and runs on any distro (incl. Alpine / containers).
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl, aarch64-unknown-linux-musl

- uses: Swatinem/rust-cache@v2

# zig + cargo-zigbuild supply a C cross-toolchain for `ring`'s C-crypto,
# which can't be cross-built to musl with the stock toolchain. Mirrors the
# desktop repo's scripts/build-stdiod-linux.sh.
- uses: mlugg/setup-zig@v2
- uses: taiki-e/install-action@v2
with:
tool: cargo-zigbuild

- name: Build static musl (both arches)
run: |
set -euo pipefail
mkdir -p dist
for spec in "x64:x86_64-unknown-linux-musl" "arm64:aarch64-unknown-linux-musl"; do
arch="${spec%%:*}"; target="${spec##*:}"
echo "Building $target ..."
cargo zigbuild --release --bin "$BIN_NAME" --target "$target"
cp "target/$target/release/$BIN_NAME" "dist/edison-stdiod-linux-$arch"
chmod +x "dist/edison-stdiod-linux-$arch"
done
file dist/edison-stdiod-linux-*
# x64 binary is native to this runner - smoke-test it.
./dist/edison-stdiod-linux-x64 --version || true

- name: Generate checksums
working-directory: dist
run: shasum -a 256 edison-stdiod-linux-x64 edison-stdiod-linux-arm64 > SHA256SUMS-linux

- name: Upload workflow artifact
uses: actions/upload-artifact@v5
with:
name: edison-stdiod-linux
path: |
dist/edison-stdiod-linux-x64
dist/edison-stdiod-linux-arm64
dist/SHA256SUMS-linux
if-no-files-found: error

- name: Publish GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v3
with:
files: |
dist/edison-stdiod-linux-x64
dist/edison-stdiod-linux-arm64
dist/SHA256SUMS-linux
fail_on_unmatched_files: true
generate_release_notes: true
32 changes: 6 additions & 26 deletions Cargo.lock

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

6 changes: 6 additions & 0 deletions crates/edison-stdiod/src/daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ const BACKOFF_MAX: Duration = Duration::from_secs(30);

pub async fn run(args: RunArgs) -> Result<()> {
let resolved = ResolvedRun::from_args(args)?;

// Resolve the interactive login-shell PATH once, up front, so child MCP
// servers can find version-manager node/npx (nvm/fnm/...) - the daemon's own
// (systemd/launchd) PATH doesn't include shell-rc additions. See proc.rs.
crate::proc::init_child_env().await;

// The supervisor - and the broker handle the children depend on -
// live across reconnects. ``apply_snapshot`` on each new WS will
// diff and reconcile.
Expand Down
Loading
Loading