Skip to content

feat: Improve overall devex for contributors to the codebase#154

Merged
imajes merged 4 commits into
developfrom
feat/improve-devex
Mar 24, 2026
Merged

feat: Improve overall devex for contributors to the codebase#154
imajes merged 4 commits into
developfrom
feat/improve-devex

Conversation

@imajes

@imajes imajes commented Mar 24, 2026

Copy link
Copy Markdown
Contributor
  • feat(devex): add a unified just command surface
  • feat(issues): add typed Grimmory issue templates
  • chore(docs): align Discord links with the README

Description

Linked Issue: Fixes #

Changes

Summary by CodeRabbit

  • Chores
    • Rebranded project from "Booklore" to "Grimmory" across docs, templates, and configs.
    • Standardized developer command surface with a root command file and new component command helpers.
    • Switched CI/release/test workflows to use the standardized command surface.
    • Updated local development configuration (database and environment examples) to use Grimmory names.
  • Documentation
    • Added/updated CONTRIBUTING and component READMEs; expanded issue templates for bugs, features, docs, enhancements, and performance.

imajes added 3 commits March 23, 2026 17:28
- Command surface:
  - add a root `Justfile` with namespaced `api`, `ui`, and `release` modules so humans and agents can use the same entrypoints from the repo root
  - add project-local Justfiles for `booklore-api`, `booklore-ui`, and `tools/release` so each area remains self-contained and can still be driven from inside its own directory
  - standardize local developer workflows around `just check`, `just test`, `just api run`, `just ui dev`, `just db-up`, and `just image-build`

- Workflow integration:
  - update the reusable test suite workflow to install `just` and run backend and frontend CI steps through the Justfiles instead of hardcoded shell commands
  - update the semantic-release workflows to install `just` and invoke release tooling via `just release install`, `just release preview`, and `just release run`
  - keep the Docker image publication workflows on the native Docker actions while moving the project-command logic into the canonical command surface

- Documentation:
  - split backend and frontend implementation guidance into `booklore-api/README.md`, `booklore-api/CONTRIBUTING.md`, `booklore-ui/README.md`, and `booklore-ui/CONTRIBUTING.md`
  - simplify the top-level `README.md` and `CONTRIBUTING.md` so they stay focused on overview, policy, and navigation while pointing to component-specific guides for deeper detail
  - align contributor-facing examples on the `just` interface instead of mixing ad hoc Gradle, npm, Docker, and Compose commands

- Developer environment:
  - add `mise.toml` to pin the expected Java and Node toolchain versions for local work
  - switch the development Compose defaults from the old Booklore database values to Grimmory-oriented defaults
  - keep the command layout ready for a future API/UI split without forcing that packaging change yet
- Issue intake:
  - rebrand the bug and feature request forms from Booklore to Grimmory
  - remove the old `[Bug]` and `[Feature]` title prefixes so issue titles can stay natural
  - default issue intake to `needs-triage` while relying on GitHub Issue Types for the primary classification

- New templates:
  - add a dedicated enhancement template for smaller quality-of-life and UX improvements
  - add a documentation template for doc fixes, missing guides, and confusing setup flows
  - add a performance template for runtime, UI, build, and operational performance problems

- Type alignment:
  - map the templates onto the repo's issue-type taxonomy with `Bug`, `Feature`, `Enhancement`, `Documentation`, and `Performance`
  - keep the larger feature template distinct from the smaller enhancement template so incoming requests are easier to triage
- Community links:
  - update the issue-template support link to use the canonical Grimmory Discord invite from `README.md`
  - update the contributing guide to point at the same Discord server

- Consistency:
  - remove the stale invite URL so issue intake, contributor docs, and the repository landing page all reference the same community link
@coderabbitai

coderabbitai Bot commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 34a4a624-3abb-4c0f-b7a4-9f7cc0579777

📥 Commits

Reviewing files that changed from the base of the PR and between 21a3478 and c0c47ac.

📒 Files selected for processing (3)
  • .github/ISSUE_TEMPLATE/config.yml
  • CONTRIBUTING.md
  • README.md
✅ Files skipped from review due to trivial changes (2)
  • .github/ISSUE_TEMPLATE/config.yml
  • CONTRIBUTING.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • README.md

📝 Walkthrough

Walkthrough

The PR introduces a repository-wide just command surface (root + component Justfiles), rebrands project strings from "Booklore" to "Grimmory", adds multiple GitHub Issue Forms templates, updates CI workflows to invoke just, and adds component-level CONTRIBUTING/README docs and tooling metadata (mise.toml, Docker compose updates).

Changes

Cohort / File(s) Summary
Issue templates — edits
.github/ISSUE_TEMPLATE/bug_report.yml, .github/ISSUE_TEMPLATE/feature_request.yml, .github/ISSUE_TEMPLATE/config.yml
Rebranded text/description and placeholders from Booklore → Grimmory; changed labels to needs-triage; added/updated type fields and updated Discord invite URL and version placeholder.
Issue templates — new
.github/ISSUE_TEMPLATE/documentation.yml, .github/ISSUE_TEMPLATE/enhancement.yml, .github/ISSUE_TEMPLATE/performance.yml
Added three structured Issue Form templates (Documentation, Enhancement, Performance) with required/optional form fields and standardized guidance.
Just integration — new files
Justfile, booklore-api/Justfile, booklore-ui/Justfile, tools/release/Justfile
Added root and component Justfiles defining recipes for bootstrap/check/test/build/dev/db/image-run/image-build and release preview/run workflows (semantic-release wrappers).
Workflows — switch to just
.github/workflows/release-main.yml, .github/workflows/release-preview.yml, .github/workflows/test-suite.yml
Added step to install just via taiki-e/install-action; replaced direct npm/npx/gradle commands with just subcommands in release and test pipelines.
Docs — root & developer surfaces
CONTRIBUTING.md, README.md, mise.toml
Documented preferred command surface (root Justfile), updated contributor/setup docs to use just, added mise.toml pinning Java/Node and a Corepack postinstall hook.
Docs — backend component
booklore-api/README.md, booklore-api/CONTRIBUTING.md
Added backend README and CONTRIBUTING with Spring Boot/Gradle details, conventions (DI, logging, migrations), and just-driven workflows.
Docs — frontend component
booklore-ui/README.md, booklore-ui/CONTRIBUTING.md
Added/updated frontend README and CONTRIBUTING to document Angular 21 stack, conventions (standalone components, inject(), i18n), and just-based commands.
Runtime config — docker / names
dev.docker-compose.yml
Switched MariaDB/database name and credentials from booklore to grimmory, updated related env vars and healthcheck auth.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant CI as CI Runner (GitHub Actions)
  participant Install as taiki-e/install-action
  participant Just as just CLI
  participant Backend as booklore-api (Gradle)
  participant Frontend as booklore-ui (npm)
  participant Release as tools/release (semantic-release)

  CI->>Install: add `just` to PATH
  CI->>Just: run `just ...` (test / release preview / release)
  Just->>Backend: invoke `api::test` / `api::build`
  Backend-->>Just: test/build results
  Just->>Frontend: invoke `ui::test` / `ui::build`
  Frontend-->>Just: test/build results
  alt release job
    Just->>Release: run `release preview` / `release run`
    Release-->>Just: semantic-release output
  end
  Just-->>CI: exit code / logs
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 I hopped in quick with recipes to share,
Swapped Booklore names for Grimmory flair.
Justfiles knitted roots to UI and API,
Issue forms neat, workflows now spry,
A tiny rabbit cheers — hop, test, deploy!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description uses the template structure but is incomplete; it includes bullet points and the required template sections (Description and Linked Issue) but lacks substantive explanation of the changes beyond section headers. Expand the Changes section with specific details about the just command surface, issue templates, and documentation updates to provide reviewers with a complete understanding of the modifications.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: introducing developer experience improvements through a unified command interface and better contributor tooling.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/improve-devex

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (2)
.github/ISSUE_TEMPLATE/bug_report.yml (1)

3-3: Confirm that your issue triage process is prepared for manual categorization.

All issue templates now consistently use ["needs-triage"], which means issues won't be automatically categorized by type. This requires maintainers to manually label issues during triage. No existing workflow automations depend on the "bug" label, so there are no automation conflicts. Ensure your team has the capacity to triage and properly categorize incoming issues.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/ISSUE_TEMPLATE/bug_report.yml at line 3, The issue template
currently sets labels to ["needs-triage"], which disables automatic
categorization; confirm and update the triage process by either restoring an
automatic "bug" label or adding explicit triage guidance in the template (change
the labels array or add a short checklist field) and ensure the team has an
assigned rotation or workflow to manually apply final labels for functions that
process new issues; update the .github ISSUE_TEMPLATE entry referencing the
labels array value ["needs-triage"] and/or add a visible triage instruction
block so maintainers know how to categorize incoming issues.
dev.docker-compose.yml (1)

52-54: Node version mismatch with mise.toml.

The UI service uses node:22-alpine while mise.toml pins Node 24 for local development. Consider aligning these versions for consistency between containerized and local development environments.

♻️ Suggested alignment
   ui:
-    image: node:22-alpine
+    image: node:24-alpine
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@dev.docker-compose.yml` around lines 52 - 54, The docker-compose UI service
is using image node:22-alpine which conflicts with mise.toml pinning Node 24;
update the ui service image reference (the "ui" service's image value) to match
the pinned Node version (e.g., change node:22-alpine to node:24-alpine) or,
alternatively, update mise.toml if you want to standardize on Node 22—ensure the
ui service image and mise.toml Node pin are the same to keep local and container
dev environments consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/ISSUE_TEMPLATE/bug_report.yml:
- Line 64: Replace the static placeholder string "Grimmory Version: v2.3.0" with
the current application version "v0.38.2" (as declared in
deploy/helm/grimmory/Chart.yaml) so the bug report template shows the real
version; locate the line containing the "Grimmory Version: v2.3.0" placeholder
and update it to "Grimmory Version: v0.38.2".

In `@booklore-api/README.md`:
- Around line 7-12: Update CONTRIBUTING.md to make it the single source of truth
for platform/component versions: change the Spring Boot entry to match
build.gradle's declared 4.0.3, and update Angular and PrimeNG to match
package.json (Angular 21.2.4 and PrimeNG 21.1.1); then scan
booklore-api/README.md and booklore-ui/README.md for any conflicting version
mentions (Spring Boot, Java, Angular, PrimeNG) and align or remove redundant
entries so all READMEs and CONTRIBUTING.md consistently reflect the versions
declared in build.gradle and package.json.

In `@CONTRIBUTING.md`:
- Around line 381-387: The TOC still links to the old backend/frontend anchors;
update the Table of Contents so it points to the renamed section "Component
Conventions" (use the `#component-conventions` anchor) and either replace or
remove the stale "#backend-rules" and "#frontend-rules" links, making sure the
entries for booklore-api/CONTRIBUTING.md and booklore-ui/CONTRIBUTING.md are
correctly linked or nested under the Component Conventions entry.

In `@Justfile`:
- Around line 73-84: Remove the non-portable "--network host" from the image-run
recipe and run the container using the default bridge network so the "-p
6060:6060" port mapping works across macOS/Windows; to preserve host
reachability where needed, add an explicit host entry (e.g., via
"--add-host=host.docker.internal:host-gateway" or using host.docker.internal) so
services inside the container can reach the host. Update the image-run recipe
that defines local_container_name, tag, and the SPRING_DATASOURCE_* envs to
remove "--network host" and add the cross-platform host mapping option while
keeping the existing "-p 6060:6060" and volume mounts.

---

Nitpick comments:
In @.github/ISSUE_TEMPLATE/bug_report.yml:
- Line 3: The issue template currently sets labels to ["needs-triage"], which
disables automatic categorization; confirm and update the triage process by
either restoring an automatic "bug" label or adding explicit triage guidance in
the template (change the labels array or add a short checklist field) and ensure
the team has an assigned rotation or workflow to manually apply final labels for
functions that process new issues; update the .github ISSUE_TEMPLATE entry
referencing the labels array value ["needs-triage"] and/or add a visible triage
instruction block so maintainers know how to categorize incoming issues.

In `@dev.docker-compose.yml`:
- Around line 52-54: The docker-compose UI service is using image node:22-alpine
which conflicts with mise.toml pinning Node 24; update the ui service image
reference (the "ui" service's image value) to match the pinned Node version
(e.g., change node:22-alpine to node:24-alpine) or, alternatively, update
mise.toml if you want to standardize on Node 22—ensure the ui service image and
mise.toml Node pin are the same to keep local and container dev environments
consistent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ec275c41-7143-40ab-9794-17345681c472

📥 Commits

Reviewing files that changed from the base of the PR and between 3c7550c and 21a3478.

📒 Files selected for processing (21)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/ISSUE_TEMPLATE/documentation.yml
  • .github/ISSUE_TEMPLATE/enhancement.yml
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • .github/ISSUE_TEMPLATE/performance.yml
  • .github/workflows/release-main.yml
  • .github/workflows/release-preview.yml
  • .github/workflows/test-suite.yml
  • CONTRIBUTING.md
  • Justfile
  • README.md
  • booklore-api/CONTRIBUTING.md
  • booklore-api/Justfile
  • booklore-api/README.md
  • booklore-ui/CONTRIBUTING.md
  • booklore-ui/Justfile
  • booklore-ui/README.md
  • dev.docker-compose.yml
  • mise.toml
  • tools/release/Justfile

description: Help us understand your environment
placeholder: |
- Booklore Version: v1.1.0
- Grimmory Version: v2.3.0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check the latest semantic version tag

git tag --list 'v*' --sort=-v:refname | head -5

Repository: grimmory-tools/grimmory

Length of output: 49


🏁 Script executed:

#!/bin/bash
# Check the actual file content and look for version information
echo "=== Content of bug_report.yml around line 64 ==="
cat -n .github/ISSUE_TEMPLATE/bug_report.yml | sed -n '55,75p'

echo -e "\n=== Check for any git tags (all patterns) ==="
git tag --list | head -20

echo -e "\n=== Look for version info in package files ==="
fd -e package.json -e setup.py -e pyproject.toml -e version.py | head -10

Repository: grimmory-tools/grimmory

Length of output: 969


🏁 Script executed:

#!/bin/bash
# Search for version references in the repository
echo "=== Search for version mentions in README ==="
fd README | xargs -I {} cat {} 2>/dev/null | grep -i version | head -10

echo -e "\n=== Search for version in all Python/JS files ==="
rg "version\s*[=:].*[vV]" --max-count=10 -i

echo -e "\n=== Check for version in __init__.py or setup files ==="
fd -e __init__.py | xargs -I {} cat {} 2>/dev/null | grep -i version | head -5

echo -e "\n=== List all files in root and src directories ==="
ls -la | head -20
fd --max-depth 2 -type f | head -30

Repository: grimmory-tools/grimmory

Length of output: 50567


Use the actual application version in the placeholder.

The version placeholder shows v2.3.0, but the actual application version in the codebase is v0.38.2 (from deploy/helm/grimmory/Chart.yaml). Update the placeholder to v0.38.2 to reflect the current version and avoid confusing users reporting bugs.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/ISSUE_TEMPLATE/bug_report.yml at line 64, Replace the static
placeholder string "Grimmory Version: v2.3.0" with the current application
version "v0.38.2" (as declared in deploy/helm/grimmory/Chart.yaml) so the bug
report template shows the real version; locate the line containing the "Grimmory
Version: v2.3.0" placeholder and update it to "Grimmory Version: v0.38.2".

Comment thread booklore-api/README.md
Comment on lines +7 to +12
- Java 25
- Spring Boot 4
- Gradle Wrapper
- Spring Data JPA + Flyway
- MariaDB in production, H2 for selected tests
- JUnit 5, Mockito, AssertJ, JaCoCo

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

❓ Verification inconclusive

Script executed:

#!/bin/bash
# Verify documented stack versions against declared project config.

echo "== Docs version mentions =="
rg -n "Angular [0-9]+|PrimeNG|Spring Boot|Java [0-9]+" CONTRIBUTING.md booklore-api/README.md booklore-ui/README.md

echo
echo "== Backend declarations =="
fd -a "build.gradle|build.gradle.kts|gradle.properties" | xargs -I{} rg -n "spring-boot|org.springframework.boot|java|toolchain|sourceCompatibility" "{}"

echo
echo "== Frontend declarations =="
fd -a "package.json" | xargs -I{} rg -n "\"@angular/core\"|\"primeng\"|\"typescript\"" "{}"

echo
echo "== Toolchain pins =="
fd -a "mise.toml" | xargs -I{} cat "{}"

Repository: grimmory-tools/grimmory


Repository: grimmory-tools/grimmory
Exit code: 0

stdout:

== Docs version mentions ==
booklore-ui/README.md:7:- Angular 21
booklore-ui/README.md:9:- PrimeNG + PrimeIcons
booklore-api/README.md:3:The `booklore-api` project is the Spring Boot backend for Grimmory. It owns the HTTP API, database migrations, background processing, authentication, and the packaged runtime jar that the production container runs.
booklore-api/README.md:7:- Java 25
booklore-api/README.md:8:- Spring Boot 4
CONTRIBUTING.md:11:- **Frontend:** Angular 20, TypeScript, PrimeNG 19
CONTRIBUTING.md:12:- **Backend:** Java 25, Spring Boot 3.5
CONTRIBUTING.md:92:├── booklore-ui/             # Angular frontend (TypeScript, PrimeNG)
CONTRIBUTING.md:93:├── booklore-api/            # Spring Boot backend (Java 25, Gradle)
CONTRIBUTING.md:237:To verify your changes in an environment identical to production, build and run the full Docker image locally. The multi-stage `Dockerfile` in the project root compiles both the Angular frontend and the Spring Boot backend, so you don't need any local toolchain beyond Docker.

== Backend declarations ==
2:    id 'java'
3:    id 'org.springframework.boot' version '4.0.3'
17:java {
18:    toolchain {
36:    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
37:    implementation 'org.springframework.boot:spring-boot-starter-web'
38:    implementation 'org.springframework.boot:spring-boot-starter-validation'
39:    implementation 'org.springframework.boot:spring-boot-starter-websocket'
40:    implementation 'org.springframework.boot:spring-boot-starter-actuator'
41:    implementation 'org.springframework.boot:spring-boot-configuration-processor'
42:    implementation 'org.springframework.boot:spring-boot-starter-security'
43:    implementation 'org.springframework.boot:spring-boot-starter-mail'
44:    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
50:    implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.7'
51:    implementation 'org.springframework.boot:spring-boot-starter-flyway'
117:    implementation 'org.springframework.boot:spring-boot-starter-cache'
121:    testImplementation 'org.springframework.boot:spring-boot-starter-test'
122:    testImplementation 'org.springframework.boot:spring-boot-test-autoconfigure'

== Frontend declarations ==
19:    "@angular/core": "^21.2.4",
44:    "primeng": "^21.1.1",
65:    "typescript": "~5.9.3",

== Toolchain pins ==
min_version = "2024.9.5"

[tools]
java = "temurin-25"
node = "24"

[settings]
experimental = true

[hooks]
postinstall = "npx corepack enable"

[env]
_.path = ["{{config_root}}/node_modules/.bin"]

Synchronize documentation versions across contributor and component READMEs.

Version drift extends beyond Spring Boot: booklore-api/README.md documents Spring Boot 4, CONTRIBUTING.md documents Spring Boot 3.5 (both outdated compared to the declared 4.0.3 in build.gradle). Additionally, CONTRIBUTING.md lists Angular 20 and PrimeNG 19 while actual package.json versions are 21.2.4 and 21.1.1 respectively, and booklore-ui/README.md correctly lists Angular 21. Update CONTRIBUTING.md as the central source of truth to match declared versions in build.gradle and package.json.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@booklore-api/README.md` around lines 7 - 12, Update CONTRIBUTING.md to make
it the single source of truth for platform/component versions: change the Spring
Boot entry to match build.gradle's declared 4.0.3, and update Angular and
PrimeNG to match package.json (Angular 21.2.4 and PrimeNG 21.1.1); then scan
booklore-api/README.md and booklore-ui/README.md for any conflicting version
mentions (Spring Boot, Java, Angular, PrimeNG) and align or remove redundant
entries so all READMEs and CONTRIBUTING.md consistently reflect the versions
declared in build.gradle and package.json.

Comment thread CONTRIBUTING.md
Comment on lines +381 to 387
## Component Conventions

## Frontend Conventions
Detailed coding conventions now live with each project:

- Follow the [Angular style guide](https://angular.dev/style-guide).
- All components are standalone. No NgModules.
- Use `inject()` for dependency injection. No constructor injection.
- PrimeNG for UI components. SCSS for styling. Transloco for i18n.
- Testing with Vitest (not Karma/Jasmine).
- All UI features must be responsive (desktop + mobile).
- Backend rules: [booklore-api/CONTRIBUTING.md](booklore-api/CONTRIBUTING.md)
- Frontend rules: [booklore-ui/CONTRIBUTING.md](booklore-ui/CONTRIBUTING.md)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Update the Table of Contents to match the renamed section.

Line 381 renamed the section to Component Conventions, but the TOC still points to backend/frontend convention anchors, which breaks in-page navigation.

🛠️ Suggested TOC fix
-- [Backend Conventions](`#backend-conventions`)
-- [Frontend Conventions](`#frontend-conventions`)
+- [Component Conventions](`#component-conventions`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CONTRIBUTING.md` around lines 381 - 387, The TOC still links to the old
backend/frontend anchors; update the Table of Contents so it points to the
renamed section "Component Conventions" (use the `#component-conventions` anchor)
and either replace or remove the stale "#backend-rules" and "#frontend-rules"
links, making sure the entries for booklore-api/CONTRIBUTING.md and
booklore-ui/CONTRIBUTING.md are correctly linked or nested under the Component
Conventions entry.

Comment thread Justfile
Comment on lines +73 to +84
image-run tag=local_image_tag db_url=local_db_url db_user=local_db_user db_password=local_db_password:
docker run --rm -it \
--name "{{ local_container_name }}" \
--network host \
-e "SPRING_DATASOURCE_URL={{ db_url }}" \
-e "SPRING_DATASOURCE_USERNAME={{ db_user }}" \
-e "SPRING_DATASOURCE_PASSWORD={{ db_password }}" \
-v ./shared/data:/app/data \
-v ./shared/books:/books \
-v ./shared/bookdrop:/bookdrop \
-p 6060:6060 \
"{{ tag }}"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

For Docker Engine / Docker Desktop current docs: is docker run --network hostsupported on macOS and Windows, and are-p published ports ignored when host networking is enabled?

💡 Result:

  • macOS & Windows: docker run --network host is not supported in Docker Engine on macOS/Windows, but it is supported in Docker Desktop 4.34+ as an opt-in feature (Settings → Resources → Network → “Enable host networking”). It works for Linux containers; it does not work for Windows containers. [1]
  • Published ports with host networking: When --network host is used, port-mapping does not apply; -p/--publish and -P/--publish-all are ignored (Docker emits a warning that published ports are discarded). [1]

Sources:
[1] Docker Docs — Host network driver (--network host) https://docs.docker.com/engine/network/drivers/host/


--network host is not portable across platforms and makes port mapping ineffective.

Line 76 uses --network host, which is unsupported on Docker Engine for macOS and Windows (works only on Linux). Even in Docker Desktop 4.34+ where this is available as an opt-in feature, line 83's -p 6060:6060 port mapping is discarded and ignored. This creates confusion and breaks the setup for non-Linux users.

Use host.docker.internal for cross-platform compatibility:

🌐 Portable alternative
-local_db_url := 'jdbc:mariadb://localhost:3366/grimmory?createDatabaseIfNotExist=true'
+local_db_url := 'jdbc:mariadb://host.docker.internal:3366/grimmory?createDatabaseIfNotExist=true'

 image-run tag=local_image_tag db_url=local_db_url db_user=local_db_user db_password=local_db_password:
     docker run --rm -it \
       --name "{{ local_container_name }}" \
-      --network host \
+      --add-host=host.docker.internal:host-gateway \
       -e "SPRING_DATASOURCE_URL={{ db_url }}" \
       -e "SPRING_DATASOURCE_USERNAME={{ db_user }}" \
       -e "SPRING_DATASOURCE_PASSWORD={{ db_password }}" \
       -v ./shared/data:/app/data \
       -v ./shared/books:/books \
       -v ./shared/bookdrop:/bookdrop \
       -p 6060:6060 \
       "{{ tag }}"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Justfile` around lines 73 - 84, Remove the non-portable "--network host" from
the image-run recipe and run the container using the default bridge network so
the "-p 6060:6060" port mapping works across macOS/Windows; to preserve host
reachability where needed, add an explicit host entry (e.g., via
"--add-host=host.docker.internal:host-gateway" or using host.docker.internal) so
services inside the container can reach the host. Update the image-run recipe
that defines local_container_name, tag, and the SPRING_DATASOURCE_* envs to
remove "--network host" and add the cross-platform host mapping option while
keeping the existing "-p 6060:6060" and volume mounts.

@balazs-szucs balazs-szucs left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍 Clean.

- Community links:
  - replace the old Discord invite code with the new `9YJ7HB4n8T` invite in the repository README
  - update the contributor guide to point at the same server
  - align the issue-template support link with the same canonical invite

- Consistency:
  - keep the public docs and issue intake flow on a single Discord destination so users and contributors land in the right community space
@imajes imajes merged commit ccefdcd into develop Mar 24, 2026
16 checks passed
@imajes imajes deleted the feat/improve-devex branch March 24, 2026 16:34
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