All files / lib/resource-types makefile.js

100% Statements 66/66
100% Branches 7/7
100% Functions 3/3
100% Lines 66/66

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 671x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
"use strict"
import fs from 'fs';
import makefileParser from '@kba/makefile-parser';
 
/**
 * Set version value in the Makefile resource's variable (variable defines the variable name that contains the version).
 *
 * @param {String} version: version value to set
 * @param {Object} resource: resource configuration which contains type, path, and params
 * @param {Object} opts: optional settings
 *   - dryRun: when true, Makefile won't be modified
 * @param {Function} cb: standard cb(err, result) callback
 */
function setVersion(version, resource, opts, cb) {
  const variable = resource.params.variable;
  let content = fs.readFileSync(resource.path, 'UTF-8');
  let data = makefileParser(content);
 
  data.ast.forEach((elem) => {
    if (elem.variable && elem.variable === variable) {
      const matches = content.match(new RegExp(elem.variable + '.*' + elem.value));
      if (matches && matches.length === 1) {
        content = content.replace(matches[0], matches[0].replace(elem.value, version));
      }
    }
  });
  if (!opts.dryRun) {
    fs.writeFile(resource.path, content, cb);
  } else {
    cb();
  }
}
 
/**
 * Get version value from the Makefile resource's variable (variable defines the variable name that contains the version).
 *
 * @param {Object} resource: resource configuration which contains type, path, and params
 * @param {Function} cb: standard cb(err, result) callback
 */
function getVersion(resource, cb) {
  const variable = resource.params.variable;
 
  function readCb(err, result) {
    let version;
    if (!err) {
      const data = makefileParser(result);
      data.ast.forEach((elem) => {
        if (elem.variable && elem.variable === variable) {
          version = elem.value;
        }
      });
    }
    cb(err, version);
  }
  fs.readFile(resource.path, 'UTF-8', readCb);
}
 
const exports = {
  setReleaseVersion: setVersion,
  setPostReleaseVersion: setVersion,
  getVersion: getVersion
};
 
export {
  exports as default
};