Sfoglia il codice sorgente

Electron Forge support (#632)

Lutz Roeder 2 anni fa
parent
commit
1b2fa07585
4 ha cambiato i file con 104 aggiunte e 3 eliminazioni
  1. 1 0
      .gitignore
  2. 35 3
      package.js
  3. 3 0
      package.json
  4. 65 0
      publish/forge.config.js

+ 1 - 0
.gitignore

@@ -1,6 +1,7 @@
 .DS_Store
 .DS_Store?
 dist/*
+out/*
 node_modules/*
 third_party/*
 package-lock.json

+ 35 - 3
package.js

@@ -91,11 +91,12 @@ const unlink = async (dir, filter) => {
     await Promise.all(promises);
 };
 
-const exec = async (command, encoding) => {
+const exec = async (command, encoding, cwd) => {
+    cwd = cwd || dirname();
     if (encoding) {
-        return child_process.execSync(command, { cwd: dirname(), encoding: encoding });
+        return child_process.execSync(command, { cwd: cwd, encoding: encoding });
     }
-    child_process.execSync(command, { cwd: dirname(), stdio: [ 0,1,2 ] });
+    child_process.execSync(command, { cwd: cwd, stdio: [ 0,1,2 ] });
     return '';
     /*
     return new Promise((resolve, reject) => {
@@ -579,6 +580,36 @@ const coverage = async () => {
     await exec('nyc --instrument npx electron ./dist/nyc');
 };
 
+const forge = async() => {
+    const command = read();
+    switch (command) {
+        case 'install': {
+            await exec('npm install @electron-forge/[email protected]');
+            await exec('npm install @electron-forge/[email protected]');
+            await exec('npm install @electron-forge/[email protected]');
+            await exec('npm install @electron-forge/[email protected]');
+            await exec('npm install @electron-forge/[email protected]');
+            break;
+        }
+        case 'build': {
+            const cwd = path.join(dirname(), '..', 'forge');
+            const node_modules = path.join(cwd, 'node_modules');
+            const links = path.join(cwd, '.links');
+            const exists = await access(node_modules);
+            if (!exists) {
+                await exec('yarn', null, cwd);
+            }
+            await exec('yarn build', null, cwd);
+            await exec('yarn link:prepare', null, cwd);
+            await exec(`yarn link @electron-forge/core --link-folder=${links}`);
+            break;
+        }
+        default: {
+            throw new Error(`Unsupported forge command ${command}.`);
+        }
+    }
+};
+
 const analyze = async () => {
     const exists = await access('third_party/tools/codeql');
     if (!exists) {
@@ -630,6 +661,7 @@ const next = async () => {
             case 'pull': await pull(); break;
             case 'analyze': await analyze(); break;
             case 'coverage': await coverage(); break;
+            case 'forge': await forge(); break;
             default: throw new Error(`Unsupported task '${task}'.`);
         }
     } catch (err) {

+ 3 - 0
package.json

@@ -104,6 +104,9 @@
         "report-dir": "dist/nyc/coverage",
         "temp-dir": "dist/nyc/.nyc_output"
     },
+    "config": {
+        "forge": "publish/forge.config.js"
+    },
     "build": {
         "appId": "com.lutzroeder.netron",
         "productName": "Netron",

+ 65 - 0
publish/forge.config.js

@@ -0,0 +1,65 @@
+
+/*
+const APPLE_API_KEY_ID = process.env.APPLE_API_KEY_ID;
+const APPLE_API_KEY_ISSUER_ID = process.env.APPLE_API_KEY_ISSUER_ID;
+*/
+
+export default {
+    outDir: 'dist',
+    packagerConfig: {
+        icon: "publish/icon",
+        dir: [
+            'source'
+        ],
+        ignore: [
+            "publish",
+            "third_party",
+            "test",
+            "tools"
+        ],
+        /*
+        osxNotarize: {
+            tool: 'notarytool',
+            appleApiKey: `~/.private_keys/AuthKey_${APPLE_API_KEY_ID}.p8`,
+            appleApiKeyId: APPLE_API_KEY_ID,
+            appleApiIssuer: APPLE_API_KEY_ISSUER_ID
+        },
+        */
+        asar: true
+    },
+    /*
+    makeTargets: {
+        win32: ['nsis'],
+        darwin: ['dmg', 'zip'],
+        linux: ['snap'],
+    },
+    */
+    makers: [
+        {
+            name: '@electron-forge/maker-zip',
+            config: {
+                platforms: [ 'darwin' ],
+                // name: "${name}-${version}-mac.zip"
+            }
+        },
+        {
+            name: '@electron-forge/maker-dmg',
+            config: {
+                background: './publish/background.png',
+                /* eslint-disable no-template-curly-in-string */
+                name: "Netron-${version}"
+                /* eslint-enable no-template-curly-in-string */
+            }
+        }
+    ],
+    publishers: [
+        {
+            "name": "@electron-forge/publisher-github",
+            "config": {}
+        },
+        {
+            "name": "@electron-forge/publisher-snapcraft",
+            "config": {}
+        }
+    ]
+};