netdata_netdata/.github/workflows/release.yml

215 lines
8.4 KiB
YAML

---
# Workflow for triggering a release.
name: Release
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch: # Dispatch runs build and validate, then push to the appropriate storage location.
inputs:
type:
description: Build Type
default: nightly
required: true
version:
description: Version Tag
default: nightly
required: true
concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
group: release-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
jobs:
update-changelogs:
name: Update changelog
runs-on: ubuntu-latest
outputs:
ref: ${{ steps.target.outputs.ref }}
version: ${{ steps.target.outputs.version }}
type: ${{ steps.target.outputs.type }}
run: ${{ steps.target.outputs.run }}
steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
- name: Prepare base ref
id: target
run: >-
.github/scripts/prepare-release-base.sh \
${{ github.repository }} \
${{ github.event_name }} \
${{ github.event.inputs.type }} \
${{ github.event.inputs.version }} \
${{ secrets.NETDATA_RELEASE_TEST }}
- name: Generate Nightly Changleog
id: nightly-changelog
if: steps.target.outputs.run == 'true' && steps.target.outputs.type == 'nightly'
uses: heinrichreimer/github-changelog-generator-action@v2.4
with:
bugLabels: IGNOREBUGS
excludeLabels: "stale,duplicate,question,invalid,wontfix,discussion,no changelog"
issues: false
sinceTag: v1.10.0
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
unreleasedLabel: "**Next release**"
verbose: true
maxIssues: 500
- name: Generate Release Changelog
id: release-changelog
if: steps.target.outputs.run == 'true' && steps.target.outputs.type != 'nightly'
uses: heinrichreimer/github-changelog-generator-action@v2.4
with:
bugLabels: IGNOREBUGS
excludeLabels: "stale,duplicate,question,invalid,wontfix,discussion,no changelog"
futureRelease: ${{ github.event.inputs.version }}
issues: false
sinceTag: v1.10.0
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
unreleasedLabel: "**Next release**"
verbose: true
maxIssues: 500
- name: Commit Changes
id: commit
if: steps.target.outputs.run == 'true'
env:
GITHUB_TOKEN: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
run: |
git config user.name "netdatabot"
git config user.email "bot@netdata.cloud"
git add packaging/version CHANGELOG.md
git commit -m "[ci skip] ${{ steps.target.outputs.message }}"
if [ "${{ steps.target.outputs.type }}" != "nightly" ]; then
git tag -a "${{ github.event.inputs.version }}" -m "${{ steps.target.outputs.message }}"
fi
if [ -n "${{ steps.target.outputs.new-branch }}" ]; then
git branch "${{ steps.target.outputs.new-branch }}"
fi
git push --tags origin "${{ steps.target.outputs.branch }}"
if [ -n "${{ steps.target.outputs.new-branch }}" ]; then
git push origin "${{ steps.target.outputs.new-branch }}"
fi
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to prepare changelog:'
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Failed to prepare changelog.
Checkout: ${{ steps.checkout.outcome }}
Prepare base ref: ${{ steps.target.outcome }}
Generate nightly changelog: ${{ steps.nightly-changelog.outcome }}
Generate release changelog: ${{ steps.release-changelog.outcome }}
Commit changes: ${{ steps.commit.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()
trigger-artifacts:
name: Trigger artifact builds
runs-on: ubuntu-latest
needs: update-changelogs
if: needs.update-changelogs.outputs.run == 'true'
steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.update-changelogs.outputs.ref }}
- name: Trigger build
id: trigger
uses: benc-uk/workflow-dispatch@v1
with:
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
repo: ${{ github.repository }}
workflow: build.yml
ref: ${{ needs.update-changelogs.outputs.ref }}
inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ needs.update-changelogs.outputs.type }}"}'
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} artifact builds:'
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} artifact builds.
Checkout: ${{ steps.checkout.outcome }}
Trigger build: ${{ steps.trigger.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()
trigger-docker:
name: Trigger docker builds
runs-on: ubuntu-latest
needs: update-changelogs
if: needs.update-changelogs.outputs.run == 'true'
steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.update-changelogs.outputs.ref }}
- name: Trigger build
id: trigger
uses: benc-uk/workflow-dispatch@v1
with:
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
repo: ${{ github.repository }}
workflow: docker.yml
ref: ${{ needs.update-changelogs.outputs.ref }}
inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}"}'
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} Docker builds:'
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} Docker builds.
Checkout: ${{ steps.checkout.outcome }}
Trigger build: ${{ steps.trigger.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()
trigger-packages:
name: Trigger package builds
runs-on: ubuntu-latest
needs: update-changelogs
if: needs.update-changelogs.outputs.run == 'true'
steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.update-changelogs.outputs.ref }}
- name: Trigger build
id: trigger
uses: benc-uk/workflow-dispatch@v1
with:
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
repo: ${{ github.repository }}
workflow: packaging.yml
ref: ${{ needs.update-changelogs.outputs.ref }}
inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ needs.update-changelogs.outputs.type }}"}'
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} package builds:'
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} package builds.
Checkout: ${{ steps.checkout.outcome }}
Trigger build: ${{ steps.trigger.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()