Ga naar hoofdinhoud

Contributing to Conduction

Thank you for your interest in contributing! Conduction builds open-source components for digital government infrastructure. Every contribution — code, documentation, translation, issue report, or idea — helps us move toward our goal: ensuring every resident of the Netherlands automatically receives the government services they are entitled to.

This document applies to all repositories under the ConductionNL organization.

Code of Conduct

This project is governed by our Code of Conduct(ion). By participating, you are expected to uphold this code. Please report unacceptable behavior to info@conduction.nl.

Ways to Contribute

You don't need to write code to contribute:

Contribution typeWhere
Report a bugGitHub Issues
Suggest a featureGitHub Issues
Improve documentationPR to the relevant repo
Translate contentPR to .github (docs site)
Review a pull requestGitHub PR review
Answer questionsGitHub Discussions / Issues
Report a security issueSee Security Policy

First-Time Contributors

New to open source or to Conduction? Look for issues labeled good first issue — these are scoped to be approachable without deep context.

If you're unsure where to start, open a discussion or leave a comment on an issue you're interested in. We'll help you get oriented.

Reporting Bugs

Before filing a bug report, check existing issues — it may already be reported. When creating a report, include:

  • A clear, descriptive title
  • Exact steps to reproduce the problem
  • Expected vs actual behavior
  • Screenshots, logs, or error messages where relevant
  • Version of the app and Nextcloud (if applicable)

For security issues, do NOT open a public issue. See Security Policy.

Suggesting Enhancements

Enhancement suggestions are tracked as GitHub Issues. Include:

  • A clear, descriptive title
  • The problem you are trying to solve (not just the solution)
  • Current behavior vs desired behavior
  • Why this would be useful to others

Contributing Code

External contributors (fork & PR)

  1. Fork the repository
  2. Create a branch from development: git checkout -b feature/your-feature-name
  3. Make your changes and commit using Conventional Commits
  4. Sign off your commits (see DCO)
  5. Push to your fork and open a PR targeting the development branch
  6. Wait for CI to pass and request a review

Conduction team members (direct branch)

  1. Create a branch from development: feature/*, bugfix/*
  2. Open a PR to development when ready

PR checklist

Before opening a PR:

  • CI quality checks pass locally (composer cs:check, composer phpstan, npm run lint)
  • New code has tests where applicable
  • Documentation updated if behavior changes
  • PR labeled with major, minor, or patch (controls version bump)
  • DCO sign-off on all commits (git commit -s)

Branch Model

All branches are protected via organization-wide rulesets. Direct pushes are not allowed. Every change flows through a pull request with peer review and CI.

feature/* ──┐
bugfix/* ──┼──→ development ──→ beta ──→ main
hotfix/* ──┘ ↑
└── (hotfix can target beta or main directly)
TargetAllowed sourcesReviews requiredCI required
developmentfeature/*, bugfix/*1Quality CI
betadevelopment, hotfix/*1Quality CI
mainbeta, hotfix/*2Branch Protection CI

All rulesets enforce: no force pushes, no branch deletion, stale reviews dismissed on new pushes, all threads resolved before merge.

Quality Workflow

Every PR triggers automated quality checks. All must pass before merge.

PHP

CheckTool
Syntaxphp -l
Code stylePHPCS (PSR-12)
Static analysisPHPStan (level 5) + Psalm
Mess detectionPHPMD

Frontend

CheckTool
JavaScript/VueESLint
CSS/SCSSStylelint

Dependencies

  • License compliance (npm + composer)
  • Known vulnerability scan (npm audit + composer audit)

Run locally:

# PHP
composer cs:check
composer cs:fix
composer phpstan
composer psalm
composer phpmd

# Frontend
npm run lint
npx stylelint "src/**/*.{css,scss,vue}"

Commit Messages

We use Conventional Commits:

feat: add proactive service matching
fix: resolve null pointer in namespace parser
docs: update contributing guide
chore: upgrade PHPStan to v2
refactor: extract classifier into own class
  • Use the imperative mood ("add" not "added")
  • Keep the first line under 72 characters
  • Reference issues with Closes #123 in the body where applicable

Developer Certificate of Origin (DCO)

All contributions must be signed off. This certifies that you wrote the code or have the right to submit it:

git commit -s -m "feat: your commit message"

This adds a Signed-off-by: Your Name <your@email.com> trailer. By signing off, you agree to the Developer Certificate of Origin.

If you forget, amend your last commit: git commit --amend -s

Release Process

Releases are fully automated via GitHub Actions on merge to beta (nightly) or main (stable). Version numbers are calculated from PR labels:

LabelEffect
major1.0.02.0.0
minor1.0.01.1.0
patch (default)1.0.01.0.1

See Release Process for full details.

Development Setup

  1. Install PHP 8.1+ and Node.js 20+
  2. Install Composer
  3. Clone the repository (or your fork)
  4. Run composer install && npm install
  5. Configure your Nextcloud development environment

Documentation

Documentation source lives in website/ (this repo) and is published to docs.conduction.nl.

To contribute to the docs:

  1. Edit the relevant Markdown files under website/docs/
  2. For Dutch translations, edit the corresponding file under website/i18n/nl/
  3. Test locally: cd website && npm install && npm run start

Community

License

By contributing, you agree that your contributions will be licensed under the same license as the project (EUPL-1.2 unless stated otherwise in the repository).