Ga naar inhoud

Deploy & release

Releaseproces op hoofdlijnen

Het releaseproces is manueel en bestaat uit de volgende stappen:

flowchart LR
    A[develop-branch gereed] --> B[bin/merge-push.sh]
    B --> C[develop → main merge + push]
    C --> D[website:offline]
    D --> E[deploy via server]
    E --> F[migraties: ./bin/doctrine m:m -n]
    F --> G[cache:warmup: ./cli.php c:w]
    G --> H[website:online]

Branches samenvoegen en pushen

bin/merge-push.sh controleert eerst of er geen uncommitted wijzigingen zijn en of pull.rebase = true geconfigureerd is. Daarna:

  1. Checkout develop → pull
  2. Checkout main → pull
  3. Merge develop into main → push main
  4. Terug naar develop → push develop

Vereiste: alle wijzigingen zijn gecommit vóór het script gestart wordt.

Website offline/online zetten

Tijdens een deploy wordt de shop tijdelijk offline gezet via de Symfony Console-commands:

# Offline zetten (standaard 30 minuten)
./cli.php website:offline

# Optioneel: met aangepast tijdstip
./cli.php website:offline "+1 hour"

# Terug online zetten
./cli.php website:online

Implementatie: src/Atraxion/Common/Command/WebsiteOfflineCommand.php en WebsiteOnlineCommand.php. De offline-status wordt bijgehouden als een bestand op APP_PUBLIC_DIR/appconfig/offline (aangemaakt/verwijderd door website_offline() / website_online()). Bezoekers zien een offline-pagina; de API retourneert HTTP 503 JSON.

Privileged IP-adressen kunnen de shop nog bezoeken terwijl hij offline is (is_offline(true) — controleert IP).

Bestanden die niet worden uitgerold

.deployignore bevat patronen die bij een rsync-deploy worden overgeslagen:

  • _data/** — databasedumps (grote binaire data)
  • .htaccess — lokale Apache-rewrite-config (niet uitrollen naar productie)
  • .git*, .clinerules, .phpstorm.meta.php — dev-bestanden
  • INSTALL.md, README.md, LICENSE, AGENTS.md, CLAUDE.md
  • update_mysql.sh
  • _static/css/sprite-brand*, _static/css/sprite-vehicle-brand.css

Na de deploy

Na het uitrollen op de server:

# Doctrine-migraties draaien
./bin/doctrine m:m -n

# Cache opwarmen (verplicht na migraties die cms_text raken)
./cli.php cache:warmup

Zonder cache:warmup blijven trans()-aanroepen leeg zolang de Memcached-cache de oude staat bevat. Zie Caching.

Shopupdating-map en exports

_shopupdating/ bevat:

  • cronjobs/ — batch- en cron-scripts (zie Cronjob-overzicht)
  • exports/ — tijdelijk gegenereerde exportbestanden (stockexports naar platformen enz.)
  • maintenance/ — handmatige onderhoudsscripts voor 3D-scans, afbeeldingen en velgenrendering
  • index_checkAllLevs.php / index_checkLevFile.php — aliassen naar de leveranciersstock-scripts
  • index_stockForExport.php — alias voor stockexport
  • upload-tracking.php / upload-tracking.phtml — handmatige bulk-upload van tracking-nummers naar factuurregels via een HTML-formulier
  • voerdoor.php — handmatige tool om een enkelvoudige order naar Odoo te forwarden (?order={orderId})

Sentry en releases

Bij een nieuwe deploy worden Sentry-meldingen van class-not-found / unknown-column / EntityManagerClosed die onmiddellijk na de deploy optreden beschouwd als deploy-artefacten (tijdelijk, veroorzaakt door APCu/OPcache-flush of race-conditions). Deze zijn geen echte bugs.