Files
kzbkowskiandClaude Sonnet 5 2b970226fc
CI / PHP 8.4 (push) Failing after 1m5s
ci: require PHP 8.4, test 8.4 only
composer.lock already pins packages that need PHP >= 8.4.1 (symfony/* v8,
nesbot/carbon 3, laravel/pint), so `composer install` on the 8.2 / 8.3 CI
legs has been failing since v1.0.0. Bump composer.json to "php": "^8.4",
regenerate the lock platform block, drop 8.2 / 8.3 from the ci.yml matrix,
and update the "PHP 8.2+" references in the docs. The Docker image was
already php:8.4-apache.

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

106 lines
4.4 KiB
Markdown

# Publishing ADconsole to a Git host
How this working tree was turned into the public repository, and the checklist to
follow if you re-publish it somewhere else (a fork, a mirror, a different host).
**Canonical repository:** <https://gitea.kzbikowski.pl/kzbkowski/ADconsle>
(self-hosted Gitea). The first public tag is **`v1.0.0`**.
## 1. Placeholders — all filled for the canonical repo
If you re-publish under a different owner/host, revisit these:
| File | Was | Now / put |
|---|---|---|
| `README.md`, `docs/installation.md`, `docs/development.md` | `<your-fork-url>` in the `git clone` lines | `https://gitea.kzbikowski.pl/kzbkowski/ADconsle.git` |
| `docs/SECURITY.md` | `<SET A SECURITY CONTACT HERE>` | `mail@kzbikowski.pl` |
| `.github/ISSUE_TEMPLATE/config.yml` | `https://github.com/OWNER/REPO/...` | The repo's Gitea issue/wiki URLs |
| `LICENSE` | `2026 Kacper Żbikowski` | Copyright year + holder, if different |
| `lang/{pl,en}/pages.php` → `author.*` | `Kacper Żbikowski` | Author/maintainer shown on the in-app *About* page |
| `composer.json` | `adconsole/adconsole` | Your package name (optional; nothing depends on it) |
`tests/Feature/Pages/AboutPageTest.php` asserts the author name and
`Copyright (c) <year> <name>` — if you change `pages.php` `author`, update that
test too.
## 2. Confirm nothing sensitive is tracked
Everything below is already covered by `.gitignore` / `.dockerignore` — verify
none of it slipped in:
- `.env`, `.env.backup`, `.env.production`, `.env.*.local`
- `storage/app/panel_settings.json` and `*.migrated`
- `vendor/`, `node_modules/`, `public/build/`, `public/hot/`
- `storage/` runtime (logs, sessions, framework cache) — only the `.gitignore`
keep-files should be tracked
- `docker/compose.override.yaml`, `docker/compose.dev.override.yaml`
- `docker/data/` (production DB + storage state)
- IDE / agent dirs (`.idea/`, `.vscode/`, `.claude/`, …)
```sh
# Dry-run: what would a fresh repo add?
git init -q _probe && git --git-dir=_probe/.git --work-tree=. add -An | grep -Ei '(^add ...env$|vendor/|node_modules/|storage/(logs|framework)/.+/|panel_settings\.json)'
rm -rf _probe
# No output = clean.
```
Also grep for lab-specific values before the first push:
```sh
grep -rniE 'YOUR-DOMAIN|internal-hostname|real-ip' --exclude-dir=vendor --exclude-dir=node_modules .
```
## 3. Green build
```sh
composer install
cp .env.example .env && php artisan key:generate
php artisan migrate # against a throwaway SQLite/MySQL
php artisan test # 40+ pass (the DEPR tag is noise)
vendor/bin/pint --test # style clean
```
## 4. Create the repository
This tree started life inside an unrelated parent checkout, so it is published as
a fresh repo scoped to just this folder:
```sh
cd /path/to/adconsole
git init -b main
git add .
git status # sanity-check the file list
git commit -m "ADconsole v1.0.0"
git remote add origin https://gitea.kzbikowski.pl/kzbkowski/ADconsle.git
git push -u origin main
git tag -a v1.0.0 -m "ADconsole v1.0.0"
git push origin v1.0.0
```
## 5. On the Git host
- Set the repository **description** and topics: `active-directory`, `ldap`,
`laravel`, `ldaprecord`, `admin-panel`, `self-hosted`.
- Enable **Issues**. Point the "Question / help" contact link at the repo's
issues (Gitea has no Discussions).
- The workflows in `.github/workflows/` are read by Gitea Actions if Actions is
enabled on the instance (otherwise harmless):
- `ci.yml` — Pint + PHPUnit on PHP 8.4, on every push / PR.
- `release.yml` — on a `vX.Y.Z` tag, builds `docker/php/Dockerfile` target
`prod` and pushes `…/adconsole:{X.Y.Z, X.Y, latest}` to the instance's
container registry. Needs `packages: write`; if the built-in token can't
push, add a `REGISTRY_TOKEN` repo secret. Adjust `REGISTRY` / `IMAGE_NAME`
in the workflow (and the default in `docker/compose.yaml`) for a different
host or owner.
- Release: `git tag -a vX.Y.Z -m "ADconsole vX.Y.Z" && git push origin vX.Y.Z`
(that fires `release.yml`), then cut a **release** from the tag on the Git host
and paste the matching `docs/CHANGELOG.md` section as the notes.
## 6. First-deploy sanity (for whoever installs it)
Point them at [`installation.md`](installation.md) (bare metal) or
[`deployment.md`](deployment.md) (Docker), and
[`active-directory.md`](active-directory.md) for the service account and
delegation. [`troubleshooting.md`](troubleshooting.md) covers the usual
first-run stumbles.