Skip to content

66 create appimage for linux#67

Merged
albeva merged 13 commits into
developfrom
66-create-appimage-for-linux
May 9, 2026
Merged

66 create appimage for linux#67
albeva merged 13 commits into
developfrom
66-create-appimage-for-linux

Conversation

@albeva
Copy link
Copy Markdown
Owner

@albeva albeva commented May 9, 2026

closes #66

albeva added 13 commits May 9, 2026 16:25
Builds a self-contained AppImage on push-to-main alongside the existing
Windows x64/x86 zips, attached to the same GitHub Release.

- CMake: -DBUILD_APPIMAGE=ON switches the install layout to FHS
  (bin/fbide + share/fbide/ide/) and defines FBIDE_APPIMAGE_BUILD.
- ConfigManager: when FBIDE_APPIMAGE_BUILD is set and the binary lives
  in bin/, resolve m_ideDir via <prefix>/share/fbide/ide. Mirrors the
  macOS .app-bundle resolution and falls through to the portable
  side-by-side layout when running from a build tree.
- packaging/linux/: AppRun + fbide.desktop used by linuxdeploy.
- setup-wx action: branch on runner.os; new build-wx.sh builds wxGTK3
  static with the same trim list as the Windows build.
- ci.yml: new build-linux-appimage job (ubuntu-24.04, release-only).
  Stages AppDir, converts the .ico to a 256x256 PNG, runs linuxdeploy
  with the GTK plugin, uploads as release-linux-appimage. The existing
  release job picks the AppImage up via a widened files: glob.

ubuntu-24.04 sets the lower bound for systems the AppImage will run on
(glibc 2.39); narrower than 22.04 but matches the user's chosen runner.
The job was gated on `needs.version.outputs.release == 'true'`, which
is only set on push-to-main. workflow_dispatch and any other branch
push left the job skipped — so the AppImage build couldn't be
exercised before merging to main.

Mirror the build-and-test pattern: the build/test/stage/AppImage steps
run unconditionally; only the release-artefact upload is gated, so
manual runs verify the AppImage produces without publishing it.
Mirror the Windows build-and-test job so manual runs can pick Debug /
RelWithDebInfo for the AppImage build too. Push-to-main still defaults
to Release via the same fallback expression.
- Linux configure now passes -DWXWIN=... so cmake/wxwidgets.cmake takes
  the CONFIG path (matches Windows). The previous -DwxWidgets_ROOT_DIR
  fed the legacy FindwxWidgets module, which expects the prebuilt-
  binaries directory layout that 'cmake --install' does not produce.
- workflow_dispatch grows three boolean inputs (build_win64,
  build_win32, build_linux_appimage; default true) so manual runs can
  pick a subset of targets. The version job translates the inputs into
  outputs (win-archs JSON list + build-linux-appimage flag) consumed by
  build-and-test's matrix and the AppImage job's if guard. Push events
  bypass the inputs and build everything.
GCC fires the diagnostic at our call site when wxString's
ConvertedBuffer constructor is inlined into std::vector growth
(string.h:3745). The pointer in question is in wx code we mark as
-isystem, but GCC charges the warning to whichever non-system frame
appears in the inlining stack. -Werror then breaks the build.

Clang's -Wnull-dereference doesn't have this propagation issue, so
keep it enabled there.
The wx-header false positive was driven by IPO turning on inlining
across translation units, not by GCC's diagnostic itself. Now that
build-wx.sh hard-disables IPO for the Linux wx build, -Wnull-dereference
on GCC produces clean output and stays in the shared warning list.
Headless GitHub Actions runners ship with no installed fonts, so even
the platform-default monospace falls through wxFontEnumerator's
IsValidFacename check and the test fails. The behaviour the test
guards (face-name preserved on disk, resolved font usable on this
system) is still meaningful on developer machines where fonts exist;
gate the assertions on the CI env var that every major CI provider
sets automatically.
linuxdeploy's appimage plugin already honours the LDAI_OUTPUT env var
(the new spelling for the deprecated OUTPUT) and writes the AppImage
straight to the requested path. The leftover `mv FBIde-*.AppImage`
fallback was from an older flow and now fails because no FBIde-*
file exists.
Silences appimagetool's missing-metadata warning and lets GNOME
Software / KDE Discover surface FBIde with name, description, license,
upstream URLs, and the file-browser screenshot from the project site.

Component id uses Flathub-style reverse-DNS (io.github.albeva.fbide);
the metainfo file is staged at usr/share/metainfo/<id>.metainfo.xml so
the path leaf matches the component id (required by the AppStream
spec).
Two changes so a manual run with a target subset can still produce a
GitHub Release:

- workflow_dispatch grows a 'publish_release' checkbox (default off).
  When ticked, the version job sets release=true so the release job
  fires even though the trigger is not push-to-main. The tag-doesn't-
  exist guard runs in both modes.
- The release job now uses 'if: always() && ... && (build-and-test
  succeeded OR build-linux-appimage succeeded)'. Skipped upstream jobs
  no longer cancel the release; a full failure / skip of both still
  does because there is nothing to attach.
@albeva albeva linked an issue May 9, 2026 that may be closed by this pull request
@albeva albeva merged commit 6f2d156 into develop May 9, 2026
4 checks passed
@albeva albeva deleted the 66-create-appimage-for-linux branch May 9, 2026 16:56
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.

Create AppImage for linux

1 participant