npm publish和git repo workflow

时间:2017-05-10 14:20:42

标签: git npm version-control continuous-integration gitlab

我在为npm repo发布和git工作流设置工作流程时遇到了一些困难。我已经实现了如下解决方案,我对此不满意。

开发者 - >准备推送到git - > npm版本(我有一个用更新日志更新README.md的脚本 - 使用不支持更改日志的sinopia) - >提交和推送 - >接受并合并 - > git ci pipeline - >构建,测试并发布到npm repo。

我所知道的是,如果开发人员忘记对repo进行版本控制,那么管道就会失败。我可以在我的git管道中创建一个临时区域,它将包含更新的README并将repo版本作为git CI的一部分。但由于几个原因,这感觉不对。主要是我宁愿不通过动态更改源文件来污染GIT。

所以,总结一下。有没有更好的办法?理想情况下,我希望在GIT中接受更改时对版本进行版本控制。但我不确定如何。顺便说一句,我们正在使用gitlab。

1 个答案:

答案 0 :(得分:0)

const fs = require('fs');
const path = require('path');
let execSync = require('child_process').execSync;


let streamToString = (stream, callback) => {
  let str = '';
  stream.on('data', function(chunk) {
    str += chunk;
  });
  stream.on('end', function() {
    callback(str);
  });
};

const run = cmd => {
  return execSync(cmd, function(error, stdout) {

    streamToString(stdout, (data) => {
      console.log('Data ---- ', data);
      return data;
    });
  });
};

const packagejson = fs.readFileSync(
  path.join(__dirname, '..', 'package.json'), 'utf8');

run("cp package.json package.json.bkp");
const json = JSON.parse(packagejson);


// Update package.json

let semver = json.version.split('.');

semver[2] = Number(semver[2]) + 1;

let replacer = /,/gi;
json.version = semver.toString().replace(replacer, '.');

let changelog = {};

changelog.version = json.version;
changelog.author = run('npm config get init.author.name');

fs.writeFileSync(path.join(__dirname, '..', 'package.json'), JSON.stringify(json, null, 2));

if (changelog.author.byteLength <= 1) {
  throw Error('init.author.name is a required npm configuration attribute......');
}
run('cp README.md README.bkp');

const readme = fs.readFileSync(
  path.join(__dirname, '..', 'README.md'), 'utf8');

let header = readme.split('-----------');

console.log('Header ......... ', header);

fs.writeFileSync(
  path.join(__dirname, '..', 'README.md'), header[0] + '-----------' +
  '\r\nVersion ' + changelog.version + '\r\n' + 'Changed By ' + changelog.author + '\r\n' +
  'Change Date ' + new Date(), 'utf8'
);

run('git add package.json');
run('git add README.md');