Skip to content

improve shared cache docs - #4

Merged
KevinGruber2001 merged 4 commits into
mainfrom
docs/improve-gradle-cache-docs
Mar 23, 2026
Merged

KevinGruber2001 merged 4 commits into
mainfrom
docs/improve-gradle-cache-docs

Conversation

@KevinGruber2001

@KevinGruber2001 KevinGruber2001 commented Mar 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • Documentation
    • Updated cache infrastructure docs (new in-memory cache and role-based auth), expanded monitoring (pre-built Grafana dashboard, exporter) and health/metrics endpoints, and added cache API docs with method-level access
    • Rewrote integration notes for cloud IDE build cache usage
  • Style
    • Added dark-mode styles across buttons, homepage, and imprint pages
  • Content
    • Reordered top navigation/footer sections and homepage feature order; removed a sidebar contact block from the Imprint page

@coderabbitai

coderabbitai Bot commented Mar 22, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Documentation switches the cache service from MinIO to Redis 7 with reader/writer HTTP Basic roles, adds health and cache endpoints, and expands observability with a Redis exporter and a Grafana dashboard; site navigation order and dark-mode styles were adjusted and a sidebar imprint block was removed.

Changes

Cohort / File(s) Summary
Cache Service Documentation
docs/developer/projects/eduide-shared-cache.md
Replaced MinIO-based persistent storage with Redis 7 in-memory cache; added role-based HTTP Basic auth (reader/writer), documented /ping and /health, /metrics, and /cache/:key operations, added Redis exporter sidecar and pre-built Grafana dashboard; updated dependencies and integration framing for cloud IDE Gradle cache.
Site navigation & pages
docusaurus.config.ts, src/pages/index.tsx
Reordered navbar/footer section links and rearranged homepage sections array (Student moved up, Developer moved to end) to match updated navigation ordering.
Dark-mode styling
src/css/custom.css, src/pages/imprint.module.css, src/pages/index.module.css
Added dark-theme overrides for secondary buttons, imprint page, and homepage components (backgrounds, cards, typography, borders, shadows) under [data-theme='dark'].
Imprint content
src/pages/imprint.tsx
Removed the sidebar "Responsible for content" block from the Imprint page aside while leaving the main article section intact.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A Cache-Hopping Note

From buckets to RAM I bound and prance,
Reader and writer take their stance,
Metrics sparkle on Grafana's face,
Health pings hum in steady pace,
Students leap—builds finish in advance. 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The PR title 'improve shared cache docs' is vague and generic, using non-descriptive language that doesn't convey the specific nature of the changes beyond a general documentation improvement. Consider a more specific title that reflects the main change, such as 'Switch cache backend from MinIO to Redis with updated docs' or 'Update shared cache documentation for Redis implementation'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/improve-gradle-cache-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
docs/developer/projects/eduide-shared-cache.md (2)

34-43: Consider documenting TLS/HTTPS requirements for production deployment.

The API endpoints table documents HTTP Basic Authentication for cache operations, but there's no mention of TLS/HTTPS. In production environments, HTTP Basic Auth should be transmitted over HTTPS to prevent credential exposure. Consider adding:

  • A note that HTTPS/TLS should be configured in production
  • Reference to ingress/TLS configuration in the Helm charts
  • Security best practices for credential management
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/developer/projects/eduide-shared-cache.md` around lines 34 - 43, Update
the "API Endpoints" documentation to add a clear production security note
stating that HTTP Basic Auth must be used only over HTTPS/TLS and that TLS
termination should be configured for endpoints such as `/ping`, `/health`,
`/metrics`, and `/cache/:key`; include a brief pointer to the Helm ingress/TLS
configuration (mention ingress TLS certs and secret references) and call out
credential best practices (use short-lived tokens, rotate credentials, store
secrets in a secret manager) so operators know to enable TLS and follow secure
credential management when deploying these endpoints.

15-15: Consider documenting Redis persistence and volatility characteristics.

Since Redis is an in-memory store (unlike the previous MinIO persistent storage), build artifacts may be lost on pod restarts or evictions. For a build cache this might be acceptable (cache miss triggers rebuild), but it would help to:

  • Explicitly note that Redis storage is volatile by default
  • Document whether Redis persistence (RDB snapshots or AOF) is enabled
  • Explain the tradeoff between cache durability and rebuild performance
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/developer/projects/eduide-shared-cache.md` at line 15, Update the
"In-Memory Storage" section to explicitly state Redis is volatile by default,
note whether RDB snapshots or AOF persistence are enabled for this deployment,
and add a short bullet explaining the tradeoff between cache durability and
rebuild performance (i.e., enable persistence to retain artifacts across pod
restarts at the cost of write/IO overhead and potential slower rebuilds vs
accept volatility for maximum build performance). Mention that cache misses will
trigger rebuilds and recommend configuration options (RDB/AOF/replication) to
achieve desired durability levels.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/developer/projects/eduide-shared-cache.md`:
- Line 27: The docs entry "Storage Backend: Redis 7" should be updated to
reference Redis 8.6.1 (or at minimum the latest Redis 8.x); change the text
"Redis 7" to "Redis 8.6.1" (or "Redis 8.x (recommended 8.6.1)") in the
docs/developer/projects/eduide-shared-cache.md file so the storage backend
version is current, and update any accompanying link if you want it to point to
the Redis 8.x release notes or download page for clarity.

---

Nitpick comments:
In `@docs/developer/projects/eduide-shared-cache.md`:
- Around line 34-43: Update the "API Endpoints" documentation to add a clear
production security note stating that HTTP Basic Auth must be used only over
HTTPS/TLS and that TLS termination should be configured for endpoints such as
`/ping`, `/health`, `/metrics`, and `/cache/:key`; include a brief pointer to
the Helm ingress/TLS configuration (mention ingress TLS certs and secret
references) and call out credential best practices (use short-lived tokens,
rotate credentials, store secrets in a secret manager) so operators know to
enable TLS and follow secure credential management when deploying these
endpoints.
- Line 15: Update the "In-Memory Storage" section to explicitly state Redis is
volatile by default, note whether RDB snapshots or AOF persistence are enabled
for this deployment, and add a short bullet explaining the tradeoff between
cache durability and rebuild performance (i.e., enable persistence to retain
artifacts across pod restarts at the cost of write/IO overhead and potential
slower rebuilds vs accept volatility for maximum build performance). Mention
that cache misses will trigger rebuilds and recommend configuration options
(RDB/AOF/replication) to achieve desired durability levels.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 164c9f1d-2d81-48a1-926a-62de9dd0c282

📥 Commits

Reviewing files that changed from the base of the PR and between 63c5ad2 and 442b477.

📒 Files selected for processing (1)
  • docs/developer/projects/eduide-shared-cache.md

- **Language**: Go (Golang)
- **Web Framework**: [Gin](https://github.com/gin-gonic/gin)
- **Storage Backend**: [MinIO](https://min.io/)
- **Storage Backend**: [Redis](https://redis.io/) 7

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 | 🟠 Major

🧩 Analysis chain

🌐 Web query:

What is the latest stable version of Redis as of March 2026?

💡 Result:

The latest stable version of Redis Open Source as of March 2026 is 8.6.1.

Citations:


🏁 Script executed:

#!/bin/bash
# Check for any Redis version references in the codebase
rg -i 'redis.*version|redis.*[0-9]+\.[0-9]+' --type yaml --type json -C2

Repository: EduIDE/Docs

Length of output: 37


Update Redis to version 8.6.1 or at minimum to the latest Redis 8.x release, as Redis 7 is now outdated. The current stable version as of March 2026 is Redis 8.6.1.

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

In `@docs/developer/projects/eduide-shared-cache.md` at line 27, The docs entry
"Storage Backend: Redis 7" should be updated to reference Redis 8.6.1 (or at
minimum the latest Redis 8.x); change the text "Redis 7" to "Redis 8.6.1" (or
"Redis 8.x (recommended 8.6.1)") in the
docs/developer/projects/eduide-shared-cache.md file so the storage backend
version is current, and update any accompanying link if you want it to point to
the Redis 8.x release notes or download page for clarity.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/css/custom.css`:
- Around line 33-40: The selectors using chained :not() like
"[data-theme='dark'] .button.button--secondary:not(`#_`):not(`#_`)" violate the
selector-not-notation rule; replace the chained :not() instances with a single
complex :not() that lists the excluded selectors as a comma-separated list or,
for this case, simply use one :not(`#_`) to satisfy stylelint (update both the
normal and :hover selectors for ".button.button--secondary" under
[data-theme='dark'] so they become "[data-theme='dark']
.button.button--secondary:not(`#_`)" and the hover variant accordingly).

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 161e6ac3-0a59-4af9-9aa0-78631e537c70

📥 Commits

Reviewing files that changed from the base of the PR and between 442b477 and 1d0cd6a.

📒 Files selected for processing (6)
  • docusaurus.config.ts
  • src/css/custom.css
  • src/pages/imprint.module.css
  • src/pages/imprint.tsx
  • src/pages/index.module.css
  • src/pages/index.tsx
💤 Files with no reviewable changes (1)
  • src/pages/imprint.tsx
✅ Files skipped from review due to trivial changes (2)
  • src/pages/index.tsx
  • src/pages/imprint.module.css

Comment thread src/css/custom.css
Comment on lines +33 to +40
[data-theme='dark'] .button.button--secondary:not(#_):not(#_) {
background-color: rgba(255, 255, 255, 0.08);
color: #e2e8f0;
}

[data-theme='dark'] .button.button--secondary:not(#_):not(#_):hover {
background-color: rgba(255, 255, 255, 0.14);
color: #e2e8f0;

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 | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify no chained simple :not() remains (expected: no matches)
rg -nP --type=css ':not\([^)]*\):not\([^)]*\)'

# Verify complex notation exists for the updated dark secondary button selectors (expected: matches)
rg -nP --type=css "\[data-theme='dark'\]\s+\.button\.button--secondary:not\(`#_`#_\)(:hover)?\s*\{"

Repository: EduIDE/Docs

Length of output: 232


🏁 Script executed:

# Find stylelint configuration files
git ls-files | grep -E "stylelint|\.stylelintrc" | head -20

Repository: EduIDE/Docs

Length of output: 37


🏁 Script executed:

# Search for stylelint config in common locations
find . -maxdepth 2 -type f \( -name ".stylelintrc*" -o -name "stylelint.config.js" -o -name "stylelint.config.mjs" \) 2>/dev/null

Repository: EduIDE/Docs

Length of output: 74


🏁 Script executed:

# Check package.json for stylelint configuration
head -100 package.json | grep -A 20 "stylelint"

Repository: EduIDE/Docs

Length of output: 37


🏁 Script executed:

cat .stylelintrc.json

Repository: EduIDE/Docs

Length of output: 1061


🌐 Web query:

stylelint selector-not-notation rule default simple complex

💡 Result:

The stylelint rule "selector-not-notation" enforces the notation used in :not pseudo-class selectors, with two options: "simple" or "complex". There is no default value; the rule must be explicitly configured with one of these options to be enabled, as no rules are turned on by default in stylelint. "simple" enforces Selectors Level 3 notation (backwards compatible with older browsers), disallowing complex selectors like :not(a, div) or :not(a.foo), but allowing :not(a):not(div) or :not(a). "complex" enforces modern Selectors Level 4 notation, disallowing simple chained notation like :not(a):not(div), but allowing :not(a, div), :not(a.foo), and more complex forms like :not(a).foo:not(:empty). Note that switching notations can change selector specificity, e.g., a:not(.foo,.bar) has specificity 0,1,1 while a:not(.foo):not(.bar) has 0,2,1. The rule is autofixable.

Citations:


🌐 Web query:

CSS :not() pseudo-class selector complex notation syntax

💡 Result:

The CSS :not pseudo-class uses the syntax :not(<>) where <> is a comma-separated list of one or more selectors. It matches elements that do not match any of the selectors in the list. The argument cannot include pseudo-elements but supports simple, compound, and complex selectors (Selectors Level 4). Examples: - Basic: p:not(.fancy) - selects p elements without class "fancy" - Multiple: p:not(.foo, .bar) - selects p elements without class "foo" or "bar" (equivalent to p:not(.foo):not(.bar)) - Complex: p:not(article *) - selects p elements not descendants of article - With invalid selectors: Use :not(:is(.foo, :invalid)) to avoid invalidating the rule, as direct invalid selectors invalidate the entire :not Key notes: - Specificity is that of the most specific selector in the :not argument. - Invalid selectors in the list invalidate the whole rule (unless wrapped in :is). - Cannot nest :not or use pseudo-elements in argument. - Defined in Selectors Level 4 (updated from Level 3's single simple selector).

Citations:


🌐 Web query:

stylelint-config-standard-scss default rules enabled selector-not-notation

💡 Result:

Yes, the "selector-not-notation" rule is enabled by default in stylelint-config-standard-scss. It inherits the setting from stylelint-config-standard, where it is explicitly set to "complex" ('selector-not-notation': 'complex'). The stylelint-config-standard-scss config extends stylelint-config-standard without overriding this rule, as confirmed by its index.js file contents, which do not mention "selector-not-notation".

Citations:


🏁 Script executed:

# Check if there's a CI config that runs stylelint
git ls-files | grep -E "\.(github/workflows|gitlab-ci|travis|circleci)" | head -20

Repository: EduIDE/Docs

Length of output: 117


🏁 Script executed:

# Look for any linting scripts in package.json
cat package.json | grep -A 5 -B 5 "lint\|style"

Repository: EduIDE/Docs

Length of output: 37


🏁 Script executed:

cat .github/workflows/deploy.yml

Repository: EduIDE/Docs

Length of output: 1015


🏁 Script executed:

cat package.json

Repository: EduIDE/Docs

Length of output: 1305


Replace invalid :not() syntax with valid complex notation to satisfy stylelint.

Lines 33 and 38 use chained simple :not() selectors, which violates the configured selector-not-notation: complex rule (inherited from stylelint-config-standard-scss).

The proposed syntax :not(##_) is invalid CSS. The :not() pseudo-class requires comma-separated selectors per CSS Selectors Level 4. Use :not(#) instead, noting this reduces specificity from 0,2,1 to 0,1,1:

Corrected fix
-[data-theme='dark'] .button.button--secondary:not(`#_`):not(`#_`) {
+[data-theme='dark'] .button.button--secondary:not(`#_`) {
   background-color: rgba(255, 255, 255, 0.08);
   color: `#e2e8f0`;
 }

-[data-theme='dark'] .button.button--secondary:not(`#_`):not(`#_`):hover {
+[data-theme='dark'] .button.button--secondary:not(`#_`):hover {
   background-color: rgba(255, 255, 255, 0.14);
   color: `#e2e8f0`;
 }
📝 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
[data-theme='dark'] .button.button--secondary:not(#_):not(#_) {
background-color: rgba(255, 255, 255, 0.08);
color: #e2e8f0;
}
[data-theme='dark'] .button.button--secondary:not(#_):not(#_):hover {
background-color: rgba(255, 255, 255, 0.14);
color: #e2e8f0;
[data-theme='dark'] .button.button--secondary:not(`#_`) {
background-color: rgba(255, 255, 255, 0.08);
color: `#e2e8f0`;
}
[data-theme='dark'] .button.button--secondary:not(`#_`):hover {
background-color: rgba(255, 255, 255, 0.14);
color: `#e2e8f0`;
}
🧰 Tools
🪛 Stylelint (17.4.0)

[error] 33-33: Expected complex :not() pseudo-class notation (selector-not-notation)

(selector-not-notation)


[error] 38-38: Expected complex :not() pseudo-class notation (selector-not-notation)

(selector-not-notation)

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

In `@src/css/custom.css` around lines 33 - 40, The selectors using chained :not()
like "[data-theme='dark'] .button.button--secondary:not(`#_`):not(`#_`)" violate the
selector-not-notation rule; replace the chained :not() instances with a single
complex :not() that lists the excluded selectors as a comma-separated list or,
for this case, simply use one :not(`#_`) to satisfy stylelint (update both the
normal and :hover selectors for ".button.button--secondary" under
[data-theme='dark'] so they become "[data-theme='dark']
.button.button--secondary:not(`#_`)" and the hover variant accordingly).

@KevinGruber2001
KevinGruber2001 merged commit 5af73b8 into main Mar 23, 2026
4 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Jul 1, 2026
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.

1 participant