Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
9afe932
Merge pull request #1 from fseiffarth/develop
fseiffarth Jun 24, 2026
b74800f
Merge develop: file clipboard, screenshot region capture, embed capab…
fseiffarth Jun 24, 2026
356d056
fix: compile src-tauri for Windows; mark pre-1.0 releases as alpha
fseiffarth Jun 24, 2026
c49176d
fix: emit forward-slash markdown links in box agent docs
fseiffarth Jun 24, 2026
3769e2a
fix: cross-device project import move on Windows
fseiffarth Jun 24, 2026
31663af
Merge develop: Windows build support + first alpha (v0.1.0)
fseiffarth Jun 24, 2026
635e05f
fix: recursive globs so release job finds nested bundle artifacts
fseiffarth Jun 24, 2026
3c4231d
feat: project screenshots, file viewers, search & quick-open
fseiffarth Jun 25, 2026
0f9d514
feat(git): add git worktree support (TODO Group E #23)
fseiffarth Jun 26, 2026
12a3f76
feat: dirty-state tracking, tab landing/cross-subwindow drag, agent s…
fseiffarth Jun 26, 2026
d0e95ce
Merge branch 'main' into develop
fseiffarth Jun 26, 2026
f2c0366
feat(detached): multi-pane popout resize/merge + pinned title bar
fseiffarth Jun 26, 2026
05b49a2
feat(git): hide Add/Commit/Push buttons when there's nothing to do
fseiffarth Jun 26, 2026
9b5038c
feat(detached): match main-window split/merge drag visuals + landing
fseiffarth Jun 26, 2026
bf8e2c4
feat(detached): multi-pane popout restart respawn + per-pane cross-wi…
fseiffarth Jun 26, 2026
77cdd07
feat(local-model): single active local model + app-bar picker
fseiffarth Jun 26, 2026
1c5517e
feat(local-agents): Ollama-launched agent tabs + autocomplete modes
fseiffarth Jun 27, 2026
8484694
feat(viewer): markdown editing, grammar/format via Ollama, context pi…
fseiffarth Jun 27, 2026
6d9d2f8
feat(local-agents): add OpenClaw integration
fseiffarth Jun 27, 2026
fd8a2d8
chore(release): v0.1.5
fseiffarth Jun 27, 2026
dbf0616
refactor(settings): remove Ollama settings panel entry + install check
fseiffarth Jun 27, 2026
e7019af
chore(scripts): harden privacy-check.sh against grep-wrapper false-pass
fseiffarth Jun 27, 2026
cba96f5
fix(build): resolve pdfjs-dist entry on Windows via vite alias
fseiffarth Jun 27, 2026
f945ec7
feat(tabs): live-collapse a subwindow when dragging its last tab
fseiffarth Jun 28, 2026
d533cc8
feat(windows): port detach, agent-session hook, OpenVPN, sshfs, TeX p…
fseiffarth Jun 29, 2026
3c28b65
feat(windows): fix detach deadlock, native popout drag, app icons; do…
fseiffarth Jun 29, 2026
2626c9f
release: v0.1.6 — 3D project blob (default root tab)
fseiffarth Jun 29, 2026
d63d192
test(frontend): fix suite failures and unhandled-rejection exit code
fseiffarth Jun 29, 2026
6dee1b9
feat: guided tour, lessons menu, git change-tree view, macOS packaging
fseiffarth Jun 29, 2026
3c96a5e
feat: SFTP remote browsing, git publish refactor, docker-sandbox less…
fseiffarth Jun 30, 2026
69edf34
feat(remote): mount-free SSH/SFTP-native remote projects
fseiffarth Jun 30, 2026
4bb83a9
fix(remote): harden SSH/SFTP pool, validation, and connection wiring
fseiffarth Jun 30, 2026
929db43
docs(todo): record review-team deferred items under #28k (remote line…
fseiffarth Jun 30, 2026
7cea284
feat(remote): connection status lamps, remote session UX, blob/highli…
fseiffarth Jun 30, 2026
dfcb6e0
feat(remote): selective SSH local-sync + tab locality
fseiffarth Jul 1, 2026
a9656e5
release: v0.1.7 — SSH remote project fixes + auto-sync, connect UX ov…
fseiffarth Jul 1, 2026
7a7c086
docs(todo): add #28o — scaffold both sides of SSH projects
fseiffarth Jul 1, 2026
9f1abfa
test: make base64 roundtrip cross-platform
fseiffarth Jul 1, 2026
7857c73
feat(remote): git-aware local↔remote lockstep sync (#28n Phase 1)
fseiffarth Jul 2, 2026
e3c863c
docs(readme): add logo, badges, and one-line description to header
fseiffarth Jul 2, 2026
5d90c8b
feat: network traffic tab, git peer lockstep, unified menu styling
fseiffarth Jul 2, 2026
5d5b47c
chore(license): dual-license under MIT OR Apache-2.0
fseiffarth Jul 2, 2026
266c90d
feat(calendar): native local event calendar tab in root project
fseiffarth Jul 3, 2026
a2299bf
feat(sandbox,remote,net): scaffold repair, SSH host-key TOFU, network…
fseiffarth Jul 3, 2026
e54fe99
fix(git): don't mark a folder gitignored when only a child is ignored
fseiffarth Jul 3, 2026
b565468
feat(projects): git-type tags, project hover card, GitHub/GitLab publish
fseiffarth Jul 3, 2026
55d34d7
feat(remote): always-available OpenVPN toggle + carry extend connection
fseiffarth Jul 3, 2026
393c87a
feat(files): show recursive folder sizes in the file tree
fseiffarth Jul 5, 2026
ec7730f
chore: batch in-progress work (print-to-PDF, VPN user/pass, theme, to…
fseiffarth Jul 5, 2026
bed7056
chore: bump version to v0.1.8
fseiffarth Jul 5, 2026
bf10350
feat(files): git blame in the in-app code editors
fseiffarth Jul 5, 2026
88c5f84
feat(detached): add "+" new-tab menu to popped-out subwindows
fseiffarth Jul 5, 2026
da7795e
feat(files): line-diff compare view, native editor caret, downloads s…
fseiffarth Jul 6, 2026
7854946
chore: bump version to v0.1.9
fseiffarth Jul 6, 2026
234edc1
chore: sync Cargo.lock to v0.1.9
fseiffarth Jul 6, 2026
67aa738
chore: bump version to v0.1.10
fseiffarth Jul 6, 2026
01bc9b7
feat: nested-repo git view, keyboard subwindow nav, hide/show
fseiffarth Jul 6, 2026
fef5e87
chore: bump version to v0.1.11
fseiffarth Jul 6, 2026
4be0342
feat(monitor): native htop-like system monitor tab
fseiffarth Jul 8, 2026
bef4db6
chore: bump version to v0.1.12
fseiffarth Jul 8, 2026
9d259f9
fix(print): give md/txt print real margins via body padding
fseiffarth Jul 8, 2026
2b47706
chore: bump version to v0.1.13
fseiffarth Jul 8, 2026
0ac876f
feat(tabs): hover-auto-scroll chevrons + assorted fixes
fseiffarth Jul 8, 2026
cce575f
chore: bump version to v0.1.14
fseiffarth Jul 8, 2026
1c7d7dc
feat(win): position_window + popout occlusion probe; land position_wi…
fseiffarth Jul 11, 2026
494d4bb
feat(win): SEH crash hook — log native faults to crash.log
fseiffarth Jul 11, 2026
42fedc3
feat(win): whole-system monitor + local network snapshot
fseiffarth Jul 11, 2026
ce27d4d
feat(win): SSH password auth via OpenSSH askpass, sshpass now a fallback
fseiffarth Jul 11, 2026
c98ead6
feat(macos): workspace backend — app-granularity hide/unhide parking
fseiffarth Jul 11, 2026
985d8d6
feat(macos): whole-system monitor + local network snapshot
fseiffarth Jul 11, 2026
2ae986c
feat(macos): OpenVPN backend — osascript-elevated daemon + logfile tail
fseiffarth Jul 11, 2026
f38a023
docs: Group H parity register — 30g-30k, 31b-31f, gaps; split file maps
fseiffarth Jul 11, 2026
e00eac8
feat: calendar tab, disk-usage scanner, window-state persistence, age…
fseiffarth Jul 12, 2026
07aa0f8
chore: bump version to v0.1.15
fseiffarth Jul 12, 2026
c427979
Merge pull request #3 from fseiffarth/develop
fseiffarth Jul 12, 2026
7a93316
fix(ci): green the matrix — flaky screenshot test, macOS DMG rename, …
fseiffarth Jul 12, 2026
35fa1d2
chore: bump version to v0.1.16
fseiffarth Jul 12, 2026
57fce54
docs(todo): #86 — Docker sandbox on Windows (currently refused)
fseiffarth Jul 12, 2026
dc9def5
Merge develop: fix CI matrix (v0.1.16)
fseiffarth Jul 12, 2026
23ec0e4
chore: bump version to v0.1.17
fseiffarth Jul 12, 2026
b9c4584
feat: usage recap, VPN auto-connect, PDF page tools, git lockstep har…
fseiffarth Jul 13, 2026
2a1a3c8
chore: bump version to v0.1.18
fseiffarth Jul 13, 2026
598afbc
chore: sync Cargo.lock version entry to v0.1.18
fseiffarth Jul 13, 2026
f67bce1
chore: bump version to v0.1.19
fseiffarth Jul 13, 2026
75cdb82
feat: project containers (#38), local-loss reporting, git lockstep ha…
fseiffarth Jul 13, 2026
a9aa861
chore: bump version to v0.1.20
fseiffarth Jul 13, 2026
b164a15
fix(win): unbreak test-windows — CRLF-aware lockstep assertions, colo…
fseiffarth Jul 13, 2026
82f24f9
chore: bump version to v0.1.21
fseiffarth Jul 13, 2026
5c138e7
Merge develop: v0.1.21 — project containers, usage recap, git-lockste…
fseiffarth Jul 13, 2026
f522540
feat: clone-import, detach-from-remote, dir sizes + drag-out, VPN tun…
fseiffarth Jul 13, 2026
fcf7b2a
chore: bump version to v0.1.22
fseiffarth Jul 13, 2026
e75497d
test: pin the empty-save clear guard on the frontend side
fseiffarth Jul 14, 2026
9db2389
chore: bump version to v0.1.23
fseiffarth Jul 14, 2026
1be6961
feat: native YAML/JSON tree viewer (#88), Python run/debug/intel (#87)
fseiffarth Jul 14, 2026
d977013
chore: bump version to v0.1.24
fseiffarth Jul 14, 2026
89dbb68
feat: in-tree file search (name + content) with jump-to-path
fseiffarth Jul 15, 2026
a9ecdc1
feat(win): unelevated OpenVPN via interactive service, agent installs…
fseiffarth Jul 16, 2026
3e0b5f7
chore: bump version to v0.1.22
fseiffarth Jul 16, 2026
b8f6672
wip: project files view refactor, tab pane extraction, Python interpr…
fseiffarth Jul 16, 2026
032f16e
Merge remote-tracking branch 'origin/main' into develop
fseiffarth Jul 16, 2026
c627b0c
wip: persist subwindow file-viewer folder; viewer/tab/gif refactor sn…
fseiffarth Jul 17, 2026
d92b600
chore: bump version to v0.1.25
fseiffarth Jul 17, 2026
ad62335
chore: sync Cargo.lock to v0.1.25
fseiffarth Jul 17, 2026
845748a
chore: bump version to v0.1.26
fseiffarth Jul 17, 2026
78a5098
wip: multi-host remote, tmux sessions, monitoring, custom agents snap…
fseiffarth Jul 19, 2026
cdb4de1
chore: bump version to v0.1.27
fseiffarth Jul 19, 2026
8b56fcc
fix: enable Win32_System_Pipes feature; fix GitChangeTree shift loop
fseiffarth Jul 20, 2026
dfdd616
chore: bump version to v0.1.28
fseiffarth Jul 20, 2026
745b593
test: fix Windows path-separator mismatch in nested-venv discovery test
fseiffarth Jul 20, 2026
a9e0e1b
chore: bump version to v0.1.29
fseiffarth Jul 20, 2026
3596861
feat: HPC/Slurm pipeline, global machines, YAML grid & PDF outline vi…
fseiffarth Jul 21, 2026
f67c581
feat: i18n, global machine monitoring, host auto-reconnect, dir sizes
fseiffarth Jul 21, 2026
d1a1c4b
chore: bump version to v0.1.32
fseiffarth Jul 21, 2026
01b2ebf
fix: prevent UI freezes from dead tunnels, unbounded dir sizes, Ollam…
fseiffarth Jul 21, 2026
f9818f4
chore: bump version to v0.1.33
fseiffarth Jul 21, 2026
683c04c
ci: publish full releases and name the macOS asset by version
fseiffarth Jul 21, 2026
d2d38ae
chore: bump version to v0.1.34
fseiffarth Jul 21, 2026
bc6ac29
feat: single-elevation OpenVPN teardown, big-folder exclude census, r…
fseiffarth Jul 22, 2026
c271295
chore: bump version to v0.1.35
fseiffarth Jul 22, 2026
576686e
fix: gate management-socket test behind cfg(unix)
fseiffarth Jul 22, 2026
3a4e1a9
chore: bump version to v0.1.36
fseiffarth Jul 22, 2026
b74a312
feat: deck presenter, HPC careful mode + workspaces, host-key confirm…
fseiffarth Jul 24, 2026
25d1db2
chore: scrub institution identifiers from HPC test fixture and doc
fseiffarth Jul 24, 2026
a630528
chore: genericize project-name fixtures; fix flaky process-tree cache…
fseiffarth Jul 24, 2026
beae444
fix: scope Sessions view tmux listing to the owning project
fseiffarth Jul 25, 2026
a4791ab
fix: remote-connect hardening — HPC dial guard, credential survival, …
fseiffarth Jul 25, 2026
e54047b
chore: bump version to v0.1.37
fseiffarth Jul 25, 2026
94a2a14
chore: sync root Cargo.lock to v0.1.37
fseiffarth Jul 25, 2026
c9f406b
chore: bump version to v0.1.38
fseiffarth Jul 25, 2026
cd78da6
fix(scripts): keep Cargo.lock in lockstep with the version bump
fseiffarth Jul 25, 2026
768e227
chore: bump version to v0.1.39
fseiffarth Jul 25, 2026
7f13396
fix(hooks): stage Cargo.lock with the auto version bump
fseiffarth Jul 25, 2026
1300e7b
chore: bump version to v0.1.40
fseiffarth Jul 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
#
# Auto-bump the patch version on every push of a branch, so each pushed build
# is a distinct version. Releases stay manual (they are cut by pushing a v* tag,
# which this hook deliberately skips).
#
# git can't add a commit to a push that is already in flight, so this hook:
# 1. bumps package.json / Cargo.toml / tauri.conf.json / Cargo.lock,
# 2. commits the bump onto the current branch,
# 3. re-runs the push (which carries the bump), and
# 4. aborts the original push, now superseded by the re-push.
#
# Enable once with: git config core.hooksPath .githooks
set -euo pipefail

# Guard against the recursion from our own re-push below.
[ -n "${ELDRUN_BUMPING:-}" ] && exit 0

remote="$1"

repo_root="$(git rev-parse --show-toplevel)"

# stdin: <local-ref> <local-sha> <remote-ref> <remote-sha> per pushed ref.
# Bump only when pushing a branch whose version still matches what is already on
# the remote (or a brand-new remote branch). This skips:
# - pure tag / deletion pushes (e.g. `git push origin v0.1.8` to cut a release),
# - pushes where the version was already advanced manually (minor/major bump),
# so the version on the remote strictly increases on each push without ever
# double-bumping.
pkg_version() { git show "$1:package.json" 2>/dev/null | jq -r '.version // empty' 2>/dev/null; }

bump=0
while read -r local_ref local_sha _remote_ref remote_sha; do
case "$local_ref" in
refs/tags/*|"") continue ;; # tag or deletion — leave version alone
refs/*) : ;;
*) continue ;;
esac
if [[ "$remote_sha" =~ ^0+$ ]]; then
bump=1 # new branch on the remote — give it a fresh version
elif [ "$(pkg_version "$local_sha")" = "$(pkg_version "$remote_sha")" ]; then
bump=1 # version unchanged since last push — bump it
fi
done

[ "$bump" -eq 0 ] && exit 0

new="$("$repo_root/scripts/bump-version.sh" patch)"

# Cargo.lock carries the workspace's own version too, so it is part of the bump
# — staged with the rest or the bump commit leaves the tree dirty behind it.
# `--` and the explicit list keep this to the version files: a push must never
# sweep up whatever else happens to be in the working tree.
git -C "$repo_root" add -- \
package.json src-tauri/Cargo.toml src-tauri/tauri.conf.json Cargo.lock
git -C "$repo_root" commit -m "chore: bump version to v${new}" >/dev/null

echo "pre-push: bumped version to v${new}; pushing with the bump included…" >&2
ELDRUN_BUMPING=1 git push "$remote" HEAD
echo "pre-push: pushed v${new}. The 'failed to push' line below is the original" >&2
echo " pre-bump push being intentionally aborted — the push succeeded." >&2

# The re-push above already sent the bump commit; stop the original (stale) push.
exit 1
219 changes: 204 additions & 15 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,9 @@ jobs:
- name: Run backend tests
run: cargo test --manifest-path src-tauri/Cargo.toml

package-windows:
name: package-windows
test-windows:
name: test-windows
runs-on: windows-latest
if: github.event_name == 'push'
needs: test

steps:
- name: Checkout
Expand All @@ -79,9 +77,70 @@ jobs:
- name: Install frontend dependencies
run: npm ci

- name: Build frontend
run: npm run build

- name: Run backend tests
run: cargo test --manifest-path src-tauri/Cargo.toml

test-macos:
name: test-macos
runs-on: macos-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: ./src-tauri -> target

- name: Install frontend dependencies
run: npm ci

- name: Build frontend
run: npm run build

- name: Run backend tests
run: cargo test --manifest-path src-tauri/Cargo.toml

package-windows:
name: package-windows
runs-on: windows-latest
if: github.event_name == 'push'
needs: test-windows

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: ./src-tauri -> target

- name: Install frontend dependencies
run: npm ci

- name: Build release bundles
run: npm run tauri:build -- --bundles nsis

Expand Down Expand Up @@ -141,51 +200,181 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: eldrun-${{ github.sha }}-appimage
path: src-tauri/target/release/bundle/appimage/*.AppImage
# Project-root target/ is a fallback for when CARGO_TARGET_DIR is
# overridden by swatinem/rust-cache.
path: |
src-tauri/target/release/bundle/appimage/*.AppImage
target/release/bundle/appimage/*.AppImage

- name: Upload DEB
uses: actions/upload-artifact@v4
with:
name: eldrun-${{ github.sha }}-deb
path: src-tauri/target/release/bundle/deb/*.deb
# Project-root target/ is a fallback for when CARGO_TARGET_DIR is
# overridden by swatinem/rust-cache.
path: |
src-tauri/target/release/bundle/deb/*.deb
target/release/bundle/deb/*.deb

package-macos:
name: package-macos
runs-on: macos-latest
if: github.event_name == 'push'
needs: test-macos

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-apple-darwin,aarch64-apple-darwin

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: ./src-tauri -> target

- name: Install frontend dependencies
run: npm ci

- name: Build release bundles
# Unsigned alpha .dmg (matches the unsigned Windows NSIS today). macOS
# bundle/window overrides come from src-tauri/tauri.macos.conf.json,
# which Tauri auto-merges on macOS. To ship a signed + notarized build
# later, import an Apple Developer cert into a keychain in a step above
# and set APPLE_SIGNING_IDENTITY + APPLE_ID + APPLE_PASSWORD +
# APPLE_TEAM_ID (or APPLE_API_KEY_ID/APPLE_API_ISSUER/APPLE_API_KEY_PATH)
# from repo secrets here before running the build.
run: npm run tauri:build -- --bundles dmg --target universal-apple-darwin

- name: Rename universal DMG
run: |
# Only one of these roots exists (rust-cache redirects CARGO_TARGET_DIR
# to the project root), and find exits 1 on the missing one — which the
# step's `bash -e` would treat as fatal before `test -n` ever runs.
dmg="$(find src-tauri/target target -path '*/universal-apple-darwin/release/bundle/dmg/*.dmg' -print -quit 2>/dev/null || true)"
test -n "$dmg"
# Name the published asset by version, like the AppImage/deb/exe
# bundles do — naming it by commit sha made the macOS asset the only
# one a user couldn't match to a release at a glance. Guard the move:
# Tauri may already emit exactly this name, and `mv x x` fails.
version="$(node -p "require('./package.json').version")"
target="$(dirname "$dmg")/Eldrun_${version}_universal.dmg"
[ "$dmg" = "$target" ] || mv "$dmg" "$target"

- name: Upload DMG
uses: actions/upload-artifact@v4
with:
name: eldrun-${{ github.sha }}-macos-universal-dmg
path: |
src-tauri/target/universal-apple-darwin/release/bundle/dmg/*universal.dmg
target/universal-apple-darwin/release/bundle/dmg/*universal.dmg

release:
name: release
runs-on: ubuntu-22.04
if: startsWith(github.ref, 'refs/tags/v0.') && endsWith(github.ref, '.0')
needs: [package, package-windows]
needs: [package, package-windows, package-macos]
if: >-
always() &&
startsWith(github.ref, 'refs/tags/v') &&
(
needs.package.result == 'success' ||
needs.package-windows.result == 'success' ||
needs.package-macos.result == 'success'
)
permissions:
contents: write

steps:
- name: Download AppImage artifact
if: needs.package.result == 'success'
uses: actions/download-artifact@v4
with:
name: eldrun-${{ github.sha }}-appimage
path: release-assets

- name: Download DEB artifact
if: needs.package.result == 'success'
uses: actions/download-artifact@v4
with:
name: eldrun-${{ github.sha }}-deb
path: release-assets

- name: Download Windows NSIS artifact
if: needs.package-windows.result == 'success'
uses: actions/download-artifact@v4
with:
name: eldrun-${{ github.sha }}-windows-nsis
path: release-assets

- name: Download macOS DMG artifact
if: needs.package-macos.result == 'success'
uses: actions/download-artifact@v4
with:
name: eldrun-${{ github.sha }}-macos-universal-dmg
path: release-assets

- name: Build release notes
env:
RELEASE_TAG: ${{ github.ref_name }}
RELEASE_SHA: ${{ github.sha }}
LINUX_RESULT: ${{ needs.package.result }}
WINDOWS_RESULT: ${{ needs.package-windows.result }}
MACOS_RESULT: ${{ needs.package-macos.result }}
run: |
{
printf 'Eldrun %s — alpha / preview build.\n\n' "$RELEASE_TAG"
printf 'Built from commit `%s`.\n\n' "$RELEASE_SHA"
printf 'Artifacts:\n'

if [ "$LINUX_RESULT" = success ]; then
printf -- '- Linux: `.AppImage` (portable) and `.deb`\n'
else
printf -- '- Linux: unavailable (package job: `%s`)\n' "$LINUX_RESULT"
fi

if [ "$WINDOWS_RESULT" = success ]; then
printf -- '- Windows: NSIS `.exe` installer\n'
else
printf -- '- Windows: unavailable (package job: `%s`)\n' "$WINDOWS_RESULT"
fi

if [ "$MACOS_RESULT" = success ]; then
printf -- '- macOS: universal Intel/Apple Silicon `.dmg` (unsigned — right-click → Open, or run '
printf '`xattr -dr com.apple.quarantine /Applications/Eldrun.app`)\n'
else
printf -- '- macOS: unavailable (package job: `%s`)\n' "$MACOS_RESULT"
fi

printf '\nThis is an early alpha; expect rough edges.\n'
} > release-body.md

- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
body: |
Eldrun release ${{ github.ref_name }}.

Built from commit ${{ github.sha }}.
# Publish as a full release so the newest tag becomes GitHub's
# "Latest" — a pre-release never does, which left the releases page
# with no latest build and the README's /releases/latest link stale.
# The notes still say alpha; this flag is about discoverability.
prerelease: false
body_path: release-body.md
fail_on_unmatched_files: false
# Recursive globs: the upload steps list two path patterns, so
# upload-artifact roots each artifact at the workspace dir and the
# bundle ends up nested (e.g. target/release/bundle/appimage/*.AppImage)
# rather than at the artifact root.
files: |
release-assets/*.AppImage
release-assets/*.deb
release-assets/*.exe
release-assets/**/*.AppImage
release-assets/**/*.deb
release-assets/**/*.exe
release-assets/**/*.dmg
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,11 @@ src-tauri/WixTools/

# JSON backup files created by storage layer
*.bak.json
.env
.env.local
*.swp
*.swo
.idea/

# Machine-list exports (contain real hostnames)
eldrun-machines.json
Loading
Loading