Build & release artifacts when a Git tag is pushed

Build & release artifacts when a Git tag is pushed

Releasing on tag push is the canonical way to ship versioned binaries. The trigger filter shape differs across platforms; the actual build is identical.

Conversion notes

  • On Bitbucket, tag-driven pipelines live under `pipelines.tags.<glob>`.

Side-by-side implementation

GitHub Actions
name: release
on:
  push:
    tags: ['v*']
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci && npm run build:release
      - uses: softprops/action-gh-release@v2
        with:
          files: dist/*.tar.gz
GitLab CI
release:
  image: node:20
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - npm ci && npm run build:release
  artifacts:
    paths: [dist/]
  release:
    name: 'Release $CI_COMMIT_TAG'
    description: 'Generated by CI'
    tag_name: '$CI_COMMIT_TAG'
CircleCI
version: 2.1

jobs:
  release:
    docker: [{ image: cimg/node:20.10 }]
    steps:
      - checkout
      - run: npm ci && npm run build:release
      - run: gh release create $CIRCLE_TAG dist/*.tar.gz

workflows:
  release:
    jobs:
      - release:
          filters:
            branches: { ignore: /.*/ }
            tags: { only: /^v.*/ }
Bitbucket Pipelines
image: node:20

pipelines:
  tags:
    'v*':
      - step:
          name: release
          caches: [node]
          script:
            - npm ci && npm run build:release
          artifacts: ['dist/**']

Related Tools