From 10773526e4a7ad118f9c800215e062ab0e2832e8 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Mon, 12 Dec 2022 16:24:19 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2,=20ipfs=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/linux.js | 51 ----------------------------------------------- build/prepkg.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++ build/release.js | 33 ++++++++++++++++++++++++++++++ build/win.js | 45 ----------------------------------------- package-lock.json | 49 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 9 +++++++-- 6 files changed, 137 insertions(+), 101 deletions(-) delete mode 100644 build/linux.js create mode 100644 build/prepkg.js create mode 100644 build/release.js delete mode 100644 build/win.js diff --git a/build/linux.js b/build/linux.js deleted file mode 100644 index 5abdf1bf..00000000 --- a/build/linux.js +++ /dev/null @@ -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(); diff --git a/build/prepkg.js b/build/prepkg.js new file mode 100644 index 00000000..ea915758 --- /dev/null +++ b/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(); diff --git a/build/release.js b/build/release.js new file mode 100644 index 00000000..85839d1d --- /dev/null +++ b/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(); diff --git a/build/win.js b/build/win.js deleted file mode 100644 index 016e236b..00000000 --- a/build/win.js +++ /dev/null @@ -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(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f2d17188..025fb5d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "Liberama", + "name": "liberama", "version": "0.12.2", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "Liberama", + "name": "liberama", "version": "0.12.2", "hasInstallScript": true, "license": "CC0-1.0", @@ -44,7 +44,7 @@ "zip-stream": "^4.1.0" }, "bin": { - "Liberama": "server/index.js" + "liberama": "server/index.js" }, "devDependencies": { "@babel/core": "^7.20.5", @@ -62,6 +62,7 @@ "html-webpack-plugin": "^5.5.0", "mini-css-extract-plugin": "^2.7.2", "pkg": "^5.8.0", + "showdown": "^2.1.0", "terser-webpack-plugin": "^5.3.6", "vue-eslint-parser": "^9.1.0", "vue-loader": "^17.0.1", @@ -8774,6 +8775,31 @@ "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": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -17068,6 +17094,23 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "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": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", diff --git a/package.json b/package.json index 16ed7695..2322bed9 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,14 @@ "scripts": { "dev": "nodemon --inspect --ignore server/.liberama --ignore client --exec 'node server'", "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", "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" }, "bin": "server/index.js", @@ -36,6 +40,7 @@ "html-webpack-plugin": "^5.5.0", "mini-css-extract-plugin": "^2.7.2", "pkg": "^5.8.0", + "showdown": "^2.1.0", "terser-webpack-plugin": "^5.3.6", "vue-eslint-parser": "^9.1.0", "vue-loader": "^17.0.1",