feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(release): publish the Linux .deb and .rpm from the release workflow - #1

Merged
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring
Aug 6, 2026
Merged

feat(release): publish the Linux .deb and .rpm from the release workflow#1
bigpod98 merged 1 commit into
bigpod98:mainfrom
chukfinley:feat/linux-deb-rpm-release-wiring

Conversation

@chukfinley

Copy link
Copy Markdown

Adds the release wiring to your branch, per the consolidation discussion in pingdotgg#5139 (@raulferrodrigues asked me to send this here rather than keep a competing PR open).

Your branch has complete packaging metadata but nothing builds or ships the packages: the release matrix builds AppImage only, and the collect and upload steps never mention .deb or .rpm.

What this adds

FileChange
.github/workflows/release.ymlLinux entry builds AppImage,deb,rpm from one run; *.deb/*.rpm added to the collect step and to both release upload lists; a Linux-only step that guarantees rpmbuild.
scripts/build-desktop-artifact.tsresolveLinuxTargets splits the comma-separated target; the deb/rpm sections and the headless launcher key off the resolved list instead of an exact string match.
scripts/build-desktop-artifact.test.tsCovers the split and that one build configures both fpm formats while an AppImage-only build stays clean.
package.json:arm64/:x64 variants for dist:desktop:deb/:rpm, matching the dmg/win families. The bare script drops --arch x64 so it uses host arch like dist:desktop:dmg does.
docs/, download.astroDocument both formats and the comma-separated target; add .deb and .rpm download cards.

Why one run instead of a matrix entry per format

A second Linux matrix entry collides on the upload artifact name: it is desktop-${{ matrix.platform }}-${{ matrix.arch }}, so two entries differing only by target both produce desktop-linux-x64 and upload-artifact fails. That is the collision pingdotgg#1655 was closed over. Building every target in the one existing entry avoids it by construction, and artifactName's ${ext} already keeps .AppImage, .deb and .rpm apart. No extra runner, no extra release wall-clock.

rpm and rpmbuild

electron-builder shells out to rpmbuild. The Ubuntu 24.04 runner image ships it in the rpm package (4.18.2+dfsg-2.1build2, which contains /usr/bin/rpmbuild), so the added step is a no-op in practice — it installs the package only if the binary is missing, so the target does not silently break if the image changes.

Two upload blocks, easy to miss

release.yml has two softprops/action-gh-release blocks — one for the first release, one for subsequent releases — each with its own file list. Both needed the new patterns. Miss the second and the packages build fine, upload to nothing, and nobody notices until someone goes looking for them in a release.

Notes

  • Left your headless /usr/bin/t3 launcher untouched, including its fpm wiring for both formats — you mentioned splitting it into its own PR, and that decision is yours to make on top of this.
  • Linux arm64 is still absent from the release matrix, as it is today for the AppImage too. The scripts here build it locally (dist:desktop:deb:arm64); shipping it needs a maintainer's call on an arm64 runner. Happy to write that follow-up.

Verified: vitest run scripts/build-desktop-artifact.test.ts 35 passed, vp lint clean on the touched scripts, release.yml parses.

The packaging metadata in this branch is complete, but nothing builds or ships
the packages: the release matrix builds AppImage only, and the collect and
upload steps never mention .deb or .rpm.
Rather than add a matrix entry per format, the existing Linux entry now builds
`AppImage,deb,rpm` in one electron-builder run. A second entry would collide on
the upload artifact name -- `desktop-${platform}-${arch}` is identical for two
entries differing only by target, which is what sank pingdotgg#1655 -- while
artifactName's ${ext} already keeps the output files apart. One runner, one
artifact name, no extra release wall-clock.
`resolveLinuxTargets` splits the comma-separated target, and the deb/rpm config
sections plus the headless launcher now key off the resolved list rather than an
exact string match, so a combined build configures both formats.
Both `action-gh-release` blocks (first release and subsequent releases) carry
their own file list; both needed the new patterns, otherwise the packages build
and never ship.
electron-builder shells out to rpmbuild for the rpm target. The Ubuntu runner
image ships it in the `rpm` package (4.18.2 on 24.04), so the added step is a
no-op there; it installs the package only when the binary is missing.
Also adds the per-arch dist script variants (matching dist:desktop:dmg/win),
docs for both formats, download-page cards, and tests over the target split.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@chukfinley is this resolving and splitting necessary right now. we could just leave deb and rpm "hardcoded" there. if in the future we were to add more targets this would be warranted but not right now.

@bigpod98
bigpod98 merged commit 306e95c into bigpod98:mainAug 6, 2026
Sign up for freeto 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.

3 participants

@chukfinley@raulferrodrigues@bigpod98