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
2.5 KiB
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
- Read
CLAUDE/AGENTS.md(the architecture in one page) andarchitecture.md. - By participating you agree to the
CODE_OF_CONDUCT.md. - For anything non-trivial, open an issue first so we can agree on the approach.
Ground rules
- No SQL storage for AD objects. All directory reads/writes go through
LdapRecord. The database is for app infrastructure and
panel_settingsonly. - Every user-facing string is a translation key in both
lang/pl/*andlang/en/*. No inline copy. - Keep it dependency-light. No new runtime Composer/npm package without a clear reason in the issue.
- Least privilege. New AD operations must be documented in
active-directory.mdwith the exact right they require. - 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 testandvendor/bin/pint --test— both must be green (DEPRin the test summary is fine;failedis not). - Update the relevant
docs/page and add aCHANGELOG.mdentry 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.