How to run a pipeline step only when pushing to a new branch?
2021-01-07
Categories: DevOps
GitHub sends push hook when pushing to a new branch and merging a PR. How can we distinguish between them?
We are running integration test by triggering a downstream build when a PR is merged into specific branches. In the downstream repository, we pull all the docker images which has been built and pushed from upstream. The thing is we also used the drone-convert-pathschanged to only publish what modules has been changed.
So, what happens when pushing to a new release-* branch?
No code changed -> publish steps won’t run -> the docker images does not exist -> integration test failed.
How can we solve this situation?
GitHub created two hooks when pushing to a new branch:
- X-GitHub-Event: create
- X-GitHub-Event: push
Since Drone ignores the “create” event, how can we know that a branch has been created in a “push” event? By looking at the Webhook payloads docs, we can check if “Created” is true or false. Turn out that there is another way to check.
Created: https://github.com/drone/drone/pull/3052
A condition for a step to run when pushing to a new branch will be something like this:
when:
action:
- create
branch:
- release-*
event:
- push
It can be distinguished with the step is run when a PR is merged into release-*:
when:
action:
exclude:
- create
branch:
- release-*
event:
- push
Tags: drone ci monorepo integration-test golang
Quan Tong