Skip to content

fix(update): stop offering a Linux app update that is never built - #2335

Merged
gigara merged 1 commit into
mainfrom
drop-linux-app-target
Sep 4, 2026
Merged

fix(update): stop offering a Linux app update that is never built#2335
gigara merged 1 commit into
mainfrom
drop-linux-app-target

Conversation

@gigara

@gigara gigara commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Problem

A publishing release cannot complete. publish-update-source fails in generate-update-manifest.mjs before it writes anything.

build_linux defaults to true in build.yml, release.yml and dev-build.yml, and is hardcoded true in daily-build.yml, so linux-x64 always lands in the published targets. The manifest config then asks for an installer that nothing builds:

"linux-x64": "wso2-integrator_{version}_amd64-update.deb"

Windows builds an editor-only installer alongside the full one (INSTALLER_PROFILE=editor-updatewso2-integrator-<v>-update.msi, build.yml:1306-1310) and macOS has its Squirrel payload, but Linux only ever gets the full .deb from compile.yml. The assets on v5.0.0 show it — wso2-integrator_5.0.0_amd64.deb, with no -update variant.

The generator has to download each app installer to compute its sha256 and mirror the bytes, so this isn't a dangling URL in the output — it's a 404 that throws and fails the job.

Loud rather than silent, which is the right direction, but it blocks every release that publishes updates. Daily and dev builds are unaffected: they set build_linux: true but never publish.

Change

Drop the linux-x64 entry from app.installers. That's sufficient on its own — the app loop skips a target with no installer name:

const installerName = installerNames[target];
if (!installerName) {
  continue; // no core-app installer published for this target
}

linux-x64 deliberately stays in targets and platformTokens. compile.yml runs update-product.sh, so the Linux .deb/.rpm carry the update endpoint and pinned key and do poll the server. Their component artifacts — the Ballerina distribution, the JRE, the extension VSIXs — all exist upstream and mirror fine. Only the core-app update is unavailable, so Linux clients keep getting component updates and are simply never offered an app update.

Removing linux-x64 from targets instead would have traded one hard failure for another: the workflow still passes it in --targets, and the generator rejects targets missing from config.targets.

Verification

Structure-only run with all four targets requested:

node ci/build/generate-update-manifest.mjs \
  --targets darwin-arm64,darwin-x64,win32-x64,linux-x64 \
  --sequence 1 --app-version 5.1.0 \
  --app-release-base .../releases/download/v5.1.0 \
  --artifacts-base https://updates.wso2.com/artifacts \
  --no-download --out src.json
Wrote src.json (9 components x 4 targets, 1 app entries)
  app 5.1.0 targets: darwin-arm64, darwin-x64, win32-x64
  components carrying linux-x64: 9 of 9
  any linux app installer: false

No attempt to resolve a Linux .deb, all nine components still cover linux-x64.

Restoring it

One line, once an editor-update .deb is built the way Windows builds its MSI.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Removed the Linux x64 installer from the available installer configuration.
    • Updated installer configuration formatting for the Windows x64 entry.

Nothing produces wso2-integrator_<v>_amd64-update.deb. Windows builds an
editor-only installer alongside the full one (INSTALLER_PROFILE=editor-update),
and macOS has its Squirrel payload, but Linux only ever gets the full .deb from
compile.yml. The v5.0.0 assets show it: wso2-integrator_5.0.0_amd64.deb, no
-update variant.

The generator downloads each app installer to hash and mirror it, so with
build_linux true — the default everywhere — a publishing release resolved the
linux entry to a release asset that does not exist, 404'd, and failed
publish-update-source. No release could publish.

Dropping the entry is enough: the app loop skips a target with no installer
name. linux-x64 stays in targets, so Linux clients keep receiving component
updates, whose artifacts do exist; they are simply never offered an app update.
Restoring it is a one-line change once an editor-update .deb is built.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 4, 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: CHILL

Plan: Team

Run ID: 08af0937-fe1d-44a3-943d-7c275c8ec9ea

📥 Commits

Reviewing files that changed from the base of the PR and between a4310ef and 6f971db.

📒 Files selected for processing (1)
  • ci/build/update-manifest.config.json

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

The installer manifest removes the linux-x64 mapping for the AMD64 Debian package. The manifest retains the darwin-arm64, darwin-x64, and win32-x64 mappings.

Changes

Installer manifest

Layer / File(s) Summary
Remove Linux installer mapping
ci/build/update-manifest.config.json
Removes the linux-x64 installer mapping and keeps the remaining installer entries valid JSON.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk: ⚪ Minimal · up to 6f971

Linux application update publishing will no longer request an unbuilt installer, while macOS and Windows installer mappings remain unchanged.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description clearly explains the problem, implementation, impact, verification, and restoration condition. However, it does not follow the repository template and omits required sections such as R… Update the description to use the repository template. Add or explicitly mark as N/A the missing sections, including release note, documentation impact, training, certification, marketing, automation tests, security checks, samples, related…
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the fix: it stops offering a Linux app update that is never built. It is concise and directly related to the primary change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
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.
Full details: Description check

Explanation

The description clearly explains the problem, implementation, impact, verification, and restoration condition. However, it does not follow the repository template and omits required sections such as Release note, Documentation, Training, Certification, Marketing, Automation tests, Security checks, Test environment, and Related PRs.

Resolution

Update the description to use the repository template. Add or explicitly mark as N/A the missing sections, including release note, documentation impact, training, certification, marketing, automation tests, security checks, samples, related PRs, migrations, test environment, and learning.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch drop-linux-app-target

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

@gigara
gigara merged commit b060d72 into main Sep 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants