补丁版本、标记、添加、提交和推送的命令
A command to patch version, tag, add, commit and push
我想编写一个 cli 命令来集成我在 (react-js) 项目上完成本地工作会话时必须执行的所有操作:
- 项目版本增加一个(在
package.json
文件的version
字段中)
- 添加我对 git 索引所做的所有更改
- 提交对 git 的更改(带有消息)
- 用新版本号标记版本并提交消息
- 从远程拉取
- 推送到远程(包括标签)
推送到远程(例如 github 或 gitlab)也将启动 CI/CD 构建。
我到现在为止想到的是这样丑陋的东西:
m="debugging tag & version"; npm version --no-git-tag-version --force patch && git add . && git commit -m "$m" && git tag -a v`node -p "require('./package.json').version"` -m "$m" && git pull --no-edit && git push --follow-tags
这个的主要缺点是它强制在远程上进行双重构建,可能是因为它推送了两次......但我不明白为什么,因为我不深入了解所有感兴趣的命令。
你能给我一些建议来纠正我的解决方案,或者建议不同的策略吗?
UPDATE:我在这里包含了我的 GitLab 的 CI 配置文件 (.gitlab-ci.yml),它可以是任何帮助...
variables:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
build site:
image: node:12
stage: build
script:
- yarn install --no-progress 2> >(grep -v warning 1>&2)
- yarn build
artifacts:
expire_in: 1 week
paths:
- build/
# we test only on master branch to speed up CI/CD while developing, for the moment...
unit test:
image: node:12
stage: test
only:
- master
script:
- yarn install --no-progress 2> >(grep -v warning 1>&2)
- yarn test
# we only deploy on master and developing branches; for other feature branches,
# we work locally only and then merge into developing or master.
deploy:
image: alpine
stage: deploy
only:
- master
- developing
before_script:
- apk add --no-cache rsync openssh sshpass
script:
- if [ -z "$CI_COMMIT_BRANCH" -o "$CI_COMMIT_BRANCH" = "master" ]; then DEPLOY_PATH="marketplace"; else DEPLOY_PATH="marketplace.test"; fi
- echo "On branch $CI_COMMIT_BRANCH, deploying to $DEPLOY_PATH"
- sshpass -p $DEVEL_PASS rsync -az --delete --no-perms --no-g -O -e "ssh -o StrictHostKeyChecking=no" build/ $DEVEL_USER@$SERVER_NAME:/var/www/$DEPLOY_PATH/
git push
推送分支并提交。最重要的是 --follow-tags
推送指向推送提交的标签。
每个 CI 假设代码的行为与标签相关。即使代码完全相同,CI 配置中的代码也会检查当前提交是否已标记并执行某些操作,通常是发布包。
因此,默认情况下,每个 CI 对每个带有标签的推送执行至少两次 运行——每个分支一个(有些配置为 运行 测试每个新的推送提交,因此整个 运行 计数可能会更高)并且每个标签一个。
如果您完全确定即使有标签,您的代码也能正常运行,您可以在 CI 配置中禁用带有标签的单独 运行。通常的方法是只允许在分支上进行 CI 运行 测试。你没有命名你的CI所以我不能给出更具体的建议。
我想编写一个 cli 命令来集成我在 (react-js) 项目上完成本地工作会话时必须执行的所有操作:
- 项目版本增加一个(在
package.json
文件的version
字段中) - 添加我对 git 索引所做的所有更改
- 提交对 git 的更改(带有消息)
- 用新版本号标记版本并提交消息
- 从远程拉取
- 推送到远程(包括标签)
推送到远程(例如 github 或 gitlab)也将启动 CI/CD 构建。
我到现在为止想到的是这样丑陋的东西:
m="debugging tag & version"; npm version --no-git-tag-version --force patch && git add . && git commit -m "$m" && git tag -a v`node -p "require('./package.json').version"` -m "$m" && git pull --no-edit && git push --follow-tags
这个的主要缺点是它强制在远程上进行双重构建,可能是因为它推送了两次......但我不明白为什么,因为我不深入了解所有感兴趣的命令。
你能给我一些建议来纠正我的解决方案,或者建议不同的策略吗?
UPDATE:我在这里包含了我的 GitLab 的 CI 配置文件 (.gitlab-ci.yml),它可以是任何帮助...
variables:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
build site:
image: node:12
stage: build
script:
- yarn install --no-progress 2> >(grep -v warning 1>&2)
- yarn build
artifacts:
expire_in: 1 week
paths:
- build/
# we test only on master branch to speed up CI/CD while developing, for the moment...
unit test:
image: node:12
stage: test
only:
- master
script:
- yarn install --no-progress 2> >(grep -v warning 1>&2)
- yarn test
# we only deploy on master and developing branches; for other feature branches,
# we work locally only and then merge into developing or master.
deploy:
image: alpine
stage: deploy
only:
- master
- developing
before_script:
- apk add --no-cache rsync openssh sshpass
script:
- if [ -z "$CI_COMMIT_BRANCH" -o "$CI_COMMIT_BRANCH" = "master" ]; then DEPLOY_PATH="marketplace"; else DEPLOY_PATH="marketplace.test"; fi
- echo "On branch $CI_COMMIT_BRANCH, deploying to $DEPLOY_PATH"
- sshpass -p $DEVEL_PASS rsync -az --delete --no-perms --no-g -O -e "ssh -o StrictHostKeyChecking=no" build/ $DEVEL_USER@$SERVER_NAME:/var/www/$DEPLOY_PATH/
git push
推送分支并提交。最重要的是 --follow-tags
推送指向推送提交的标签。
每个 CI 假设代码的行为与标签相关。即使代码完全相同,CI 配置中的代码也会检查当前提交是否已标记并执行某些操作,通常是发布包。
因此,默认情况下,每个 CI 对每个带有标签的推送执行至少两次 运行——每个分支一个(有些配置为 运行 测试每个新的推送提交,因此整个 运行 计数可能会更高)并且每个标签一个。
如果您完全确定即使有标签,您的代码也能正常运行,您可以在 CI 配置中禁用带有标签的单独 运行。通常的方法是只允许在分支上进行 CI 运行 测试。你没有命名你的CI所以我不能给出更具体的建议。