Skip to content

Fix admin defects, enable CI, and improve documentation and deployment#1

Merged
tcheeric merged 37 commits intomainfrom
develop
Dec 31, 2025
Merged

Fix admin defects, enable CI, and improve documentation and deployment#1
tcheeric merged 37 commits intomainfrom
develop

Conversation

@tcheeric
Copy link
Contributor

Description

This pull request includes several fixes, improvements, and a new CI configuration:

Fixes:

  • Corrected domain verification instructions and allowed method changes in admin.
  • Addressed incorrect admin password environment variable bindings.
  • Enabled use of environment variables for admin credentials, replacing hardcoded values.
  • Resolved a 500 error in the domains list caused by mismatched template fields.

Enhancements:

  • Updated docker-compose.yml to use registry images for faster deployments.
  • Refined SQL migration scripts for PostgreSQL conventions, adopting BIGSERIAL.

Documentation:

  • Added E2E testing guide and expanded architecture documentation.

New Feature:

  • Introduced CI configuration with build and E2E testing jobs.

tcheeric and others added 9 commits December 31, 2025 00:14
…L`, update Dockerfiles for exec jars

- Updated SQL migration scripts to use `BIGSERIAL` instead of `BIGINT AUTO_INCREMENT` for consistency with PostgreSQL conventions.
- Updated Dockerfiles to copy exec jar versions of Spring Boot applications (`*-exec.jar`).
Added documentation for running E2E tests with Testcontainers:

- Created docs/how-to/running-e2e-tests.md with:
  - Prerequisites and setup instructions
  - Commands for running all tests and specific test classes
  - Test categories (basic vs integration)
  - Container images used
  - Troubleshooting common issues

- Updated docs/explanation/architecture.md with:
  - Test module structure (bottin-it, bottin-e2e)
  - E2E test infrastructure overview
  - Maven test profiles
  - nsecbunker-java integration tests

- Updated docs/README.md to link new how-to guide

Documentation follows Diataxis framework principles.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The domains.html template was trying to access `domain.records.size()`
but DomainData has `recordCount` (an int field), not a `records` list.

This caused a 500 Internal Server Error when viewing the domains list
in the Admin Dashboard.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated docker-compose.yml to use pre-built images from docker.398ja.xyz
registry instead of building locally. This allows faster deployments
by pulling the latest images.

Changes:
- Use docker.398ja.xyz/bottin-web:latest for bottin-web service
- Use docker.398ja.xyz/bottin-admin-ui:latest for bottin-admin service
- Commented out local build configuration (can be uncommented if needed)
- Removed obsolete version attribute

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The admin security configuration was hardcoding username/password as
admin/admin, ignoring the BOTTIN_ADMIN_USER and BOTTIN_ADMIN_PASSWORD
environment variables set in docker-compose.yml.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change from ${BOTTIN_ADMIN_PASSWORD:admin} to ${bottin.admin.password:admin}
to properly bind the BOTTIN_ADMIN_PASSWORD environment variable via Spring
Boot's relaxed binding.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix incorrect verification paths in domain-detail template:
  - DNS: _bottin-verification.{domain} (not _nostr-verification)
  - File: /.well-known/bottin-verification.txt (not nostr-verification)
- Show correct TXT record value format: bottin-verification={token}
- Display current verification method
- Allow changing method after initial selection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace ./mvnw with mvn since the Maven wrapper is not present in
the repository.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request addresses admin defects, introduces CI/CD configuration, and enhances documentation. It fixes critical issues in the admin UI including domain verification instructions and template field mismatches, enables environment variable configuration for admin credentials, and updates database migrations for PostgreSQL compatibility. The PR also adds comprehensive E2E testing documentation and introduces several GitHub Actions workflows for CI, code formatting, and commit linting.

Key changes:

  • Fixed admin UI defects including domain verification method display and template field corrections
  • Enabled environment-based configuration for admin credentials (replacing hardcoded values)
  • Updated SQL migrations to use PostgreSQL BIGSERIAL instead of MySQL AUTO_INCREMENT

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
docs/how-to/running-e2e-tests.md Added comprehensive guide for running E2E tests with Testcontainers
docs/explanation/architecture.md Expanded architecture documentation with testing module structure
docs/README.md Added link to new E2E testing guide
docker-compose.yml Updated to use registry images for faster deployment
bottin-persistence/src/main/resources/db/migration/V1__initial_schema.sql Changed from MySQL AUTO_INCREMENT to PostgreSQL BIGSERIAL
bottin-persistence/src/main/resources/db/migration/V2__domain_verification_logs.sql Changed from MySQL AUTO_INCREMENT to PostgreSQL BIGSERIAL
bottin-admin-ui/src/main/resources/templates/admin/domains.html Fixed template field from domain.records.size() to domain.recordCount
bottin-admin-ui/src/main/resources/templates/admin/domain-detail.html Updated domain verification instructions to show method-specific guidance
bottin-admin-ui/src/main/java/xyz/tcheeric/bottin/admin/controller/RootRedirectController.java Added controller to redirect root path to admin dashboard
bottin-admin-ui/src/main/java/xyz/tcheeric/bottin/admin/config/AdminSecurityConfig.java Enabled environment variable configuration for admin username and password
Dockerfile.web Updated to copy correct Spring Boot executable JAR (*-exec.jar)
Dockerfile.admin Updated to copy correct Spring Boot executable JAR (*-exec.jar)
.github/workflows/ci.yml Added CI workflow with build and E2E test jobs
.github/workflows/qodana.yml Added Qodana code quality analysis workflow
.github/workflows/google-java-format.yml Added Java code formatting workflow
.github/workflows/enforce_conventional_commits.yml Added conventional commit message enforcement
.github/pull_request_template.md Added PR template with standard sections
.github/dependabot.yml Added Dependabot configuration for Maven and GitHub Actions
.github/copilot-instructions.md Added GitHub Copilot instructions for the repository
Comments suppressed due to low confidence (1)

docker-compose.yml:48

  • The environment variable name BOTTIN_ADMIN_USER in docker-compose.yml does not match the property name expected by AdminSecurityConfig. The config reads from bottin.admin.username (line 27), but the environment variable BOTTIN_ADMIN_USER would map to bottin.admin.user in Spring Boot's relaxed binding. The environment variable should be renamed to BOTTIN_ADMIN_USERNAME to properly match the property bottin.admin.username.
      - BOTTIN_ADMIN_USER=${BOTTIN_ADMIN_USER:-admin}
      - BOTTIN_ADMIN_PASSWORD=${BOTTIN_ADMIN_PASSWORD:-changeme}
      - BOTTIN_DEFAULT_DOMAIN=${BOTTIN_DEFAULT_DOMAIN:-}
      - BOTTIN_API_DOCS_ENABLED=${BOTTIN_API_DOCS_ENABLED:-false}
      - BOTTIN_SWAGGER_ENABLED=${BOTTIN_SWAGGER_ENABLED:-false}
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    networks:
      - bottin-network

  bottin-admin:
    image: docker.398ja.xyz/bottin-admin-ui:latest
    # To build locally instead, uncomment:
    # build:
    #   context: .
    #   dockerfile: Dockerfile.admin
    container_name: bottin-admin
    ports:
      - "${BOTTIN_ADMIN_PORT:-8081}:8081"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - BOTTIN_DATABASE_URL=jdbc:postgresql://postgres:5432/bottin
      - BOTTIN_DATABASE_USER=bottin
      - BOTTIN_DATABASE_PASSWORD=${BOTTIN_DATABASE_PASSWORD:-bottin}
      - BOTTIN_ADMIN_USER=${BOTTIN_ADMIN_USER:-admin}

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI commented Dec 31, 2025

@tcheeric I've opened a new pull request, #2, to work on those changes. Once the pull request is ready, I'll request review from you.

@github-actions
Copy link

github-actions bot commented Dec 31, 2025

Qodana for JVM

146 new problems were found

Inspection name Severity Problems
Vulnerable declared dependency 🔴 Failure 10
Invalid YAML configuration 🔴 Failure 4
Vulnerable declared dependency 🔶 Warning 60
Unresolved view reference 🔶 Warning 4
Invalid YAML configuration 🔶 Warning 2
Vulnerable declared dependency ◽️ Notice 64
Non-distinguishable logging calls ◽️ Notice 2

☁️ View the detailed Qodana report

Detected 118 dependencies

Third-party software list

This page lists the third-party software dependencies used in project

Dependency Version Licenses
angus-activation 2.0.2 BSD-3-Clause
antlr4-runtime 4.13.0 BSD-3-Clause
aspectjweaver 1.9.22.1 Apache-2.0
attoparser 2.0.7.release Apache-2.0
bcprov-jdk18on 1.81 MIT
byte-buddy 1.15.11 Apache-2.0
caffeine 3.1.8 Apache-2.0
checker-qual 3.37.0 MIT
checker-qual 3.42.0 MIT
classmate 1.7.0 Apache-2.0
commons-lang3 3.17.0 Apache-2.0
dnsjava 3.6.0 BSD-3-Clause
error_prone_annotations 2.21.1 Apache-2.0
error_prone_annotations 2.27.0 Apache-2.0
flyway-core 10.10.0 Apache-2.0
flyway-database-postgresql 10.10.0 Apache-2.0
gson 2.11.0 Apache-2.0
h2 2.2.224 EPL-1.0
MPL-2.0
hdrhistogram 2.2.2 BSD-2-Clause
hikaricp 5.1.0 Apache-2.0
istack-commons-runtime 4.1.2 BSD-3-Clause
jackson-annotations 2.18.2 Apache-2.0
jackson-core 2.18.2 Apache-2.0
jackson-databind 2.18.2 Apache-2.0
jackson-dataformat-toml 2.18.2 OML
jackson-dataformat-yaml 2.18.2 AML
jackson-datatype-jdk8 2.18.2 Apache-2.0
jackson-datatype-jsr310 2.18.2 Apache-2.0
jackson-module-blackbird 2.18.2 BSD-3-CLAUSE-NO-TRADEMARK
jackson-module-parameter-names 2.18.2 Apache-2.0
jakarta.activation-api 2.1.3 BSD-3-Clause
jakarta.annotation-api 2.1.1 Classpath-exception-2.0
EPL-2.0
GPL-2.0-only
jakarta.inject-api 2.0.1 Apache-2.0
jakarta.persistence-api 3.1.0 BSD-3-Clause
EPL-2.0
jakarta.transaction-api 2.0.1 Classpath-exception-2.0
EPL-2.0
GPL-2.0-only
jakarta.validation-api 3.0.2 Apache-2.0
jakarta.xml.bind-api 4.0.2 BSD-3-Clause
jandex 3.2.0 Apache-2.0
jaxb-core 4.0.5 BSD-3-Clause
jaxb-runtime 4.0.5 BSD-3-Clause
jboss-logging 3.6.1.final Apache-2.0
jul-to-slf4j 2.0.16 MIT
latencyutils 2.0.3 CC0-1.0
log4j-api 2.24.3 Apache-2.0
log4j-to-slf4j 2.24.3 Apache-2.0
logback-classic 1.4.14 EPL-1.0
LGPL-2.0-or-later
logback-core 1.5.12 EPL-1.0
LGPL-2.0-or-later
lombok 1.18.32 BSD-3-CLAUSE-NO-TRADEMARK
MIT
micrometer-commons 1.14.2 Apache-2.0
micrometer-core 1.14.2 Apache-2.0
micrometer-jakarta9 1.14.2 Apache-2.0
micrometer-observation 1.14.2 Apache-2.0
netty-common 4.1.116.final Apache-2.0
nostr-java-base 1.2.0 MIT
nostr-java-crypto 1.2.0 MIT
nostr-java-event 1.2.0 MIT
nostr-java-id 1.2.0 MIT
nostr-java-util 1.2.0 MIT
postgresql 42.7.3 BSD-2-Clause
reactive-streams 1.0.4 MIT-0
reactor-core 3.7.1 Apache-2.0
reactor-netty-core 1.2.1 Apache-2.0
reactor-netty-http 1.2.1 Apache-2.0
slf4j-api 2.0.12 MIT
snakeyaml 2.3 Apache-2.0
spring-aop 6.2.1 Apache-2.0
spring-aspects 6.2.1 Apache-2.0
spring-beans 6.2.1 Apache-2.0
spring-boot-actuator-autoconfigure 3.4.1 Apache-2.0
spring-boot-actuator 3.4.1 Apache-2.0
spring-boot-autoconfigure 3.4.1 Apache-2.0
spring-boot-configuration-processor 3.4.1 Apache-2.0
spring-boot-starter-actuator 3.4.1 Apache-2.0
spring-boot-starter-cache 3.4.1 Apache-2.0
spring-boot-starter-data-jpa 3.4.1 Apache-2.0
spring-boot-starter-jdbc 3.4.1 Apache-2.0
spring-boot-starter-json 3.4.1 Apache-2.0
spring-boot-starter-logging 3.4.1 Apache-2.0
spring-boot-starter-reactor-netty 3.4.1 Apache-2.0
spring-boot-starter-security 3.4.1 Apache-2.0
spring-boot-starter-thymeleaf 3.4.1 Apache-2.0
spring-boot-starter-tomcat 3.4.1 Apache-2.0
spring-boot-starter-validation 3.4.1 Apache-2.0
spring-boot-starter-web 3.4.1 Apache-2.0
spring-boot-starter-webflux 3.4.1 Apache-2.0
spring-boot-starter 3.4.1 Apache-2.0
spring-boot 3.4.1 Apache-2.0
spring-context-support 6.2.1 Apache-2.0
spring-context 6.2.1 Apache-2.0
spring-core 6.2.1 Apache-2.0
spring-data-commons 3.4.1 Apache-2.0
spring-data-jpa 3.4.1 Apache-2.0
spring-expression 6.2.1 Apache-2.0
spring-jcl 6.2.1 Apache-2.0
spring-jdbc 6.2.1 Apache-2.0
spring-orm 6.2.1 Apache-2.0
spring-security-config 6.4.2 Apache-2.0
spring-security-core 6.4.2 Apache-2.0
spring-security-crypto 6.4.2 Apache-2.0
spring-security-web 6.4.2 Apache-2.0
spring-tx 6.2.1 Apache-2.0
spring-web 6.2.1 Apache-2.0
spring-webflux 6.2.1 Apache-2.0
spring-webmvc 6.2.1 Apache-2.0
springdoc-openapi-starter-common 2.4.0 Apache-2.0
springdoc-openapi-starter-webmvc-api 2.4.0 Apache-2.0
springdoc-openapi-starter-webmvc-ui 2.4.0 Apache-2.0
swagger-annotations-jakarta 2.2.20 Apache-2.0
swagger-core-jakarta 2.2.20 Apache-2.0
swagger-models-jakarta 2.2.20 Apache-2.0
swagger-ui 5.11.8 Apache-2.0
thymeleaf-extras-springsecurity6 3.1.3.release Apache-2.0
thymeleaf-spring6 3.1.3.release Apache-2.0
tomcat-embed-core 10.1.34 Apache-2.0
CDDL-1.0
PROPRIETARY-LICENSE
tomcat-embed-el 10.1.34 Apache-2.0
tomcat-embed-websocket 10.1.34 Apache-2.0
txw2 4.0.5 BSD-3-Clause
unbescape 1.1.6.release Apache-2.0
Contact Qodana team

Contact us at qodana-support@jetbrains.com

tcheeric and others added 15 commits December 31, 2025 14:14
Replace incorrect Cashu reference with Bottin/NIP-05/Nostr context.
Add Spring Boot and NIP-05 guidelines.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Link to NIP-05 specification on GitHub
- Reference .commitlintrc.yml for commit message rules
- Reorganize into sections for better readability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace BIGINT AUTO_INCREMENT with BIGSERIAL in SQL migration scripts.
Update Dockerfiles to copy executable jar versions of Spring Boot apps.
Added documentation for running E2E tests with Testcontainers:

- Created docs/how-to/running-e2e-tests.md with:
  - Prerequisites and setup instructions
  - Commands for running all tests and specific test classes
  - Test categories (basic vs integration)
  - Container images used
  - Troubleshooting common issues

- Updated docs/explanation/architecture.md with:
  - Test module structure (bottin-it, bottin-e2e)
  - E2E test infrastructure overview
  - Maven test profiles
  - nsecbunker-java integration tests

- Updated docs/README.md to link new how-to guide

Documentation follows Diataxis framework principles.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The domains.html template was trying to access `domain.records.size()`
but DomainData has `recordCount` (an int field), not a `records` list.

This caused a 500 Internal Server Error when viewing the domains list
in the Admin Dashboard.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated docker-compose.yml to use pre-built images from docker.398ja.xyz
registry instead of building locally. This allows faster deployments
by pulling the latest images.

Changes:
- Use docker.398ja.xyz/bottin-web:latest for bottin-web service
- Use docker.398ja.xyz/bottin-admin-ui:latest for bottin-admin service
- Commented out local build configuration (can be uncommented if needed)
- Removed obsolete version attribute

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The admin security configuration was hardcoding username/password as
admin/admin, ignoring the BOTTIN_ADMIN_USER and BOTTIN_ADMIN_PASSWORD
environment variables set in docker-compose.yml.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change from ${BOTTIN_ADMIN_PASSWORD:admin} to ${bottin.admin.password:admin}
to properly bind the BOTTIN_ADMIN_PASSWORD environment variable via Spring
Boot's relaxed binding.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix incorrect verification paths in domain-detail template:
  - DNS: _bottin-verification.{domain} (not _nostr-verification)
  - File: /.well-known/bottin-verification.txt (not nostr-verification)
- Show correct TXT record value format: bottin-verification={token}
- Display current verification method
- Allow changing method after initial selection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace ./mvnw with mvn since the Maven wrapper is not present in
the repository.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace incorrect Cashu reference with Bottin/NIP-05/Nostr context.
Add Spring Boot and NIP-05 guidelines.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Link to NIP-05 specification on GitHub
- Reference .commitlintrc.yml for commit message rules
- Reorganize into sections for better readability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Upgrade axel-op/googlejavaformat-action from v4 to v5
- Update JDK from 17 to 21 for project consistency
- Update actions/setup-java from v4 to v5

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Correct contradiction: E2E tests use PostgreSQL via Testcontainers,
not H2 in-memory as previously stated.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
tcheeric and others added 13 commits December 31, 2025 14:26
# Conflicts:
#	.github/workflows/google-java-format.yml
#	docs/how-to/running-e2e-tests.md
v5 does not exist; revert to v4 while keeping JDK 21.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace detailed API endpoint tables in README with summary and link
to docs/reference/rest-api.md to avoid duplication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace gateway-plugin references (from different project) with actual
Bottin E2E tests:
- Use bottin-tests/bottin-e2e module
- Use -Pe2e Maven profile
- Remove Phoenix/autopay environment variables
- Testcontainers handles infrastructure (no docker-compose needed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
E2E tests require Docker and Testcontainers which may not be suitable
for CI environment. Run E2E tests locally with: mvn -Pe2e test

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix potential null pointer in GlobalExceptionHandler.java:107
  when getSupportedMethods() returns null
- Upgrade Spring Boot 3.2.4 → 3.4.1 to fix multiple CVEs:
  - Tomcat CVE-2024-52316 (9.8), CVE-2025-24813 (9.8)
  - Spring Security CVE-2024-38821 (9.1)
  - Spring Framework CVE-2024-22262 (8.1)
  - And many other transitive dependency vulnerabilities
- Upgrade dnsjava 3.5.3 → 3.6.0 to fix CVE-2024-25638 (8.9)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Address Qodana LoggingSimilarMessage findings by making log messages
unique:

ExternalNip05Verifier.java:
- Differentiate cached vs nocache verification paths
- external_nip05_cached_* for verify() method
- external_nip05_nocache_* for verifyNoCache() method

DomainController.java:
- Differentiate body vs path parameter verification endpoints
- verification_*_via_body for POST /{id}/verify with request body
- verification_*_via_path for POST /{id}/verify/{method}

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update project version from 0.1.0-SNAPSHOT to 0.1.0 across all
modules and documentation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Configure jib-maven-plugin to automatically push Docker images to
docker.398ja.xyz when running `mvn deploy` for bottin-web and
bottin-admin-ui modules.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document that `mvn deploy` now automatically pushes Docker images
to the registry. Add credentials configuration example and reorganize
the Jib section to highlight the recommended workflow.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove unused conversion methods (toNip05Record, fromNip05Record) from
Nip05RecordData and the nsecbunker-account dependency from bottin-core.

The nsecbunker integration is now entirely contained in
bottin-spring-boot-starter, which implements the SPI interfaces
directly from entity conversions. This keeps bottin-core independent
of external integration concerns.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add @Profile("!e2e") to SecurityConfig to prevent it from loading
during E2E tests, avoiding conflict with TestSecurityConfig. Also
add explicit PostgreSQLDialect to e2e config for proper DDL
generation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update README.md:
- Update Docker build section for mvn deploy workflow
- Add -DskipE2ETests=false flag to E2E test command
- Fix DNS TXT record path to match actual service behavior

Fix verification instructions consistency:
- Update VerificationChallenge to use _bottin-verification. prefix
- Update VerificationMethod enum DNS location
- Update VerificationFailedException suggestion message
- All now match DnsVerificationService actual behavior

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@tcheeric tcheeric merged commit 959eef1 into main Dec 31, 2025
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants