diff --git a/.gitignore b/.gitignore index b664b188..e76c9138 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.env .DS_Store node_modules /dist @@ -22,4 +23,4 @@ yarn-error.log* #Electron-builder output /dist_electron -yarn.lock \ No newline at end of file +yarn.lock diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 00000000..d6b93bc0 --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 00000000..6bdf787d Binary files /dev/null and b/build/icon.png differ diff --git a/package-lock.json b/package-lock.json index 154f3ce2..cb45e497 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2579,6 +2579,12 @@ "execa": "^3.3.0" } }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -3833,7 +3839,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -4413,7 +4418,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", - "dev": true, "requires": { "bluebird": "^3.5.5" } @@ -6843,9 +6847,9 @@ } }, "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, "dotenv-expand": { @@ -7094,6 +7098,30 @@ } } }, + "electron-builder-http": { + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-19.4.2.tgz", + "integrity": "sha512-9t0W0ynQT3Aul+XAzwg16bfBzJ8GS6aQ9oPVMR4IiBu0Z7DTpWeorrtlrhr6XJzs0c0mkK8/YL18Pjn9696iNg==", + "requires": { + "debug": "2.6.8", + "fs-extra-p": "^4.3.0" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "electron-chromedriver": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-5.0.1.tgz", @@ -7143,6 +7171,34 @@ } } }, + "electron-is-dev": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.1.2.tgz", + "integrity": "sha1-ihBD4ys6HaHD9VPc4oznZCRhZ+M=" + }, + "electron-notarize": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-0.2.1.tgz", + "integrity": "sha512-oZ6/NhKeXmEKNROiFmRNfytqu3cxqC95sjooG7kBXQVEUSQkZnbiAhxVh5jXngL881G197pbwpeVPJyM7Ikmxw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, "electron-publish": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.2.0.tgz", @@ -7182,6 +7238,46 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz", "integrity": "sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw==" }, + "electron-updater": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-2.2.4.tgz", + "integrity": "sha512-0Hk1KNvebgsEWWlQawFWUooGANccs+Dqn7vAL9JQkXFzCMs+Hr+AunB3CXTSrP8jUUeHI9Sk3eVIWsL5dwcTuQ==", + "requires": { + "bluebird-lst": "^1.0.2", + "debug": "^2.6.8", + "electron-builder-http": "~19.4.2", + "electron-is-dev": "^0.1.2", + "fs-extra-p": "^4.3.0", + "js-yaml": "^3.8.4", + "semver": "^5.3.0", + "source-map-support": "^0.4.15", + "uuid-1345": "^0.99.6", + "xelement": "^1.0.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } + } + } + }, "elliptic": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", @@ -9064,6 +9160,27 @@ "universalify": "^0.1.0" } }, + "fs-extra-p": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.6.1.tgz", + "integrity": "sha512-IsTMbUS0svZKZTvqF4vDS9c/L7Mw9n8nZQWWeSzAGacOSe+8CzowhUN0tdZEZFIJNP5HC7L9j3MMikz/G4hDeQ==", + "requires": { + "bluebird-lst": "^1.0.5", + "fs-extra": "^6.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -10489,7 +10606,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -10558,7 +10674,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -11134,6 +11249,11 @@ } } }, + "macaddress": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.9.tgz", + "integrity": "sha512-k4F1JUof6cQXxNFzx3thLby4oJzXTXQueAOOts944Vqizn+Rjc2QNFenT9FJSLU1CH3PmrHRSyZs2E+Cqw+P2w==" + }, "magic-string": { "version": "0.25.6", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.6.tgz", @@ -14806,8 +14926,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { "version": "0.18.0", @@ -15471,8 +15590,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", @@ -16859,8 +16977,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -17102,6 +17219,14 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "uuid-1345": { + "version": "0.99.7", + "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-0.99.7.tgz", + "integrity": "sha512-A70cwvqH95zULri1/t00/r6Bd97hKpNvS9SoSLP9Bupn95sX/01JkOuH9YjJrmNul7ZAjyX3Y3ZMlDrCjuoNPQ==", + "requires": { + "macaddress": "^0.2.9" + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -19570,6 +19695,14 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xelement": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/xelement/-/xelement-1.0.17.tgz", + "integrity": "sha1-6dEkl68ed5IrRWrLINgIzUQZO6c=", + "requires": { + "sax": "^1.2.1" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 8d5caea1..ddd12c48 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,8 @@ "name": "unipept-desktop", "version": "0.1.0", "private": true, + "author": "Unipept Team (Ghent University)", + "description": "A desktop equivalent of unipept.ugent.be. This app aims at high-throughput analysis of metaproteomics samples.", "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", @@ -22,6 +24,7 @@ "better-sqlite3": "^5.4.3", "chokidar": "^3.3.1", "core-js": "^2.6.9", + "electron-updater": "^2.2.4", "jquery": "^3.4.1", "regenerator-runtime": "^0.13.3", "vue": "^2.6.10", @@ -45,7 +48,9 @@ "babel-eslint": "^10.0.1", "copy-webpack-plugin": "^5.0.4", "css-loader": "^3.2.0", + "dotenv": "^8.2.0", "electron": "^6.0.0", + "electron-notarize": "^0.2.1", "eslint": "^5.16.0", "eslint-plugin-vue": "^5.0.0", "less": "^3.10.3", diff --git a/scripts/notarize.js b/scripts/notarize.js new file mode 100644 index 00000000..8d818b6a --- /dev/null +++ b/scripts/notarize.js @@ -0,0 +1,18 @@ +require("dotenv").config(); +const { notarize } = require("electron-notarize"); + +exports.default = async function notarizing(context) { + const { electronPlatformName, appOutDir } = context; + if (electronPlatformName !== "darwin") { + return; + } + + const appName = context.packager.appInfo.productFilename; + + return await notarize({ + appBundleId: "be.ugent.unipept.desktop", + appPath: `${appOutDir}/${appName}.app`, + appleId: process.env.APPLEID, + appleIdPassword: process.env.APPLEIDPASS, + }); +}; diff --git a/src/assets/icon.svg b/src/assets/icon.svg deleted file mode 100644 index 7582f5c1..00000000 --- a/src/assets/icon.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - U - - diff --git a/vue.config.js b/vue.config.js index 6a9449c2..8eb9110a 100644 --- a/vue.config.js +++ b/vue.config.js @@ -8,5 +8,23 @@ module.exports = { "better-sqlite3": "require('better-sqlite3')" } ]) + }, + pluginOptions: { + electronBuilder: { + builderOptions: { + "appId": "be.ugent.unipept.desktop" + // Disable code signing for now. + // "mac": { + // "hardenedRuntime": true, + // "gatekeeperAssess": false, + // "entitlements": "build/entitlements.mac.plist", + // "entitlementsInherit": "build/entitlements.mac.plist" + // }, + // "afterSign": "scripts/notarize.js", + // "dmg": { + // "sign": false + // } + }, + } } }