Files
ci-workflows/readme.md

179 lines
4.5 KiB
Markdown

# CI Workflows Repository
Dit repository bevat **centrale CI/CD workflows** voor gebruik met **Gitea Actions + runners**.
Het doel is om build-, release- en deploylogica **één keer te definiëren** en vervolgens **herbruikbaar** te maken voor meerdere repositories.
De workflows in dit repo worden gebruikt via **reusable workflows (`workflow_call`)**, zodat individuele projecten alleen nog een dunne “wrapper”-workflow nodig hebben.
---
## 📦 Wat zit er in dit repository?
Momenteel bevat dit repo onder andere:
- **WP Plugin Build & Release workflow**
- Leest de pluginversie uit de plugin header
- Genereert automatisch `manifest.json`
- Bouwt een distributie-zip
- Maakt (indien nodig) een Gitea release
- Uploadt het zip-bestand als release asset
- Slaat releases over als de tag al bestaat
De workflows zijn ontworpen om:
- versie-gebaseerd te werken (`vX.Y.Z`)
- veilig herbruikbaar te zijn
- zonder repo-specifieke aannames te functioneren
---
## 🧠 Architectuur
**Waarom centraal?**
- Geen copy-paste CI meer
- Eén plek om fixes en verbeteringen door te voeren
- Consistente releasestructuur
- Minder onderhoud per project
**Hoe?**
- Dit repo bevat de *logica*
- Consumer repos bepalen:
- wanneer een workflow draait (`on: push`, `workflow_dispatch`, `paths`)
- welke parameters worden doorgegeven (slug, main file, release notes)
---
## 🔁 Gebruik in andere repositories
### 1. Voorwaarden
De consumer repo moet:
- Gitea Actions ingeschakeld hebben
- Toegang hebben tot dit repo
- Een `RELEASE_TOKEN` secret bevatten met `repo`-rechten
Optioneel kunnen repo-variables gebruikt worden:
- `RELEASE_SERVER_URL`
- `RELEASE_REPOSITORY`
---
### 2. Voorbeeld: WordPress plugin release
In de **consumer repo**:
`.gitea/workflows/release.yml`
```yaml
name: Build & Release Plugin
on:
workflow_dispatch:
inputs:
release_notes:
description: "Optionele release-opmerkingen"
required: false
push:
branches: [ main ]
paths:
- 'plugin-main-file.php'
- 'includes/**'
- 'assets/**'
- 'README.md'
jobs:
release:
uses: org/ci-workflows/.gitea/workflows/wp-plugin-release.yml@v1
with:
main_file: plugin-main-file.php
slug: my-plugin-slug
release_body: "${{ inputs.release_notes }}"
secrets:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
```
De volledige build- en releaseflow wordt hiermee centraal uitgevoerd.
---
## 🔧 Beschikbare inputs (WP Plugin workflow)
| Input | Verplicht | Beschrijving |
|------|----------|-------------|
| `main_file` | ✅ | Pad naar het hoofd pluginbestand met `Version:` header |
| `slug` | ✅ | Plugin slug / mapnaam in de zip |
| `release_title` | ❌ | Titel van de release |
| `release_body` | ❌ | Release notes (bijv. via workflow_dispatch) |
---
## 🔐 Secrets & rechten
### Vereist
- `RELEASE_TOKEN`
Gitea API token met `repo`-rechten
### Optioneel (repo variables)
- `RELEASE_SERVER_URL`
Voor self-hosted Gitea (override van server URL)
- `RELEASE_REPOSITORY`
Override voor `owner/repository`
---
## 🏷️ Versiebeheer van workflows
Gebruik **tags** in dit repository:
- `v1` → stabiele major versie
- `v1.0.1` → bugfix / non-breaking wijziging
- `v2` → breaking changes
Consumer repositories **moeten altijd pinnen** op een tag of commit SHA:
```yaml
uses: org/ci-workflows/.gitea/workflows/wp-plugin-release.yml@v1
Dit voorkomt onverwachte regressies bij wijzigingen in centrale CI-logica.
```
---
## 🧪 Ontwikkelen & testen van workflows
Aanpak voor wijzigingen in dit CI-repository:
1. Maak een feature branch in dit repository
2. Pas de workflow(s) aan
3. Test de wijzigingen via een aparte test-repository
4. Merge de branch naar `main`
5. Tag een nieuwe versie (`vX.Y.Z`)
**Breaking change?**
→ verhoog altijd de major versie (`v2`, `v3`, …)
---
## 🚫 Wat hoort niet in dit repository?
Dit repository bevat **uitsluitend generieke CI/CD-logica**.
Niet opnemen:
- Project- of plugin-specifieke bestandsnamen
- Hardcoded slugs, paden of repository-namen
- Triggers zoals `on: push`, `paths` of branch-namen
- Omgevingsspecifieke aannames of secrets
Alles wat per project verschilt hoort in de **consumer workflow**.
---
## 📌 Richtlijn
> Consumer repositories bepalen **wanneer** een workflow draait.
> Dit repository bepaalt **hoe** de workflow wordt uitgevoerd.
---
## 📄 Gebruik & scope
Intern CI/CD repository voor herbruikbare Gitea Actions workflows.
Bedoeld voor gebruik binnen de organisatie en gekoppelde projecten.
---