Отвечаю сам.Как предложено в комментарии выше, я решил принять semantic-release
для публикации из master
ветви.
Для построения и публикации из При разработке веток я создал собственный скрипт для узла, чтобы сгенерировать полуверси-совместимую предварительную версию на основе хэша git commit, текущей версии major.minor.patch и текущего времени:
const cp = require('child_process');
// get current semver version without prerelease suffix
const pkg = require('./package.json');
const curVer = pkg.version.trim().split(/[.-]/).slice(0, 3).join('.');
// get the commit id
const commit = cp.execSync('git rev-parse --short HEAD', {encoding: 'utf-8'}).trim();
console.log(`Package: ${pkg.name}, version: ${curVer}, commit: ${commit}`);
// generate a new unique semver-compliant version based the commit it and current time
const uniqueVer = `${curVer}-beta-${commit}-${Math.random().toFixed(8).substr(2)}.${Date.now()}`
// use npm version to update package.json
cp.execSync(`npm version ${uniqueVer} --no-git-tag-version`, {stdio: 'inherit'});
// publish and tag with commit id
cp.execSync(`npm publish --tag ${commit}`, {stdio: 'inherit'});
Таким образом, я могу зарегистрировать свои вещи в моей ветке разработчика, собрать конвейер CI и опубликовать пакет для меня, а затем использовать его с npm install mypackage@commitid
.Псевдо-уникальная версия будет сгенерирована и опубликована в реестре NPM, но измененный package.json
не будет зарегистрирован.
Этот подход должен работать для меня сейчас, но Я бы все равнобыть очень заинтересованным в том, чтобы узнать о лучших практиках DevOps для публикации внутренних / выпусковых пакетов NPM с CI во время обычного цикла разработки .