Skip to content

Use stable release asset names - #65

Merged
antonio-orionus merged 4 commits into
mainfrom
stable-release-asset-names
Jun 5, 2026
Merged

Use stable release asset names#65
antonio-orionus merged 4 commits into
mainfrom
stable-release-asset-names

Conversation

@antonio-orionus

@antonio-orionus antonio-orionus commented Jun 5, 2026

Copy link
Copy Markdown
Owner

Summary

This PR standardizes release asset filenames to stable, platform- and arch-specific names (no embedded version) across builds, release workflows, docs, and tooling so asset URLs are deterministic.

User-facing changes

  • Download/install docs and help text now reference stable filenames: Arroxy-win-x64-Setup.exe, Arroxy-win-x64-Portable.exe, Arroxy-mac-arm64.dmg, Arroxy-mac-x64.dmg, Arroxy-linux-x64.AppImage, Arroxy-linux-x64.tar.gz, Arroxy-linux-x64.flatpak, and SHA256SUMS.
  • README and installer guidance updated (Windows SmartScreen/Defender messaging, Flatpak guidance) to use explicit filenames.
  • Release assets will be uploaded and downloadable under the fixed names above.

Internal / refactor changes

  • electron-builder.json5: artifactName templates updated to use ${productName}-${platform}-${arch}.${ext} (remove version from filenames).
  • GitHub Actions: workflows (release, installer-smoke, flatpak, release_to_winget) updated to reference exact stable asset names for upload/download/checksum/attestations/polling.
  • Flatpak flow: tarball checksum resolution and download now expect Arroxy-linux-x64.tar.gz; render script called with the new archive-path.
  • Windows build script (scripts/build/build-windows.ps1) updated to discover artifacts by the new filename patterns.
  • Added scripts/alias-latest-release-assets.sh — one-time helper to create versionless alias assets on existing releases.
  • Added tests/unit/release-asset-names.test.ts enforcing consistent stable naming across configs, workflows, and README templates.
  • .gitignore and eslint.config.mjs updated to ignore .ref; small CLI help-text tweak in scripts/render-flatpak-manifest.py.

Risk areas

  • Release/build behavior: Canonical asset URLs change. Past consumers relying on versioned names will break unless aliases are created or consumers updated. Ensure the aliasing script is run for prior releases if compatibility is required.
  • CI/workflows fragility: Workflows now require exact filenames (no globs). Failures can occur if builds do not produce the expected artifactName outputs or if upload/download paths are incorrect.
  • Packaging consistency: electron-builder must produce exact filenames for all targets (NSIS/Portable, DMG, AppImage/tar/flatpak). Validate every platform/arch build variant.
  • Updaters & package managers: Winget, Homebrew, Scoop, Flatpak repos and other automation that parsed versioned filenames may need updates to use the new names or SHA256SUMS. Winget installer regex was tightened — verify Winget manifests.
  • Security / signing: No Electron runtime, IPC, or dependency changes in this PR. However, renaming artifacts can affect distribution integrity checks and signing workflows; confirm code signing (Authenticode, macOS signing) and SHA256 verification behavior remain intact.
  • Rollback/compatibility: Consumers pinned to versioned filenames will fail to find assets; plan roll-forward or aliasing for compatibility.

Tests and checks to run

  • Run unit tests including tests/unit/release-asset-names.test.ts.
  • CI Windows installer smoke tests (Cold-state install and install/uninstall) using updated filenames.
  • Full end-to-end release dry run on a pre-release tag:
    • Build artifacts for all platforms and confirm filenames match electron-builder outputs.
    • Upload via release workflow; verify gh release upload/download, checksum generation, and attestations succeed.
    • Validate SHA256SUMS contents and that Homebrew/Scoop/Scripts find correct checksums and URLs.
  • Verify Winget, Homebrew, Scoop, and Flatpak update flows (or update scripts) can locate and consume the new filenames.
  • Manual verification of code signing and installer behavior to ensure signatures, integrity, and install flows are unchanged.

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 27afaaf1-e83e-4cb5-a686-9e298421c781

📥 Commits

Reviewing files that changed from the base of the PR and between 4a7aa5f and 502d1b8.

📒 Files selected for processing (2)
  • .gitignore
  • eslint.config.mjs
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2026-06-05T08:32:22.004Z
Learnt from: antonio-orionus
Repo: antonio-orionus/Arroxy PR: 65
File: eslint.config.mjs:13-13
Timestamp: 2026-06-05T08:32:22.004Z
Learning: In `eslint.config.mjs` for the antonio-orionus/Arroxy repo, both `'refs'` and `'.ref'` are intentionally present in the ESLint `ignores` array. They are separate local-only directory names used for debugging/comparison reference checkouts — `refs` (plural) and `.ref` (dot-prefixed hidden dir) are distinct paths, not duplicates.

Applied to files:

  • .gitignore
  • eslint.config.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Keep `scripts/test-binaries/` directory tracked (now anchored: `**/build/embedded/` and `/test-binaries/` in .gitignore)

Applied to files:

  • .gitignore
  • eslint.config.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to **/*.{ts,json} : Keep classification regexes and closed enums synchronized with i18n locale entries; `i18n-contract.test.ts` enforces all locales have strings for every enum value

Applied to files:

  • eslint.config.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Use `bun run test` (vitest), not `bun test`, to respect vitest config and per-file `// vitest-environment` directives

Applied to files:

  • eslint.config.mjs
🔇 Additional comments (2)
.gitignore (1)

53-55: LGTM!

eslint.config.mjs (1)

12-13: LGTM!


📝 Walkthrough

Walkthrough

This PR standardizes release artifact filenames to stable platform-architecture patterns (e.g., Arroxy-win-x64-Setup.exe). Build config, release and validation workflows, helper scripts, README locale strings, and tests were updated to produce, reference, and validate the new filenames.

Changes

Artifact Naming Standardization

Layer / File(s) Summary
Artifact naming configuration
electron-builder.json5, eslint.config.mjs, .gitignore, scripts/render-flatpak-manifest.py
Electron-builder now uses ${productName}-{platform}-${arch} artifactName templates; ESLint and .gitignore ignore .ref; render-flatpak help text made generic.
Release workflow orchestration
.github/workflows/release.yml
Release workflow updated to poll, prepare checksums, attest, download/upload, and publish using explicit stable filenames (Windows/macOS/Linux/Flatpak); Scoop and Homebrew metadata generation updated.
Build and validation workflows
.github/workflows/installer-smoke.yml, .github/workflows/flatpak.yml, .github/workflows/release_to_winget.yml, scripts/build/build-windows.ps1
Windows installer smoke tests, Flatpak validation, Winget step, and Windows build discovery updated to use explicit platform-arch filenames instead of wildcards or versioned patterns.
One-time migration helper
scripts/alias-latest-release-assets.sh
New Bash script uploads versionless alias assets by copying existing versioned release assets to stable filenames on a target release.
User-facing documentation
readme-src/locales/en.mjs
README locale strings updated to reference explicit artifact filenames, adjusted download-table wording, and direct SHA256SUMS verification link.
Compliance test suite
tests/unit/release-asset-names.test.ts
New Vitest suite asserts stable artifactName patterns in build config, workflow references, README template links, and absence of stale versioned patterns in generated docs.

🎯 3 (Moderate) | ⏱️ ~25 minutes


enhancement, github_actions, documentation

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is entirely missing; no content was provided by the author against the required template covering Summary, Base branch, Type, Checks, Testing, and Notes. Add a complete description following the repository template: include a 1-2 sentence summary, confirm base branch, select PR type, verify all checks passed, describe manual testing performed, and note any reviewer concerns.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Use stable release asset names' directly captures the core change across all modified files—transitioning from version-dependent to stable, versionless artifact naming conventions.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch stable-release-asset-names

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot added documentation Improvements or additions to documentation enhancement New feature or request github_actions Pull requests that update GitHub Actions code labels Jun 5, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@eslint.config.mjs`:
- Line 12: The migration summary is misleading because the eslint.config.mjs
"ignores" array contains both 'refs' and '.ref' (the array named ignores
includes entries 'refs' and '.ref'); update the config so the summary matches
the actual contents: either remove the redundant 'refs' entry from the ignores
array (keeping '.ref') or change the migration summary text to accurately state
that both 'refs' and '.ref' are present (or that 'refs' was retained), and
ensure any related comment or changelog referring to "removing refs and adding
.ref" is adjusted to reflect the chosen change.

In `@scripts/alias-latest-release-assets.sh`:
- Around line 1-71: Add a runtime check for the rtk shim and set command
variables (e.g. GH, GREP, MV, RM) to either use "rtk <cmd>" when rtk is
available or the plain command otherwise, then replace all direct invocations of
gh, grep, mv, and rm in the script with the corresponding variables ($GH, $GREP,
$MV, $RM) so the script uses rtk-prefixed commands when present; update uses in
functions/blocks that reference gh release view/download/upload, grep -Fxq
"$..." <<<"$assets", mv "$source_path" "$alias_path", and rm -f "$alias_path" to
use the new variables.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 38769906-e165-4519-82b7-302262e49074

📥 Commits

Reviewing files that changed from the base of the PR and between cfb9618 and 7051b8b.

⛔ Files ignored due to path filters (42)
  • README.am.md is excluded by !README*.md and included by *, **/*
  • README.ar.md is excluded by !README*.md and included by *, **/*
  • README.bn.md is excluded by !README*.md and included by *, **/*
  • README.de.md is excluded by !README*.md and included by *, **/*
  • README.el.md is excluded by !README*.md and included by *, **/*
  • README.es.md is excluded by !README*.md and included by *, **/*
  • README.fr.md is excluded by !README*.md and included by *, **/*
  • README.hi.md is excluded by !README*.md and included by *, **/*
  • README.ja.md is excluded by !README*.md and included by *, **/*
  • README.md is excluded by !README*.md and included by *, **/*
  • README.my.md is excluded by !README*.md and included by *, **/*
  • README.om.md is excluded by !README*.md and included by *, **/*
  • README.ps.md is excluded by !README*.md and included by *, **/*
  • README.ru.md is excluded by !README*.md and included by *, **/*
  • README.sr.md is excluded by !README*.md and included by *, **/*
  • README.sw.md is excluded by !README*.md and included by *, **/*
  • README.uk.md is excluded by !README*.md and included by *, **/*
  • README.ur.md is excluded by !README*.md and included by *, **/*
  • README.uz.md is excluded by !README*.md and included by *, **/*
  • README.vi.md is excluded by !README*.md and included by *, **/*
  • README.zh.md is excluded by !README*.md and included by *, **/*
  • readme-src/locales/am.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/ar.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/bn.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/de.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/el.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/es.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/fr.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/hi.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/ja.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/my.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/om.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/ps.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/ru.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/sr.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/sw.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/uk.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/ur.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/uz.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/vi.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/locales/zh.mjs is excluded by !readme-src/locales/!(en).mjs and included by **/*
  • readme-src/template.md is excluded by !readme-src/template.md and included by **/*
📒 Files selected for processing (12)
  • .github/workflows/flatpak.yml
  • .github/workflows/installer-smoke.yml
  • .github/workflows/release.yml
  • .github/workflows/release_to_winget.yml
  • .gitignore
  • electron-builder.json5
  • eslint.config.mjs
  • readme-src/locales/en.mjs
  • scripts/alias-latest-release-assets.sh
  • scripts/build/build-windows.ps1
  • scripts/render-flatpak-manifest.py
  • tests/unit/release-asset-names.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Cold start (macos-arm64)
  • GitHub Check: Build Windows installer
  • GitHub Check: Cold start (windows)
  • GitHub Check: Cold start (linux)
  • GitHub Check: check
  • GitHub Check: build
  • GitHub Check: check
🧰 Additional context used
📓 Path-based instructions (10)
.github/workflows/**

⚙️ CodeRabbit configuration file

Review GitHub Actions for least-privilege permissions, unsafe secret exposure, untrusted PR execution, shell quoting, release/tag correctness, artifact handling, and whether commands can fail silently.

Files:

  • .github/workflows/release_to_winget.yml
  • .github/workflows/installer-smoke.yml
  • .github/workflows/flatpak.yml
  • .github/workflows/release.yml
scripts/**

⚙️ CodeRabbit configuration file

Review shell and Node/Bun scripts for unsafe command construction, unquoted variables, path traversal, platform-specific assumptions, missing error handling, and release/build reproducibility.

Files:

  • scripts/render-flatpak-manifest.py
  • scripts/build/build-windows.ps1
  • scripts/alias-latest-release-assets.sh
**/*.{sh,bash}

📄 CodeRabbit inference engine (AGENTS.md)

Always prefix shell commands with rtk for token optimization, unless RTK is unavailable (check via command -v rtk)

Files:

  • scripts/alias-latest-release-assets.sh
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Prefer interface for defining object shapes in TypeScript

Files:

  • tests/unit/release-asset-names.test.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Type safety throughout — favor strict typing, exhaustive checks, and discriminated unions. Avoid any and unknown unless justified.

Files:

  • tests/unit/release-asset-names.test.ts
**/*.test.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use bun run test (vitest), not bun test, to respect vitest config and per-file // @vitest-environment`` directives

Files:

  • tests/unit/release-asset-names.test.ts
**/*.test.ts

📄 CodeRabbit inference engine (AGENTS.md)

When adding idempotent IPC registration (ipcMain.removeHandler, autoUpdater.removeAllListeners), add the method as vi.fn() to matching vi.mock() blocks

Files:

  • tests/unit/release-asset-names.test.ts
**/*.{ts,json}

📄 CodeRabbit inference engine (AGENTS.md)

Keep classification regexes and closed enums synchronized with i18n locale entries; i18n-contract.test.ts enforces all locales have strings for every enum value

Files:

  • tests/unit/release-asset-names.test.ts
tests/**

⚙️ CodeRabbit configuration file

Prioritize meaningful coverage, determinism, and whether tests validate behavior. Do not nitpick formatting or implementation style unless it makes the test unreliable.

Files:

  • tests/unit/release-asset-names.test.ts
.github/workflows/release.yml

📄 CodeRabbit inference engine (AGENTS.md)

Pre-release tags use semver suffix (e.g. v0.4.0-beta.1); publish-scoop/publish-homebrew jobs guard if: !contains(github.ref_name, '-') so beta tags don't bump public package managers

Files:

  • .github/workflows/release.yml
🧠 Learnings (12)
📓 Common learnings
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to .github/workflows/release.yml : Pre-release tags use semver suffix (e.g. `v0.4.0-beta.1`); `publish-scoop`/`publish-homebrew` jobs guard `if: !contains(github.ref_name, '-')` so beta tags don't bump public package managers
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to build/beforeBuild.mjs : Pin `electron-builder ≥ 26.9.0` (26.8.x has buffer over-read on cold-heap); drop `build/installer.nsh`; any custom NSIS callback must guard with `${If} ${Silent}`

Applied to files:

  • electron-builder.json5
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Keep `scripts/test-binaries/` directory tracked (now anchored: `**/build/embedded/` and `/test-binaries/` in .gitignore)

Applied to files:

  • .gitignore
  • tests/unit/release-asset-names.test.ts
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Use `bun run test` (vitest), not `bun test`, to respect vitest config and per-file `// vitest-environment` directives

Applied to files:

  • eslint.config.mjs
  • tests/unit/release-asset-names.test.ts
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to {src/shared/schemas.ts,readme-src/strings.mjs} : Keep `SUPPORTED_LANGS` in `src/shared/schemas.ts` and `LOCALES` in `readme-src/strings.mjs` in lockstep with the landing-site locale list

Applied to files:

  • eslint.config.mjs
  • readme-src/locales/en.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to **/*.{ts,json} : Keep classification regexes and closed enums synchronized with i18n locale entries; `i18n-contract.test.ts` enforces all locales have strings for every enum value

Applied to files:

  • eslint.config.mjs
  • tests/unit/release-asset-names.test.ts
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to src/**/*.ts : Extract pure helpers (no I/O) into separate modules with fixture-driven tests alongside, using pattern: `tests/fixtures/yt-dlp-stderr/<kind>/*.txt` + test file

Applied to files:

  • tests/unit/release-asset-names.test.ts
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to **/*.test.ts : When adding idempotent IPC registration (ipcMain.removeHandler, autoUpdater.removeAllListeners), add the method as `vi.fn()` to matching `vi.mock()` blocks

Applied to files:

  • tests/unit/release-asset-names.test.ts
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: When adding new README feature, add `what_N` key to every locale in `readme-src/strings.mjs` and corresponding template entry; run build and commit sources + regenerated files together

Applied to files:

  • readme-src/locales/en.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to README*.md : README files are generated from `readme-src/strings.mjs` + `readme-src/template.md` — never edit README*.md directly; run `node readme-src/build.mjs` after updates

Applied to files:

  • readme-src/locales/en.mjs
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: GitHub Releases, Scoop, Homebrew Cask, and Winget all publish together from a single `v*` tag; tag must be annotated, not lightweight

Applied to files:

  • .github/workflows/release.yml
📚 Learning: 2026-06-01T13:58:55.642Z
Learnt from: CR
Repo: antonio-orionus/Arroxy PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-01T13:58:55.642Z
Learning: Applies to .github/workflows/release.yml : Pre-release tags use semver suffix (e.g. `v0.4.0-beta.1`); `publish-scoop`/`publish-homebrew` jobs guard `if: !contains(github.ref_name, '-')` so beta tags don't bump public package managers

Applied to files:

  • .github/workflows/release.yml
🪛 zizmor (1.25.2)
.github/workflows/flatpak.yml

[info] 100-100: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 102-102: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)

.github/workflows/release.yml

[warning] 377-377: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)

🔇 Additional comments (21)
.github/workflows/release.yml (7)

369-379: Static analysis false positive: template expansion is safe here.

The zizmor warning at line 377 flags $FILE as potentially attacker-controllable, but the variable is populated from find flatpak-artifact -name "*.flatpak" where flatpak-artifact is an artifact directory downloaded via actions/download-artifact@v8 from this workflow's own build-flatpak job. The .flatpak is built by the trusted flatpak/flatpak-github-actions/flatpak-builder@v6 action and cannot be tampered with by external actors.


178-179: LGTM!


199-214: LGTM!


235-241: LGTM!


335-335: LGTM!


420-420: LGTM!


465-466: LGTM!

Also applies to: 480-484

.github/workflows/flatpak.yml (2)

100-103: Static analysis false positive: template expansions are from trusted sources.

The zizmor warnings at lines 100 and 102 flag step outputs as potentially attacker-controllable. However, steps.resolve.outputs.version and steps.resolve.outputs.sha256 are extracted by a trusted Python script from this repo's own GitHub release metadata (tag name and SHA256SUMS asset). This workflow triggers on push to main or PRs targeting main, not on arbitrary external input. The values are not attacker-controllable in this threat model.


75-75: LGTM!

Also applies to: 95-95, 103-103

electron-builder.json5 (1)

36-60: LGTM!

scripts/render-flatpak-manifest.py (1)

73-77: LGTM!

.github/workflows/installer-smoke.yml (3)

63-65: LGTM!


93-93: LGTM!

Also applies to: 162-162


229-231: LGTM!

.github/workflows/release_to_winget.yml (1)

32-32: LGTM!

scripts/build/build-windows.ps1 (2)

382-382: LGTM!


401-401: LGTM!

scripts/alias-latest-release-assets.sh (1)

21-32: Confirm blockmap alias pairs match the actual electron-builder release assets
In scripts/alias-latest-release-assets.sh (lines 21-32), pairs includes .blockmap mappings for the Windows Setup EXE and macOS DMGs, but none for the Portable EXE, AppImage, tar.gz, or flatpak. Confirm that electron-builder (and your GitHub Release upload) generates and publishes .blockmap files for only those installer types—if blockmaps are produced/uploaded for additional targets (or with different naming), the pairs list must be updated to match.

readme-src/locales/en.mjs (1)

84-84: LGTM!

Also applies to: 92-92, 158-158, 162-162, 185-185, 215-215, 222-222, 231-231

tests/unit/release-asset-names.test.ts (1)

1-62: LGTM!

.gitignore (1)

61-61: ⚡ Quick win

Clarify why .ref is being added to .gitignore

  • .gitignore now ignores .ref; what does this file pattern represent in this repo (generated artifact, temp file, reference data, etc.)?
  • How does ignoring .ref relate to the PR goal of “Use stable release asset names”, and is it safe that these files are excluded from version control?

Comment thread eslint.config.mjs
Comment thread scripts/alias-latest-release-assets.sh
@antonio-orionus
antonio-orionus merged commit fe30f16 into main Jun 5, 2026
12 checks passed
@antonio-orionus
antonio-orionus deleted the stable-release-asset-names branch June 5, 2026 08:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant