簡體   English   中英

npm發布和git repo工作流程

[英]npm publish and git repo workflow

我在為npm repo publish和git工作流程設置工作流方面有些掙扎。 我已經實現了以下解決方案,但對此我並不滿意。

開發人員->准備推送到git-> npm版本(我有一個腳本用changelog更新README.md –使用不支持changelog的sinopia)->提交並推送->接受並合並- -> git ci管道->構建,測試並發布到npm repo。

我的意思是,如果開發人員忘記對倉庫進行版本控制,那么管道就會失敗。 我可能可以在git管道中創建一個暫存區域,該暫存區域將包含更新的自述文件和版本庫,作為git CI的一部分。 但這有幾個原因,這是不對的。 主要是我不想通過動態更改源文件來污染GIT。

因此,總結一下。 有沒有更好的辦法? 理想情況下,當更改准備好可以在GIT中接受時,我想對存儲庫進行版本控制。 但我不確定如何。 順便說一句,我們正在使用gitlab。

您可以使用pre-commit掛鈎自動更新文件的版本(假設文件為package.json )。

pre-commit掛鈎將在提交更改之前執行,因此您可以通過shell腳本獲取當前版本,然后使用增量版本替換當前版本。 然后git commit還將使用新版本提交package.json

假設package.json文件的格式如下(版本位於第三行):

{
    "name": "Hello World",
    "version": 0.0.1,

版本格式為major.minor.patch 次要版本和修補程序版本的最大值是9(您可以指定其他值)。 shell腳本自動增加版本號如下:

#!/bin/sh

if [ -n "$(git status --porcelain)" ]; then 
  echo "there has uncommited changes"; 
else 
{
  echo "no changes to commit!";
  exit
}
fi

line=$(sed '3!d' package.json)
IFS=: read -r var1 var2 <<< "$line"
v=$(echo "$var2" | tr -d '"')
version=$(echo "$v" | tr -d ',')
IFS=. read -r major minor patch <<< "$version"

if  [ $patch != 9 ]
then 
  patch=$((patch+1))
elif [ $minor != 9 ]
then
{
  minor=$((minor+1))
  patch=0
}
else
{
  major=$((major+1))
  minor=0
  patch=0
}
fi

newversion=$major"."$minor"."$patch
echo  "The new version is $newversion"

placestr=$(echo $var1: \"$newversion\",)
sed -i "s/${line}/${placestr}/" package.json
git add package.json

 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'); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM