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
2.9 KiB
2.9 KiB
Upgrading
Versioning
From v1.0.0 on, releases are semantic git tags
vX.Y.Z:
- MAJOR — incompatible change: a required new
.envkey, 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).
create_panel_settings_table— general settings (password policy & generator, reset-dialog defaults, encryption key) move out of the oldstorage/app/panel_settings.json. The migration imports that file if present and renames itpanel_settings.json.migrated.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-unusedattributes(and deaddomains/users_table) keys from thepanel_settingsrow.
- After migrating, open
/settingsand confirm the General tab and the Attributes tab still show your settings, then delete anystorage/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
.migratedrename 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 testif you carry local patches.- Re-check the hardening checklist.
- Watch
storage/logs/laravel.logon the first real use.