Veilige ontwikkeling

Hoe wijzigingen worden gecontroleerd en uitgebracht, en wat wordt ondersteund

  1. De broncode
  2. Hoe een wijziging wordt gemerged
  3. Codeanalyse en afhankelijkheden
  4. Releases en images
  5. Ondersteunde versies

De broncode

AnsibleForms is open source, dus alles op deze pagina kun je in de repository zelf controleren:


Hoe een wijziging wordt gemerged

Elke wijziging komt via een pull request in main, onder een ruleset die niemand kan omzeilen:

Regel Wat het betekent
Pull request verplicht Er wordt niets rechtstreeks naar main gepusht
Verplichte checks De pull request wordt pas gemerged als elke check hieronder slaagt
Geen force push, geen verwijdering De geschiedenis van main kan niet worden herschreven of verwijderd
Lineaire geschiedenis Elke pull request wordt één commit, zodat elke wijziging afzonderlijk te traceren en terug te draaien is

De checks waaraan een pull request moet voldoen:

Check Wat het doet
Client, Server De unittests van de webinterface en van de server
CodeQL De statische analyse van GitHub op de JavaScript- en TypeScript-code, op injectie, cross-site scripting en andere zwakheden
Public schema is up to date Het databaseschema dat de code verwacht, komt overeen met het schema dat wordt meegeleverd
Title, Branch De pull request volgt de naamgevingsregels, zodat de changelog klopt

Nog twee draaien op elke pull request en rapporteren daarover:

  • Database test de server op MySQL en MariaDB, en Browser bedient de interface in een browser.
  • Dependency review blokkeert een nieuwe afhankelijkheid met een bekende kwetsbaarheid van hoge of kritieke ernst.

Codeanalyse en afhankelijkheden

De code en waarvan die afhangt, worden na het mergen opnieuw gecontroleerd:

  • CodeQL analyseert ook elke push naar main en naar de releasebranches, en elke week de hele codebase: een nieuwe CodeQL-regel controleert dan ook de code die eerder is gemerged.
  • Dependabot opent een pull request voor elke nieuwe versie van een afhankelijkheid: de npm-pakketten van de server en de interface, de Python-pakketten van de runtime-omgeving en de GitHub Actions van de pipelines elke week, en de basisimages van de containers elke dag.
  • De basisimages zijn vastgepind op digest (node:26-trixie-slim@sha256:...), zodat een build precies de gereviewde image gebruikt. Dependabot verplaatst de digest wanneer de image upstream opnieuw wordt gebouwd.

Releases en images

Een release wordt uitsluitend door GitHub Actions gebouwd en gepubliceerd, nooit vanaf de machine van een ontwikkelaar:

  • Een release wordt gemaakt vanaf main (of release/6.x), met een changelog die uit de pull requests wordt opgebouwd.
  • De images worden gebouwd door de Publish-workflow en gepusht naar de GitHub Container Registry, ghcr.io/ansibleforms/ansibleforms, met de images van de runtime-omgeving ernaast. De workflow en zijn logs zijn openbaar, dus iedereen kan zien wat er in een image is gegaan.
  • De images van de applicatie en de runtime-omgeving draaien als de niet-geprivilegieerde gebruiker node (uid 1000), nooit als root.

Ondersteunde versies

Beveiligingsoplossingen komen in de nieuwste release van elke ondersteunde lijn:

Versie Krijgt beveiligingsoplossingen
7.x Ja
6.5.x Ja
Ouder dan 6.5 Nee: upgraden is de oplossing

De upgradehandleiding behandelt de overstap naar een nieuwere release, en Upgraden naar v7 de overstap vanaf 6.5.