Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8f3d4a0
embed ffmpeg/ffprobe at build via electron-builder extraResources
antonio-orionus May 7, 2026
10c5f1e
release: 0.3.1-beta.3
antonio-orionus May 7, 2026
a7dc354
fix(packaging): return true from beforeBuild so asar gets node_modules
antonio-orionus May 7, 2026
cb9900a
fix(analytics): identify as web SDK so server mints deviceId/sessionId
antonio-orionus May 7, 2026
0b6232f
ci(release): pre-create draft release to prevent multi-publisher race
antonio-orionus May 7, 2026
d383e0a
release: 0.3.1-beta.5
antonio-orionus May 7, 2026
d5f7a92
adding web analytics
antonio-orionus May 7, 2026
fd4afc1
ci(flatpak): auto-bump metainfo version + stable build cache key
antonio-orionus May 7, 2026
cb63c56
release: 0.3.1-beta.6
antonio-orionus May 7, 2026
435a673
chore(hooks): drop pre-push test runner
antonio-orionus May 7, 2026
6babcac
fix(flatpak): surface git stderr + ensure safe.directory in container
antonio-orionus May 7, 2026
7301762
release: 0.3.1-beta.7
antonio-orionus May 7, 2026
64090c3
feat: cookies bot-wall hint, browser cookies mode, probe-error alert
antonio-orionus May 7, 2026
69dc33d
release: 0.3.1-beta.8
antonio-orionus May 7, 2026
a5d255f
fix(analytics): send browser-like User-Agent so OpenPanel mints sessions
antonio-orionus May 7, 2026
1acc115
fix ui
antonio-orionus May 7, 2026
64a585f
release: 0.3.1-beta.9
antonio-orionus May 7, 2026
67fef6e
release: 0.3.1-beta.10
antonio-orionus May 7, 2026
172225c
fix(tests): mock api.addHeader on OpenPanel stub
antonio-orionus May 7, 2026
c5d3859
release: 0.3.1-beta.11
antonio-orionus May 7, 2026
37ef9e6
release: prepare 0.3.1
antonio-orionus May 7, 2026
c0a8d1d
ci: render flatpak metainfo in validation workflow
antonio-orionus May 7, 2026
2195d80
RTL + cookie guards
antonio-orionus May 7, 2026
047da5a
release: 0.3.1-beta.12
antonio-orionus May 7, 2026
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
17 changes: 10 additions & 7 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# Aptabase analytics app key. Leave empty to disable telemetry in dev.
# Format: <region>-<environment>-<id> (e.g. A-EU-123456789)
# Obtain a key from https://aptabase.com
APTABASE_KEY=A-EU-XXXXXXXXXX
# Analytics — OpenPanel (https://openpanel.dev) — desktop app
OPENPANEL_CLIENT_ID=
OPENPANEL_CLIENT_SECRET=

# Set to 1 to send analytics during `bun run dev` (events are tagged debug-mode
# by the SDK so they're filterable on the dashboard). Off by default — HMR
# Analytics — OpenPanel — landing site (docs/). Web SDK uses clientId only;
# secret kept here for parity / future server-side use, never embedded in HTML.
LANDING_OPENPANEL_CLIENT_ID=
LANDING_OPENPANEL_CLIENT_SECRET=

# Set to 1 to send analytics during `bun run dev`. Off by default — HMR
# reloads would otherwise spam wizard_started / app_started.
# ARROXY_ANALYTICS_DEBUG=1
ARROXY_ANALYTICS_DEBUG=1
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ jobs:
run: bun install --frozen-lockfile

- name: Regenerate landing + blog pages
env:
LANDING_OPENPANEL_CLIENT_ID: ${{ secrets.LANDING_OPENPANEL_CLIENT_ID }}
run: bun run build:docs

- name: Verify docs/ matches landing-src/
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/flatpak.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ jobs:
options: --privileged
steps:
- uses: actions/checkout@v4
with:
# render-flatpak-manifest.py reads v* tags to build the metainfo
# <releases> block, matching the tagged release workflow.
fetch-depth: 0
fetch-tags: true
- name: Resolve latest release tarball
id: resolve
env:
Expand Down Expand Up @@ -90,16 +95,19 @@ jobs:
--dir flatpak
- name: Render temporary manifest
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
VERSION="${{ steps.resolve.outputs.version }}"
python3 scripts/render-flatpak-manifest.py \
--sha256 "${{ steps.resolve.outputs.sha256 }}" \
--archive-path "Arroxy-${VERSION}.tar.gz" \
--template flatpak/io.github.antonio_orionus.Arroxy.yml.in \
--output flatpak/io.github.antonio_orionus.Arroxy.yml
--output flatpak/io.github.antonio_orionus.Arroxy.yml \
--metainfo-template flatpak/io.github.antonio_orionus.Arroxy.metainfo.xml.in \
--metainfo-output flatpak/io.github.antonio_orionus.Arroxy.metainfo.xml
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
id: build
with:
bundle: arroxy.flatpak
manifest-path: flatpak/io.github.antonio_orionus.Arroxy.yml
cache-key: flatpak-builder-${{ github.sha }}
cache-key: flatpak-builder-${{ hashFiles('flatpak/**') }}
verbose: true
3 changes: 2 additions & 1 deletion .github/workflows/installer-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ jobs:
- name: Build Windows artifacts
shell: bash
env:
APTABASE_KEY: ${{ secrets.APTABASE_KEY }}
OPENPANEL_CLIENT_ID: ${{ secrets.OPENPANEL_CLIENT_ID }}
OPENPANEL_CLIENT_SECRET: ${{ secrets.OPENPANEL_CLIENT_SECRET }}
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
bun run dist:win
Expand Down
76 changes: 68 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,41 @@ jobs:
fi
echo "Releasing version $PACKAGE_VERSION"

prepare-release:
# Pre-create a single draft release for this tag before any publisher runs.
# Without this, the parallel mac/linux `build` matrix jobs each call
# electron-publisher-github's getOrCreateRelease(), which lists releases
# by tag and creates a draft when none is found. Both racers see no
# release simultaneously and create one each, plus the Windows Installer
# workflow creates a third — leaving Linux assets stranded in an orphan
# draft and breaking `build-flatpak`'s `gh release download`.
#
# By pre-creating a draft here, electron-publisher reuses it (it returns
# the existing draft on the next list-releases call) and Windows
# Installer's `view || create` shortcut also reuses it.
needs: verify-version
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Ensure single draft release exists for this tag
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1 \
|| gh release create "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" \
--draft --title "$GITHUB_REF_NAME" --notes ""

build:
# Windows is built separately by the Windows Installer workflow
# (.github/workflows/installer-smoke.yml) so it can be smoke-tested
# before publish. mac/linux still build + publish here via dist:release.
#
# ffmpeg/ffprobe are downloaded at runtime by BinaryManager (BtbN for
# Win/Linux, evermeet.cx for macOS) — no per-platform npm optional deps
# to patch in here.
needs: verify-version
# ffmpeg/ffprobe are embedded at build time via electron-builder's
# beforeBuild hook (build/beforeBuild.cjs invokes
# scripts/build/fetch-embedded.sh). yt-dlp + deno remain runtime-fetched
# by BinaryManager.
needs: prepare-release
strategy:
matrix:
include:
Expand All @@ -51,7 +77,8 @@ jobs:
- run: bun run ${{ matrix.dist-cmd }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APTABASE_KEY: ${{ secrets.APTABASE_KEY }}
OPENPANEL_CLIENT_ID: ${{ secrets.OPENPANEL_CLIENT_ID }}
OPENPANEL_CLIENT_SECRET: ${{ secrets.OPENPANEL_CLIENT_SECRET }}

finalize:
needs: build
Expand Down Expand Up @@ -105,9 +132,21 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish release
run: gh release edit ${{ github.ref_name }} --draft=false
# Tags w/ a semver pre-release suffix (e.g. v0.4.0-beta.1) un-draft as
# GitHub Pre-release. electron-updater's GitHub provider queries
# /releases/latest, which excludes pre-releases — existing user installs
# do NOT auto-update. Manual install from the release page works for
# internal testing. Stable tags (e.g. v0.4.0) un-draft as full release
# and trigger normal user auto-update.
env:
GH_TOKEN: ${{ secrets.WINGET_TOKEN }}
REF_NAME: ${{ github.ref_name }}
run: |
EXTRA=""
if [[ "$REF_NAME" == *-* ]]; then
EXTRA="--prerelease"
fi
gh release edit "$REF_NAME" --draft=false $EXTRA

build-flatpak:
# Build a Flatpak bundle for the GitHub Release only.
Expand All @@ -124,10 +163,21 @@ jobs:
options: --privileged
steps:
- uses: actions/checkout@v4
with:
# Need full tag history so render-flatpak-manifest.py can read tagger
# dates of prior v* tags to render the metainfo <releases> block.
fetch-depth: 0
fetch-tags: true
- name: Render manifest for this release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# The flatpak-builder container runs as a different user than the
# workspace owner; without this, git refuses to read the repo with
# "fatal: detected dubious ownership". actions/checkout sets this
# too, but only into a temporary config that doesn't always survive
# across steps in this container image.
git config --global --add safe.directory "$GITHUB_WORKSPACE"
VERSION="${GITHUB_REF_NAME#v}"
TARBALL="Arroxy-${VERSION}.tar.gz"
gh release download "${GITHUB_REF_NAME}" \
Expand All @@ -139,12 +189,17 @@ jobs:
--sha256 "$HASH" \
--archive-path "$TARBALL" \
--template flatpak/io.github.antonio_orionus.Arroxy.yml.in \
--output flatpak/io.github.antonio_orionus.Arroxy.yml
--output flatpak/io.github.antonio_orionus.Arroxy.yml \
--metainfo-template flatpak/io.github.antonio_orionus.Arroxy.metainfo.xml.in \
--metainfo-output flatpak/io.github.antonio_orionus.Arroxy.metainfo.xml
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: arroxy.flatpak
manifest-path: flatpak/io.github.antonio_orionus.Arroxy.yml
cache-key: flatpak-builder-${{ github.sha }}
# Stable across release tags. Previously keyed on github.sha which
# never hit, adding ~7 min per release. Invalidates only when flatpak
# manifest or electron build inputs change.
cache-key: flatpak-builder-${{ hashFiles('flatpak/**', 'electron-builder.json5', 'package.json') }}

upload-flatpak:
needs: build-flatpak
Expand Down Expand Up @@ -173,6 +228,9 @@ jobs:

publish-scoop:
needs: finalize
# Skip for pre-release tags (e.g. v0.4.0-beta.1) — only stable releases
# bump the public Scoop bucket.
if: ${{ !contains(github.ref_name, '-') }}
runs-on: ubuntu-latest
steps:
- name: Checkout bucket
Expand Down Expand Up @@ -212,6 +270,8 @@ jobs:

publish-homebrew:
needs: finalize
# Skip for pre-release tags — only stable releases bump the Homebrew tap.
if: ${{ !contains(github.ref_name, '-') }}
runs-on: ubuntu-latest
steps:
- name: Checkout tap
Expand Down
14 changes: 13 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@ flatpak/builddir/
flatpak/repo/
flatpak/flathub.json
flatpak/io.github.antonio_orionus.Arroxy.yml
flatpak/io.github.antonio_orionus.Arroxy.metainfo.xml
flatpak/*.flatpak
flatpak/Arroxy-*.tar.gz
.flatpak-builder/
build-dir/
private
private

# Smoke harness output (root-only — scripts/test-binaries/ contains
# the harness scripts themselves and must stay tracked)
/test-binaries/

# Build-time embedded ffmpeg/ffprobe (scripts/build/fetch-embedded.sh output)
# Use **/ prefix so it matches both <root>/build/embedded/ and any accidental
# copies (e.g. src/build/embedded/ if a tool resolves cwd wrong).
**/build/embedded/
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
bunx lint-staged && bun run lint && bun run knip && bun run typecheck
bunx lint-staged
1 change: 0 additions & 1 deletion .husky/pre-push

This file was deleted.

12 changes: 6 additions & 6 deletions README.am.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ YouTube የቦት ማወቂያ ሲያዘምን፣ አብዛኛዎቹ ሶፍት
- **ክሊፕቦርድ ክትትል** — YouTube ሊንክ ቅዱ እና Arroxy ወደ አፕ ሲመለሱ URL ን አውቶሜቲክ ይሙላሉ (በ Advanced settings ውስጥ ያብሩ/ያጥፉ)
- **URL ን ራስ ሰር ያጥሩ** — ትራኪንግ ፓራሜትሮችን (`si`፣ `pp`፣ `utm_*`፣ `fbclid`፣ `gclid`) ያስወግዳሉ እና `youtube.com/redirect` ሊንኮችን ያሰናስሉ
- **ትሬ ሁነታ** — መስኮቱን መዝጋት ማውረዶቹን በጀርባ ያስቀጥላሉ
- **9 ቋንቋዎች** — የሥርዓት ቋንቋ ራስ ሰር ያውቃሉ፣ ሁልጊዜ መቀየር ይቻላሉ
- **21 ቋንቋዎች** — የሥርዓት ቋንቋ ራስ ሰር ያውቃሉ፣ ሁልጊዜ መቀየር ይቻላሉ

### ንዑስ ርዕሶች እና ድህረ-ሂደት

Expand Down Expand Up @@ -217,7 +217,7 @@ flatpak run io.github.antonio_orionus.Arroxy

ማውረዶቹ ቀጥታ በ [yt-dlp](https://github.com/yt-dlp/yt-dlp) ከ YouTube ወደ መረጡት አቃፊ ይወርዳሉ — ምንም ሦስተኛ ወገን ሰርቨር አይሆንም። የእይታ ታሪክ፣ የማውረድ ታሪክ፣ URLs፣ እና የፋይሎቹ ይዘቶች በመሳሪያዎ ላይ ይቆያሉ።

Arroxy ስም-አልባ፣ ሰብሰቦ ቴሌሜትሪ በ [TelemetryDeck](https://telemetrydeck.com) ይልካሉለኢንዲ ፕሮጀክት ምን ጥቅም ላይ እንዳለ ለማየት ብቻ (ጅምሮች፣ OS፣ አፕ ስሪት፣ ብልሽቶች)። ምንም URLs፣ ምንም ቪዲዮ ርዕሶች፣ ምንም የፋይል ዱካዎች፣ ምንም ሒሳብ መረጃ የለም። በጭፍን የተቀናጀ ማንነቱ ከመላኩ በፊት ይሃሽ ይደረጋል፣ TelemetryDeck ደግሞ IPs ፈጽሞ አያከማቸም — EU ውስጥ የሚሰራ እና ዲዛይን ሆኖ GDPR-ምቹ ነው። ቅንብሮቹ ውስጥ መቃወም ይቻሉ
Arroxy ስም-አልባ፣ የተጠቃለለ telemetry በ [OpenPanel](https://openpanel.dev) ይልካልጅምሮችን፣ OS፣ የአፕ ስሪቶችን እና ብልሽቶችን ለመረዳት ብቻURLs፣ የቪዲዮ ርዕሶች፣ የፋይል መንገዶች፣ የመለያ መረጃ፣ fingerprinting ወይም የግል ዳታ የለም። የእያንዳንዱ ጭነት ID የዘፈቀደ ነው እና ከማንነትዎ ጋር አይያያዝም። በSettings ውስጥ opt out ማድረግ ይችላሉ

---

Expand All @@ -239,10 +239,10 @@ YouTube የሚሰጣቸው ሁሉ: 4K UHD (2160p)፣ 1440p፣ 1080p፣ 720p፣ 4
ሁለት የጥንካሬ ሽፋኖች: yt-dlp የ YouTube ለውጦቹ ከደረሱ ከጥቂት ሰዓት ውስጥ ያዘምናሉ፣ እናም Arroxy በ~30 ደቂቃ ውስጥ ሊቋርጡ በሚችሉ ኩኪዎች አይመሠረቱም። ይህ ከምን ኮድ ያለው ብሮውዘር ክፍለ ጊዜዎች ላይ ከሚወሰኑ ሶፍትዌሮች ጋር ሲነጻጸር ግልፅ ስርዓት ይሰጣሉ።

**Arroxy በምን ቋንቋዎች ይገኛሉ?**
ዘጠኝ: English EspañolDeutschFrançais日本語፣ 中文፣ РусскийУкраїнськаहिन्दी። የሥርዓት ቋንቋዎን ራስ ሰር ያወቁ; ሁልጊዜ ከቱልባሩ ይቀይሩ። የቦታ ፋይሎቹ `src/shared/i18n/locales/` ውስጥ ቀጥተኛ TypeScript ዕቃዎች ናቸው — [PRs ይቀበላሉ](../../pulls)
ሃያ አንድ፣ ከሳጥን ውጭ: English, Español (Spanish), Deutsch (German), Français (French), 日本語 (Japanese), 中文 (Chinese), Русский (Russian), Українська (Ukrainian), हिन्दी (Hindi), Afaan Oromoo, Kiswahili, O'zbekcha (Uzbek), Tiếng Việt (Vietnamese), አማርኛ (Amharic), العربية (Arabic), اردو (Urdu), پښتو (Pashto), বাংলা (Bengali), မြန်မာဘာသာ (Burmese), Ελληνικά (Greek) እና Српски (Serbian)። Arroxy በመጀመሪያ ጊዜ ሲጀምሩ የስርዓተ ምOS ቋንቋዎን ራስ-ሰር ያወቃል፣ ከመሳሪያ አሞሌ የቋንቋ ምርጫ ማንኛውም ጊዜ መቀየር ይችላሉ። ትርጉሞች ከ src/shared/i18n/locales/ ውስጥ ቀላል TypeScript ዕቃዎች ናቸው — ለማዋጮ GitHub ላይ PR ይክፈቱ

**ሌላ ነገር ጫን ያስፈልጋሉ?**
አይ። yt-dlp እና ffmpeg በመጀመሪያ አስጀማሪ ከዕውቅ GitHub ስሪቶቻቸው ራስ ሰር ይወርዳሉ እናም አካባቢያዊ ይቀምጣሉ
አይ። yt-dlp በመጀመሪያ አስጀማሪ ራስ-ሰር ይወርዳል እና በማሽንዎ ላይ ይቀመጣል፤ ffmpeg እና ffprobe ከአፑ ጋር ይመጣሉ። ከዚያ ተጨማሪ setup አያስፈልግም

**ፕሌይሊስቶች ወይም ሙሉ ቻናሎች ማውረድ ይቻላሉ?**
አዎ፣ ለplaylists: የplaylist URL ለጥፍ፣ ከዚያ ሙሉ ዝርዝሩን ወይም አንተ የመረጥካቸውን ቪዲዮዎች ብቻ ወደ ቅደም ተከተል አክል። ሙሉ channel በብዛት ማውረድ ገና አይደገፍም።
Expand Down Expand Up @@ -280,7 +280,7 @@ YouTube የሚሰጣቸው ሁሉ: 4K UHD (2160p)፣ 1440p፣ 1080p፣ 720p፣ 4
- **React 19** + **TypeScript** — UI
- **Tailwind CSS v4** — ቅጥ አሠጣጥ
- **Zustand** — የሁኔታ አስተዳደር
- **yt-dlp** + **ffmpeg** — የማውረድ እና ማዋሃጃ ሞተር (በመጀመሪያ አስጀማሪ ከ GitHub ይወርዳሉ፣ ሁልጊዜ ወቅታዊ)
- **yt-dlp** + **ffmpeg** — የማውረድ እና mux ሞተር (yt-dlp በ runtime ይወርዳል፤ ffmpeg/ffprobe በ build time ይካተታሉ)
- **Vite** + **electron-vite** — የግንባታ መሣሪያዎች
- **Vitest** + **Playwright** — የአሃዳዊ እና ከጫፍ-ወደ-ጫፍ ፈተናዎች

Expand Down Expand Up @@ -340,7 +340,7 @@ bun run dist # package for current OS
bun run dist:win # cross-compile Windows portable exe
```

> yt-dlp እና ffmpeg አያካተቱም — በመጀመሪያ አስጀማሪ ከዕውቅ GitHub ስሪቶቻቸው ይወርዳሉ እናም በአፕ ዳታ አቃፊዎ ውስጥ ይቀመጣሉ
> yt-dlp በመጀመሪያ አስጀማሪ ከ GitHub ይወርዳል እና በ app data አቃፊ ይቀመጣል። ffmpeg እና ffprobe ከእያንዳንዱ የArroxy ስሪት ጋር ተካትተው ይመጣሉ

</details>

Expand Down
Loading
Loading