Added a reusable build-and-test workflow that produces a stable artifact-name output and retains build artifacts and test reports.
Configured CI to run on main/develop and tags, cancel redundant runs, and chain Docker publishing when appropriate.
Added a reusable Docker workflow with optional push, tagging, and published image metadata outputs.
Updated ignore rules to permit committing the Gradle wrapper JAR.
New Features
Added a reusable release workflow that creates GitHub Releases and sends a Telegram release notification.
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit
* **Chores**
* Added a reusable build-and-test workflow that produces a stable artifact-name output and retains build artifacts and test reports.
* Configured CI to run on main/develop and tags, cancel redundant runs, and chain Docker publishing when appropriate.
* Added a reusable Docker workflow with optional push, tagging, and published image metadata outputs.
* Updated ignore rules to permit committing the Gradle wrapper JAR.
* **New Features**
* Added a reusable release workflow that creates GitHub Releases and sends a Telegram release notification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.
Use the following commands to manage reviews:
@coderabbitai resume to resume automatic reviews.
@coderabbitai review to trigger a single review.
Use the checkboxes below for quick actions:
▶️ Resume reviews
🔍 Trigger review
📝 Walkthrough
Walkthrough
Adds three reusable GitHub Actions workflows: a Gradle build-and-test workflow that emits an artifact name, a CI orchestration workflow invoking the reusables on pushes/PRs/tags, and a Docker workflow that validates or builds/pushes images to GHCR; also updates .gitignore.
Changes
Cohort / File(s)
Summary
Build workflow .github/workflows/build.yaml
New reusable workflow_call that sets up Temurin JDK 21, caches Gradle, runs ./gradlew clean bootJar and ./gradlew test, writes artifact-name from a meta step to job outputs, and uploads build/libs/*.jar, build/reports/**, build/test-results/** as an artifact.
CI orchestration .github/workflows/ci.yaml
New workflow triggered on pushes to develop/main and v* tags and on PRs; uses concurrency to cancel in-progress runs; calls the reusable build workflow, then the reusable docker workflow, forwarding permissions/secrets and setting push=true for main or tag refs.
Docker workflow .github/workflows/docker.yaml
New reusable workflow_call with required boolean push input; when push=false runs a Dockerfile build-check, when push=true logs into GHCR, generates metadata/tags (semver/branch/SHA), builds with BuildKit and pushes via docker/build-push-action; exposes image-digest and image-tags outputs.
Repo metadata .gitignore
Added negation rule to allow committing gradle/wrapper/gradle-wrapper.jar (explicitly un-ignored).
Sequence Diagram
sequenceDiagram
participant GitHub as GitHub
participant CI as CI Workflow
participant Build as Build Workflow
participant Docker as Docker Workflow
participant GHCR as GHCR
GitHub->>CI: Push / PR to develop/main or tag
CI->>Build: Call reusable build workflow (workflow_call)
Build->>Build: Checkout, setup JDK21, cache Gradle, build & test
Build->>CI: Return artifact-name
alt ref is main or tag
CI->>Docker: Call reusable docker workflow (push=true)
Docker->>GHCR: Login to GHCR
Docker->>Docker: Generate metadata (semver/ref/SHA) and tags
Docker->>GHCR: Build and push image (BuildKit)
Docker->>CI: Return image-digest & image-tags
else develop branch
CI->>Docker: Call reusable docker workflow (push=false)
Docker->>Docker: Validate Dockerfile (build check only)
Docker->>CI: Return results
end
CI->>GitHub: Workflow complete
Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~22 minutes
Poem
🐰 I hopped through YAML with a grin,
Built the jars and named them kin,
I checked the Docker, gave a nudge,
Tagged the image, gave a budge—
CI dances, carrots within. 🥕
Tip
💬 Introducing Slack Agent: The best way for teams to turn conversations into code.
Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Generate code and open pull requests
Plan features and break down work
Investigate incidents and troubleshoot customer tickets together
Automate recurring tasks and respond to alerts with triggers
Summarize progress and report instantly
Built for teams:
Shared memory across your entire org—no repeating context
Per-thread sandboxes to safely plan and execute work
Governance built-in—scoped access, auditability, and budget controls
One agent for your entire SDLC. Right inside Slack.
Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.
Comment @coderabbitai help to get the list of available commands and usage tips.
<!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: review paused by coderabbit.ai -->
> [!NOTE]
> ## Reviews paused
>
> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.
>
> Use the following commands to manage reviews:
> - `@coderabbitai resume` to resume automatic reviews.
> - `@coderabbitai review` to trigger a single review.
>
> Use the checkboxes below for quick actions:
> - [ ] <!-- {"checkboxId": "7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1"} --> ▶️ Resume reviews
> - [ ] <!-- {"checkboxId": "e9bb8d72-00e8-4f67-9cb2-caf3b22574fe"} --> 🔍 Trigger review
<!-- end of auto-generated comment: review paused by coderabbit.ai -->
<!-- walkthrough_start -->
<details>
<summary>📝 Walkthrough</summary>
## Walkthrough
Adds three reusable GitHub Actions workflows: a Gradle build-and-test workflow that emits an artifact name, a CI orchestration workflow invoking the reusables on pushes/PRs/tags, and a Docker workflow that validates or builds/pushes images to GHCR; also updates `.gitignore`.
## Changes
|Cohort / File(s)|Summary|
|---|---|
|**Build workflow** <br> ` .github/workflows/build.yaml`|New reusable `workflow_call` that sets up Temurin JDK 21, caches Gradle, runs `./gradlew clean bootJar` and `./gradlew test`, writes `artifact-name` from a `meta` step to job outputs, and uploads `build/libs/*.jar`, `build/reports/**`, `build/test-results/**` as an artifact.|
|**CI orchestration** <br> ` .github/workflows/ci.yaml`|New workflow triggered on pushes to `develop`/`main` and `v*` tags and on PRs; uses concurrency to cancel in-progress runs; calls the reusable build workflow, then the reusable docker workflow, forwarding permissions/secrets and setting `push=true` for `main` or tag refs.|
|**Docker workflow** <br> ` .github/workflows/docker.yaml`|New reusable `workflow_call` with required boolean `push` input; when `push=false` runs a Dockerfile build-check, when `push=true` logs into GHCR, generates metadata/tags (semver/branch/SHA), builds with BuildKit and pushes via `docker/build-push-action`; exposes `image-digest` and `image-tags` outputs.|
|**Repo metadata** <br> ` .gitignore`|Added negation rule to allow committing `gradle/wrapper/gradle-wrapper.jar` (explicitly un-ignored).|
## Sequence Diagram
```mermaid
sequenceDiagram
participant GitHub as GitHub
participant CI as CI Workflow
participant Build as Build Workflow
participant Docker as Docker Workflow
participant GHCR as GHCR
GitHub->>CI: Push / PR to develop/main or tag
CI->>Build: Call reusable build workflow (workflow_call)
Build->>Build: Checkout, setup JDK21, cache Gradle, build & test
Build->>CI: Return artifact-name
alt ref is main or tag
CI->>Docker: Call reusable docker workflow (push=true)
Docker->>GHCR: Login to GHCR
Docker->>Docker: Generate metadata (semver/ref/SHA) and tags
Docker->>GHCR: Build and push image (BuildKit)
Docker->>CI: Return image-digest & image-tags
else develop branch
CI->>Docker: Call reusable docker workflow (push=false)
Docker->>Docker: Validate Dockerfile (build check only)
Docker->>CI: Return results
end
CI->>GitHub: Workflow complete
```
## Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~22 minutes
## Poem
> 🐰 I hopped through YAML with a grin,
> > Built the jars and named them kin,
> > I checked the Docker, gave a nudge,
> > Tagged the image, gave a budge—
> > CI dances, carrots within. 🥕
</details>
<!-- walkthrough_end -->
<!-- announcements_start -->
> [!TIP]
> <details>
> <summary>💬 Introducing Slack Agent: The best way for teams to turn conversations into code.</summary>
>
> [Slack Agent](https://www.coderabbit.ai/agent) is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
>
> - Generate code and open pull requests
> - Plan features and break down work
> - Investigate incidents and troubleshoot customer tickets together
> - Automate recurring tasks and respond to alerts with triggers
> - Summarize progress and report instantly
>
> Built for teams:
>
> - **Shared memory** across your entire org—no repeating context
> - **Per-thread sandboxes** to safely plan and execute work
> - **Governance built-in**—scoped access, auditability, and budget controls
>
> One agent for your entire SDLC. Right inside Slack.
>
> 👉 [Get started](https://agent.coderabbit.ai/)
>
> </details>
<!-- announcements_end -->
<!-- tips_start -->
---
> [!NOTE]
> <details>
> <summary>🎁 Summarized by CodeRabbit Free</summary>
>
> Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting <https://app.coderabbit.ai/login>.
>
> </details>
<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>
<!-- tips_end -->
<!-- internal state start -->
<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyRUDuki2VmgoBPSACMxTWpTTjx8XADo08SBAB8AKB2gIOpUUWxs4gPQ98FANYAzADb4eiM+Ozx7tJSLTN7HLQAiYK0AYlDIAEEASWIyWRp6ASFRSHxbRlhMUkQtSNpaZDRuEmxEOXsSSEAcAgAhd09IADIYEkRcQFwCSEsbBydIXAp4IlIKOgHYCnxsIlhIAAMeu0ceAH0GNHt7eYnqSBIADwAHfEQ29Cx54Vx4WzQGXDAMXxId6dwjvEgZIYA3cdsU2YEyq8zcHloOwAVvhxIBMAmQ8zYuDQO3aJCOShgsFB4M80Nh3GwGGQ+EupmJuGwYHs1DauB2PGM6EgACYAAxgZjwDB4Ko3NjvAA0kCOlFsVmYyAYOIY1mFKBJKK2yGgJGY2CGWAAUgARADSbIAjN1mQBxKi0SqMe4IDBEEVnXDIbBHSAWtBWkgivGFSBlHlEBZKMxES2VPgMSqYCT4fC4bXCeYiijE5A0drIJm4ObzENhz0Rgb05PdIYZhbXW73R7PNgAXl9YAAJABvVMYVbwWgAXxb7eJq2oNGYR1wPZ2BAWzbN0WgAAkAKq1VYAeUX0AAChvSzmyP6jo5PYjfWZ7PBxC4AFRKKFJkVghq0MxjE4UZ1mK9X0uYeiPiFmBmjxjAI9gfl+k74CydbjFWdwPKaOaQAA7GAtBoGIYw0BgNxkhc9B3B46Y4geR5JDQbq3JAGBQcw1AyoGkC2B45yHEgyg6Do4RRGBCTwGS6ZQXu3wkFGwjUPxJJpBkhxvokaQUKKpjngw+w4Yo8BtFoUAAHIkHwSx9JGYx0rQXB5kYOamBYVjLE4Li+t4vjbFokDqJAekGbZRlpHgny4OgBR0OZZJKIZKzrJs9hKO8/mICo77Vg8TwvDsAAUvybNgJDmW2raQDCl5KI5sV4PFcE1ilbCQD2E4AJRKNpHn6QVhKlQFnoyGZwaWSY5jhfZrhPk5fgEuICwlX5ZUJTc8G1qlkAZVlOXTq2+Xokc8XImgMVTc6M1JfN1W1fMDVNZ53TeSs/AUb5HxfEcUy0NgDCUOZhjGNZA3OENEIjdsN0Ygs21oiQzqVolc1Va8irTrOC7LmuG7btAeY6AAMjy5wytkwWQAA1AArOyZhgOyOgAKLtPAdHydIVRjL8ml8CQtgSu+XAALJ0PAghBCE2n6FoH1Wf1V2DQw8D/QEwSBGEEQxHE5BUPJyR0ak6SZLjuR5AURTUS1ADC0SXb0105nsHaklgnyIDigkLDI/yOEc8xmEiqgYOlPJRtgtCMfMvzfgMaBEIgdX4UpWwlAAjtlmYhxQpA3PaEynFU4hUBgMptCK2ZzDyYCPfgYZtMgVs2tnJBbOMYqKd9L6s5ATPFMUTDZ5qYzZ2IYbTJi2JVN9jBkiiPLppYrWXuZvqljwCAyiJlREHSyCHKJeCSQMUHFGMZQVLiw0+KNpt2QZzImbQYBkvYmEYqcihWFII/sEUDCvYgiAir+jv4HKlCz/POYMgxQYD9Hhf8+IRQyCXivLeLJd7lHENaeYtBf7WEoP9Rk4seAigLDhZAdduQf03lOHg5YqhHHuNYUOucmJWB4MIP0ZwGBYU/pHJ0xFQS21gDsHk/k4GDGyt0HEWBhJmkUCUDIqAPY8jeIpTAYgURBjGBkDK8BijzHaNcRAAB1YwaVeqmCUCokUAByFRLglEuFMXVU6jVOLcUiLxFWkkHbCRkGJFxAlpL7GOFYeSVglJIPgKpdgGktLnTJFUNK5A+DGxPj5AAmpETm6NApdQANzUSgrJfxdAzCfGCapemakbg3Gxlke0dA6oYyxtKSppBur4wAMxGlJuTLQVMBSmWHjIEoTMWqs3ZpwSA3N/Z81ljoCAYADCGLFmbQaqC/4UGlvzOWjjYikGVj0tWwgxCaxxlU3I+Q/Q71KIg604jcDzlMFEB4riEnmyyAFdu/tcLPC2GITK550IVmKLqNB4oWIKQkE+IooClJ23OP8wFikaY0LgWaechsABKWIdEiMVL8fA6D6D5wWNw0GAUpzzDuPYM4pYJEVxhcs0FEIag5zlF0AMqc8xmENiPT2QLKg7G/qg84NEAqOCDDyEF3D0WYvmISlAiJBGvBFBI4VyAeRTiRaiqBlB4D/GVXRUgIcw5njkNXZALcf7LLMNtX5aAwA1kkulM4zB/iKUobgGgFASQ+izjKMwm4UWSLYd/AAyvOSI+rw4ij3FgX04L6DcPOCyoMKDYW/U8EXMosAbX3LJIyZk9QIT6gkRsBiqd27MSIJqcYpr5i4BEGKessxURYjgIPbBQTzxQtJHtRE8LSBoWGCWRagIWAgjpY0DaEdv7zB7SQMAVj0pDuBMJS11BijjroYpVBPAlQmWBIVeKnF5Y8TdRJbxU53GiVpF4qSmtcnvnGIEwpKlSnhNyFAE54xvrvTmTZBZP0lnoJWUfAGaUEH7wWN9SKWxTquXctEDA/DOp4ylem9KYI4zRi9imEgcd4BjFoDUtyUBVxdvSUh6dfacgMkWvMZskA1qT3iv+jB7V4rkf9pRmq9UHzkbndR2j9G91KCYysljSgeOh2QCdGph7OaYFuPSSAAAxYFkQPkiAAF6UFqeQepuMmnIQACztMptTWm4wSmM2ZvsNm/iuY8wmQLaZsyNJEBomMGWIQNlKwSOMXZGsMiHJyFoRcRxfnnAsi5tzMMpyyRUooG+6Atj9CYKwRQKcgxiPDIPKgRw66QG1JEP1aV5gFi9BYHLddQxZbAGQtAuWMF3goKdCQYhOqMWKOQZe7yiSVBFEwSksh7mp2EpnfAnpKAoFc1YChw5KBSXZugCgDF/h/lvEmJiLF90OIVs4k9Ukz0kQ8ZevbpIZJ+LvfQB9ykQnPvKa+jyq4dIU20xUvTXAWnGc6aZnpFmSADJZjZjmkB0ZODWVMoWIs+o/tPi4MY0YzirMmV5rZPmkiCHVvsgLDStJwcGPgZ6794HnLA1cm541IhZqkkPC2uA86Yp5Ni3FfWTJ/PdIoMnkAUXVxIGgM466R3FyZl1fV1G+HTSdYgO1EcE0LFmCUeHVQWE85oDmpCKOVbjDhzzvngroUQuKLTYtGX4skCxNEYlmKzigP1mqJeVBgSaLILQbmH8aE7DGHHBT7dR4YEYsJV898CCpBgpHLXvOqgS8kgq7O9g/btcgOeDA1gBEkTDzr+MbQslUSnfB6abH+3tF4cgGiGAwDqjHCIBVHV6vW4uCgXVDNWaUDIK9ddtN5K89l7AFhYn8BmGAAHjQAABYA7H6QaDzAPR5/QPfuBAgsaAFN0YUzNCilJqxairmgKsaAq59QUx0ryiF8xF/L9X+vw2Ibt/RF1KDJX4Nv5lHCwwTU9h1CIFsJBUUpwLdVDYK7vVGXWTGwTdG2YQSXe0exLiHbY9d5NxQ7C9cSOAnxW9AJZ1a7UJdSO7c6FqT9HqT6eZGHRuBXTBGDXSFqDYLYMDFVcUe4CPdRcDbBSDbYAINyQjSAODBDIKZ8WfXDJDSPbNRadoLUB0WOOfapGDdgzgr4RDZ8fAMcSSTYcyfPSje1QYQMDVO4bAMCBYYIaDNg9yQNUSVhMQvg7qE/JfFfNfTmDfLfHfPfA/UsCws/aw1YS/SIa/W/aA0ZOTWwBTZTa0VTTYDTLTLQTGHTLWKpJpQmIzMmEzbpOmfHRvf7azYZOzcZZgMHQWbQLQPQKAJ3HxNAPAQgdXH7FgNgHCLgXgfgdHPZFrXpWQeQRQFQNQTQXI8AKAFLbkXALsQoVYSzfSOgVYQEEgEgVYLRd8dQMAHIvIxgAANnZAAE5xBaAjQSBmkGAVjkJWQSBFjaB5ASAAAOZpRYtAZCOYhgdkVkS4xY1kHYwmBgWwZCQ4qY7QWY2gAzM4j42gZ4uYo0QmEgAzQmI0Q40SAzAzHYn4kgdkI0cQdkBgWgdkWwWgRY5CRYmE149oiAJiRYkgQmZCBgDkQmE4tAZpAzOY1kZCWwPYw4q4nYgzBgYE2wAzEgWEw4hgAzOEgzTE2YuYw49EuEgk5pXY5pWgBgRYwk9kCEuYwE1kQ4tYmQI0I0VE8QNAdkI4nnTErEzo8oxQXoxAfov7ZmIYkYsYgoto2YooggVYShJ/cYlEGge064LU1sQIWkdoTcIos4WgSIXALnf7OgDlVLXADlSkQIDgQmHsXQDonAa020s4J0x0806YoAA== -->
<!-- internal state end -->
copilot-pull-request-reviewer[bot]
(Migrated from github.com)
reviewed 2026-04-26 16:50:20 +00:00
copilot-pull-request-reviewer[bot]
(Migrated from github.com)
left a comment
Copy Link
Copy Source
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
copilot-pull-request-reviewer[bot]
(Migrated from github.com)
reviewed 2026-04-26 17:25:17 +00:00
copilot-pull-request-reviewer[bot]
(Migrated from github.com)
left a comment
Copy Link
Copy Source
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Pull request closed
This pull request cannot be reopened because the branch was deleted.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary by CodeRabbit
📝 Walkthrough
Walkthrough
Adds three reusable GitHub Actions workflows: a Gradle build-and-test workflow that emits an artifact name, a CI orchestration workflow invoking the reusables on pushes/PRs/tags, and a Docker workflow that validates or builds/pushes images to GHCR; also updates
.gitignore.Changes
.github/workflows/build.yamlworkflow_callthat sets up Temurin JDK 21, caches Gradle, runs./gradlew clean bootJarand./gradlew test, writesartifact-namefrom ametastep to job outputs, and uploadsbuild/libs/*.jar,build/reports/**,build/test-results/**as an artifact..github/workflows/ci.yamldevelop/mainandv*tags and on PRs; uses concurrency to cancel in-progress runs; calls the reusable build workflow, then the reusable docker workflow, forwarding permissions/secrets and settingpush=trueformainor tag refs..github/workflows/docker.yamlworkflow_callwith required booleanpushinput; whenpush=falseruns a Dockerfile build-check, whenpush=truelogs into GHCR, generates metadata/tags (semver/branch/SHA), builds with BuildKit and pushes viadocker/build-push-action; exposesimage-digestandimage-tagsoutputs..gitignoregradle/wrapper/gradle-wrapper.jar(explicitly un-ignored).Sequence Diagram
Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~22 minutes
Poem
Comment
@coderabbitai helpto get the list of available commands and usage tips.Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Pull request closed