Files
ADconsle/docs/CONTRIBUTING.md
kzbkowskiandClaude Sonnet 5 b313c126ce
CI / PHP 8.2 (push) Failing after 1m40s
CI / PHP 8.3 (push) Failing after 55s
CI / PHP 8.4 (push) Failing after 1m11s
Release image / image (push) Successful in 2m33s
ADconsole v1.1.0
Config backup, a Docker dev/prod split, and a Gitea-built release image.

Added
- /settings -> General -> "Configuration backup": JSON export/import of the
  panel's general settings + attribute definitions
  (App\Services\ConfigBackupService); audited as config.export / config.import.
  Export can leave out the attribute-encryption key. No AD data included.
- docker/compose.dev.yaml: live-reload dev stack that bind-mounts the working
  tree. docker/php/Dockerfile is now multi-stage (base -> dev / prod).
- .github/workflows/release.yml: on every vX.Y.Z tag, builds the prod image and
  pushes gitea.kzbikowski.pl/kzbkowski/adconsole:{X.Y.Z,X.Y,latest}.

Changed
- docker/compose.yaml: self-contained prod image (app code + composer install
  --no-dev baked in via COPY); persistent state in docker/data/{app_storage,db};
  defaults to the released image (ADCONSOLE_VERSION pins a tag, ADCONSOLE_IMAGE
  replaces the ref). Apache now honours public/.htaccess (AllowOverride All).
  Run from the repo root with --env-file .env.
- Repo root now holds only README.md; CHANGELOG / CONTRIBUTING / SECURITY /
  CODE_OF_CONDUCT moved under docs/.

Upgrade notes: docs/upgrading.md#v110--docker-layout. Full log: docs/CHANGELOG.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JKT9p3bfP8RZesExdYCS52
2026-09-10 09:13:04 +02:00

2.5 KiB

Contributing to ADconsole

Thanks for helping out. This is a small, focused project — a web UI for everyday Active Directory administration. Contributions that keep it small and sharp are very welcome.

Before you start

Ground rules

  1. No SQL storage for AD objects. All directory reads/writes go through LdapRecord. The database is for app infrastructure and panel_settings only.
  2. Every user-facing string is a translation key in both lang/pl/* and lang/en/*. No inline copy.
  3. Keep it dependency-light. No new runtime Composer/npm package without a clear reason in the issue.
  4. Least privilege. New AD operations must be documented in active-directory.md with the exact right they require.
  5. Security-sensitive by nature — think about what a hostile panel user or a compromised service account could do with your change.

Dev loop

composer install
cp .env.example .env && php artisan key:generate
php artisan migrate
php artisan test
vendor/bin/pint

See development.md for the details (SQLite for dev, the fake ldap guard in tests, the harmless DEPR tag, etc.).

Pull requests

  • Branch from main; keep the PR focused on one thing.
  • Include tests for logic changes. Feature tests may seed caches / fake the guard rather than hitting a real DC (see tests/Feature/DashboardTest.php).
  • Run php artisan test and vendor/bin/pint --test — both must be green (DEPR in the test summary is fine; failed is not).
  • Update the relevant docs/ page and add a CHANGELOG.md entry under Unreleased.
  • Describe the change, the motivation, and any AD permission / migration impact in the PR body.

Reporting bugs

Open an issue with: ADconsole version / commit, PHP version, how it's deployed (Docker / bare metal), the exact error (with APP_DEBUG=true and the relevant storage/logs/laravel.log lines — redact DNs, hostnames and account names), and steps to reproduce.

Security issues

Do not open a public issue — see SECURITY.md.

Licence

By contributing you agree your work is released under the project's MIT Licence.