Release & Notifications
Five workflows handle the release lifecycle — from generating changelogs and cutting GitHub releases to sending formatted Slack notifications.
release-tag​
Automate semantic versioning with tag creation and changelog generation — analyzes conventional commit messages to determine whether to bump the major, minor, or patch version, creates a git tag, and generates a CHANGELOG.md entry.
When to use: On pushes to your main branch to automatically version your project.
on:
push:
branches: [master]
jobs:
release:
uses: clouddrove/github-shared-workflows/.github/workflows/release-tag.yml@master
with:
target_branch: master # default: master
secrets:
GITHUB: ${{ secrets.GITHUB_TOKEN }}
Version bump rules (based on commit type):
feat:→ minor bump (1.0.0 → 1.1.0)fix:,docs:,chore:→ patch bump (1.0.0 → 1.0.1)feat!:orBREAKING CHANGE:→ major bump (1.0.0 → 2.0.0)
release-changelog​
Generate a changelog and create a GitHub release — reads conventional commits since the last tag, generates a formatted CHANGELOG.md, and publishes a GitHub release with release notes.
on:
push:
tags:
- 'v*'
jobs:
changelog:
uses: clouddrove/github-shared-workflows/.github/workflows/release-changelog.yml@master
with:
branch: master # required
secrets:
GITHUB: ${{ secrets.GITHUB_TOKEN }}
| Input | Required | Description |
|---|---|---|
branch | Yes | Branch to generate changelog from |
release-changelog-internal​
Internal changelog generation on tag push — a variant of release-changelog used within the shared-workflows repo itself. Typically you would use release-changelog instead.
on:
push:
tags:
- 'v*'
jobs:
changelog:
uses: clouddrove/github-shared-workflows/.github/workflows/release-changelog-internal.yml@master
with:
branch: master
secrets:
GITHUB: ${{ secrets.GITHUB_TOKEN }}
notify-slack​
Send formatted Slack notifications with CloudDrove branding — posts a rich Slack message with customizable status, title, fields, body text, and a call-to-action button.
When to use: Notify your team about deployment completions, failures, or any significant pipeline event.
jobs:
deploy:
uses: clouddrove/github-shared-workflows/.github/workflows/tf-workflow.yml@master
# ...
notify:
needs: deploy
if: always()
uses: clouddrove/github-shared-workflows/.github/workflows/notify-slack.yml@master
with:
channel: "#deployments"
title: "Production Deploy"
status: ${{ needs.deploy.result }} # success | failure | cancelled
fields_json: |
[
{"title": "Repo", "value": "${{ github.repository }}", "short": true},
{"title": "Branch", "value": "${{ github.ref_name }}", "short": true}
]
body_md: "Deployment triggered by ${{ github.actor }}"
button_text: "View Run"
button_url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
secrets:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
| Input | Required | Default | Description |
|---|---|---|---|
channel | Yes | — | Slack channel name (e.g., #deployments) |
title | Yes | — | Notification title |
status | No | success | success, failure, or cancelled |
fields_json | No | — | JSON array of Slack attachment fields |
body_md | No | — | Markdown body text |
button_text | No | — | Call-to-action button label |
button_url | No | — | Call-to-action button URL |
brand | No | CloudDrove | Branding name shown in footer |
Use if: always() on the notify job so it runs even when the previous job fails, giving your team visibility into failures.