Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 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
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ jobs:
set -euo pipefail
export TAURI_SIGNING_PRIVATE_KEY
TAURI_SIGNING_PRIVATE_KEY="$(cat "$HOME/.tauri/codexmonitor.key")"
npm run tauri -- build --bundles app
npm run tauri -- build --bundles app --config src-tauri/tauri.bundle.conf.json

- name: Bundle OpenSSL and re-sign
run: |
Expand Down Expand Up @@ -211,7 +211,7 @@ jobs:
set -euo pipefail
export TAURI_SIGNING_PRIVATE_KEY
TAURI_SIGNING_PRIVATE_KEY="$(cat "$HOME/.tauri/codexmonitor.key")"
npm run tauri -- build --bundles appimage,rpm
npm run tauri -- build --bundles appimage,rpm --config src-tauri/tauri.bundle.conf.json

- name: Validate Linux bundle outputs
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ CodexMonitor.zip
.claude/
.cursor/
public/assets/material-icons/
src-tauri/binaries/

# Nix
result
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ Build the production Tauri bundle:
npm run tauri:build
```

`tauri:build` now prepares and bundles both sidecars (`codex_monitor_daemon` and `codex_monitor_daemonctl`) into the app bundle automatically.

Artifacts will be in `src-tauri/target/release/bundle/` (platform-specific subfolders).

### Windows (opt-in)
Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"dev": "vite",
"prebuild": "npm run sync:material-icons",
"build": "tsc && vite build",
"build:appimage": "NO_STRIP=1 tauri build --bundles appimage",
"build:tauri-sidecars": "sh scripts/build-tauri-sidecars.sh",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Run sidecar build script with bash

The new build:tauri-sidecars script invokes sh scripts/build-tauri-sidecars.sh, but build-tauri-sidecars.sh is written for Bash (set -euo pipefail, arrays, [[ ... ]], BASH_SOURCE). On systems where /bin/sh is not Bash (e.g. Ubuntu dash), this command fails immediately (set: Illegal option -o pipefail), so the sidecar build entrypoint added in this commit is unusable and cannot prepare binaries when called directly.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e27036e. I replaced the shell-only sidecar step with a cross-platform Node script (scripts/build-tauri-sidecars.mjs) and updated both build:tauri-sidecars and beforeBuildCommand to use it, so this no longer depends on Bash or ./...sh on Windows.

"build:appimage": "NO_STRIP=1 tauri build --config src-tauri/tauri.bundle.conf.json --bundles appimage",
"doctor": "sh scripts/doctor.sh",
"doctor:strict": "sh scripts/doctor.sh --strict",
"doctor:win": "node scripts/doctor.mjs --strict",
Expand All @@ -29,11 +30,11 @@
"pretauri:dev": "npm run sync:material-icons",
"tauri:dev": "npm run doctor:strict && tauri dev",
"pretauri:build": "npm run sync:material-icons",
"tauri:build": "npm run doctor:strict && tauri build",
"tauri:build": "npm run doctor:strict && tauri build --config src-tauri/tauri.bundle.conf.json",
"pretauri:dev:win": "npm run sync:material-icons",
"tauri:dev:win": "npm run doctor:win && tauri dev --config src-tauri/tauri.windows.conf.json",
"pretauri:build:win": "npm run sync:material-icons",
"tauri:build:win": "npm run doctor:win && tauri build --config src-tauri/tauri.windows.conf.json"
"tauri:build:win": "npm run doctor:win && tauri build --config src-tauri/tauri.windows.conf.json --config src-tauri/tauri.bundle.conf.json"
},
"dependencies": {
"@pierre/diffs": "^1.0.6",
Expand Down
70 changes: 70 additions & 0 deletions scripts/build-tauri-sidecars.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env bash
set -euo pipefail

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "${script_dir}/.." && pwd)"
src_tauri_dir="${repo_root}/src-tauri"
binaries_dir="${src_tauri_dir}/binaries"

build_target="${TARGET:-${CARGO_BUILD_TARGET:-}}"
if [[ -z "${build_target}" ]]; then
build_target="$(rustc -vV | awk '/^host: / { print $2 }')"
fi
if [[ -z "${build_target}" ]]; then
echo "Failed to resolve Rust target triple"
exit 1
fi

cargo_target_args=()
release_dir="${src_tauri_dir}/target/release"
if [[ -n "${TARGET:-${CARGO_BUILD_TARGET:-}}" ]]; then
cargo_target_args=(--target "${build_target}")
release_dir="${src_tauri_dir}/target/${build_target}/release"
fi

bin_ext=""
if [[ "${build_target}" == *windows* ]]; then
bin_ext=".exe"
fi

mkdir -p "${binaries_dir}"

daemon_sidecar_path="${binaries_dir}/codex_monitor_daemon-${build_target}${bin_ext}"
daemonctl_sidecar_path="${binaries_dir}/codex_monitor_daemonctl-${build_target}${bin_ext}"

# Bootstrap sidecar paths so tauri's build-script path checks can pass.
if [[ ! -f "${daemon_sidecar_path}" ]]; then
: > "${daemon_sidecar_path}"
fi
if [[ ! -f "${daemonctl_sidecar_path}" ]]; then
: > "${daemonctl_sidecar_path}"
fi
if [[ -z "${bin_ext}" ]]; then
chmod +x "${daemon_sidecar_path}" "${daemonctl_sidecar_path}"
fi

(
cd "${src_tauri_dir}"
if [[ ${#cargo_target_args[@]} -gt 0 ]]; then
cargo build --release "${cargo_target_args[@]}" \
--bin codex_monitor_daemon \
--bin codex_monitor_daemonctl
else
cargo build --release \
--bin codex_monitor_daemon \
--bin codex_monitor_daemonctl
fi
)

cp -f \
"${release_dir}/codex_monitor_daemon${bin_ext}" \
"${daemon_sidecar_path}"
cp -f \
"${release_dir}/codex_monitor_daemonctl${bin_ext}" \
"${daemonctl_sidecar_path}"

if [[ -z "${bin_ext}" ]]; then
chmod +x "${daemon_sidecar_path}" "${daemonctl_sidecar_path}"
fi

echo "Prepared sidecars for ${build_target} in ${binaries_dir}"
8 changes: 8 additions & 0 deletions src-tauri/tauri.bundle.conf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"bundle": {
"externalBin": [
"binaries/codex_monitor_daemon",
"binaries/codex_monitor_daemonctl"
]
}
}
2 changes: 1 addition & 1 deletion src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"build": {
"beforeDevCommand": "npm run dev",
"devUrl": "http://localhost:1420",
"beforeBuildCommand": "npm run build",
"beforeBuildCommand": "npm run build && ./scripts/build-tauri-sidecars.sh",
"frontendDist": "../dist"
},
"app": {
Expand Down
Loading