Help me een GitHub Actions workflow implementeren voor geautomatiseerd releasebeheer met versiebeheer
description
Automatisering van releasebeheer bespaart tijd, vermindert fouten in versiebeheer en zorgt voor consistente releasepraktijken in je projecten.
prompt
try_prompt
Help me een GitHub Actions workflow maken die het releasebeheerproces automatiseert, inclusief versiebeheer, tagging en het publiceren van releases. Projecttype: {{p ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions workflow die het releasebeheerproces automatiseert voor een Node.js-project met Semantic Versioning, inclusief versiebeheer, tagging, en publiceren, met Slack-notificaties. Pas de placeholders aan naar jouw situatie.
```yaml
name: Release Workflow
on:
push:
branches:
- main
# Trigger alleen bij pushes naar main, of pas aan naar jouw release branch
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16' # Pas aan naar jouw Node.js versie
- name: Install dependencies
run: npm install
- name: Bepaal nieuwe versie
id: version
run: |
# Gebruik semantic-release of een custom script
# Hier een voorbeeld met semantic-release
npx semantic-release --dry-run
# Of, als je handmatig wilt bepalen:
# Lees de laatste tag
LAST_TAG=$(git describe --tags --match "v*" --abbrev=0)
echo "Last tag: $LAST_TAG"
# Bepaal nieuwe versie volgens semver (bijvoorbeeld via semantic-release)
# Semantic-release automatiseert dit volledig
# Voor dit voorbeeld gebruiken we semantic-release
- name: Configureer GitHub release data
id: release_data
run: |
# Semantic-release verzorgt automatisch versie en release
# Maar als je dit handmatig wilt doen, kun je hier versie bepalen
echo "version=$(npx semantic-release --dry-run | grep 'Next release version' | awk '{print $NF}')" >> $GITHUB_OUTPUT
- name: Tag nieuwe release
run: |
NEW_VERSION=$(echo "${{ steps.release_data.outputs.version }}")
git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION"
git push origin "v$NEW_VERSION"
- name: Maak release aan op GitHub
uses: softprops/action-gh-release@v1
with:
tag_name: "v${{ steps.release_data.outputs.version }}"
name: "Release v${{ steps.release_data.outputs.version }}"
body: |
Automatisch gegenereerde release voor versie v${{ steps.release_data.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publiceer naar npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Slack notificatie
uses: slackapi/slack-github-action@v1.23.0
with:
slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
channel-id: 'jouw-channel-id'
message: |
🚀 Nieuwe release v${{ steps.release_data.outputs.version }} is gepubliceerd! Bekijk het op: <release-link>
```
**Aanpassingen nodig:**
- Voeg je Slack Bot Token toe aan GitHub Secrets als `SLACK_BOT_TOKEN`.
- Voeg je NPM Token toe als `NPM_TOKEN`.
- Pas de kanaal-ID aan (`channel-id`).
- Pas de Node.js versie en andere details aan naar jouw project.
Deze workflow automatiseert het bepalen van de versie, het taggen, het maken van een GitHub release, publiceren naar npm, en het sturen van een Slack-notificatie.
Voor volledige automatische semantic versioning, overweeg het gebruik van [semantic-release](https://semantic-release.gitbook.io/semantic-release/) en configureer het in je project.
provider: deepseek
model: deepseek-chat
Hier is een GitHub Actions workflow voor het automatiseren van het releasebeheerproces voor je Node.js project:
```yaml
name: Release Management
on:
push:
branches: [main]
workflow_dispatch:
env:
NODE_VERSION: '18.x'
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
jobs:
release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Semantic Release
uses: cycjimmy/semantic-release-action@v3
id: semantic
with:
extra_plugins: |
@semantic-release/changelog
@semantic-release/git
@semantic-release/github
@semantic-release/npm
branch: main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Notify Slack on Success
if: steps.semantic.outputs.new_release_published == 'true'
uses: 8398a7/action-slack@v3
with:
status: success
text: Nieuwe release ${{ steps.semantic.outputs.new_release_version }} gepubliceerd!
fields: repo,message,commit,author,workflow
env:
SLACK_WEBHOOK_URL: ${{ env.SLACK_WEBHOOK_URL }}
- name: Notify Slack on Failure
if: failure()
uses: 8398a7/action-slack@v3
with:
status: failure
fields: repo,message,commit,author,workflow
env:
SLACK_WEBHOOK_URL: ${{ env.SLACK_WEBHOOK_URL }}
```
**Benodigde setup:**
1. **Repository secrets instellen:**
- `GITHUB_TOKEN` (automatisch beschikbaar)
- `SLACK_WEBHOOK_URL`: Slack webhook URL voor notificaties
- `NPM_TOKEN`: Alleen nodig als je naar NPM publiceert
2. **package.json configuratie:**
```json
{
"release": {
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
["@semantic-release/git", {
"assets": ["package.json", "CHANGELOG.md"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}]
]
}
}
```
3. **Vereiste dependencies:**
```bash
npm install --save-dev semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/github @semantic-release/npm
```
**Werking:**
- Wordt geactiveerd bij pushes naar `main` of handmatig
- Analyseert commit messages voor semantic versioning
- Genereert automatisch versienummers en changelog
- Creëert GitHub releases met tags
- Publiceert naar npm (optioneel)
- Stuurt Slack notificaties bij succes/failure
De workflow volgt conventionele commits voor versiebeheer:
- `feat:` → minor release
- `fix:` → patch release
- `BREAKING CHANGE:` → major release

