Files
AFFiNE-Mirror/packages/frontend/apps/electron/forge.config.mjs
doufa 3186fb8306 feat(electron): upgrade flatpak runtimeversion (#12025)
Close: #9577 

@electron-forge/maker-flatpak use @malept/electron-installer-flatpak for
make installer, in @malept/electron-installer-flatpak use zypak as
module to allow run Chromium based applications that require a sandbox
in a Flatpak environment.

electron-installer-flatpak add zypak module with v2021.01 as default
which may not compatible with runtimeVersion 24.08.

Add modules config in forge.config with zypak v2024.01.17 for
runtimeVersion 24.08 to override the default zypak version.

The flatpak info shows:

![flatpak-24
08](https://github.com/user-attachments/assets/8b4e2309-e420-47fd-bab1-e59e9ff7b342)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Chores**
- Updated the Flatpak configuration for Linux, including a newer runtime
version and additional module support.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2025-06-24 08:53:23 +00:00

245 lines
6.4 KiB
JavaScript

import cp from 'node:child_process';
import { rm, symlink } from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { utils } from '@electron-forge/core';
import {
appIdMap,
arch,
buildType,
icnsPath,
iconPngPath,
iconUrl,
iconX512PngPath,
icoPath,
platform,
productName,
} from './scripts/make-env.js';
const fromBuildIdentifier = utils.fromBuildIdentifier;
const linuxMimeTypes = [`x-scheme-handler/${productName.toLowerCase()}`];
const __dirname = fileURLToPath(new URL('.', import.meta.url));
const makers = [
!process.env.SKIP_BUNDLE &&
platform === 'darwin' && {
name: '@electron-forge/maker-dmg',
config: {
format: 'ULFO',
icon: icnsPath,
name: 'AFFiNE',
'icon-size': 128,
background: path.join(
__dirname,
'./resources/icons/dmg-background.png'
),
contents: [
{
x: 176,
y: 192,
type: 'file',
path: path.join(
__dirname,
'out',
buildType,
`${productName}-darwin-${arch}`,
`${productName}.app`
),
},
{ x: 432, y: 192, type: 'link', path: '/Applications' },
],
iconSize: 118,
file: path.join(
__dirname,
'out',
buildType,
`${productName}-darwin-${arch}`,
`${productName}.app`
),
},
},
{
name: '@electron-forge/maker-zip',
config: {
name: 'affine',
iconUrl: icoPath,
setupIcon: icoPath,
platforms: ['darwin', 'linux', 'win32'],
},
},
!process.env.SKIP_BUNDLE && {
name: '@electron-forge/maker-squirrel',
config: {
name: productName,
setupIcon: icoPath,
iconUrl: iconUrl,
loadingGif: './resources/icons/affine_installing.gif',
},
},
!process.env.SKIP_BUNDLE && {
name: '@pengx17/electron-forge-maker-appimage',
platforms: ['linux'],
config: {
icons: [
{
file: iconX512PngPath,
size: 512,
},
],
},
},
!process.env.SKIP_BUNDLE && {
name: '@electron-forge/maker-deb',
config: {
bin: productName,
options: {
name: productName,
productName,
icon: iconX512PngPath,
mimeType: linuxMimeTypes,
scripts: {
// maker-deb does not have a way to include arbitrary files in package root
// instead, put files in extraResource, and then install with a script
postinst: './resources/deb/postinst',
prerm: './resources/deb/prerm',
},
},
},
},
!process.env.SKIP_BUNDLE && {
name: '@electron-forge/maker-flatpak',
platforms: ['linux'],
/** @type {import('@electron-forge/maker-flatpak').MakerFlatpakConfig} */
config: {
options: {
mimeType: linuxMimeTypes,
productName,
bin: productName,
id: fromBuildIdentifier(appIdMap),
icon: iconPngPath, // not working yet
branch: buildType,
files: [
[
'./resources/affine.metainfo.xml',
'/usr/share/metainfo/affine.metainfo.xml',
],
],
runtimeVersion: '24.08',
modules: [
{
name: 'zypak',
sources: [
{
type: 'git',
url: 'https://github.com/refi64/zypak',
tag: 'v2024.01.17',
},
],
},
],
finishArgs: [
// Wayland/X11 Rendering
'--socket=wayland',
'--socket=x11',
'--share=ipc',
// Open GL
'--device=dri',
// Audio output
'--socket=pulseaudio',
// Read/write home directory access
'--filesystem=home',
// Allow communication with network
'--share=network',
// System notifications with libnotify
'--talk-name=org.freedesktop.Notifications',
],
},
},
},
].filter(Boolean);
/**
* @type {import('@electron-forge/shared-types').ForgeConfig}
*/
export default {
buildIdentifier: buildType,
packagerConfig: {
name: productName,
appBundleId: fromBuildIdentifier(appIdMap),
icon: icnsPath,
osxSign: {
identity: 'Developer ID Application: TOEVERYTHING PTE. LTD.',
'hardened-runtime': true,
},
electronZipDir: process.env.ELECTRON_FORGE_ELECTRON_ZIP_DIR,
osxNotarize: process.env.APPLE_ID
? {
tool: 'notarytool',
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_PASSWORD,
teamId: process.env.APPLE_TEAM_ID,
}
: undefined,
// We need the following line for updater
extraResource: [
'./resources/app-update.yml',
...(platform === 'linux' ? ['./resources/affine.metainfo.xml'] : []),
],
protocols: [
{
name: productName,
schemes: [productName.toLowerCase()],
},
],
executableName: productName,
asar: true,
extendInfo: {
NSAudioCaptureUsageDescription:
'Please allow access in order to capture audio from other apps by AFFiNE.',
},
},
makers,
plugins: [{ name: '@electron-forge/plugin-auto-unpack-natives', config: {} }],
hooks: {
readPackageJson: async (_, packageJson) => {
// we want different package name for canary build
// so stable and canary will not share the same app data
packageJson.productName = productName;
},
prePackage: async () => {
if (!process.env.HOIST_NODE_MODULES) {
await rm(path.join(__dirname, 'node_modules'), {
recursive: true,
force: true,
});
await symlink(
path.join(__dirname, '..', '..', '..', 'node_modules'),
path.join(__dirname, 'node_modules')
);
}
},
generateAssets: async (_, platform, arch) => {
if (process.env.SKIP_GENERATE_ASSETS) {
return;
}
// TODO(@Peng): right now we do not need the following
// it is for octobase-node, but we dont use it for now.
if (platform === 'darwin' && arch === 'arm64') {
// In GitHub Actions runner, MacOS is always x64
// we need to manually set TARGET to aarch64-apple-darwin
process.env.TARGET = 'aarch64-apple-darwin';
}
cp.spawnSync('yarn', ['generate-assets'], {
stdio: 'inherit',
cwd: __dirname,
});
},
},
};