feat: DLID licensing system — tables, models, update endpoint #659

Merged
jmiller merged 29 commits from rc into main 2026-06-21 00:18:01 +00:00
Owner

Closes #617, #618, #619, #620, #621 — DLID licensing system Phase 1+2

Closes #617, #618, #619, #620, #621 — DLID licensing system Phase 1+2
jmiller added 9 commits 2026-06-20 22:21:19 +00:00
feat: add licensing tables — license, entitlement, activation, product_tier (#617)
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 3m18s
86bbad9fa1
Migration v359 creates 4 tables for the consumer DLID licensing system:
- license: DLID-based licenses with tier, status, expiry
- license_entitlement: per-license product/repo access mapping
- license_activation: domain tracking with limit enforcement
- product_tier: 13 seeded tiers from base to enterprise

Models in models/licensing/ with CRUD, DLID generation (CRC32 checksum),
entitlement rebuild on tier change, and domain activation with upsert.
feat: add license CRUD, audit logging, status transitions (#618)
Universal: Auto Version Bump / Version Bump (push) Successful in 6s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m46s
7d5eff194d
- RevokeLicense, SuspendLicense, ReactivateLicense convenience methods
- LicenseAuditLog table for tracking status and tier changes
- UpdateLicenseTier now logs old→new tier before rebuilding entitlements
- SetLicenseStatus logs old→new status transitions
feat: add DLID-gated update XML endpoint for Joomla updater (#621)
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 41s
PR RC Release / Build RC Release (pull_request) Failing after 1m13s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 1m23s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 3m6s
Universal: Build & Release / Promote to RC (pull_request) Successful in 23s
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
212b8c9e6d
GET /api/v1/licensing/updates/{product}.xml?dlid=XXX&domain=YYY

Validates DLID format (CRC32), checks license status and entitlement,
auto-activates domain, returns Joomla-compatible update XML from the
entitled repo's stable release. Invalid/expired returns empty <updates/>.
fix: remove invalid SortType field from FindReleasesOptions
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 37s
PR RC Release / Build RC Release (pull_request) Failing after 1m30s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 1m31s
Universal: Auto Version Bump / Version Bump (push) Successful in 6s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m47s
6f6a8b0f2c
jmiller added 1 commit 2026-06-20 22:22:56 +00:00
jmiller added 1 commit 2026-06-20 22:51:37 +00:00
chore: add changelog entries for licensing system and profile aliases
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Branch Policy Check / Verify merge target (pull_request) Successful in 2s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 7s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 35s
PR RC Release / Build RC Release (pull_request) Failing after 53s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 1m5s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 2m30s
ae8b110e89
jmiller added 1 commit 2026-06-20 22:52:42 +00:00
jmiller added 1 commit 2026-06-20 23:04:08 +00:00
chore: trigger PR checks [skip bump]
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 40s
PR RC Release / Build RC Release (pull_request) Failing after 53s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 56s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m36s
c1841a32ce
jmiller added 1 commit 2026-06-20 23:04:43 +00:00
jmiller added 1 commit 2026-06-20 23:11:20 +00:00
refactor: merge 3 PR workflows into pr-check, reduce CI noise
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 6s
Universal: PR Check / Validate PR (pull_request) Successful in 7s
Universal: PR Check / Secret Scan (pull_request) Successful in 35s
PR RC Release / Build RC Release (pull_request) Failing after 36s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m30s
b28fce2328
- Delete pr-branch-check.yml (redundant with pr-check Branch Policy job)
- Move gitleaks PR scan into pr-check.yml as Secret Scan job
- Remove pull_request trigger from ci-generic.yml (irrelevant for Go repo)
- Remove pull_request trigger from gitleaks.yml (keep schedule + dispatch)

Reduces PR-triggered workflows from 7 to 4.
jmiller added 1 commit 2026-06-20 23:12:05 +00:00
jmiller added 1 commit 2026-06-20 23:19:53 +00:00
chore: retrigger CI [skip bump]
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: PR Check / Validate PR (pull_request) Successful in 7s
PR RC Release / Build RC Release (pull_request) Failing after 50s
Universal: PR Check / Secret Scan (pull_request) Successful in 50s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m29s
8a3d16fbd6
jmiller added 1 commit 2026-06-20 23:20:32 +00:00
jmiller added 1 commit 2026-06-20 23:28:20 +00:00
chore: retrigger checks after runner restart [skip bump]
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 13s
Universal: PR Check / Secret Scan (pull_request) Successful in 33s
PR RC Release / Build RC Release (pull_request) Failing after 40s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m44s
5b78a059ed
jmiller added 1 commit 2026-06-20 23:29:05 +00:00
jmiller added 1 commit 2026-06-20 23:32:19 +00:00
chore: trigger PR checks [skip bump]
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Universal: PR Check / Secret Scan (pull_request) Successful in 42s
PR RC Release / Build RC Release (pull_request) Failing after 43s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 2m15s
1d7792ee0f
jmiller force-pushed rc from 4618b04f4b to 1d7792ee0f 2026-06-20 23:32:19 +00:00 Compare
jmiller added 1 commit 2026-06-20 23:33:06 +00:00
jmiller added 1 commit 2026-06-20 23:34:02 +00:00
fix: add [skip bump] guard to pre-release to prevent CI cycle
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 9s
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Has been skipped
Universal: PR Check / Secret Scan (pull_request) Successful in 40s
PR RC Release / Build RC Release (pull_request) Failing after 39s
3002f02b2d
jmiller added 1 commit 2026-06-20 23:57:52 +00:00
chore: retrigger after queue cleanup [skip bump]
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 9s
PR RC Release / Build RC Release (pull_request) Failing after 50s
Universal: PR Check / Secret Scan (pull_request) Successful in 50s
4b6779da3b
jmiller added 1 commit 2026-06-21 00:05:07 +00:00
fix: remove Build RC Package and Report Issues jobs from pr-check (redundant, causes stuck queue)
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Successful in 6s
Universal: PR Check / Validate PR (pull_request) Successful in 8s
Universal: PR Check / Secret Scan (pull_request) Successful in 37s
PR RC Release / Build RC Release (pull_request) Failing after 37s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m37s
407cd2e15d
jmiller added 1 commit 2026-06-21 00:05:56 +00:00
jmiller added 1 commit 2026-06-21 00:09:19 +00:00
chore: final CI trigger [skip bump]
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 7s
PR RC Release / Build RC Release (pull_request) Failing after 45s
Universal: PR Check / Secret Scan (pull_request) Successful in 45s
5f81837fc2
jmiller added 1 commit 2026-06-21 00:15:43 +00:00
Merge remote-tracking branch 'origin/main' into rc
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 15s
Universal: PR Check / Secret Scan (pull_request) Successful in 40s
PR RC Release / Build RC Release (pull_request) Failing after 37s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 4m32s
8d03a4afbc
# Conflicts:
#	.mokogitea/manifest.xml
#	.mokogitea/workflows/issue-branch.yml
#	CHANGELOG.md
jmiller added 1 commit 2026-06-21 00:16:46 +00:00
chore(version): pre-release bump to 06.20.00-rc [skip ci]
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 2m44s
e677c2e0bd
jmiller merged commit 778ec0652a into main 2026-06-21 00:18:01 +00:00
jmiller deleted branch rc 2026-06-21 00:18:02 +00:00
Sign in to join this conversation.