From e57a73a11fb100baba065daae82d04f4f4d63610 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Tue, 14 Jan 2020 20:47:19 +0100 Subject: Add github script --- scripts/add_github.js | 94 +++++++++++++++++++++++++++++++++++++++++++ scripts/package.js | 6 --- scripts/package.json | 4 +- scripts/recipe_src/readme.txt | 2 - scripts/yarn.lock | 50 +++++++++++++++++++++++ 5 files changed, 147 insertions(+), 9 deletions(-) create mode 100644 scripts/add_github.js delete mode 100644 scripts/recipe_src/readme.txt diff --git a/scripts/add_github.js b/scripts/add_github.js new file mode 100644 index 0000000..add3575 --- /dev/null +++ b/scripts/add_github.js @@ -0,0 +1,94 @@ +/** + * Add GitHub repository as recipe + */ +const fetch = require('node-fetch'); +const targz = require('targz'); +const fs = require('fs-extra'); +const path = require('path'); +const GitUrlParse = require("git-url-parse"); + +// Helper: Download file to filesystem +const downloadFile = (async (url, path) => { + const res = await fetch(url); + const fileStream = fs.createWriteStream(path); + await new Promise((resolve, reject) => { + res.body.pipe(fileStream); + res.body.on("error", (err) => { + reject(err); + }); + fileStream.on("finish", function () { + resolve(); + }); + }); +}); + +// Helper: Decompress .tar.gz file +const decompress = (src, dest) => { + return new Promise(resolve => { + targz.decompress({ + src, + dest + }, function (err) { + if (err) { + console.log('Error while decompressing recipe:', err); + } + resolve(); + }); + }) +} + +const repo = process.argv[2]; + +if (!repo || !/https:\/\/github\.com\/[^\/]+\/[^\/]+\/?/gi.test(repo)) { + console.log("Please provide a valid repository URL"); + return; +} + +const repoInfo = GitUrlParse(repo); +const tempDir = path.join(__dirname, 'tmp'); + +const recipeSrc = path.join(__dirname, 'recipe_src'); +const recipeSrcTmp = path.join(__dirname, 'recipe_src_tmp'); + +const compressed = path.join(__dirname, 'tmp.tar.gz'); + +// Let us work in an async environment +(async () => { + console.log("Creating temporary directory"); + + await fs.ensureDir(tempDir); + + console.log("Downloading " + repo); + + await downloadFile( + `https://github.com/${repoInfo.owner}/${repoInfo.name}/archive/master.tar.gz`, + compressed + ); + + console.log("Decompressing tarball"); + + await decompress(compressed, tempDir); + + console.log("Moving directories"); + + await fs.move(recipeSrc, recipeSrcTmp); + await fs.move( + path.join(tempDir, `${repoInfo.name}-master`), + recipeSrc + ); + + console.log("Adding to repository"); + require('./package.js'); + console.log("Continuing in 1.5 seconds"); + + setTimeout(async () => { + console.log("Deleting downloaded files"); + + await fs.remove(compressed); + await fs.remove(recipeSrc); + + console.log("Moving back recipe folder"); + + await fs.move(recipeSrcTmp, recipeSrc); + }, 1500); +})(); \ No newline at end of file diff --git a/scripts/package.js b/scripts/package.js index 581d23c..2be3a69 100644 --- a/scripts/package.js +++ b/scripts/package.js @@ -55,9 +55,6 @@ Please make sure it contains: id, name, config`); return; } - // Move readme.txt outside of recipe_src folder - await fs.move(path.join(recipeSrc, 'readme.txt'), './readme.txt'); - // Package to .tar.gz console.log(`Packaging ${config.id}...`); compress(recipeSrc, path.join('../', `${config.id}.tar.gz`)); @@ -94,8 +91,5 @@ Please make sure it contains: id, name, config`); EOL: '\n', }); - // Move readme.txt back into recipe_src - await fs.move('./readme.txt', path.join(recipeSrc, 'readme.txt')); - console.log(`Successfully packaged and added new package ${config.id}`); })(); \ No newline at end of file diff --git a/scripts/package.json b/scripts/package.json index 2bfc982..63aeefa 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -9,6 +9,7 @@ "dependencies": { "dir-compare": "^1.7.3", "fs-extra": "^8.1.0", + "git-url-parse": "^11.1.2", "node-fetch": "^2.6.0", "semver": "^6.3.0", "targz": "^1.0.1" @@ -16,6 +17,7 @@ "scripts": { "package": "node package.js", "verify": "node verify.js", - "update": "node update.js" + "update": "node update.js", + "github": "node add_github.js" } } diff --git a/scripts/recipe_src/readme.txt b/scripts/recipe_src/readme.txt deleted file mode 100644 index 730ba44..0000000 --- a/scripts/recipe_src/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -Please put your recipe files into this directory. -Do not delete this file - the packaging script will ignore it while packaging. \ No newline at end of file diff --git a/scripts/yarn.lock b/scripts/yarn.lock index a06349c..5f3a5c8 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -116,6 +116,21 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" + integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + dependencies: + git-up "^4.0.0" + graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" @@ -131,6 +146,13 @@ inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -167,6 +189,11 @@ node-fetch@^2.6.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -174,11 +201,34 @@ once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + pump@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" -- cgit v1.2.3-70-g09d2