From 399fd481baf829eec46d6f359a4df0a697e6fabf Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Mon, 3 Feb 2025 23:20:21 +0100 Subject: [PATCH 1/8] deps: add @electron-forge/maker-flatpak --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 2020f0e9e..47b2337a1 100644 --- a/package.json +++ b/package.json @@ -150,6 +150,7 @@ "@electron-forge/cli": "7.6.1", "@electron-forge/maker-deb": "7.6.1", "@electron-forge/maker-dmg": "7.6.1", + "@electron-forge/maker-flatpak": "7.6.1", "@electron-forge/maker-rpm": "7.6.1", "@electron-forge/maker-squirrel": "7.6.1", "@electron-forge/maker-zip": "7.6.1", From 7753905df97c48dcdffb46af39aa52042d949660 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Mon, 3 Feb 2025 23:21:27 +0100 Subject: [PATCH 2/8] build(electron): add flatpak config --- forge.config.cjs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/forge.config.cjs b/forge.config.cjs index b3765a35b..065a73d38 100644 --- a/forge.config.cjs +++ b/forge.config.cjs @@ -59,6 +59,15 @@ module.exports = { } } }, + { + name: "@electron-forge/maker-flatpak", + config: { + options: { + icon: "./images/app-icons/png/128x128.png", + desktopTemplate: path.resolve("./bin/electron-forge/desktop.ejs"), + }, + } + }, { name: "@electron-forge/maker-rpm", config: { From 4bf8cdfc3987374d979d8354d6ed9580ccc209d1 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Tue, 4 Feb 2025 08:22:44 +0100 Subject: [PATCH 3/8] deps: add @electron-forge/maker-flatpak to package-lock as well --- package-lock.json | 244 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) diff --git a/package-lock.json b/package-lock.json index a09083255..c945393fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,6 +108,7 @@ "@electron-forge/cli": "7.6.1", "@electron-forge/maker-deb": "7.6.1", "@electron-forge/maker-dmg": "7.6.1", + "@electron-forge/maker-flatpak": "7.6.1", "@electron-forge/maker-rpm": "7.6.1", "@electron-forge/maker-squirrel": "7.6.1", "@electron-forge/maker-zip": "7.6.1", @@ -781,6 +782,52 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@electron-forge/maker-flatpak": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-flatpak/-/maker-flatpak-7.6.1.tgz", + "integrity": "sha512-a9EekF8cNzjizwMs8HObxRii2tkLrTcTNMvWNhQqcJohEkJV81zNOLu9l/OdIMlKQ9cF5SuRvA4/m2bQGfT80w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron-forge/maker-base": "7.6.1", + "@electron-forge/shared-types": "7.6.1", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">= 16.4.0" + }, + "optionalDependencies": { + "@malept/electron-installer-flatpak": "^0.11.4" + } + }, + "node_modules/@electron-forge/maker-flatpak/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron-forge/maker-flatpak/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@electron-forge/maker-rpm": { "version": "7.6.1", "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.6.1.tgz", @@ -2752,6 +2799,203 @@ "node": ">= 12.13.0" } }, + "node_modules/@malept/electron-installer-flatpak": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@malept/electron-installer-flatpak/-/electron-installer-flatpak-0.11.4.tgz", + "integrity": "sha512-ZdwhT4WeeJWdnsmALUtQ7bn4pzYVh0Vg+4NnF1S3n3OACc9IWg+B+LxI5gT3XSXIrxogouqkjM6gD8S592awyA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux" + ], + "dependencies": { + "@malept/flatpak-bundler": "^0.4.0", + "debug": "^4.1.1", + "electron-installer-common": "^0.10.0", + "lodash": "^4.17.15", + "semver": "^7.1.1", + "yargs": "^16.0.0" + }, + "bin": { + "electron-installer-flatpak": "bin/electron-installer-flatpak.js" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@mermaid-js/layout-elk": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/@mermaid-js/layout-elk/-/layout-elk-0.1.7.tgz", From 1a89a0989d53a715e4ca3863948894b1ae419f31 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 5 Feb 2025 08:32:59 +0100 Subject: [PATCH 4/8] build(electron): update flatpak config to latest base previously it was defaulting to an EOL version of the Platform/SDK Explicitly setting it to 24.08 however makes the build fail, because it defaults to using an outdated "zypak" module, so we need to explicitly mention the latest version here too --- forge.config.cjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/forge.config.cjs b/forge.config.cjs index 065a73d38..7ac39e381 100644 --- a/forge.config.cjs +++ b/forge.config.cjs @@ -65,6 +65,21 @@ module.exports = { options: { icon: "./images/app-icons/png/128x128.png", desktopTemplate: path.resolve("./bin/electron-forge/desktop.ejs"), + id: "com.github.triliumnext.notes", + runtimeVersion: "24.08", + base: "org.electronjs.Electron2.BaseApp", + baseVersion: "24.08", + baseFlatpakref: "https://flathub.org/repo/flathub.flatpakrepo", + modules: [ + { + name: "zypak", + sources: { + type: "git", + url: "https://github.com/refi64/zypak", + tag: "v2024.01.17" + } + } + ] }, } }, From 1ec2b8b14592076a4d12e029793c1fdfe4c485df Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 6 Feb 2025 23:28:17 +0100 Subject: [PATCH 5/8] feat(ci): add flatpak build via electron-forge arm64 currently is broken due to a bug in electron-forge's maker-flatpak, but PR with a fix was submitted already --- .github/actions/build-electron/action.yml | 9 +++++++-- .github/workflows/main.yml | 3 ++- .github/workflows/nightly.yml | 3 ++- .github/workflows/release.yml | 3 ++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/actions/build-electron/action.yml b/.github/actions/build-electron/action.yml index fe895b409..2f804cca0 100644 --- a/.github/actions/build-electron/action.yml +++ b/.github/actions/build-electron/action.yml @@ -15,10 +15,15 @@ runs: if: ${{ inputs.os == 'macos' }} shell: bash run: brew install python-setuptools - - name: Install rpm on Ubuntu for RPM package building + - name: Install dependencies for RPM and Flatpak package building if: ${{ inputs.os == 'linux' }} shell: bash - run: sudo apt install rpm + run: | + sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils + flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + FLATPAK_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi) + FLATPAK_VERSION='24.08' + flatpak install --user --no-deps --arch $FLATPAK_ARCH --assumeyes runtime/org.freedesktop.Platform/$FLATPAK_ARCH/$FLATPAK_VERSION runtime/org.freedesktop.Sdk/$FLATPAK_ARCH/$FLATPAK_VERSION org.electronjs.Electron2.BaseApp/$FLATPAK_ARCH/$FLATPAK_VERSION - name: Install dependencies shell: bash run: npm ci diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9b9ec71b1..b19145ca1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,7 +26,7 @@ jobs: extension: [dmg, zip] - name: linux image: ubuntu-latest - extension: [deb, rpm, zip] + extension: [deb, rpm, zip, flatpak] - name: windows image: windows-latest extension: exe @@ -53,6 +53,7 @@ jobs: with: name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.${{matrix.os.extension}} path: upload/*.${{ matrix.os.extension }} + build_linux_server: name: Build Linux Server strategy: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1ed9dac92..2b1fbe57e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -23,7 +23,7 @@ jobs: extension: [dmg, zip] - name: linux image: ubuntu-latest - extension: [deb, rpm, zip] + extension: [deb, rpm, zip, flatpak] - name: windows image: windows-latest extension: exe @@ -56,6 +56,7 @@ jobs: files: upload/*.* tag_name: nightly name: Nightly Build + nightly-server: name: Deploy server nightly strategy: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5cfcae17..b7625a706 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: extension: [dmg, zip] - name: linux image: ubuntu-latest - extension: [deb, rpm, zip] + extension: [deb, rpm, zip, flatpak] - name: windows image: windows-latest extension: exe @@ -46,6 +46,7 @@ jobs: draft: true fail_on_unmatched_files: true files: upload/*.* + build_linux_server-x64: name: Build Linux Server strategy: From 7c721c4aaaa1e5793f67b6fe67fcfda97bb95050 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 7 Feb 2025 08:08:38 +0100 Subject: [PATCH 6/8] fix(ci): add temp arm64 workaround MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit currently required, because Flatpak arm64 build currently fails – and if it fails, the remaining builds (deb, rpm, zip) fail as well, as they are created in the same run. once the fix is released in the next electron-forge, we can get rid of this again. --- .github/actions/build-electron/action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/build-electron/action.yml b/.github/actions/build-electron/action.yml index 2f804cca0..b55ffea4b 100644 --- a/.github/actions/build-electron/action.yml +++ b/.github/actions/build-electron/action.yml @@ -27,6 +27,10 @@ runs: - name: Install dependencies shell: bash run: npm ci + - name: Temporary Flatpak arm64 workaround till https://github.com/electron/forge/pull/3839 is merged + if: ${{ inputs.os == 'linux' && inputs.arch == 'arm64' }} + shell: bash + run: sed -e "s/case 'armv7l'/case 'arm64'/g" -e "s/return 'arm'/return 'aarch64'/g" -i node_modules/@electron-forge/maker-flatpak/dist/MakerFlatpak.js - name: Update build info shell: bash run: npm run update-build-info From f38f9e640b3005b01b312332509f3780b33e1434 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 7 Feb 2025 08:18:23 +0100 Subject: [PATCH 7/8] chore: add .flatpak-builder to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 09804755d..bbfb24483 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ src/public/app-dist/ npm-debug.log yarn-error.log po-*/ +.flatpak-builder/ *.db !integration-tests/db/document.db From 47e2100920fc3f82e8679df4aba54add5144ea1c Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 7 Feb 2025 08:52:55 +0100 Subject: [PATCH 8/8] build(electron): use baseLinuxMakerConfigOptions for flatpak as well --- forge.config.cjs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge.config.cjs b/forge.config.cjs index 7ac39e381..faa3b0df6 100644 --- a/forge.config.cjs +++ b/forge.config.cjs @@ -63,8 +63,7 @@ module.exports = { name: "@electron-forge/maker-flatpak", config: { options: { - icon: "./images/app-icons/png/128x128.png", - desktopTemplate: path.resolve("./bin/electron-forge/desktop.ejs"), + ...baseLinuxMakerConfigOptions, id: "com.github.triliumnext.notes", runtimeVersion: "24.08", base: "org.electronjs.Electron2.BaseApp",