Files
ADconsle/docs/upgrading.md
T
kzbkowskiandClaude Sonnet 5 1126d96271
CI / PHP 8.2 (push) Failing after 2m46s
CI / PHP 8.3 (push) Failing after 59s
CI / PHP 8.4 (push) Failing after 1m7s
ADconsole v1.0.0
First public release.

- docs: document the audit log, user offboarding, CSV export and the
  "require a reason for destructive actions" setting across README, docs/
  and CLAUDE/AGENTS.md; note retention for panel_audit
- docs: fill the publishing placeholders (repo URL, security contact,
  issue-template links) and add a semantic-versioning policy
- move agent/contributor context into CLAUDE/ (AGENTS.md + a README);
  root CLAUDE.md is now a thin @-import pointer
- add a favicon (shield-lock, matching the login screen) to the login
  page and the app layout
- CHANGELOG: promote [Unreleased] to [1.0.0]; keep the earlier internal
  build as [0.1.0]

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UfuvfwexztdS7LDpGuKsuK
2026-09-08 23:14:39 +02:00

2.9 KiB

Upgrading

Versioning

From v1.0.0 on, releases are semantic git tags vX.Y.Z:

  • MAJOR — incompatible change: a required new .env key, a schema change that is not auto-migrated, or a new AD permission the service account needs. Read this page before upgrading.
  • MINOR — new, backwards-compatible feature. Safe to pull; still run php artisan migrate.
  • PATCH — backwards-compatible fix only.

The latest tag on main is the supported version; there are no long-term-support branches. Per-version notes are under Version notes below and in CHANGELOG.md.

General procedure

# back up the DB first (panel_settings + panel_attributes hold your config)
mysqldump adconsole > adconsole-$(date +%F).sql

git pull            # or fetch a new release
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize:clear
php artisan optimize          # config + route + view + event cache

Docker: docker compose -f docker/compose.yaml up -d --build — the entrypoint runs migrate --force and optimize for you.

Roll back = restore the DB dump and check out the previous revision.

Version notes

Panel configuration moved into the database

Two migrations, both automatic — just run php artisan migrate (the Docker entrypoint does this for you).

  1. create_panel_settings_table — general settings (password policy & generator, reset-dialog defaults, encryption key) move out of the old storage/app/panel_settings.json. The migration imports that file if present and renames it panel_settings.json.migrated.
  2. create_panel_attributes_table — the AD attribute / column definitions move from the JSON blob into their own table, one row per attribute with real columns (key, label, ldap, category, type, is_column, position). The migration copies the existing list across and strips the now-unused attributes (and dead domains / users_table) keys from the panel_settings row.
  • After migrating, open /settings and confirm the General tab and the Attributes tab still show your settings, then delete any storage/app/panel_settings.json.migrated.
  • Fresh installs have empty tables and run on PanelSettingsService::defaults() / defaultAttributes() until you save something.
  • The legacy file and its .migrated rename are git-ignored.

New .env keys

LDAP_SSL, LDAP_TLS_VERIFY, APP_DOMAIN. Existing installs keep working with the defaults (LDAP_SSL=true, LDAP_TLS_VERIFY=false); add explicit values when you next edit .env. See configuration.md.

After any upgrade

  • php artisan test if you carry local patches.
  • Re-check the hardening checklist.
  • Watch storage/logs/laravel.log on the first real use.