Loading
Add audit events for Pages Domains lifecycle
What does this MR do and why?
Add audit events for Pages Domains lifecycle to allow group, project, or instance administrators to have an audit trail for domain management. This is especially important for .com as verified domains are used for Enterprise users.
References
Screenshots or screen recordings
| Before | After |
|---|---|
![]() |
How to set up and validate locally
- Simulate SaaS
GITLAB_SIMULATE_SAAS=1 - Enable pages with custom domains
- Enable the Let’s Encrypt integration
- Ensure the group has a subscription
- Run the following snippet to simulate all events and emit audit events in a project
-
Click to expand
user = User.first group = Group.first # Create a project attrs = { path: 'domain-verification', namespace_id: group.id } project = ::Projects::CreateService.new(user, attrs).execute # Stub the TXT lookup instead of hitting real DNS def verify(domain, user, dns:) svc = VerifyPagesDomainService.new(domain, user) svc.define_singleton_method(:dns_record_present?) { dns } svc.execute end def create(project, user, host) Pages::Domains::CreateService.new(project, user, domain: host).execute end # pages_domain_created domain = create(project, user, 'example.com') # pages_domain_updated (empty params is a valid no-op update that still persists) Pages::Domains::UpdateService.new(project, user, {}).execute(domain) # pages_domain_deleted Pages::Domains::DeleteService.new(project, user, nil).execute(domain) # pages_domain_enabled to_enable = create(project, user, 'enabled.example.com') verify(to_enable, user, dns: true) # pages_domain_verification_succeeded: already enabled, but unverified to_reverify = create(project, user, 'succeeded.example.com') to_reverify.update_columns(verified_at: nil, enabled_until: 1.week.from_now) verify(to_reverify, user, dns: true) # pages_domain_verification_failed: verified, still in grace period, stops resolving verified = create(project, user, 'verified.example.com') verified.update_columns(verified_at: Time.current, enabled_until: 1.week.from_now) verify(verified, user, dns: false) # pages_domain_disabled: expired domain that no longer resolves expired = create(project, user, 'expired.example.com') expired.update_columns(verified_at: 1.week.ago, enabled_until: 1.day.ago) verify(expired, user, dns: false)
-
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Edited by Jio Castillo
