All files / lib/resource-types makefile.js

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

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 67 68 69 70 71 72 73 74 75 76 77 78 79 801x 1x 1x 1x 1x 1x 1x 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 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 1x 1x  
"use strict";
/**
 * @module resource-types/makefile
 */
import fs from "fs";
import makefileParser from "@kba/makefile-parser";
 
/**
 * Set version value in the Makefile resource's variable.
 *
 * @param {String} version - version value to set
 * @param {Object} resource - resource configuration
 * @param {String} resource.path - path to the Makefile
 * @param {String} resource.params.variable - name of the variable which
 *   contains the version
 * @param {Object} opts - optional settings
 * @param {Boolean} [opts.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");
  const 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.
 *
 * @param {Object} resource - resource configuration
 * @param {String} resource.path - path to the Makefile
 * @param {String} resource.params.variable - name of the variable which
 *   contains the version
 * @param {Function} cb - standard cb(err, result) callback, result is the
 *   version value
 */
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 };