diff --git a/.github/workflows/yakit-ci.yml b/.github/workflows/yakit-ci.yml index 15d02eeab7..3a0a61fe63 100644 --- a/.github/workflows/yakit-ci.yml +++ b/.github/workflows/yakit-ci.yml @@ -29,9 +29,19 @@ jobs: - name: "Download Yak Engine via wget(MacOS)" id: download-darwin-engine run: wget -O bins/yak_darwin_amd64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_darwin_amd64 && zip ./bins/yak_darwin_amd64.zip ./bins/yak_darwin_amd64 && rm ./bins/yak_darwin_amd64 + + - name: "Download Yak Engine via wget(MacOS-arm64)" + id: download-darwin-engine-arm64 + run: wget -O bins/yak_darwin_arm64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_darwin_arm64 && zip ./bins/yak_darwin_arm64.zip ./bins/yak_darwin_arm64 && rm ./bins/yak_darwin_arm64 + - name: "Download Yak Engine via wget(Linux)" id: download-linux-engine run: wget -O bins/yak_linux_amd64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_linux_amd64 && zip ./bins/yak_linux_amd64.zip ./bins/yak_linux_amd64 && rm ./bins/yak_linux_amd64 + + - name: "Download Yak Engine via wget(Linux-arm64)" + id: download-linux-engine-arm64 + run: wget -O bins/yak_linux_arm64 https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_linux_arm64 && zip ./bins/yak_linux_arm64.zip ./bins/yak_linux_arm64 && rm ./bins/yak_linux_arm64 + - name: "Download Yak Engine via wget(Windows)" id: download-windows-engine run: wget -O bins/yak_windows_amd64.exe https://yaklang.oss-accelerate.aliyuncs.com/yak/latest/yak_windows_amd64.exe && zip ./bins/yak_windows_amd64.zip ./bins/yak_windows_amd64.exe && rm ./bins/yak_windows_amd64.exe @@ -141,13 +151,21 @@ jobs: # Yakit-1.0.3-beta24-win32-x64.exe name: Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg - - name: Upload Yakit(Community) Artifacts Linux + - name: Upload Yakit(Community) Artifacts Linux(amd64) uses: actions/upload-artifact@v2 if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci/community-') }} with: # Yakit-1.0.3-beta24-win32-x64.exe name: Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage + + - name: Upload Yakit(Community) Artifacts Linux(arm64) + uses: actions/upload-artifact@v2 + if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci/community-') }} + with: + name: Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage + path: ./release/Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage + # start Enterprise Edition - name: Upload Yakit(Enterprise) Artifacts Windows uses: actions/upload-artifact@v2 @@ -177,7 +195,13 @@ jobs: # Yakit-1.0.3-beta24-win32-x64.exe name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage path: ./release/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage - + - name: Upload Yakit(Enterprise) Artifacts Linux(arm64) + uses: actions/upload-artifact@v2 + if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-ee') }} + with: + # Yakit-1.0.3-beta24-win32-x64.exe + name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage + path: ./release/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage # start Special Edition - name: Upload Yakit(Special) Artifacts Windows uses: actions/upload-artifact@v2 @@ -207,6 +231,13 @@ jobs: # Yakit-1.0.3-beta24-win32-x64.exe name: EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage path: ./release/EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage + - name: Upload Yakit(Special) Artifacts Linux(arm64) + uses: actions/upload-artifact@v2 + if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-se') }} + with: + # Yakit-1.0.3-beta24-win32-x64.exe + name: EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage + path: ./release/EnpriTraceAgent-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage publish_yakit_ee_to_oss: if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-ee') && !endsWith(github.ref, '/no-release') }} @@ -244,6 +275,10 @@ jobs: uses: actions/download-artifact@v2 with: name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage + - name: Download Yakit (Linux arm64) + uses: actions/download-artifact@v2 + with: + name: EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage - run: ls name: Ls Published Artifacts... @@ -263,6 +298,7 @@ jobs: Yakit-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-darwin-x64.dmg Yakit-${{ steps.extract_version.outputs.version }}-darwin-arm64.dmg:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-darwin-arm64.dmg Yakit-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-amd64.AppImage + Yakit-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage:/yak/${{ steps.extract_version.outputs.version }}/EnpriTrace-${{ steps.extract_version.outputs.version }}-linux-arm64.AppImage # special edition publish_yakit_se_to_oss: if: ${{ startsWith(github.ref, 'refs/heads/ci/yakit-se') && !endsWith(github.ref, '/no-release') }} @@ -349,7 +385,10 @@ jobs: uses: actions/download-artifact@v2 with: name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage - + - name: Download Yakit (Linux arm64) + uses: actions/download-artifact@v2 + with: + name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage - run: ls name: Ls Published Artifacts... @@ -409,7 +448,16 @@ jobs: asset_path: ./Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage asset_name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage asset_content_type: application/octet-stream - + - name: Upload Release Asset (Linux-arm64) + uses: actions/upload-release-asset@v1 + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: ./Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage + asset_name: Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage + asset_content_type: application/octet-stream - name: Run run: ls # - name: Upload yak to oss Latest @@ -449,15 +497,16 @@ jobs: Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-x64.dmg:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-x64.dmg Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-arm64.dmg:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-darwin-arm64.dmg Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-amd64.AppImage + Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage:/yak/${{ steps.fetchtag_release.outputs.value }}/Yakit-${{ steps.fetchtag_release.outputs.value }}-linux-arm64.AppImage - # - name: Update OSS latest file - # run: echo ${{ steps.fetchtag_release.outputs.value }} > ./yakit-version.txt - # - name: Upload Yakit Version to oss - # uses: tvrcgo/upload-to-oss@master - # with: - # key-id: ${{ secrets.OSS_KEY_ID }} - # key-secret: ${{ secrets.OSS_KEY_SECRET }} - # region: oss-accelerate - # bucket: yaklang - # assets: | - # ./yakit-version.txt:/yak/latest/yakit-version.txt \ No newline at end of file + - name: Update OSS latest file + run: echo ${{ steps.fetchtag_release.outputs.value }} > ./yakit-version.txt + - name: Upload Yakit Version to oss + uses: tvrcgo/upload-to-oss@master + with: + key-id: ${{ secrets.OSS_KEY_ID }} + key-secret: ${{ secrets.OSS_KEY_SECRET }} + region: oss-accelerate + bucket: yaklang + assets: | + ./yakit-version.txt:/yak/latest/yakit-version.txt \ No newline at end of file diff --git a/app/main/handlers/upgradeUtil.js b/app/main/handlers/upgradeUtil.js index 42fc776e6e..9fa388d650 100644 --- a/app/main/handlers/upgradeUtil.js +++ b/app/main/handlers/upgradeUtil.js @@ -31,6 +31,7 @@ const { const { cancelRequestWithProgress } = require("./utils/requestWithProgress"); +const { getCheckTextUrl } = require("../handlers/utils/network") const userChromeDataDir = path.join(YakitProjectPath, "chrome-profile"); const authMeta = []; @@ -361,23 +362,12 @@ module.exports = { const dest = path.join(yaklangEngineDir, version.startsWith('dev/') ? 'yak-' + version.replace('dev/', 'dev-') : `yak-${version}`); return new Promise((resolve, reject) => { try { - let url = '' - switch (process.platform) { - case "darwin": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_darwin_amd64.sha256.txt` - break - case "win32": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_windows_amd64.exe.sha256.txt` - break - case "linux": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_linux_amd64.sha256.txt` - break - } + const url = getCheckTextUrl() if (url === "") { reject(`Unsupported platform: ${process.platform}`) } - + if (fs.existsSync(dest)) { let rsp = https.get(url) rsp.on("response", (rsp) => { @@ -412,7 +402,7 @@ module.exports = { ipcMain.handle("cancel-download-yak-engine-version", async (e, version) => { return await cancelRequestWithProgress(version) }) - + // asyncDownloadLatestYakit wrapper async function asyncDownloadLatestYakit(version, isEnterprise) { return new Promise(async (resolve, reject) => { @@ -510,7 +500,7 @@ module.exports = { } } } - + } tryUnlink(2); childProcess.exec(isWindows ? `copy "${origin}" "${dest}"` : `cp "${origin}" "${dest}" && chmod +x "${dest}"`, err => { @@ -526,7 +516,7 @@ module.exports = { resolve() }) }) - + } ipcMain.handle("install-yak-engine", async (e, version) => { @@ -609,7 +599,12 @@ module.exports = { const extractedFile = (() => { switch (os.platform()) { case "darwin": - return "bins/yak_darwin_amd64" + switch (os.arch()) { + case "arm64": + return "bins/yak_darwin_arm64" + default: + return "bins/yak_darwin_amd64" + } case "win32": return "bins/yak_windows_amd64.exe" case "linux": diff --git a/app/main/handlers/utils/network.js b/app/main/handlers/utils/network.js index c8e27a31b4..35c138c64d 100644 --- a/app/main/handlers/utils/network.js +++ b/app/main/handlers/utils/network.js @@ -3,8 +3,9 @@ const axios = require("axios"); const url = require("url"); const process = require("process"); -const {requestWithProgress} = require("./requestWithProgress"); +const { requestWithProgress } = require("./requestWithProgress"); const events = require("events"); +const { async } = require("node-stream-zip"); const ossDomains = ["aliyun-oss.yaklang.com", "yaklang.oss-cn-beijing.aliyuncs.com", "yaklang.oss-accelerate.aliyuncs.com"]; @@ -55,7 +56,7 @@ async function getAvailableOSSDomain() { const url = `https://${domain}/yak/latest/version.txt`; try { console.info(`start to do axios.get to ${url}`) - const response = await axios.get(url, {httpsAgent: getHttpsAgentByDomain(domain)}); + const response = await axios.get(url, { httpsAgent: getHttpsAgentByDomain(domain) }); if (response.status !== 200) { console.error(`Failed to access (StatusCode) ${url}: ${response.status}`); continue @@ -82,10 +83,37 @@ async function getAvailableOSSDomain() { } } +/**获取校验url */ +const getCheckTextUrl = async () => { + const domain = await getAvailableOSSDomain(); + let url = '' + switch (process.platform) { + case "darwin": + if (process.arch === "arm64") { + url = `https://${domain}/yak/${version}/yak_darwin_arm64.sha256.txt` + } else { + url = `https://${domain}/yak/${version}/yak_darwin_amd64.sha256.txt` + } + break + case "win32": + url = `https://${domain}/yak/${version}/yak_windows_amd64.exe.sha256.txt` + break + case "linux": + if (process.arch === "arm64") { + url = `https://${domain}.com/yak/${version}/yak_linux_arm64.sha256.txt` + } else { + url = `https://${domain}.com/yak/${version}/yak_linux_amd64.sha256.txt` + } + break + default: + break + } + return url +} const fetchLatestYakEngineVersion = async () => { const domain = await getAvailableOSSDomain(); const versionUrl = `https://${domain}/yak/latest/version.txt`; - return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => { + return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => { const versionData = `${response.data}`.trim() if (versionData.length > 0) { return versionData.startsWith("v") ? versionData : `v${versionData}` @@ -98,7 +126,7 @@ const fetchLatestYakEngineVersion = async () => { const fetchLatestYakitVersion = async () => { const domain = await getAvailableOSSDomain(); const versionUrl = `https://${domain}/yak/latest/yakit-version.txt`; - return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => { + return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => { const versionData = `${response.data}`.trim() if (versionData.length > 0) { return versionData.startsWith("v") ? versionData : `v${versionData}` @@ -111,7 +139,7 @@ const fetchLatestYakitVersion = async () => { const fetchLatestYakitEEVersion = async () => { const domain = await getAvailableOSSDomain(); const versionUrl = `https://${domain}/yak/latest/yakit-ee-version.txt`; - return axios.get(versionUrl, {httpsAgent: getHttpsAgentByDomain(domain)}).then(response => { + return axios.get(versionUrl, { httpsAgent: getHttpsAgentByDomain(domain) }).then(response => { const versionData = `${response.data}`.trim() if (versionData.length > 0) { return versionData.startsWith("v") ? versionData : `v${versionData}` @@ -125,11 +153,19 @@ const getYakEngineDownloadUrl = async (version) => { const domain = await getAvailableOSSDomain(); switch (process.platform) { case "darwin": - return `https://${domain}/yak/${version}/yak_darwin_amd64` + if (process.arch === "arm64") { + return `https://${domain}/yak/${version}/yak_darwin_arm64` + } else { + return `https://${domain}/yak/${version}/yak_darwin_amd64` + } case "win32": return `https://${domain}/yak/${version}/yak_windows_amd64.exe` case "linux": - return `https://${domain}/yak/${version}/yak_linux_amd64` + if (process.arch === "arm64") { + return `https://${domain}/yak/${version}/yak_linux_arm64` + } else { + return `https://${domain}/yak/${version}/yak_linux_amd64` + } default: throw new Error(`Unsupported platform: ${process.platform}`) } @@ -147,7 +183,11 @@ const getYakitCommunityDownloadUrl = async (version) => { case "win32": return `https://${domain}/yak/${version}/Yakit-${version}-windows-amd64.exe` case "linux": - return `https://${domain}/yak/${version}/Yakit-${version}-linux-amd64.AppImage` + if (process.arch === "arm64") { + return `https://${domain}/yak/${version}/Yakit-${version}-linux-arm64.AppImage` + } else { + return `https://${domain}/yak/${version}/Yakit-${version}-linux-amd64.AppImage` + } } throw new Error(`Unsupported platform: ${process.platform}`) } @@ -188,6 +228,7 @@ const downloadYakitEE = async (version, destination, progressHandler, onFinished } module.exports = { + getCheckTextUrl, fetchLatestYakEngineVersion, fetchLatestYakitVersion, fetchLatestYakitEEVersion, diff --git a/app/main/uiOperate/yaklangAndYakit.js b/app/main/uiOperate/yaklangAndYakit.js index 9be9fdc354..8d9e396a0f 100644 --- a/app/main/uiOperate/yaklangAndYakit.js +++ b/app/main/uiOperate/yaklangAndYakit.js @@ -5,6 +5,7 @@ const https = require("https") const process = require("process"); const { getLocalYaklangEngine, loadExtraFilePath } = require("../filePath") const { fetchLatestYakEngineVersion } = require("../handlers/utils/network") +const { getCheckTextUrl } = require("../handlers/utils/network") module.exports = (win, getClient) => { /** yaklang引擎是否安装 */ @@ -90,18 +91,7 @@ module.exports = (win, getClient) => { const asyncFetchCheckYaklangSource = (version) => { return new Promise((resolve, reject) => { - let url = '' - switch (process.platform) { - case "darwin": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_darwin_amd64.sha256.txt` - break - case "win32": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_windows_amd64.exe.sha256.txt` - break - case "linux": - url = `https://aliyun-oss.yaklang.com/yak/${version}/yak_linux_amd64.sha256.txt` - break - } + let url = getCheckTextUrl() if (url === '') { reject(`Unsupported platform: ${process.platform}`) } diff --git a/buildHooks/before_pack.js b/buildHooks/before_pack.js new file mode 100644 index 0000000000..8ddb9dee74 --- /dev/null +++ b/buildHooks/before_pack.js @@ -0,0 +1,80 @@ +module.exports = async function (context) { + const archMap = { + 1: 'x64', + 3: 'arm64', + }; + const arch = archMap[context.arch]; + + /**linux */ + /** 1:x64 3:arm64 */ + const linuxConfig = context.electronPlatformName === 'linux' ? context.packager.config.linux : null; + if (linuxConfig) { + const linuxExtraFiles = [ + { + "from": "bins/flag.linux.txt", + "to": "bins/flag.linux.txt", + }, + ] + switch (arch) { + case 'arm64': + linuxConfig.artifactName = '${productName}-${version}-linux-arm64.${ext}'; + linuxConfig.extraFiles = [ + ...linuxExtraFiles, + { + "from": "bins/yak_linux_arm64.zip", + "to": "bins/yak.zip", + }, + ] + break; + case 'x64': + linuxConfig.artifactName = '${productName}-${version}-linux-amd64.${ext}'; + linuxConfig.extraFiles = [ + ...linuxExtraFiles, + { + "from": "bins/yak_linux_amd64.zip", + "to": "bins/yak.zip", + }, + ] + break; + + default: + break; + } + context.packager.config.linux = linuxConfig + } + /**mac */ + /** 1:x64 3:arm64 */ + const macConfig = context.electronPlatformName === 'darwin' ? context.packager.config.mac : null; + if (macConfig) { + const darwinExtraFiles = [ + { + "from": "bins/flag.darwin.txt", + "to": "bins/flag.darwin.txt", + }, + ] + switch (arch) { + case 'arm64': + macConfig.extraFiles = [ + ...darwinExtraFiles, + { + "from": "bins/yak_darwin_arm64.zip", + "to": "bins/yak.zip", + }, + ] + break; + case 'x64': + macConfig.extraFiles = [ + ...darwinExtraFiles, + { + "from": "bins/yak_darwin_amd64.zip", + "to": "bins/yak.zip", + }, + ] + break; + + default: + break; + } + context.packager.config.mac = macConfig + } +}; \ No newline at end of file diff --git a/electron-builder.yaml b/electron-builder.yaml index 24239f892e..a26878dc28 100644 --- a/electron-builder.yaml +++ b/electron-builder.yaml @@ -1,9 +1,7 @@ -appId: 'io.yaklang.yakit' -productName: 'Yakit' +appId: "io.yaklang.yakit" +productName: "Yakit" copyright: Copyright © 2024 yaklang.io - - extraFiles: - from: "bins/scripts/auto-install-cert.zip" to: "bins/scripts/auto-install-cert.zip" @@ -27,6 +25,8 @@ extraFiles: - "!*.db" - from: "LICENSE.md" to: "LICENSE.md" + - from: "report/template.zip" + to: "report/template.zip" directories: buildResources: resources @@ -42,13 +42,13 @@ publish: mac: artifactName: ${productName}-${version}-darwin-${arch}.${ext} - extraFiles: - - from: "bins/flag.darwin.txt" - to: "bins/flag.darwin.txt" - - from: "bins/yak_darwin_amd64.zip" - to: "bins/yak.zip" - - from: "report/template.zip" - to: "report/template.zip" + # extraFiles: + # - from: "bins/flag.darwin.txt" + # to: "bins/flag.darwin.txt" + # - from: bins/yak_darwin_${arch}.zip + # to: "bins/yak.zip" + # - from: "report/template.zip" + # to: "report/template.zip" target: - target: dmg arch: @@ -57,18 +57,19 @@ mac: icon: "app/assets/yakitlogo.icns" linux: - artifactName: ${productName}-${version}-linux-amd64.${ext} - extraFiles: - - from: "bins/flag.linux.txt" - to: "bins/flag.linux.txt" - - from: "bins/yak_linux_amd64.zip" - to: "bins/yak.zip" - - from: "report/template.zip" - to: "report/template.zip" + # artifactName: ${productName}-${version}-linux-${arch}.${ext} + # extraFiles: + # - from: "bins/flag.linux.txt" + # to: "bins/flag.linux.txt" + # - from: bins/yak_linux_${arch}.zip + # to: "bins/yak.zip" + # - from: "report/template.zip" + # to: "report/template.zip" target: - target: AppImage arch: - x64 + - arm64 icon: "app/assets/yakitlogo.icns" win: @@ -78,8 +79,6 @@ win: to: "bins/flag.windows.txt" - from: "bins/yak_windows_amd64.zip" to: "bins/yak.zip" - - from: "report/template.zip" - to: "report/template.zip" # requestedExecutionLevel: requireAdministrator target: - target: nsis @@ -89,18 +88,20 @@ win: nsis: - oneClick: false + oneClick: false perMachine: false deleteAppDataOnUninstall: true - allowToChangeInstallationDirectory: true - installerIcon: app/assets/yakitlogo.ico - uninstallerIcon: app/assets/yakitlogo.ico + allowToChangeInstallationDirectory: true + installerIcon: app/assets/yakitlogo.ico + uninstallerIcon: app/assets/yakitlogo.ico unicode: true include: build/yakit_build.nsh license: LICENSE.md warningsAsErrors: false createDesktopShortcut: false createStartMenuShortcut: true + +beforePack: "buildHooks/before_pack.js" #publish: # - provider: generic # url: https://update.electron-builder.com