179 lines
4.5 KiB
Markdown
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.
|
|
|
|
---
|