'bitbucket skip pipeline based on tag

Say, I have a tag based pipeline on bitbucket like this

pipelines:
  tags:
    v*: 
      - step:

I don't want to run pipelines on PATCH version changes semver.

For example when going from tag v1.0.0 to v1.0.1 I don't want to run pipelines. Pipelines should only run when there is a MINOR or MAJOR change like. v1.0.0 to v1.1.0 or v2.0.0.

How do I do this?

Is there a [skip ci] equivalent when pushing tags to indicate I don't want pipeline to run for this tag?



Solution 1:[1]

Unfortunately, I cannot think of an easy way to achieve such behaviour, but can present an idea of a workaround.

First and foremost, we cannot specify patterns to skip the pipeline, only patterns to trigger it. After we entered the step, we can check a condition we're interested in, and perform early graceful exit if this condition is met, like this:

script:
  - <check if tag is a PATCH update> && echo "Will not run the step for a PATCH update; gracefully exiting" && exit 0

Be advised that your step will still technically be triggered, so its startup time will be affecting your quotas.

Second, is what this <check if tag is a patch update> actually looks like. Bitbucket exposes the name of the tag that triggered the build in the environment variable called BITBUCKET_TAG (see this doc for details). However, this name itself is not enough to decide if you want to run the step or not. You will need to:

  1. Retrieve the value of the previous tag using Bitbucket REST API. This endpoint looks like something you can make use of.
  2. Compare it to $BITBUCKET_TAG in the CLI using bash, or something friendlier, like Python, if it's included into your build environment. By 'compare' I mean checking if the tag update was PATCH or not. Let me omit the implementation details :)

Solution 2:[2]

This is cumbersome, up to unfeasible depending on the lifecycle of your repository, but you could write an alternative pipeline that does nothing for minor patches on your current minor tag and bump the definition in the very yaml key along any other you may perform.

definitions:

  yaml-anchors:

    - &your-step
        script:
          - do your thing

    - &noop-step
        script:
          - exit 0

pipelines:

  tags:

    v1.n.*: # bump me!
      - step: *noop-step
    
    v*:
      - step: *your-step

Solution 3:[3]

The same question has been answered here: https://community.atlassian.com/t5/Bitbucket-questions/bitbucket-skip-pipeline-based-on-tag/qaq-p/2008586

The gist is that [skuip ci] in the commit message causes no pipeline to run.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 esimonov
Solution 2 N1ngu
Solution 3 alex-jesper