您可以推送到 Concourse 中的拉取请求分支吗?
Can you push to a pull request branch in Concourse?
在 Concourse 中,当在 Github 中创建拉取请求时,我们使用 teliaoss/github-pr-resource
来 运行 拉取请求检查。我们所做的一项检查是 npm run prettier:fix
,它确保所有代码的格式都符合标准。如果存储库显示更改,则任务失败,用户必须 运行 在本地执行命令并推送更改。这很好,但我们希望 运行 npm run prettier:fix
然后将更改提交到拉取请求分支,避免要求用户再次提交。
git 资源可用并允许您推送到存储库,但您必须在 yaml 中指定分支,我不知道有什么方法可以使其动态化。这是一个使用 git 资源
的简化示例
resource_types:
- name: pull-request
type: registry-image
source:
repository: teliaoss/github-pr-resource
resources:
- name: deployment-plan
type: git
source:
branch: main # this needs to be the pull-request branch
uri: ((git-base-uri))/myproject
- task: run-prettier
config:
platform: linux
image_resource:
type: registry-image
source:
repository: alpine/git
inputs:
- name: deployment-plan
outputs:
- name: deployment-plan-git-update
run:
path: sh
args:
- -exc
- |
git clone deployment-plan deployment-plan-git-update
cd deployment-plan-git-update
npm run prettier:fix
git add .
if [[ ! -z "$(git status --porcelain)" ]]; then
git commit -m "run prettier"
fi
- put: deployment-plan
params:
repository: deployment-plan-git-update
rebase: true
这可以直接推送到 git 存储库,前提是您已授予访问令牌用户对存储库的访问权限。
这是一个粗略的例子:
# Run commands to run formatter
if [[ "$(git status -s)" ]]; then
git commit -m "Formatting Code"
git push
else
echo "No changes"
fi
注意:在我们的回购中,我们必须通过 git push
和重置原点并推送到正确的分支来发挥创意。 teliaoss/github-pr-resource
自最初编写以来已经发生了很大变化,因此希望它们不再是必需的。
此外,由于您现在已经推送到 PR,这将触发另一个构建。我们通过在 PR 构建作业检查之前添加一个门来解决这个问题,以查看最后一次提交是否是带有生成的提交消息的 Concourse 用户,如果是,则跳过它并将 PR 状态检查标记为完成。
您仍然需要明确设置您的分支,但@Busches 的回答让我走上了正确的道路
- task: prettier
config:
platform: linux
image_resource:
type: docker-image
source:
repository: image-with-node-git-and-jq
tag: 14
inputs:
- name: pull-request
outputs:
- name: pull-request
params:
USERNAME: ((access-token.username))
ACCESS_TOKEN: ((access-token.git-access-token))
run:
path: sh
dir: pull-request
args:
- -exc
- |
export NG_CLI_ANALYTICS=false
prNumber=$(cat .git/resource/metadata.json | jq -r '.[] | select(.name=="pr") | .value')
branchName=$(curl 'https://'${USERNAME}:${ACCESS_TOKEN}'@github.nwie.net/api/v3/repos/Nationwide/roundup/pulls/'${prNumber} | jq -r '.head.ref')
git fetch
git checkout ${branchName}
# run any commands that change files here
npm install -g prettier
npm run prettier:fix
git add .
# only commit if there are changes otherwise the step fails
if [[ ! -z "$(git status --porcelain)" ]]; then
git commit -m "prettier fix"
git push --set-upstream origin ${branchName}
else
echo "no changes found"
fi
在 Concourse 中,当在 Github 中创建拉取请求时,我们使用 teliaoss/github-pr-resource
来 运行 拉取请求检查。我们所做的一项检查是 npm run prettier:fix
,它确保所有代码的格式都符合标准。如果存储库显示更改,则任务失败,用户必须 运行 在本地执行命令并推送更改。这很好,但我们希望 运行 npm run prettier:fix
然后将更改提交到拉取请求分支,避免要求用户再次提交。
git 资源可用并允许您推送到存储库,但您必须在 yaml 中指定分支,我不知道有什么方法可以使其动态化。这是一个使用 git 资源
的简化示例resource_types:
- name: pull-request
type: registry-image
source:
repository: teliaoss/github-pr-resource
resources:
- name: deployment-plan
type: git
source:
branch: main # this needs to be the pull-request branch
uri: ((git-base-uri))/myproject
- task: run-prettier
config:
platform: linux
image_resource:
type: registry-image
source:
repository: alpine/git
inputs:
- name: deployment-plan
outputs:
- name: deployment-plan-git-update
run:
path: sh
args:
- -exc
- |
git clone deployment-plan deployment-plan-git-update
cd deployment-plan-git-update
npm run prettier:fix
git add .
if [[ ! -z "$(git status --porcelain)" ]]; then
git commit -m "run prettier"
fi
- put: deployment-plan
params:
repository: deployment-plan-git-update
rebase: true
这可以直接推送到 git 存储库,前提是您已授予访问令牌用户对存储库的访问权限。
这是一个粗略的例子:
# Run commands to run formatter
if [[ "$(git status -s)" ]]; then
git commit -m "Formatting Code"
git push
else
echo "No changes"
fi
注意:在我们的回购中,我们必须通过 git push
和重置原点并推送到正确的分支来发挥创意。 teliaoss/github-pr-resource
自最初编写以来已经发生了很大变化,因此希望它们不再是必需的。
此外,由于您现在已经推送到 PR,这将触发另一个构建。我们通过在 PR 构建作业检查之前添加一个门来解决这个问题,以查看最后一次提交是否是带有生成的提交消息的 Concourse 用户,如果是,则跳过它并将 PR 状态检查标记为完成。
您仍然需要明确设置您的分支,但@Busches 的回答让我走上了正确的道路
- task: prettier
config:
platform: linux
image_resource:
type: docker-image
source:
repository: image-with-node-git-and-jq
tag: 14
inputs:
- name: pull-request
outputs:
- name: pull-request
params:
USERNAME: ((access-token.username))
ACCESS_TOKEN: ((access-token.git-access-token))
run:
path: sh
dir: pull-request
args:
- -exc
- |
export NG_CLI_ANALYTICS=false
prNumber=$(cat .git/resource/metadata.json | jq -r '.[] | select(.name=="pr") | .value')
branchName=$(curl 'https://'${USERNAME}:${ACCESS_TOKEN}'@github.nwie.net/api/v3/repos/Nationwide/roundup/pulls/'${prNumber} | jq -r '.head.ref')
git fetch
git checkout ${branchName}
# run any commands that change files here
npm install -g prettier
npm run prettier:fix
git add .
# only commit if there are changes otherwise the step fails
if [[ ! -z "$(git status --porcelain)" ]]; then
git commit -m "prettier fix"
git push --set-upstream origin ${branchName}
else
echo "no changes found"
fi