Quellcode durchsuchen

Merge pull request #8 from Loquicom/deploy

Deploy
Loquicom vor 5 Jahren
Ursprung
Commit
906f971371
7 geänderte Dateien mit 176 neuen und 5 gelöschten Zeilen
  1. 1 0
      .gitignore
  2. 74 0
      deploy.js
  3. 32 0
      deploy.json
  4. 53 0
      main.js
  5. 5 0
      package-lock.json
  6. 4 5
      package.json
  7. 7 0
      src/file.js

+ 1 - 0
.gitignore

@@ -1,6 +1,7 @@
 .idea/
 node_modules/
 tmp/
+dist/
 data/*.xml
 data/*.db
 data/*.gz

+ 74 - 0
deploy.js

@@ -0,0 +1,74 @@
+const copydir = require('copy-dir');
+const LineReader = require('n-readlines');
+const file = require('./src/file');
+const deploy = require('./deploy.json');
+
+// Constante
+const OUT = './dist/';
+
+// Creation dossier destination
+file.makedir(OUT);
+
+// Séparation de chaque programme
+deploy.programs.forEach(program => {
+    // Création du dossier
+    const distPath = OUT + program.name;
+    file.makedir(distPath);
+    // Copie des fichiers commun
+    file.makedir(distPath + '/src');
+    file.fs.readdirSync('./src').forEach(f => {
+        if (!file.isDir('./src/' + f)) {
+            file.fs.copyFile('./src/' + f, distPath + '/src/' + f, (err) => {
+                if (err) throw err;
+            });
+        }
+    });
+    // Copie dossier propre à chaque programme
+    copydir('./src/' + program.name, distPath + '/src/' + program.name, {
+        utimes: true,
+        mode: true,
+        cover: true
+    }, (err) => {
+        if (err) throw err;
+    });
+    // Copie fichier main
+    file.fs.copyFile(program.main, distPath + '/main.js', (err) => {
+        if (err) throw err;
+    });
+    // Copie package.json
+    const pckg = require('./package.json');
+    pckg.scripts = program.scripts;
+    pckg.version = program.version;
+    program.rm_dependencies.forEach(elt => {
+        delete pckg.dependencies[elt];
+    });
+    let json = JSON.stringify(pckg, null, 4);
+    json = json.replace(new RegExp(program.main, 'g'), 'main.js');
+    file.put(distPath + '/package.json', json);
+    // Ecriture ReadMe
+    file.put(distPath + '/README.md', readMe(program.part).replace(new RegExp(program.main, 'g'), 'main.js'));
+});
+
+// Fonction découpage readme
+function readMe(part) {
+    const liner = new LineReader('./README.md');
+    let data = '';
+    let line = liner.next().toString();
+    while (line !== 'false' && line.indexOf('## Partie ') === -1) {
+        data += '\n' + line;
+        line = liner.next().toString();
+    }
+    while (line !== 'false' && line.indexOf('## Partie ' + part) === -1) {
+        line = liner.next().toString();
+    }
+    data += '\n' + line;
+    line = liner.next().toString();
+    while (line !== 'false' && line.indexOf('## Partie ') === -1) {
+        data += '\n' + line;
+        line = liner.next().toString();
+    }
+    if (line !== 'false') {
+        liner.close();
+    }
+    return data;
+}

+ 32 - 0
deploy.json

@@ -0,0 +1,32 @@
+{
+  "programs": [
+    {
+      "name": "coauth",
+      "part": "1",
+      "main": "coauth.js",
+      "version": "1.4.2",
+      "scripts": {
+        "start": "node coauth.js",
+        "preprocess": "node coauth.js prepare ./data/dblp.xml",
+        "exemple": "node coauth.js --name \"Fabien Delorme\"",
+        "process": "node coauth.js --process ./data/dblp.xml",
+        "test": "node coauth.js -n \"Nathalie Chetcuti-Sperandio\" -v"
+      },
+      "rm_dependencies": [
+        "copy-dir"
+      ]
+    },
+    {
+      "name": "extract",
+      "part": "2",
+      "main": "extract.js",
+      "version": "0.0.1",
+      "scripts": {
+        "start": "node extract.js"
+      },
+      "rm_dependencies": [
+        "copy-dir"
+      ]
+    }
+  ]
+}

+ 53 - 0
main.js

@@ -0,0 +1,53 @@
+if (process.argv.length < 4) {
+    console.error('Not enough arguments');
+    process.exit();
+}
+
+const programs = require('./deploy.json').programs;
+
+let program = null;
+let list = [];
+programs.forEach(elt => {
+    list.push(elt.name);
+    if (elt.name === process.argv[2]) {
+        program = elt;
+    }
+});
+if (program === null) {
+    console.error(process.argv[2], 'not found');
+    console.error('Available programs:');
+    list.forEach(elt => {
+        console.error('  ' + elt);
+    });
+    process.exit();
+}
+
+if (program.script[process.argv[3]] === undefined) {
+    console.error(process.argv[2], 'script not found');
+    process.exit();
+}
+
+const cmd = program.script[process.argv[3]].split(' ');
+let argv = [];
+argv.push(process.argv[0]);
+argv.push(process.argv[1].replace('main.js', cmd[1]));
+let longParam = false;
+let param = '';
+for (let i = 2; i < cmd.length; i++) {
+    if (longParam) {
+        param += ' ' + cmd[i];
+        if (cmd[i][cmd[i].length - 1] === '"') {
+            argv.push(param.replace(/^"+|"+$/g, ''));
+            param = '';
+            longParam = false;
+        }
+    } else if (cmd[i][0] === '"') {
+        longParam = true;
+        param = cmd[i];
+    } else {
+        argv.push(cmd[i]);
+    }
+}
+
+process.argv = argv;
+require('./' + cmd[1]);

+ 5 - 0
package-lock.json

@@ -71,6 +71,11 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
       "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
     },
+    "copy-dir": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.2.0.tgz",
+      "integrity": "sha512-UeaUFUIHqGV4brjQ9bY2mHll/hoxyCak2emgmYG72LkGKABHBdBDKFw0H5nTKt5OzVBkBhkxCwnniJBAE7EGEw=="
+    },
     "emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",

+ 4 - 5
package.json

@@ -15,18 +15,17 @@
     "sax"
   ],
   "private": true,
+  "main": "main.js",
   "scripts": {
-    "start": "node coauth.js",
-    "preprocess": "node coauth.js prepare ./data/dblp.xml",
-    "exemple": "node coauth.js --name \"Fabien Delorme\"",
-    "process": "node coauth.js --process ./data/dblp.xml",
-    "test": "node coauth.js -n \"Nathalie Chetcuti-Sperandio\" -v"
+    "start": "node main.js",
+    "deploy": "node deploy.js"
   },
   "engines": {
     "node": ">=10.12.0"
   },
   "dependencies": {
     "commander": "^3.0.2",
+    "copy-dir": "^1.2.0",
     "html-entities": "^1.2.1",
     "inquirer": "^7.0.0",
     "n-readlines": "^1.0.0",

+ 7 - 0
src/file.js

@@ -76,4 +76,11 @@ module.exports.getExtension = function (filename) {
     return split[split.length - 1];
 };
 
+module.exports.isDir = function (path) {
+    if (!module.exports.exist(path)) {
+        return false;
+    }
+    return fs.statSync(path).isDirectory();
+};
+
 module.exports.fs = fs;