Ontwerp een strategie voor GitHub Actions workflows op maat
description
Met deze prompt ontwerp je een gepersonaliseerde GitHub Actions workflow die je helpt repetitieve taken te automatiseren, fouten te verminderen en de snelheid van je ontwikkelcyclus te verhogen. Het advies richt zich op praktische implementatie, optimalisatie en beveiliging, wat betere controle en efficiëntie oplevert dan generieke handleidingen.
prompt
Help me bij het ontwerpen van een op maat gemaakte GitHub Actions workflow voor mijn project met de volgende details:
Projectnaam: <voer de naam van mijn project in>
Programmeertaal(len): <voer de programmeertaal(len) in>
Belangrijke taken die geautomatiseerd moeten wo ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een gids voor het opzetten, optimaliseren en beveiligen van een GitHub Actions workflow voor jouw project "MijnWebApp" met JavaScript/Node.js, inclusief code bouwen en unittests.
**1. Basisopzet van je workflow**
Maak een bestand aan in `.github/workflows/ci.yml` met de volgende inhoud:
```yaml
name: CI voor MijnWebApp
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
env:
NODE_VERSION: '16' # Of de versie die jij gebruikt
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Gebruik Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ env.NODE_VERSION }}-dependencies-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-${{ env.NODE_VERSION }}-dependencies-
- name: Installeer dependencies
run: npm install
- name: Build de app
run: npm run build
- name: Voer unittests uit
run: npm test
```
**2. Snelle feedback op codewijzigingen**
- Gebruik `pull_request` triggers zodat je bij elke PR direct feedback krijgt.
- Cache dependencies om buildtijden te verkorten.
- Overweeg om tests parallel uit te voeren als je veel tests hebt.
**3. Beveiligde opslag van API-sleutels**
- Voeg je API-sleutels toe als secrets in je GitHub repository:
- Ga naar je repo > Settings > Secrets en variabelen > Actions
- Voeg bijvoorbeeld `API_KEY` toe
- Gebruik deze secrets in je workflow:
```yaml
- name: Gebruik API-sleutel
env:
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "Gebruik API-sleutel in je script"
# Bijvoorbeeld door het te exporteren naar je app of scripts
```
**4. Optimalisaties en tips**
- **Matrix builds**: Test meerdere Node.js versies tegelijk voor betere compatibiliteit.
```yaml
strategy:
matrix:
node-version: [14, 16, 18]
```
- **Automatiseer ook linting**: Voeg een lint-stap toe voor codekwaliteit.
```yaml
- name: Run linter
run: npm run lint
```
- **Gebruik artefacten**: Sla build-resultaten op als artefacten voor latere gebruik.
**5. Extra beveiliging en best practices**
- Gebruik minimal permissions voor workflows.
- Vermijd het loggen van gevoelige gegevens.
- Controleer regelmatig je secrets en dependencies op kwetsbaarheden (bijvoorbeeld met `npm audit`).
---
Met deze opzet krijg je een snelle, veilige en efficiënte CI/CD workflow die je ontwikkelproces versnelt. Wil je dat ik je help met een specifiek voorbeeld of meer geavanceerde configuraties?
provider: deepseek
model: deepseek-chat
Absoluut! Hier is een gedetailleerd, op maat gemaakt advies voor het opzetten van een geoptimaliseerde en beveiligde GitHub Actions workflow voor jouw **MijnWebApp** project.
---
### 1. Basisworkflow Structuur (`/.github/workflows/ci-cd.yml`)
Maak een nieuw bestand aan in je repository onder het pad `.github/workflows/ci-cd.yml`. Hier is een solide basis om mee te beginnen:
```yaml
name: CI/CD Pipeline voor MijnWebApp
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test-and-build:
name: Bouwen & Unittests Uitvoeren
runs-on: ubuntu-latest # Gebruik ubuntu-22.04 voor nog meer voorspelbaarheid
strategy:
matrix:
node-version: [18.x] # Specificeer je gewenste Node.js versie(s)
steps:
# Stap 1: Code uitchecken
- name: Checkout repository
uses: actions/checkout@v4
# Stap 2: Node.js versie instellen
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm' # ZET DIT AAN: Snelheidswinst door caching
# Stap 3: Afhankelijkheden installeren
- name: Install dependencies
run: npm ci # Gebruik 'npm ci' i.p.v. 'npm install' voor snellere, betrouwbaardere builds
# Stap 4: Unittests uitvoeren (Jest wordt verondersteld, pas aan naar jouw testrunner)
- name: Run Unit Tests
run: npm test
env:
# Voorbeeld: Veilig een test-API-sleutel doorgeven
MIJN_APP_API_KEY: ${{ secrets.TEST_API_KEY }}
# Stap 5: Applicatie bouwen
- name: Build Application
run: npm run build # Veronderstelt dat je een 'build' script in package.json hebt
```
---
### 2. Optimalisatie voor Snelle Feedback (Snelheid!)
Je wens voor snelle feedback is cruciaal. Hier zijn de belangrijkste optimalisaties:
1. **Caching van Afhankelijkheden:** De `cache: 'npm'` regel in de `setup-node` action is hier de grootste winst. Het slaat de `node_modules` map op, waardoor volgende runs de dependencies niet opnieuw hoeven te downloaden en installeren.
2. **`npm ci` i.p.v. `npm install`:** De `npm ci` opdracht is sneller en strikter. Hij verwacht een bestaande `package-lock.json` en verwijdert eerst de `node_modules` voor een schone, consistente installatie.
3. **Matrix Strategy voor meerdere Node versies:** De `strategy.matrix` is nu ingesteld op één versie voor snelheid. Wil je toch tegen meerdere Node.js versies testen (bijv. 18.x en 20.x), dan kan je dat hier toevoegen. Wees je ervan bewust dat dit de totale looptijd vermenigvuldigt.
4. **Gebeurtenis Triggers:** De workflow wordt nu al getriggerd op elke `push` naar en `pull_request` voor de `main` en `develop` branches. Dit geeft directe feedback.
**Geavanceerde Optimalisatie:** Splits jobs op. Maak een aparte job voor tests en een voor build. Je kunt ze dan parallel laten lopen, maar dit is vaak alleen sneller bij zeer grote projecten.
---
### 3. Beveiliging van Gevoelige Gegevens (API-sleutels)
Dit is het allerbelangrijkste onderdeel. **Stop nooit, ever, gevoelige data rechtstreeks in je YAML-bestand.**
1. **Gebruik GitHub Secrets:**
* Ga in je GitHub repository naar **Settings** > **Secrets and variables** > **Actions**.
* Klik op **New repository secret**.
* Geef een duidelijke naam op (bijv. `PRODUCTION_API_KEY`) en plak de waarde.
* Je kunt nu in je workflow naar deze secret verwijzen met `${{ secrets.SECRET_NAME }}`.
2. **Workflow aanpassen voor Secrets:**
In het voorbeeld hierboven zie je al hoe je een secret (`TEST_API_KEY`) doorgeeft als environment variable naar de teststap.
Voor een build- of deploystap zou je het zo kunnen doen:
```yaml
- name: Deploy to Staging
run: ./my-deploy-script.sh
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SUPER_SECRET_API_KEY: ${{ secrets.PRODUCTION_API_KEY }}
```
Je script of applicatie kan deze environment variables (`process.env.SUPER_SECRET_API_KEY` in Node.js) dan uitlezen.
3. **Best Practice:** Gebruik verschillende secrets voor verschillende omgevingen (bv. `TEST_API_KEY` voor testen, `PROD_API_KEY` voor productie) en pas de juiste secret toe op de juiste job/stap.
---
### 4. Volledig Uitgewerkt, Geoptimaliseerd en Beveiligd Voorbeeld
```yaml
name: 🚀 MijnWebApp CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test-suite:
name: ✅ Test Suite (Node ${{ matrix.node-version }})
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x] # Voeg 20.x toe indien nodig
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: ⎔ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm' # 🚀 CRUCIALEE OPTIMALISATIE
- name: 📦 Install dependencies (npm ci)
run: npm ci
- name: 🧪 Run Unit Tests
run: npm test
env:
# Alle API-sleutels voor testomgeving komen uit Secrets
API_KEY: ${{ secrets.TEST_API_KEY }}
DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
build-app:
name: 🏗️ Build Production Bundle
runs-on: ubuntu-latest
needs: test-suite # Deze job wacht tot de test-suite job succesvol is afgerond
if: github.event_name == 'push' && github.ref == 'refs/heads/main' # Bouw alleen na een push naar main
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: ⎔ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
cache: 'npm'
- name: 📦 Install dependencies (npm ci)
run: npm ci
- name: 🏗️ Run Build
run: npm run build
env:
# Gebruik productie-sleutels voor de build, indien nodig door je buildscript
API_KEY: ${{ secrets.PROD_API_KEY }}
```
### Samenvatting van je volgende stappen:
1. **Maak het directory aan:** `.github/workflows/` in de root van je project.
2. **Plaats het YAML-bestand:** Creëer een `ci.yml` of `main.yml` bestand en plak de gewenste configuratie.
3. **Configureer Secrets:** Ga naar je GitHub repo settings en voeg alle benodigde API-sleutels toe als Secrets.
4. **Commit en Push:** Push je wijziging naar de `main` of `develop` branch. De workflow wordt automatisch gestart!
5. **Bekijk de resultaten:** Ga naar het **Actions** tabblad in je GitHub repository om de live voortgang en logs te zien.
Door dit plan te volgen, heb je een razendsnelle, veilige en professionele CI/CD-pipeline die perfect aansluit bij de behoeften van **MijnWebApp**. Succes!