slogan3

Ontwikkel een GitLab CI-pijplijn voor geautomatiseerde releaseversiebeheer en changeloggeneratie

description

Met deze prompt kun je een GitLab CI-pijplijn maken die automatisch versies beheert en overzichtelijke changelogs genereert, wat handmatige fouten vermindert, tijd bespaart en zorgt voor een gestructureerd releaseproces. Dit verbetert de transparantie en traceerbaarheid van releases en voorkomt inconsistenties die bij handmatige processen kunnen optreden.

prompt

Help me met het ontwerpen van een GitLab CI-pijplijn die automatisch releaseversies beheert en changelogs genereert bij elke deployment. Mijn huidige GitLab CI-configuratie: <voer je huidige GitLab CI YAML-configuratie in>. Versiebeheerstrategie: <beschrijf de versiebeheerstrategie, bijvoorbeeld semantische versie of datumgebaseerd>. Changelog ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van een GitLab CI/CD-configuratie die automatisch releaseversies beheert en changelogs genereert, gebaseerd op jouw specificaties: ```yaml stages: - build - release - deploy variables: # Stel de versie op basis van Git tags of gebruik een tool zoals semantic-release # Hier wordt een voorbeeld gebruikt met semantic-release RELEASE_VERSION: "v$(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}')" build: stage: build script: - make build release: stage: release only: - main image: node:16 # of een andere geschikte image met node en tools script: - npm install -g semantic-release @semantic-release/changelog @semantic-release/git - semantic-release --dry-run # Test eerst zonder acties - semantic-release - # Na succesvolle release, maak changelog - npx conventional-changelog -p angular -i CHANGELOG.md -s -r 0 - git config --global user.email "ci@yourdomain.com" - git config --global user.name "CI/CD Bot" - git add CHANGELOG.md - git commit -m "chore(release): update changelog for version $(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}')" - git tag $(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}') - git push origin main --tags deploy: stage: deploy only: - main script: - make deploy ``` **Uitleg:** - **Stages:** Ik heb een extra 'release' stage toegevoegd tussen build en deploy. - **Semantic-release:** Wordt gebruikt voor versiebeheer en release automation. Het bepaalt automatisch de volgende versie op basis van commitberichten conform conventies. - **Changelog:** Met `conventional-changelog` wordt een markdown changelog gegenereerd met commitberichten en auteurs. - **Automatisering:** Na een succesvolle release wordt de changelog gecommit en getagd, en vervolgens gepusht. - **Beperkingen:** Alleen op de `main` branch worden releases gedaan. **Aanpassingen:** - Zorg dat je project commits volgt met conventie (bijv. Angular commit conventions) zodat semantic-release correct werkt. - Voeg in je project een `semantic-release` configuratiebestand toe (`.releaserc`), bijvoorbeeld: ```json { "branches": ["main"], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/git" ] } ``` **Benodigdheden:** - Voeg je semantic-release en andere benodigde packages toe aan je project. - Zorg dat de CI/CD pipeline beschikt over de juiste toegangs- en authenticatiemiddelen (bijv. SSH-sleutels, tokens). Wil je dat ik een meer gedetailleerde setup of hulp bij de configuratie van semantic-release of andere tools geef?
provider: deepseek
model: deepseek-chat
Hier is een verbeterde GitLab CI-configuratie voor automatisch versiebeheer en changelog-generatie: ```yaml stages: - build - test - version - deploy variables: CHANGELOG_FILE: "CHANGELOG.md" # Alleen uitvoeren op main branch workflow: rules: - if: $CI_COMMIT_BRANCH == "main" build: stage: build script: - make build artifacts: paths: - build/ test: stage: test script: - make test dependencies: - build version: stage: version image: node:16 before_script: - npm install -g conventional-changelog conventional-changelog-cli script: # Bepaal nieuwe versie op basis van commit messages - | LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") echo "Laatste tag: $LATEST_TAG" # Analyseer commit messages voor versie bump type - | COMMITS_SINCE_TAG=$(git log --oneline $LATEST_TAG..HEAD) if echo "$COMMITS_SINCE_TAG" | grep -q "BREAKING CHANGE\|!"; then BUMP_TYPE="major" elif echo "$COMMITS_SINCE_TAG" | grep -q "feat:"; then BUMP_TYPE="minor" else BUMP_TYPE="patch" fi # Bereken nieuwe versie - | VERSION=$(echo $LATEST_TAG | sed 's/^v//') IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION" case $BUMP_TYPE in "major") NEW_MAJOR=$((MAJOR + 1)); NEW_VERSION="$NEW_MAJOR.0.0" ;; "minor") NEW_MINOR=$((MINOR + 1)); NEW_VERSION="$MAJOR.$NEW_MINOR.0" ;; "patch") NEW_PATCH=$((PATCH + 1)); NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH" ;; esac NEW_TAG="v$NEW_VERSION" echo "Nieuwe versie: $NEW_TAG" echo "NEW_VERSION=$NEW_VERSION" > version.env echo "NEW_TAG=$NEW_TAG" >> version.env # Genereer changelog - conventional-changelog -p angular -i $CHANGELOG_FILE -s # Commit changelog en versie update - | git config --global user.email "ci@example.com" git config --global user.name "GitLab CI" git add $CHANGELOG_FILE git commit -m "chore: update changelog for $NEW_TAG" git tag $NEW_TAG git push origin main --tags artifacts: reports: dotenv: version.env rules: - if: $CI_COMMIT_BRANCH == "main" deploy: stage: deploy script: - echo "Deploying version $NEW_VERSION" - make deploy # Maak GitLab release aan - | curl --request POST \ --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ --data "name=Release $NEW_TAG" \ --data "tag_name=$NEW_TAG" \ --data "description=$(cat $CHANGELOG_FILE | head -20)" \ "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases" dependencies: - build - version rules: - if: $CI_COMMIT_BRANCH == "main" ``` **Aanvullende vereisten:** 1. **Commit Convention:** Zorg dat je team conventional commits gebruikt: ``` feat: nieuwe feature fix: bug fix docs: documentatie breaking change: major versie bump ``` 2. **Package.json** (optioneel maar aanbevolen): ```json { "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { "conventional-changelog-cli": "^2.0.0" } } ``` 3. **GitLab Instellingen:** - Zorg dat de CI_TOKEN voldoende rechten heeft voor git pushes en releases - Stel protected branches in voor main **Werking:** - De pijplijn loopt alleen op de main branch - Conventional-changelog analyseert commit messages voor versiebepaling - Automatische semantische versienummering op basis van commit types - Changelog wordt gegenereerd met commit berichten en auteurs - Git tags en releases worden automatisch aangemaakt Deze configuratie zorgt voor volledig geautomatiseerd versiebeheer volgens semantische versienummers met professionele changelogs.