From fb03fc2fb9f1a01b567210da1071ac093283e479 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Sun, 20 Oct 2019 22:23:19 +0200 Subject: Add script to verify packages --- scripts/package.json | 4 ++- scripts/verify.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ scripts/yarn.lock | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 scripts/verify.js diff --git a/scripts/package.json b/scripts/package.json index b491b01..d416231 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -7,10 +7,12 @@ "author": "The Ferdi Team", "license": "MIT", "dependencies": { + "dir-compare": "^1.7.3", "fs-extra": "^8.1.0", "targz": "^1.0.1" }, "scripts": { - "package": "node package.js" + "package": "node package.js", + "verify": "node verify.js" } } diff --git a/scripts/verify.js b/scripts/verify.js new file mode 100644 index 0000000..59dbe61 --- /dev/null +++ b/scripts/verify.js @@ -0,0 +1,64 @@ +/** + * Verify packaged recipe to match uncompressed recipe + */ +const targz = require('targz'); +const fs = require('fs-extra'); +const dircompare = require('dir-compare'); +const path = require('path'); + +// Helper: Compress src folder into dest file +const decompress = (src, dest) => new Promise((resolve, reject) => { + targz.decompress({ + src, + dest, + }, (err) => { + if (err) { + reject(err); + } else { + resolve(dest); + } + }); +}); + +if (!process.argv[2]) { + console.log('Usage: yarn verify '); + return; +} + +// Let us work in an async environment +(async () => { + const recipe = process.argv[2]; + + const compressedRecipe = path.join(__dirname, '../', `${recipe}.tar.gz`); + const uncompressedRecipe = path.join(__dirname, '../', 'uncompressed', recipe); + const tempUncompressed = path.join(__dirname, `uncompressed/`); + + // Check that recipe exists + if (!await fs.pathExists(compressedRecipe) || !await fs.pathExists(uncompressedRecipe)) { + console.log(`Error: Recipe does not exist.`); + return; + } + + if (await fs.pathExists(tempUncompressed)) { + await fs.remove(tempUncompressed); + } + await fs.mkdir(tempUncompressed); + + // Package to uncompressed recipe to .tar.gz + console.log(`Decompressing...`); + await decompress(compressedRecipe, tempUncompressed); + + // Compare directories + const compare = dircompare.compareSync(uncompressedRecipe, tempUncompressed, { + compareContent: true, + }); + + if (compare.same) { + console.log('✓ Compressed and uncompressed files are equal'); + } else { + console.log('❌ Compressed and uncompressed files are NOT equal'); + } + + // Remove temporary compressed file + await fs.remove(tempUncompressed); +})(); \ No newline at end of file diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 1fba1d2..a7b917b 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2,6 +2,16 @@ # yarn lockfile v1 +"@types/node@^10.12.18": + version "10.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4" + integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + bl@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" @@ -10,6 +20,19 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +bluebird@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.1.tgz#b731ddf48e2dd3bedac2e75e1215a11bcb91fa07" + integrity sha1-tzHd9I4t077awudeEhWhG8uR+gc= + +brace-expansion@^1.0.0: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -23,6 +46,11 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" +buffer-equal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -33,11 +61,40 @@ chownr@^1.0.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +dir-compare@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-1.7.3.tgz#8f25f9654de02d82b30f5c5c0dfc198ce612ed68" + integrity sha512-YsKGvVzy5938B9Rokol3N9jq4QcFhlgostWr+TX4omexpR0UztlbYu5UZRxZ0WTeLMFt+7TCIm7nn27byQKZHw== + dependencies: + "@types/node" "^10.12.18" + bluebird "3.4.1" + buffer-equal "1.0.0" + colors "1.0.3" + commander "2.9.0" + minimatch "3.0.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -64,6 +121,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -81,6 +143,13 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +minimatch@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.2.tgz#0f398a7300ea441e9c348c83d98ab8c9dbf9c40a" + integrity sha1-DzmKcwDqRB6cNIyD2Yq4ydv5xAo= + dependencies: + brace-expansion "^1.0.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -- cgit v1.2.3-54-g00ecf