"Life is all about sharing. If we are good at something, pass it on." - Mary Berry

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:

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

Edit on GitHub