Skip to content

Release 0.3.1 - #4

Merged
antonio-orionus merged 24 commits into
mainfrom
dev
May 7, 2026
Merged

Release 0.3.1#4
antonio-orionus merged 24 commits into
mainfrom
dev

Conversation

@antonio-orionus

@antonio-orionus antonio-orionus commented May 7, 2026

Copy link
Copy Markdown
Owner

Summary

  • Merge dev into main for the stable 0.3.1 release.
  • Bump package.json from 0.3.1-beta.11 to 0.3.1.
  • Audit fixes: update generated README/landing copy for embedded ffmpeg/ffprobe, OpenPanel telemetry, and 21 supported languages; refresh the binary smoke matrix; tighten embedded-binary idempotence.
  • CI fix: render Flatpak metainfo in the standalone Flatpak validation workflow.

Verification

  • bun run build:docs with the landing OpenPanel client ID supplied from the environment
  • bun run lint
  • bun run typecheck
  • bun run knip
  • bun run test (83 files, 1038 tests)
  • bash -n scripts/build/fetch-embedded.sh
  • bash -n scripts/test-binaries/smoke-all.sh
  • Host Linux embedded ffmpeg and ffprobe probe successfully with LD_LIBRARY_PATH=build/embedded/linux-x64
  • Flatpak manifest/metainfo render smoke test

Note: I did not run the full scripts/test-binaries/smoke-all.sh matrix because it downloads every platform asset; the release workflow will exercise the build-time fetches on fresh runners.

antonio-orionus and others added 24 commits May 7, 2026 12:35
  - BinaryManager.ts: replace runtime ffmpeg/ffprobe ladder w/ override→env→bundled probe (~700 LoC
  removed)
  - scripts/build/fetch-embedded.sh: BtbN (Win/Linux) + Martin-Riedl (mac) per (platform, arch)
  - build/beforeBuild.cjs: electron-builder lifecycle hook
  - electron-builder.json5: per-platform extraResources w/ ${arch} substitution
  - THIRD_PARTY_NOTICES.txt: GPLv3 ffmpeg + Unlicense yt-dlp + MIT deno
  - src/main/utils/process.ts + probeBinary: LD_LIBRARY_PATH for Linux shared libs
  - vitest: tests/__mocks__/electron.ts for app.isPackaged

/
The ffmpeg/ffprobe-fetching beforeBuild hook returned undefined,
which electron-builder treats as "node_modules handled externally"
(packager.js — _nodeModulesHandledExternally). Result: every asar
since 0.3.0 shipped zero node_modules, crashing every install at
`Cannot find module 'electron-log/main'`.

Also: route auto-update feed by semver prerelease tag so beta
installs follow beta.yml instead of 404'ing on latest.yml.

release: 0.3.1-beta.4

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Default 'node' sdk name is treated as backend ingest by OpenPanel
server — events arrive un-sessioned with empty deviceId/sessionId.
Setting sdk='web' makes the server mint both.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Parallel mac/linux build matrix + Windows Installer workflow each
called electron-publisher-github's getOrCreateRelease(), which lists
releases by tag and creates a draft when none is found. All racers
saw no release simultaneously and each created one, leaving Linux
assets (AppImage, tar.gz) stranded in an orphan draft and breaking
build-flatpak's gh release download.

Adds a prepare-release job between verify-version and build that
idempotently creates a draft release for the tag. Subsequent
publishers find and reuse it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- render-flatpak-manifest.py also templates metainfo.xml.in, generating
  <releases> from the last 10 v* tags (newest first, betas tagged
  type="development", stable type="stable"), date from tagger date.
- build-flatpak checkout switches to fetch-depth: 0 + fetch-tags: true
  so the render script sees full tag history.
- flatpak-builder cache-key keyed on hashFiles('flatpak/**',
  'electron-builder.json5', 'package.json') instead of github.sha,
  which never hit and added ~7 min per build.
- pre-commit hook now runs lint-staged only; full-tree lint, knip and
  typecheck stay in CI to avoid blocking commits on unrelated WIP.
- ESLint moved into lint-staged (scoped to staged ts/tsx files).
- Rendered manifest, metainfo, bundle, tarball added to .gitignore.
Pre-push ran 'bun run test' against the working tree, which fails on
any unstaged WIP and is redundant with CI (.github/workflows/ci.yml
runs the same suite on every push). Tests stay in CI — local pre-push
no longer blocks pushing branches with mid-flight work.
- collect_releases() now prints git's stderr/stdout when for-each-ref
  exits non-zero, instead of swallowing it inside CalledProcessError.
- build-flatpak step explicitly adds the workspace as a global git
  safe.directory before invoking the render script. actions/checkout
  sets this too, but only in a temp config that didn't survive into the
  next step inside the freedesktop-24.08 container image — so the
  render-flatpak script's git call hit 'dubious ownership' and exit
  128, killing v0.3.1-beta.6's flatpak build.
- Detect Sign-in-to-confirm + HTTP 429 in probe stderr; surface
  BotWallNotice with three variants (unconfigured / disabled / enabled),
  generic Retry button on every variant + Enable-cookies-and-retry on
  the disabled variant.
- Add --cookies-from-browser source alongside the existing cookies.txt
  path. Settings collapse to a single tri-state radio (Off / File /
  Browser); cookiesEnabled migrates to cookiesMode. 7 browsers,
  platform-filtered (Safari macOS only).
- New CookiesErrorAlert on the wizard error step: fires whenever the
  probe hard-fails AND cookiesMode != 'off'. Per-mode explanation +
  Open-cookies-settings link that routes back and auto-expands the
  cookies section.
- Telemetry: format_probed gains bot_wall + cookies_mode;
  download_started cookies_enabled -> cookies_mode.
- 21 locales updated via translate skill.
- 3 unit tests added (cookies-resolver, format-probe-signals,
  settings-store cookies migration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
OpenPanel ingest classifies events as client vs. server purely from the
HTTP User-Agent header (parsed via UAParser). Node fetch's default UA
matches the server-event regex, so the ingest skipped sessionId/deviceId
minting and left os/osVersion/browser empty, with `device: "server"`.
Setting `sdk: 'web'` only flips the `openpanel-sdk-name` metadata header
and does not affect that classification.

Inject a Chrome-shaped User-Agent on the SDK's api instance via the
public `addHeader`. UA is built per-platform/arch with Electron's bundled
Chromium version and the app version.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@antonio-orionus
antonio-orionus merged commit b217d3e into main May 7, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant