Browse Source

Добавлена сборка релизов, ipfs удален

Book Pauk 2 years ago
parent
commit
10773526e4
6 changed files with 137 additions and 101 deletions
  1. 0 51
      build/linux.js
  2. 51 0
      build/prepkg.js
  3. 33 0
      build/release.js
  4. 0 45
      build/win.js
  5. 46 3
      package-lock.json
  6. 7 2
      package.json

+ 0 - 51
build/linux.js

@@ -1,51 +0,0 @@
-const fs = require('fs-extra');
-const path = require('path');
-const util = require('util');
-const stream = require('stream');
-const pipeline = util.promisify(stream.pipeline);
-
-const axios = require('axios');
-const FileDecompressor = require('../server/core/FileDecompressor');
-
-const distDir = path.resolve(__dirname, '../dist');
-const publicDir = `${distDir}/tmp/public`;
-const outDir = `${distDir}/linux`;
-
-const tempDownloadDir = `${distDir}/tmp/download`;
-
-async function main() {
-    const decomp = new FileDecompressor();
-
-    await fs.emptyDir(outDir);
-    // перемещаем public на место
-    if (await fs.pathExists(publicDir))
-        await fs.move(publicDir, `${outDir}/public`);
-
-    await fs.ensureDir(tempDownloadDir);
-
-    //ipfs
-    const ipfsDecompressedFilename = `${tempDownloadDir}/go-ipfs/ipfs`;
-    if (!await fs.pathExists(ipfsDecompressedFilename)) {
-        // Скачиваем ipfs
-        const ipfsRemoteUrl = 'https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_linux-amd64.tar.gz';
-
-        const res = await axios.get(ipfsRemoteUrl, {responseType: 'stream'})
-        await pipeline(res.data, fs.createWriteStream(`${tempDownloadDir}/ipfs.tar.gz`));
-        console.log(`done downloading ${ipfsRemoteUrl}`);
-
-        //распаковываем
-        console.log(await decomp.unpackTarZZ(`${tempDownloadDir}/ipfs.tar.gz`, tempDownloadDir));
-        console.log('files decompressed');
-    }
-
-    // копируем в дистрибутив
-    await fs.copy(ipfsDecompressedFilename, `${outDir}/ipfs`);
-    console.log(`copied ${tempDownloadDir}/go-ipfs/ipfs to ${outDir}/ipfs`);
-    //для development
-    const devIpfsFile = path.resolve(__dirname, '../server/ipfs');
-    if (!await fs.pathExists(devIpfsFile)) {
-        await fs.copy(ipfsDecompressedFilename, devIpfsFile);
-    }
-}
-
-main();

+ 51 - 0
build/prepkg.js

@@ -0,0 +1,51 @@
+const fs = require('fs-extra');
+const path = require('path');
+const { execSync } = require('child_process');
+
+const showdown = require('showdown');
+
+const platform = process.argv[2];
+
+const distDir = path.resolve(__dirname, '../dist');
+const tmpDir = `${distDir}/tmp`;
+const publicDir = `${tmpDir}/public`;
+const outDir = `${distDir}/${platform}`;
+
+async function build() {
+    if (!platform)
+        throw new Error(`Please set platform`);
+
+    await fs.emptyDir(outDir);
+
+    //добавляем readme в релиз
+    let readme = await fs.readFile(path.resolve(__dirname, '../README.md'), 'utf-8');
+    const converter = new showdown.Converter();
+    readme = converter.makeHtml(readme);
+    await fs.writeFile(`${outDir}/readme.html`, readme);
+
+    // перемещаем public на место
+    if (await fs.pathExists(publicDir)) {
+
+        const zipFile = `${tmpDir}/public.zip`;
+        const jsonFile = `${distDir}/public.json`;//distDir !!!
+
+        await fs.remove(zipFile);
+        execSync(`zip -r ${zipFile} .`, {cwd: publicDir, stdio: 'inherit'});
+
+        const data = (await fs.readFile(zipFile)).toString('base64');
+        await fs.writeFile(jsonFile, JSON.stringify({data}));
+    } else {
+        throw new Error(`publicDir: ${publicDir} does not exist`);
+    }
+}
+
+async function main() {
+    try {
+        await build();
+    } catch(e) {
+        console.error(e);
+        process.exit(1);
+    }
+}
+
+main();

+ 33 - 0
build/release.js

@@ -0,0 +1,33 @@
+const fs = require('fs-extra');
+const path = require('path');
+const { execSync } = require('child_process');
+
+const pckg = require('../package.json');
+
+const distDir = path.resolve(__dirname, '../dist');
+const outDir = `${distDir}/release`;
+
+async function makeRelease(target) {
+    const srcDir = `${distDir}/${target}`;
+
+    if (await fs.pathExists(srcDir)) {
+        const zipFile = `${outDir}/${pckg.name}-${pckg.version}-${target}.zip`;
+
+        execSync(`zip -r ${zipFile} .`, {cwd: srcDir, stdio: 'inherit'});
+    }
+}
+
+async function main() {
+    try {
+        await fs.emptyDir(outDir);
+        await makeRelease('win');
+        await makeRelease('linux');
+        await makeRelease('linux-arm64');
+        await makeRelease('macos');
+    } catch(e) {
+        console.error(e);
+        process.exit(1);
+    }
+}
+
+main();

+ 0 - 45
build/win.js

@@ -1,45 +0,0 @@
-const fs = require('fs-extra');
-const path = require('path');
-const util = require('util');
-const stream = require('stream');
-const pipeline = util.promisify(stream.pipeline);
-
-const axios = require('axios');
-const FileDecompressor = require('../server/core/FileDecompressor');
-
-const distDir = path.resolve(__dirname, '../dist');
-const publicDir = `${distDir}/tmp/public`;
-const outDir = `${distDir}/win`;
-
-const tempDownloadDir = `${distDir}/tmp/download`;
-
-async function main() {
-    const decomp = new FileDecompressor();
-
-    await fs.emptyDir(outDir);
-    // перемещаем public на место
-    if (await fs.pathExists(publicDir))
-        await fs.move(publicDir, `${outDir}/public`);
-
-    await fs.ensureDir(tempDownloadDir);
-
-    //ipfs
-    const ipfsDecompressedFilename = `${tempDownloadDir}/go-ipfs/ipfs.exe`;
-    if (!await fs.pathExists(ipfsDecompressedFilename)) {
-        // Скачиваем ipfs
-        const ipfsRemoteUrl = 'https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_windows-amd64.zip';
-
-        const res = await axios.get(ipfsRemoteUrl, {responseType: 'stream'})
-        await pipeline(res.data, fs.createWriteStream(`${tempDownloadDir}/ipfs.zip`));
-        console.log(`done downloading ${ipfsRemoteUrl}`);
-
-        //распаковываем
-        console.log(await decomp.unpack(`${tempDownloadDir}/ipfs.zip`, tempDownloadDir));
-        console.log('files decompressed');
-    }
-    // копируем в дистрибутив
-    await fs.copy(ipfsDecompressedFilename, `${outDir}/ipfs.exe`);
-    console.log(`copied ${ipfsDecompressedFilename} to ${outDir}/ipfs.exe`);
-}
-
-main();

+ 46 - 3
package-lock.json

@@ -1,11 +1,11 @@
 {
 {
-  "name": "Liberama",
+  "name": "liberama",
   "version": "0.12.2",
   "version": "0.12.2",
   "lockfileVersion": 2,
   "lockfileVersion": 2,
   "requires": true,
   "requires": true,
   "packages": {
   "packages": {
     "": {
     "": {
-      "name": "Liberama",
+      "name": "liberama",
       "version": "0.12.2",
       "version": "0.12.2",
       "hasInstallScript": true,
       "hasInstallScript": true,
       "license": "CC0-1.0",
       "license": "CC0-1.0",
@@ -44,7 +44,7 @@
         "zip-stream": "^4.1.0"
         "zip-stream": "^4.1.0"
       },
       },
       "bin": {
       "bin": {
-        "Liberama": "server/index.js"
+        "liberama": "server/index.js"
       },
       },
       "devDependencies": {
       "devDependencies": {
         "@babel/core": "^7.20.5",
         "@babel/core": "^7.20.5",
@@ -62,6 +62,7 @@
         "html-webpack-plugin": "^5.5.0",
         "html-webpack-plugin": "^5.5.0",
         "mini-css-extract-plugin": "^2.7.2",
         "mini-css-extract-plugin": "^2.7.2",
         "pkg": "^5.8.0",
         "pkg": "^5.8.0",
+        "showdown": "^2.1.0",
         "terser-webpack-plugin": "^5.3.6",
         "terser-webpack-plugin": "^5.3.6",
         "vue-eslint-parser": "^9.1.0",
         "vue-eslint-parser": "^9.1.0",
         "vue-loader": "^17.0.1",
         "vue-loader": "^17.0.1",
@@ -8774,6 +8775,31 @@
         "node": ">=8"
         "node": ">=8"
       }
       }
     },
     },
+    "node_modules/showdown": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz",
+      "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==",
+      "dev": true,
+      "dependencies": {
+        "commander": "^9.0.0"
+      },
+      "bin": {
+        "showdown": "bin/showdown.js"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://www.paypal.me/tiviesantos"
+      }
+    },
+    "node_modules/showdown/node_modules/commander": {
+      "version": "9.4.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
+      "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
     "node_modules/side-channel": {
     "node_modules/side-channel": {
       "version": "1.0.4",
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -17068,6 +17094,23 @@
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true
       "dev": true
     },
     },
+    "showdown": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz",
+      "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==",
+      "dev": true,
+      "requires": {
+        "commander": "^9.0.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "9.4.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
+          "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
+          "dev": true
+        }
+      }
+    },
     "side-channel": {
     "side-channel": {
       "version": "1.0.4",
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",

+ 7 - 2
package.json

@@ -10,10 +10,14 @@
   "scripts": {
   "scripts": {
     "dev": "nodemon --inspect --ignore server/.liberama --ignore client --exec 'node server'",
     "dev": "nodemon --inspect --ignore server/.liberama --ignore client --exec 'node server'",
     "build:client": "webpack --config build/webpack.prod.config.js",
     "build:client": "webpack --config build/webpack.prod.config.js",
-    "build:linux": "npm run build:client && node build/linux && pkg -t node16-linux-x64 -C GZip -o dist/linux/liberama .",
-    "build:win": "npm run build:client && node build/win && pkg -t node16-win-x64 -C GZip -o dist/win/liberama .",
+    "build:linux": "npm run build:client && node build/prepkg.js linux && pkg -t node16-linux-x64 -C GZip -o dist/linux/liberama .",
+    "build:linux-arm64": "npm run build:client && node build/prepkg.js linux-arm64 && pkg -t node16-linuxstatic-arm64 -C GZip -o dist/linux-arm64/liberama .",
+    "build:win": "npm run build:client && node build/prepkg.js win && pkg -t node16-win-x64 -C GZip -o dist/win/liberama .",
+    "build:macos": "npm run build:client && node build/prepkg.js macos && pkg -t node16-macos-x64 -C GZip -o dist/macos/liberama .",
     "lint": "eslint --ext=.js,.vue client server",
     "lint": "eslint --ext=.js,.vue client server",
     "build:client-dev": "webpack --config build/webpack.dev.config.js",
     "build:client-dev": "webpack --config build/webpack.dev.config.js",
+    "build:all": "npm run build:linux && npm run build:win && npm run build:macos && npm run build:linux-arm64",
+    "release": "npm run build:all && node build/release.js",
     "postinstall": "npm run build:client-dev && node build/linux"
     "postinstall": "npm run build:client-dev && node build/linux"
   },
   },
   "bin": "server/index.js",
   "bin": "server/index.js",
@@ -36,6 +40,7 @@
     "html-webpack-plugin": "^5.5.0",
     "html-webpack-plugin": "^5.5.0",
     "mini-css-extract-plugin": "^2.7.2",
     "mini-css-extract-plugin": "^2.7.2",
     "pkg": "^5.8.0",
     "pkg": "^5.8.0",
+    "showdown": "^2.1.0",
     "terser-webpack-plugin": "^5.3.6",
     "terser-webpack-plugin": "^5.3.6",
     "vue-eslint-parser": "^9.1.0",
     "vue-eslint-parser": "^9.1.0",
     "vue-loader": "^17.0.1",
     "vue-loader": "^17.0.1",