2016-10-17 12 views
0

TeamCityを使用して自動公開するNPMパッケージを整理する必要があります。私はgit repoの中にいくつかのNPMパッケージを持っています。変更をプッシュすると、変更されたパッケージを検出し、バージョンを更新し、&を新しいバージョンでプッシュして新しいパッケージを公開する必要があります。これを行うためのツールはありますか?npmパッケージを自動公開する方法は?

答えて

0

TeamCityでタスクを作成することによってtouが使用できる、またはあなた自身で使用できる自動公開を行うコードは次のとおりです。 npmが必要なパッケージをインストールすることを忘れないでください。

const gulp = require('gulp'); 
const NodeGit = require("nodegit"); 
const bump = require("gulp-bump"); 
const semverUtils = require('semver-utils'); 
const npm = require('npm'); 
const spork = require('spork'); 

gulp.task('publish', function (done) { 
    const pathToRepo = require("path").resolve("./"); 
    const args = require('yargs').argv; 
    const nextVersion = args.version; 

    NodeGit.Repository 
     .open(pathToRepo) 
     .then(repo => repo.getBranchCommit("master")) 

     .then(lastCommit => { 
      const repo = lastCommit.repo; 
      const sign = NodeGit.Signature.default(repo); 

      if (lastCommit.author().email() == sign.email()) { 
       console.info('It looks like the last commit was done by CI'); 
       done(); 
       process.exit(0) 
      } 

      const currentVersion = require('./package.json').version; 
      const semver = semverUtils.parse(currentVersion); 

      if (nextVersion == null) { 
       semver.patch++; 
      } else { 
       semver.patch = nextVersion; 
      } 

      const version = semverUtils.stringify(semver) 

      return gulp.src('./package.json') 
       .pipe(bump({ version })) 
       .pipe(gulp.dest('./')) 
       .on('end',() => { 

        repo 
         .createCommitOnHead(['package.json'], sign, sign, `Update UI lib version to v${version}`) 
         .then(commit => repo.createTag(commit, `v${version}`, '')) 
         .then(() => pushGit()) 
         .then(() => console.info('Made commit with changed package.json and made push'), err => console.error(err)) 
         .then(() => publishNpm()) 
         .then(() => done()) 
         .then(() => process.exit(0)) 
       }); 
     }) 
}); 

function pushGit() { 
    console.info('Start commiting to GIT'); 

    return new Promise((resolve, reject) => 
     spork('git', ['push'], { exit: false }) 
      .on('exit:code', function (code) { 
       if (code === 0) { 
        resolve(); 
       } else { 
        reject(); 
       } 
      }) 
    ) 

} 

function publishNpm() { 
    console.info('Start publishing to NPM'); 

    return new Promise((resolve, reject) => { 
     npm.load({}, err => { 
      err && reject(err); 

      npm.publish(err => { 
       err && reject(err); 
       resolve(); 
      }); 
     }); 
    }) 
} 
関連する問題