Skip to content

Feat/keycloak#43

Merged
igorcampos-dev merged 4 commits intomasterfrom
feat/keycloak
Aug 2, 2025
Merged

Feat/keycloak#43
igorcampos-dev merged 4 commits intomasterfrom
feat/keycloak

Conversation

@igorcampos-dev
Copy link
Copy Markdown
Owner

@igorcampos-dev igorcampos-dev commented Aug 2, 2025

Summary by CodeRabbit

  • New Features

    • Introduced a new Spring Boot project demonstrating integration with Keycloak for authentication.
    • Added Docker and Docker Compose support for easy local setup of the application and Keycloak server.
    • Provided Maven Wrapper scripts for simplified build and dependency management.
    • Included example configuration files for development and production environments.
    • Added automated CI workflow for building, testing, and health checking the new project.
  • Chores

    • Updated project structure and configuration to include the new module.
    • Added documentation and certificate files for Keycloak TLS setup.
    • Improved label automation and dependency upgrade detection for repository management.

@igorcampos-dev igorcampos-dev reopened this Aug 2, 2025
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Aug 2, 2025

Walkthrough

This change introduces a new spring-keycloak-example module to the project. It adds all supporting files for the module, including Maven configuration, Docker and Docker Compose setup, Keycloak TLS assets, application source and resource files, and Maven wrapper scripts. The PR also updates the main project POM and GitHub configuration to recognize and support the new module, including CI workflows and labeler rules.

Changes

Cohort / File(s) Change Summary
GitHub Labeler and CI
.github/labeler.yml, .github/workflows/spring-keycloak-example.yml
Adds a new project label and updates dependency-upgrade label patterns; introduces a new CI workflow for the spring-keycloak-example module with integration tests and health checks.
Project POM
pom.xml
Registers spring-keycloak-example as a new Maven module in the multi-module project.
Module Ignore/Attributes
spring-keycloak-example/.dockerignore, spring-keycloak-example/.gitattributes, spring-keycloak-example/.gitignore
Adds standard ignore and attributes files for Docker, Git, and line endings in the new module.
Maven Wrapper
spring-keycloak-example/.mvn/wrapper/maven-wrapper.properties, spring-keycloak-example/mvnw, spring-keycloak-example/mvnw.cmd
Adds Maven wrapper properties and scripts for cross-platform Maven builds in the new module.
Docker Setup
spring-keycloak-example/Dockerfile, spring-keycloak-example/Dockerfile.keycloak, spring-keycloak-example/compose.yaml
Provides Dockerfiles for the app and Keycloak, and a Docker Compose file defining both services for local development and testing.
Keycloak TLS Assets
spring-keycloak-example/docker/keycloak/cert-info.md, spring-keycloak-example/docker/keycloak/tls.crt, spring-keycloak-example/docker/keycloak/tls.key
Adds documentation and files for manually generated TLS certificates used by Keycloak in the Docker setup.
Module Maven Config
spring-keycloak-example/pom.xml
Adds a new Maven POM configuring dependencies, plugins, and metadata for the Spring Boot + Keycloak example module.
Application Source
spring-keycloak-example/src/main/java/com/io/example/SpringKeycloakExampleApplication.java
Adds the main Spring Boot application class for the new module.
Application Resources
spring-keycloak-example/src/main/resources/application.yml, spring-keycloak-example/src/main/resources/application-dev.yml, spring-keycloak-example/src/main/resources/banner.txt
Adds main and development YAML configuration files and a banner for the Spring Boot application.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~18 minutes

Possibly related PRs

Suggested labels

ci: github-actions

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/keycloak

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 14

🔭 Outside diff range comments (3)
spring-keycloak-example/docker/keycloak/cert-info.md (1)

1-8: Add top-level heading and tidy code-block spacing

Current file violates MD041 and minor spacing rules.

-TLS Certificates for Keycloak
+# TLS certificates for Keycloak

 These certificates were manually generated using the following command:
 
 ```bash
 openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodes \
   -subj "/CN=localhost"

</blockquote></details>
<details>
<summary>spring-keycloak-example/.gitignore (1)</summary><blockquote>

`1-33`: **Minor: redundant ignore rules overlap with the repo-root `.gitignore`**  
`target/`, `.idea`, `.vscode/`, etc., are already globally ignored in the root file. Keeping them here is harmless but slightly increases maintenance cost if the top-level list changes.

</blockquote></details>
<details>
<summary>spring-keycloak-example/Dockerfile (1)</summary><blockquote>

`1-48`: **Consider adding HEALTHCHECK instruction.**

Adding a HEALTHCHECK improves container orchestration and monitoring capabilities.


Add a health check after the EXPOSE directive:
```diff
 EXPOSE 8080
+
+HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
+  CMD ["java", "-cp", ".", "org.springframework.boot.loader.launch.PropertiesLauncher", "health"] \
+  || exit 1
 
 ENTRYPOINT [ "java", "org.springframework.boot.loader.launch.JarLauncher" ]

Alternatively, if your application exposes a health endpoint:

HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5e12997 and 8292e7e.

📒 Files selected for processing (20)
  • .github/labeler.yml (1 hunks)
  • .github/workflows/spring-keycloak-example.yml (1 hunks)
  • pom.xml (1 hunks)
  • spring-keycloak-example/.dockerignore (1 hunks)
  • spring-keycloak-example/.gitattributes (1 hunks)
  • spring-keycloak-example/.gitignore (1 hunks)
  • spring-keycloak-example/.mvn/wrapper/maven-wrapper.properties (1 hunks)
  • spring-keycloak-example/Dockerfile (1 hunks)
  • spring-keycloak-example/Dockerfile.keycloak (1 hunks)
  • spring-keycloak-example/compose.yaml (1 hunks)
  • spring-keycloak-example/docker/keycloak/cert-info.md (1 hunks)
  • spring-keycloak-example/docker/keycloak/tls.crt (1 hunks)
  • spring-keycloak-example/docker/keycloak/tls.key (1 hunks)
  • spring-keycloak-example/mvnw (1 hunks)
  • spring-keycloak-example/mvnw.cmd (1 hunks)
  • spring-keycloak-example/pom.xml (1 hunks)
  • spring-keycloak-example/src/main/java/com/io/example/SpringKeycloakExampleApplication.java (1 hunks)
  • spring-keycloak-example/src/main/resources/application-dev.yml (1 hunks)
  • spring-keycloak-example/src/main/resources/application.yml (1 hunks)
  • spring-keycloak-example/src/main/resources/banner.txt (1 hunks)
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#21
File: spring-kafka-example/README.md:12-17
Timestamp: 2025-07-22T01:35:41.406Z
Learning: User igorcampos-dev prefers minimal, high-level documentation in README files without detailed version specifications, choosing to keep tech stack information simple rather than adding precise version numbers.
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#26
File: spring-kafka-example/compose.yaml:3-4
Timestamp: 2025-07-24T01:40:49.337Z
Learning: User igorcampos-dev requires hard-coded container names in Docker Compose files (like `container_name: app`) for CI pipeline validation purposes, which is a valid operational requirement that overrides the general best practice of avoiding hard-coded container names.
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#21
File: spring-kafka-example/compose.yaml:30-32
Timestamp: 2025-07-22T01:30:57.054Z
Learning: User igorcampos-dev prefers to maintain environment parity between local development and production, avoiding development-specific configurations like ALLOW_PLAINTEXT_LISTENER even when they might provide clearer intent or safety nets.
📚 Learning: in the spring-integrations-examples project, user igorcampos-dev prefers to keep simple example impl...
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#40
File: spring-kafka-example/src/main/java/com/io/example/consumer/KafkaConsumerServiceImpl.java:18-22
Timestamp: 2025-07-27T19:57:31.204Z
Learning: In the spring-integrations-examples project, user igorcampos-dev prefers to keep simple example implementations minimal without additional error handling complexity, as the examples are for demonstration purposes rather than production use.

Applied to files:

  • spring-keycloak-example/src/main/resources/banner.txt
  • spring-keycloak-example/src/main/resources/application.yml
  • pom.xml
  • spring-keycloak-example/src/main/resources/application-dev.yml
  • spring-keycloak-example/src/main/java/com/io/example/SpringKeycloakExampleApplication.java
  • spring-keycloak-example/pom.xml
📚 Learning: in the spring-kafka-example project, user igorcampos-dev is comfortable with logging complete messag...
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#40
File: spring-kafka-example/src/main/java/com/io/example/producer/KafkaProducerServiceImpl.java:26-26
Timestamp: 2025-07-27T19:48:52.891Z
Learning: In the spring-kafka-example project, user igorcampos-dev is comfortable with logging complete message objects in Kafka producer implementations and does not consider it a security concern, indicating no sensitive data is involved or other security measures are in place.

Applied to files:

  • spring-keycloak-example/src/main/resources/application.yml
  • pom.xml
  • spring-keycloak-example/src/main/resources/application-dev.yml
📚 Learning: in the spring-integrations-examples project, user igorcampos-dev uses @SuppressWarnings("unused") an...
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#40
File: spring-kafka-example/src/main/java/com/io/example/consumer/KafkaConsumerService.java:3-3
Timestamp: 2025-07-27T19:51:52.736Z
Learning: In the spring-integrations-examples project, user igorcampos-dev uses @SuppressWarnings("unused") annotations to suppress IntelliJ IDEA alerts, and these annotations should not be suggested for removal as they serve a specific purpose in their development workflow.

Applied to files:

  • spring-keycloak-example/.gitignore
  • spring-keycloak-example/.dockerignore
📚 Learning: user igorcampos-dev requires hard-coded container names in docker compose files (like `container_nam...
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#26
File: spring-kafka-example/compose.yaml:3-4
Timestamp: 2025-07-24T01:40:49.337Z
Learning: User igorcampos-dev requires hard-coded container names in Docker Compose files (like `container_name: app`) for CI pipeline validation purposes, which is a valid operational requirement that overrides the general best practice of avoiding hard-coded container names.

Applied to files:

  • spring-keycloak-example/compose.yaml
  • spring-keycloak-example/.dockerignore
🪛 YAMLlint (1.37.1)
spring-keycloak-example/src/main/resources/application.yml

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)

spring-keycloak-example/src/main/resources/application-dev.yml

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)


[error] 10-10: no new line character at the end of file

(new-line-at-end-of-file)

spring-keycloak-example/compose.yaml

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)


[warning] 31-31: too few spaces before comment: expected 2

(comments)


[warning] 31-31: missing starting space in comment

(comments)


[warning] 32-32: too few spaces before comment: expected 2

(comments)


[warning] 32-32: missing starting space in comment

(comments)


[error] 36-36: no new line character at the end of file

(new-line-at-end-of-file)

.github/workflows/spring-keycloak-example.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 23-23: too many spaces inside brackets

(brackets)


[error] 23-23: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)


[error] 68-68: no new line character at the end of file

(new-line-at-end-of-file)

🪛 Gitleaks (8.27.2)
spring-keycloak-example/docker/keycloak/tls.key

1-52: Identified a Private Key, which may compromise cryptographic security and sensitive data encryption.

(private-key)

🪛 LanguageTool
spring-keycloak-example/docker/keycloak/cert-info.md

[grammar] ~2-~2: Use correct spacing
Context: ... manually generated using the following command: bash openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodes \ -subj "/CN=localhost"

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)
spring-keycloak-example/docker/keycloak/cert-info.md

1-1: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

🪛 Checkov (3.2.334)
spring-keycloak-example/Dockerfile.keycloak

[LOW] 1-10: Ensure that HEALTHCHECK instructions have been added to container images

(CKV_DOCKER_2)


[LOW] 1-10: Ensure that a user for the container has been created

(CKV_DOCKER_3)

spring-keycloak-example/Dockerfile

[LOW] 1-47: Ensure that HEALTHCHECK instructions have been added to container images

(CKV_DOCKER_2)

🪛 Hadolint (2.12.0)
spring-keycloak-example/Dockerfile

[warning] 16-16: Quote this to prevent word splitting.

(SC2046)


[warning] 40-40: COPY to a relative destination without WORKDIR set.

(DL3045)


[warning] 41-41: COPY to a relative destination without WORKDIR set.

(DL3045)


[warning] 42-42: COPY to a relative destination without WORKDIR set.

(DL3045)


[warning] 43-43: COPY to a relative destination without WORKDIR set.

(DL3045)

🔇 Additional comments (11)
spring-keycloak-example/src/main/resources/banner.txt (1)

2-9: Banner file looks good.

Static decoration only; no issues found.

spring-keycloak-example/.gitattributes (1)

1-2: Line-ending rules LGTM

The attributes satisfy cross-platform execution of wrapper scripts.

pom.xml (1)

14-18: Module inclusion looks correct – just ensure CI picks it up
The only change is the extra <module>spring-keycloak-example</module> entry, which is syntactically fine. CI jobs that iterate over <modules> should automatically detect it, but double-check any bespoke build matrices or deployment scripts that still hard-code the old list.

spring-keycloak-example/docker/keycloak/tls.crt (1)

1-29: Certificate committed – confirm handling of the private key
Committing the public certificate is harmless, but ensure the corresponding tls.key (private key) is not pushed or is encrypted if it must live in the repo. A quick scan of the PR shows a tls.key; if present unencrypted, please reconsider.

spring-keycloak-example/src/main/java/com/io/example/SpringKeycloakExampleApplication.java (1)

6-11: Entry point looks good
Minimal Spring Boot bootstrapper is correct and consistent with the rest of the project.

.github/labeler.yml (1)

9-15: Labeler rules LGTM
The new module pattern and generic **/pom.xml glob are accurate and future-proof.

spring-keycloak-example/compose.yaml (1)

31-34: Hard-coded admin credentials – remind consumers
Credentials are already commented as “DO NOT USE IN PRODUCTION”. Ensure CI or docs also mention rotating these for any publicly exposed environment.

spring-keycloak-example/.dockerignore (2)

1-62: LGTM! Comprehensive .dockerignore configuration.

The file includes all necessary exclusions for a clean Docker build context.


26-28: Consider consolidating Docker Compose exclusion patterns.

The pattern **/docker-compose* on line 26 already matches compose files. Line 27's pattern **/compose.y*ml is redundant.

Consider removing the redundant pattern:

 **/docker-compose*
-**/compose.y*ml
 **/Dockerfile*
⛔ Skipped due to learnings
Learnt from: igorcampos-dev
PR: igorcampos-dev/spring-integrations-examples#26
File: spring-kafka-example/compose.yaml:3-4
Timestamp: 2025-07-24T01:40:49.337Z
Learning: User igorcampos-dev requires hard-coded container names in Docker Compose files (like `container_name: app`) for CI pipeline validation purposes, which is a valid operational requirement that overrides the general best practice of avoiding hard-coded container names.
spring-keycloak-example/mvnw.cmd (1)

1-150: LGTM! Standard Maven Wrapper script.

This is the official Apache Maven Wrapper script for Windows, version 3.3.2.

spring-keycloak-example/mvnw (1)

1-260: LGTM! Standard Maven Wrapper script.

This is the official Apache Maven Wrapper script for Unix-like systems, version 3.3.2.

Comment on lines +3 to +68
on:
pull_request:
branches: [master]
paths:
- "spring-keycloak-example/**"
types:
- opened
- synchronize
- reopened

jobs:

integration-tests:
name: Run Unit & Integration Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: spring-keycloak-example
strategy:
matrix:
distribution: [ 'temurin' ]
java: [ '21' ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4.7.1
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
cache: 'maven'
- name: Build and analyze
run: ./mvnw clean verify

health-check:
name: Health Check on Services
runs-on: ubuntu-latest
steps:
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: true

- name: Extract service names from docker compose
id: services
run: |
echo "services<<EOF" >> $GITHUB_OUTPUT
docker compose -f ./spring-keycloak-example/compose.yaml config --services >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Start containers with Compose Action
uses: hoverkraft-tech/compose-action@v2.3.0
with:
compose-file: './spring-keycloak-example/compose.yaml'
services: ${{ steps.services.outputs.services }}
up-flags: '--build'
down-flags: '--volumes'

- name: Wait for containers to initialize
run: sleep 10

- name: Check container health
run: |
./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}" No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Fix YAML formatting issues.

The file has formatting inconsistencies that should be addressed.

Apply these formatting fixes:

 on:
   pull_request:
-    branches: [master]
+    branches: ['master']
     paths:
       - "spring-keycloak-example/**"

And add a newline at the end of the file:

       - name: Check container health
         run: |
-          ./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}"
+          ./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}"
+
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
on:
pull_request:
branches: [master]
paths:
- "spring-keycloak-example/**"
types:
- opened
- synchronize
- reopened
jobs:
integration-tests:
name: Run Unit & Integration Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: spring-keycloak-example
strategy:
matrix:
distribution: [ 'temurin' ]
java: [ '21' ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4.7.1
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
cache: 'maven'
- name: Build and analyze
run: ./mvnw clean verify
health-check:
name: Health Check on Services
runs-on: ubuntu-latest
steps:
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: true
- name: Extract service names from docker compose
id: services
run: |
echo "services<<EOF" >> $GITHUB_OUTPUT
docker compose -f ./spring-keycloak-example/compose.yaml config --services >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Start containers with Compose Action
uses: hoverkraft-tech/compose-action@v2.3.0
with:
compose-file: './spring-keycloak-example/compose.yaml'
services: ${{ steps.services.outputs.services }}
up-flags: '--build'
down-flags: '--volumes'
- name: Wait for containers to initialize
run: sleep 10
- name: Check container health
run: |
./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}"
on:
pull_request:
branches: ['master']
paths:
- "spring-keycloak-example/**"
types:
- opened
- synchronize
- reopened
jobs:
integration-tests:
name: Run Unit & Integration Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: spring-keycloak-example
strategy:
matrix:
distribution: [ 'temurin' ]
java: [ '21' ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4.7.1
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
cache: 'maven'
- name: Build and analyze
run: ./mvnw clean verify
health-check:
name: Health Check on Services
runs-on: ubuntu-latest
steps:
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: true
- name: Extract service names from docker compose
id: services
run: |
echo "services<<EOF" >> $GITHUB_OUTPUT
docker compose -f ./spring-keycloak-example/compose.yaml config --services >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Start containers with Compose Action
uses: hoverkraft-tech/compose-action@v2.3.0
with:
compose-file: './spring-keycloak-example/compose.yaml'
services: ${{ steps.services.outputs.services }}
up-flags: '--build'
down-flags: '--volumes'
- name: Wait for containers to initialize
run: sleep 10
- name: Check container health
run: |
./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}"
🧰 Tools
🪛 YAMLlint (1.37.1)

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 23-23: too many spaces inside brackets

(brackets)


[error] 23-23: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)


[error] 68-68: no new line character at the end of file

(new-line-at-end-of-file)

🤖 Prompt for AI Agents
In .github/workflows/spring-keycloak-example.yml from lines 3 to 68, fix YAML
formatting inconsistencies by ensuring proper indentation and spacing throughout
the file, especially under keys like 'on', 'jobs', and each job's steps. Also,
add a newline at the end of the file to comply with standard file formatting
conventions.

Comment on lines +21 to +25
strategy:
matrix:
distribution: [ 'temurin' ]
java: [ '21' ]
steps:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Simplify matrix strategy for single values.

Using a matrix strategy with single values adds unnecessary complexity.

Simplify the configuration:

-    strategy:
-      matrix:
-        distribution: [ 'temurin' ]
-        java: [ '21' ]
     steps:
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
-      - name: Set up JDK ${{ matrix.java }}
+      - name: Set up JDK 21
         uses: actions/setup-java@v4.7.1
         with:
-          java-version: ${{ matrix.java }}
-          distribution: ${{ matrix.distribution }}
+          java-version: '21'
+          distribution: 'temurin'
           cache: 'maven'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
strategy:
matrix:
distribution: [ 'temurin' ]
java: [ '21' ]
steps:
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 21
uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 23-23: too many spaces inside brackets

(brackets)


[error] 23-23: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)


[error] 24-24: too many spaces inside brackets

(brackets)

🤖 Prompt for AI Agents
In .github/workflows/spring-keycloak-example.yml around lines 21 to 25, the
matrix strategy is used with single values for distribution and java, which is
unnecessarily complex. Simplify the workflow by removing the matrix strategy and
directly specifying the distribution and java version in the steps or job
configuration.

Comment on lines +17 to +19
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Add SHA-256 checksum for Maven distribution

Including distributionSha256Sum guards against supply-chain attacks and corrupted downloads.

 distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
+distributionSha256Sum=<insert-official-sha256>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
distributionSha256Sum=<insert-official-sha256>
🤖 Prompt for AI Agents
In spring-keycloak-example/.mvn/wrapper/maven-wrapper.properties around lines 17
to 19, add a new property named distributionSha256Sum with the SHA-256 checksum
of the Maven distribution zip file specified in distributionUrl. This ensures
the integrity and authenticity of the downloaded Maven distribution by verifying
its checksum during the wrapper execution.

Comment on lines +1 to +2

services:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Remove leading blank line
Starts with an empty line, tripping YAML-lint (empty-lines).

- 
 services:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
services:
services:
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)

🤖 Prompt for AI Agents
In spring-keycloak-example/compose.yaml at the beginning of the file (lines
1-2), remove the leading blank line before the "services:" key to comply with
YAML linting rules and avoid empty line errors.

Comment on lines +1 to +52
-----BEGIN PRIVATE KEY-----
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
utRIzWgC4BNP6uYA4TSUi3a+Amq5C0U=
-----END PRIVATE KEY-----
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove private key from the repository immediately

A PEM-encoded private key is committed in plain text. This is a severe security breach:
• Source-control history is now poisoned – secrets revocation & rotation are required.
• Any container/image built from this repo will embed the key.

Proposed immediate actions:

- spring-keycloak-example/docker/keycloak/tls.key
+ # file deleted

Add the path to .gitignore (or .gitattributes w/ filter=crypt) to prevent recurrence:

+# Keycloak TLS assets (tracked elsewhere)
+spring-keycloak-example/docker/keycloak/*.key

After removal, revoke the certificate and generate a new key outside of VCS (e.g., via CI secrets / Docker secrets / Kubernetes secrets).

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
-----BEGIN PRIVATE KEY-----
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
utRIzWgC4BNP6uYA4TSUi3a+Amq5C0U=
-----END PRIVATE KEY-----
🧰 Tools
🪛 Gitleaks (8.27.2)

1-52: Identified a Private Key, which may compromise cryptographic security and sensitive data encryption.

(private-key)

🤖 Prompt for AI Agents
In spring-keycloak-example/docker/keycloak/tls.key lines 1 to 52, a private key
is committed in plain text, which is a critical security risk. Remove this file
from the repository immediately, add its path to .gitignore to prevent future
commits, and ensure the private key is managed securely outside version control,
such as using CI secrets, Docker secrets, or Kubernetes secrets. After removal,
revoke the exposed certificate and generate a new private key securely.

Comment on lines +80 to +85
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Missing <version> inside annotationProcessorPaths
maven-compiler-plugin will fail because <path> elements must include a <version>.

-<path>
-  <groupId>org.projectlombok</groupId>
-  <artifactId>lombok</artifactId>
+</path>
+<path>
+  <groupId>org.projectlombok</groupId>
+  <artifactId>lombok</artifactId>
+  <version>${lombok.version}</version>
 </path>

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In spring-keycloak-example/pom.xml around lines 80 to 85, the <path> element
inside <annotationProcessorPaths> is missing the required <version> tag for the
lombok dependency. Add the appropriate <version> tag specifying the lombok
version to ensure the maven-compiler-plugin can resolve the dependency correctly
and avoid build failures.

Comment on lines +1 to +2

spring:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Same blank-line lint failure as production config
Remove the initial empty line for consistency and to keep YAML-lint green.

🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)

🤖 Prompt for AI Agents
In spring-keycloak-example/src/main/resources/application-dev.yml at the
beginning of the file (lines 1-2), remove the initial blank line before the
"spring:" key to fix the YAML lint error and maintain consistency with the
production config file.

logging:

pattern:
console: "%d{yyyy-MM-dd'T'HH:mm:ss} | ${spring.application.name} | %class{30} | %level | %m%n" No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Missing trailing newline
Add a final newline to satisfy editors / POSIX tools and the new-line-at-end-of-file lint rule.

-    console: "%d{yyyy-MM-dd'T'HH:mm:ss} | ${spring.application.name} | %class{30} | %level | %m%n"
+\    console: "%d{yyyy-MM-dd'T'HH:mm:ss} | ${spring.application.name} | %class{30} | %level | %m%n"\n

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 10-10: no new line character at the end of file

(new-line-at-end-of-file)

🤖 Prompt for AI Agents
In spring-keycloak-example/src/main/resources/application-dev.yml at line 10,
the file is missing a trailing newline at the end. Add a final newline character
after the last line to comply with POSIX standards and the
new-line-at-end-of-file lint rule.

Comment on lines +1 to +2

spring:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

YAML-lint failure: drop the leading blank line
The first empty line triggers empty-lines (too many blank lines).

- 
 spring:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
spring:
spring:
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 1-1: too many blank lines (1 > 0)

(empty-lines)

🤖 Prompt for AI Agents
In spring-keycloak-example/src/main/resources/application.yml at the beginning
of the file (lines 1-2), remove the leading blank line so that the file starts
immediately with the "spring:" key. This will fix the YAML-lint error caused by
too many blank lines at the start of the file.

Comment on lines +9 to +10
pattern:
console: "%d{yyyy-MM-dd'T'HH:mm:ss} | ${spring.application.name} | %class{30} | %level | %m%n"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Consider extracting the logging pattern to avoid duplication
application.yml and application-dev.yml carry identical logging.pattern.console strings. Moving the pattern to application.yml only and overriding only when it actually differs keeps configuration DRY.

🤖 Prompt for AI Agents
In spring-keycloak-example/src/main/resources/application.yml at lines 9 to 10,
the logging pattern string is duplicated in both application.yml and
application-dev.yml. To fix this, remove the logging.pattern.console entry from
application-dev.yml and keep it only in application.yml, so the pattern is
defined once and inherited by default. Override the pattern in
application-dev.yml only if a different value is needed, ensuring the
configuration follows the DRY principle.

@igorcampos-dev igorcampos-dev merged commit 7cad369 into master Aug 2, 2025
8 checks passed
@igorcampos-dev igorcampos-dev deleted the feat/keycloak branch August 2, 2025 02:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant