Skip to content

14/05/2026 - Promotion - #41813

Merged
btsgh merged 10 commits into
masterfrom
release
May 14, 2026
Merged

14/05/2026 - Promotion#41813
btsgh merged 10 commits into
masterfrom
release

Conversation

@btsgh

@btsgh btsgh commented May 14, 2026

Copy link
Copy Markdown
Collaborator

Description

Promotion PR

Automation

/ok-to-test tags=""

🔍 Cypress test results

Caution

If you modify the content in this section, you are likely to disrupt the CI result for your PR.

wyattwalter and others added 10 commits May 8, 2026 07:50
## Summary

Upgrades the embedded MongoDB in the Appsmith Docker image from 6.0 (EOL
July 2024) to 7.0.

- **`base.dockerfile`** — switches apt repo, GPG key, and list file from
the MongoDB `6.0` stream to `7.0`. Stays on the jammy (22.04) packages
because MongoDB doesn't publish a noble (24.04) apt repo yet — same
pattern the 6.0 install already used on Ubuntu 24.04. Local smoke build
installs `mongodb-org 7.0.31` and `mongosh 2.8.2`.

- **`mongodb-fixer.sh`** — writes a `.appsmith-mongo-fcv-min` marker
file into the Mongo data directory once mongod is confirmed running
under this release. Contents record the **minimum FCV this release
commits to preserve** (constant `6.0`) — a release-level contract, not a
live FCV reading. FCV is deliberately **not** raised to 7.0 — keeping it
at 6.0 preserves the ability to downgrade back to a 6.x Appsmith
release. Raise-FCV scaffolding and a marker-value bump can come back
when MongoDB 8 needs it.

- **`entrypoint.sh`** — adds `ensure_mongodb_fcv_compatible`, a
pre-flight check that runs before supervisord starts mongod. MongoDB 7.0
refuses to start on data with FCV < 6.0; without this check, supervisord
would retry mongod three times and give up, leaving the container in a
confusing degraded state with no clear signal to the administrator.
Reader only — never writes the marker. Only runs when there's existing
local-Mongo data (gated on `shouldPerformInitdb=0 && isUriLocal=0`
inside the function).

### Decision matrix

| Data dir | Marker | Action |
|---|---|---|
| Fresh install | n/a | Skipped — nothing to check. Fixer writes the
marker (constant `6.0`) on first real boot under supervisord. |
| Has data | Present | Fast path — proceed, zero overhead. |
| Has data | Missing | One-time `mongod --fork` probe. If it starts,
proceed (fixer writes the marker on first boot under supervisord). If it
fails, hard-fail with an actionable error pointing users to roll back to
Appsmith v1.99 first. |

Marker presence alone is what's trusted — the fixer writes it only after
mongod is confirmed running under this release, so presence is proof
this release successfully boots on this data. The value (`6.0`) is
diagnostic: future Appsmith releases can inspect it to reason about
upgrade safety.

Linear:
[APP-14867](https://linear.app/appsmith/issue/APP-14867/task-upgrade-mongo-base-image-in-appsmith-to-v7)

## Test plan

- [x] **Fresh install**: empty `/appsmith-stacks` → entrypoint skips the
FCV check (`shouldPerformInitdb=0` gate is false), `init_replica_set`
initializes the data, supervisord starts mongod, fixer writes
`.appsmith-mongo-fcv-min` with `6.0`. Second boot: marker present → fast
path, skip probe.
- [x] **Happy-path upgrade**: boot `appsmith-ce:v1.99` (last 6.x
release), let the fixer run (FCV stays at 6.0), stop. Swap to this image
and boot — entrypoint runs the probe (marker from prior image is
missing), probe succeeds, fixer writes the marker. Subsequent boots are
fast.
- [x] **Failed + remediated upgrade**: boot `appsmith-ce:v1.69` (last
mongo-5 release, pre-v1.70 cutover) to seed FCV 5.0 data. Swap to this
image → expected **hard fail** with error block pointing to v1.99
rollback. Swap to `appsmith-ce:v1.99` → fixer raises FCV 5.0 → 6.0. Swap
back to this image → probe succeeds, marker written. Verifies the error
path *and* that the remediation instructions actually work end-to-end.
- [x] **Marker-missing transitional path**: with the marker present, `rm
/appsmith-stacks/data/mongodb/.appsmith-mongo-fcv-min`, reboot.
Entrypoint should log `running one-time compatibility probe`, probe
succeeds, fixer re-writes the marker.
- [x] **Base image smoke build**: `docker build -f
deploy/docker/base.dockerfile .` succeeds on linux/arm64. Image contains
`mongodb-org 7.0.31` and `mongosh 2.8.2`.
- [x] **CE→EE sync**: cherry-pick onto `community/release` and merge
into EE `release` both apply cleanly (verified locally).
- [x] **Fresh install** smoke-tested locally with the current DP image —
probe skipped on `shouldPerformInitdb=0` gate, marker written by fixer
after supervisord starts mongod.

## Out of scope

- `deploy/helm/` chart still references Bitnami MongoDB 6.0.27 in
`Chart.yaml` / `values.yaml`. That's tracked under a separate effort.

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
  * Upgraded bundled MongoDB from 6.0 to 7.0.

* **New Features**
* Added a startup compatibility probe that detects incompatible
local/embedded MongoDB feature versions and halts startup with operator
guidance when needed.
* Added a persistent marker to record confirmed DB compatibility and
skip repeated probes on subsequent startups.
* Improved post-startup DB feature-version handling to record and
persist the committed minimum FCV.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
af34f2d yet
> <hr>Tue, 05 May 2026 22:44:32 UTC
<!-- end of auto-generated comment: Cypress test results  -->

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This PR has two coordinated parts: (1) a complete rewrite of the chart's
`values.schema.json` (auto-generated from `values.yaml`), and (2) a
publish-workflow restructure to add a release channel, PR pre-flight
checks, and schema URL hosting.

They're together because the workflow surfaces and validates the new
schema, and would conflict on `helm-release.yml` if split into separate
PRs.

---

## Part 1: values.schema.json — full coverage, auto-generated

### What changed

- Annotates `deploy/helm/values.yaml` with `# @schema` comments so the
[helm-values-schema-json](https://github.com/losisin/helm-values-schema-json)
plugin can generate `values.schema.json` with full top-level coverage
(43/43 keys vs. 4/43 previously).
- Dependency pass-throughs (`redis`, `mongodb`, `postgresql`,
`prometheus`, `mongodbOperator`) use `additionalProperties: true` with
their internals hidden — only the chart-owned `enabled` condition flag
is typed (boolean).
- `applicationConfig` accepts any scalar type (`string`, `boolean`,
`integer`, `number`) for any key, since Helm/K8s stringify env-var
values when rendering. Earlier draft enforced string-only, which
rejected natural YAML like `APPSMITH_DISABLE_TELEMETRY: true`.
- New CI workflow `.github/workflows/helm-schema.yml` regenerates the
schema on PR and fails on drift between `values.yaml` and
`values.schema.json`. Pinned to Helm 4.1.4.
- New `tests/values_schema_test.yaml` helm-unittest suite (14 cases)
exercises rejection of invalid input and acceptance of pass-through
values. Picked up automatically by the existing `Helm Unit Tests`
workflow.
- Cursor rule (`.cursor/rules/regen-helm-schema.mdc`) auto-attaches when
editing `values.yaml` or `values.schema.json` to remind contributors how
to regenerate.

### Behavior changes worth flagging

1. **`mongodbOperator.enabled`** was previously the only validated key
under `mongodbOperator`. It still is — the rest of the block stays
opaque (any subchart values pass through unvalidated). Same model now
applied uniformly to all five dependency pass-throughs.

2. **`persistence.existingClaim.{enabled,name,claimName}` and
`persistence.efs.{enabled,driver,volumeHandle}`** had bare `null`
defaults in `values.yaml` (e.g. `enabled:` with no value). The
auto-generated schema initially typed these as `null`-only, which would
have rejected real-world overrides like
`persistence.existingClaim.enabled: true`. They are now annotated as
multi-type (`[boolean, \"null\"]` or `[string, \"null\"]`) so they
accept both the empty default and a concrete override. Tightening of a
previously-empty schema, not a loosening.

3. **`applicationConfig`**: enumerated `APPSMITH_*` keys are no longer
typed individually (they're hidden from the schema and serve as in-file
documentation). The block validates via `additionalProperties` only,
accepting any scalar value for any key. Trade-off: IDEs no longer
auto-complete the specific known keys, but the block is now permissive
for the real-world shapes that Helm renders fine.

### How to regenerate the schema locally

```
cd deploy/helm && helm schema \
  --schema-root.title 'Appsmith Helm chart values' \
  --schema-root.id 'https://helm.appsmith.com/values.schema.json' \
  -o values.schema.json
```

Plugin install (one-time):

```
helm plugin install --verify=false https://github.com/losisin/helm-values-schema-json.git
```

The Cursor rule provides this as on-demand context when editing the
relevant files.

---

## Part 2: helm-release.yml — release channel + PR pre-flight + schema
hosting

### What changed

- **Adds a release channel.** Pushes to the `release` branch publish as
`<chart-yaml-version>-release.<short-sha>` (e.g.
`3.8.0-release.abc1234`). SemVer treats the `-release.SHA` suffix as a
pre-release, so default `helm install yourrepo/appsmith` skips these —
clients must pass `--devel` to opt in. Master keeps publishing the
on-disk version verbatim as stable.

- **PR pre-flight version check.** PRs touching `deploy/helm/**` now run
a `curl HEAD` against the public chart URL for the on-disk version. If a
tarball at that version already exists, CI fails with an actionable
message:

  ```
Error: Chart version 3.7.0 is already published at
https://helm.appsmith.com/appsmith-3.7.0.tgz.
  Error: Bump 'version:' in deploy/helm/Chart.yaml before merging.
  ```

Catches \"I forgot to bump the version\" before the PR lands. No AWS
creds needed — works on fork PRs.

- **Single combined job** (was two): version-collision check is shared
between PR and push paths. Same code, same logic, same failure mode.

- **`index.yaml` regenerated from bucket state** on every publish rather
than `--merge` appended. This decouples cleanup from publish: any S3
lifecycle rule that expires `-release.*` tarballs is automatically
reflected in the next published index, with no separate cleanup workflow
needed.

- **`values.schema.json` is now uploaded alongside the chart on stable
publishes.** Enables IDE schema validation via `# yaml-language-server:
$schema=https://helm.appsmith.com/values.schema.json` in any values.yaml
file.

- **`Cache-Control: public, max-age=60`** on `index.yaml` and
`values.schema.json` so `helm repo update` and IDE schema fetches pick
up new versions promptly even if the bucket is fronted by a CDN.
Tarballs (content-addressed via digest in index) keep default caching.

- **Helm 4.1.4** (was v3.6.3) via `setup-helm@v4` (was v1).

- **`HELM_S3_BUCKET` and `HELM_REPO_URL` are now repository variables,
not secrets.** Both values are public (bucket name and chart URL).
Variables are accessible to fork PRs (unlike secrets), which is required
for the version-check path. Naming matches what each value represents:
  - `vars.HELM_S3_BUCKET` — bucket name for `aws s3 …` operations
- `vars.HELM_REPO_URL` — full URL (incl. scheme) clients fetch charts
from

- **Drops `workflow_dispatch`** (Actions UI re-runs cover the rare
manual case) and the unused `helm repo add bitnami` step (`helm dep
build` resolves all dependencies from Chart.yaml URLs without needing
repos pre-registered).

### Behavior matrix

| Trigger | ref | Version check | Publish |
|---|---|---|---|
| PR (any target) | `refs/pull/N/merge` | yes | no |
| push to master | `refs/heads/master` | yes | yes (publishes base
version as stable) |
| push to release | `refs/heads/release` | no (release channel) | yes
(publishes `base-release.SHA`) |

---

## Test plan

- [x] CI: `Helm Values Schema` workflow passes (regenerates schema,
finds no drift) — passing on most recent run
- [x] CI: `Helm Unit Tests` workflow passes (existing 53 tests + new 14
schema cases = 67 total)
- [x] Local: `helm lint deploy/helm/` succeeds
- [x] Manual smoke test: chart deployed via ArgoCD against a homelab
cluster from a personal S3 bucket, including the `applicationConfig`
boolean/integer regressions that drove the multi-type fix
- [x] Pre-merge: confirm `vars.HELM_S3_BUCKET` and `vars.HELM_REPO_URL`
are set in the repo Actions settings
- [x] Pre-merge: confirm AWS publish role has `s3:PutObjectTagging`
permission (needed for the channel tag on release-channel uploads)

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a comprehensive, stricter Helm values schema with richer
annotations and a chart version bump.

* **Tests**
* Added a test suite validating schema enforcement with passing and
failing value sets.

* **Chores**
* CI: added automated schema-check workflow, refined chart publish
workflow (stable/release channel handling, immutability check, packaging
and index update), renamed Helm unit-test job, and adjusted publish
triggers.

* **Documentation**
* Added a rule documenting how to regenerate and validate the values
schema.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
f2fc338 yet
> <hr>Fri, 08 May 2026 17:01:09 UTC
<!-- end of auto-generated comment: Cypress test results  -->
## Summary
- WarpBuild provisions runners across both AWS and Azure. Ubuntu
cloud-init auto-configures the apt mirror based on the host cloud, so
Azure-hosted runners use `azure.archive.ubuntu.com` (configured in
`/etc/apt/apt-mirrors.txt` as priority 1) — which has been hanging
connections (not erroring) due to ongoing Canonical mirror flakiness.
Affected matrix shards stall on `apt-get update` for hours instead of
failing fast.
- Skip `apt-get update` entirely. `apt-get install ./chrome.deb` uses
the runner image's existing apt cache (populated at image-provision
time) to resolve Chrome's stable transitive deps (libnss3, libgbm1,
libxkbcommon0, etc.).

## Verification
Verified on the EE counterpart
([appsmithorg/appsmith-ee#9034](appsmithorg/appsmith-ee#9034)):
all 60 matrix shards completed Chrome install in 12–42s (avg 16s) with
zero hangs. The 4 test failures in that run were unrelated Cypress
flakes (Chrome installed cleanly on every shard).

Touches the 4 Cypress CI workflows that install Chrome 129:
- `ci-test-custom-script.yml`
- `ci-test-hosted.yml`
- `ci-test-limited.yml`
- `ci-test-limited-with-count.yml`

## Test plan
- [ ] Trigger a `ci-test` run and confirm matrix shards complete Chrome
install in well under a minute, regardless of cloud provider
- [ ] Verify `google-chrome --version` still prints `129.0.6668.100`
post-install
- [ ] Confirm no `apt-get update` errors (since we no longer run it)

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Updated CI Chrome installation steps across workflows: removed apt
index refresh, made Chrome removal tolerant of failures, standardized a
fixed Chrome version download, and added timeout/retry options.
* Switched some download sources to hosted/artifact mirrors and added
minor workflow comments; overall CI logic and other steps remain
unchanged.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
e666968 yet
> <hr>Wed, 06 May 2026 19:08:49 UTC
<!-- end of auto-generated comment: Cypress test results  -->

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Description
> [!TIP]  
> _Add a TL;DR when the description is longer than 500 words or
extremely technical (helps the content, marketing, and DevRel team)._
>
> _Please also include relevant motivation and context. List any
dependencies that are required for this change. Add links to Notion,
Figma or any other documents that might be relevant to the PR._


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags=""

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]  
> If you modify the content in this section, you are likely to disrupt
the CI result for your PR.

<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No
## Description
> [!TIP]  
> _Add a TL;DR when the description is longer than 500 words or
extremely technical (helps the content, marketing, and DevRel team)._
>
> _Please also include relevant motivation and context. List any
dependencies that are required for this change. Add links to Notion,
Figma or any other documents that might be relevant to the PR._


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.Git"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/25729896761>
> Commit: 8c19245
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=25729896761&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Git`
> Spec:
> <hr>Tue, 12 May 2026 11:15:49 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Discard-changes now runs asynchronously in the background for faster
responses.
* New option to skip validation and publishing during discard
operations.

* **Behavior Change**
* Post-branch creation cleanup is best-effort async so branch creation
completes without waiting.

* **Tests**
* Added unit tests covering async discard-changes event publication and
handling.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41785)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…E-2025-52999 (#41789)

## Summary

Remediates **CVE-2025-52999** (jackson-core deeply-nested-JSON DoS,
**CVSS 8.7 High**) in the arangoDBPlugin runtime by upgrading the parent
library that bundles the vulnerable jackson-core, rather than overriding
the transitive dependency.

## Root cause (verified)

`arangodb-java-driver:6.12.3` (June 2021, EOL) transitively pulls
`com.arangodb:velocypack:2.5.3`, which **shades a relocated copy of
`com.fasterxml.jackson.core:jackson-core:2.11.3`** at the package path
`com.arangodb.velocypack.deps.com.fasterxml.jackson` inside the
velocypack jar. The relocated
`META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties`
declares `version=2.11.3` — that is what Docker Scout detects at
`/opt/appsmith/server/mongo/plugins/arangodbPlugin-1.0-SNAPSHOT/lib/`.
velocypack uses these shaded classes to convert ArangoDB responses on
the parsing path, so a deeply-nested JSON payload from a user-configured
ArangoDB server can trigger `StackOverflowError` per the original
customer justification.

## Fix approach (industry-standard, no transitive override)

Upgrade the parent library: `arangodb-java-driver` `6.12.3` → `7.25.0`
(Jan 2026, latest stable). Driver 7.x:
- Removes `velocypack` from the default transitive set (only used when
HTTP_VPACK content type is selected, which we no longer use after
switching to the v7 default `HTTP2_JSON`). The shaded vulnerable jar
disappears entirely.
- Ships plain `jackson-core:2.20.0` via the
`com.arangodb:jackson-serde-json` module, resolved to `2.17.0` after
parent-managed `jackson-bom.version`. Both are well above the 2.15.0 fix
threshold.
- Auto-configures Jackson `StreamReadConstraints` (added in driver
7.5.0) as defense-in-depth, directly hardening the per-request DoS
vector named in the customer justification.

No `<dependencyManagement>` overrides, no transitive pinning, no shading
workarounds.

Fixes
https://linear.app/appsmith/issue/APP-15211/resolve-cve-2025-52999-jackson-core-deeply-nested-json-dos-in

## Changes

- **[`pom.xml`](app/server/appsmith-plugins/arangoDBPlugin/pom.xml)** —
bump driver `6.12.3` → `7.25.0`; drop now-unused
`org.apache.httpcomponents:httpclient` (v7 uses Vert.x WebClient
internally; verified zero direct usages in plugin source via `rg
"org\.apache\.http"`).
-
**[`ArangoDBPlugin.java`](app/server/appsmith-plugins/arangoDBPlugin/src/main/java/com/external/plugins/ArangoDBPlugin.java)**
— migrate to v7 API:
- `db.query(query, null, null, Map.class)` → `db.query(query, Map.class,
null, null)` (parameter order changed in v7)
  - `useProtocol(...)` → `protocol(...)` (renamed in v7)
- `Protocol.HTTP_VPACK` → `Protocol.HTTP2_JSON` (the v7 default; avoids
needing the `jackson-serde-vpack` extra module)
- Register a custom `JacksonSerde` with `USE_LONG_FOR_INTS` so query
results preserve `Long` for integer values, matching v6 VPACK behavior.
This keeps the structure-tree column types stable for users (e.g., a
small integer like `age=20` still surfaces as `Long`, not `Integer`).
-
**[`ArangoDBErrorUtils.java`](app/server/appsmith-plugins/arangoDBPlugin/src/main/java/com/external/utils/ArangoDBErrorUtils.java)**
— walk the cause chain for `UnknownHostException` and also detect the v7
`Cannot contact any host` message, so the user-visible bad-host error
message stays the same as v6.
-
**[`ArangoDBPluginTest.java`](app/server/appsmith-plugins/arangoDBPlugin/src/test/java/com/external/plugins/ArangoDBPluginTest.java)**
— align fixture with the protocol/serde change; replace test-fixture
`LocalDate.of(...)` with a `Map` matching the test's own JSON Schema,
and `BigDecimal(...)` with a `String` for the currency field (more
realistic; doesn't depend on driver wire-format quirks). No production
impact.

## Validation

### `mvn dependency:tree` — vulnerable deps absent

```
+- com.arangodb:arangodb-java-driver:jar:7.25.0:compile
|  +- com.arangodb:core:jar:7.25.0:compile
|  |  +- com.fasterxml.jackson.core:jackson-core:jar:2.17.0:compile
|  +- com.arangodb:http-protocol:jar:7.25.0:compile
|  \- com.arangodb:jackson-serde-json:jar:7.25.0:compile
```

`velocypack` is no longer present. `jackson-core:2.17.0` (above the
2.15.0 fix threshold).

### Runtime `lib/` jar scan — vulnerable shaded copy gone

```
$ for j in target/lib/*.jar; do
    unzip -p "$j" META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties 2>/dev/null
  done | grep -c version=2.11.3
0   # zero jars contain shaded jackson-core 2.11.3
```

The only `jackson-core/pom.properties` in `lib/` now belongs to the
un-shaded `jackson-core-2.17.0.jar` itself.

### Tests — all green

- `mvn -pl appsmith-plugins/arangoDBPlugin -am test`: **207/207
passing** (181 from interfaces parent + 26 from the plugin module,
including the 4 testcontainer-backed end-to-end ArangoDB integration
tests against `arangodb/arangodb:3.7.12` — connect, read AQL, write AQL
with `writesExecuted/Ignored`, and structure discovery).
- Live smoke test against `arangodb/arangodb:3.11.14`: all four
production code paths exercised; numeric values come back as `Long` as
before; string values remain `String`.

### CE→EE sync simulation

Cherry-pick simulation shows a small mechanical conflict in the import
block of `ArangoDBPlugin.java` (EE has additional Jackson imports for
its EE-only `getConfigurationContent` method). Resolution is a union of
imports. A pre-staged shadow EE PR with the resolved version will be
opened immediately after this CE PR.

## Test plan

- [ ] CI passes on this PR (server build + spotless + unit/integration
tests).
- [ ] Docker Scout rescan after the official EE image build no longer
flags CVE-2025-52999.
- [ ] Manual: configure an ArangoDB datasource in a deployed Appsmith,
run an AQL `RETURN` query, verify result shape and structure-tree column
types match pre-fix (numeric → `Long`).
- [ ] Manual: trigger a bad host configuration and confirm the friendly
"Could not find host address..." error still appears.

Refs: CVE-2025-52999, customer-shared "Affected, fix planned"
justification.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Improved detection and user-facing messaging for unreachable ArangoDB
hosts.

* **Chores**
* Upgraded ArangoDB Java driver to a newer major version for
compatibility and stability.
* Updated client protocol/serialization and query/result handling for
more consistent behavior.

* **Tests**
* Updated test setup and test data to align with the driver and client
changes.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41789)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->



## Automation
/ok-to-test tags="@tag.Datasource"

<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/25663120581>
> Commit: c5622aa
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=25663120581&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Datasource`
> Spec:
> <hr>Mon, 11 May 2026 10:43:49 UTC
<!-- end of auto-generated comment: Cypress test results  -->
## Description

fix(security): Path Traversal in git file read/delete operations
(GHSA-m4hv-9p7g-56vm)

- **Primary fix:** Extended `validatePathIsWithinGitRoot()` coverage
from write-only to all file operations (reads + deletes) via validated
wrapper methods in `FileUtilsCEImpl`. All 31 direct
`fileOperations.readFile/readFiles/readFileAsString` call sites now go
through path validation.
- **Defense-in-depth:** Widened `validatePathIsWithinGitRoot` visibility
from `private` to `protected` so EE subclasses can reuse it. Added
validated wrappers for `deleteFile` and `deleteDirectory` as well.
- **Test coverage:** Added 2 regression tests: one verifying path
traversal is blocked, one ensuring valid paths within git root still
work.

Fixes
https://linear.app/appsmith/issue/APP-15180/security-path-traversal-in-file-operations-fileoperationscev2impl-ghsa

### Vulnerability

| Field | Value |
|-------|-------|
| **GHSA** |
[GHSA-m4hv-9p7g-56vm](GHSA-m4hv-9p7g-56vm)
|
| **CVE** | Not assigned |
| **CVSS** | 7.7 (high) |
| **CWE** | CWE-35 |
| **Affected component** | `FileOperationsCEv2Impl` — git file
operations |

### Exposure Analysis

- **Who can exploit this?** An authenticated user with git
connect/import permissions (Developer role or higher). The attacker
needs to create or import a malicious git repository with crafted
directory/file names containing path traversal sequences.
- **What can an attacker achieve?** Read arbitrary files from the server
filesystem, including sensitive configuration files, secrets, or user
data. The vulnerability is read-only (writes were already protected).
- **Evidence of exploitation in the wild?** No evidence of active
exploitation.
- **Blast radius:** Any self-hosted or cloud Appsmith instance with git
features enabled. The attacker can read files accessible to the Appsmith
server process, potentially affecting all workspaces on the instance.

### Fix

- **Root cause:** Asymmetric path validation — `FileUtilsCEImpl` had
`validatePathIsWithinGitRoot()` applied to all write operations
(`saveResource`, `saveActions`, etc.) but not to any read operations
(`readFile`, `readFiles`, `readFileAsString`) or delete operations
(`deleteFile`, `deleteDirectory`).
- **Fix strategy:** Created `protected` validated wrapper methods
(`readFileValidated`, `readFilesValidated`, `readFileAsStringValidated`,
`deleteFileValidated`, `deleteDirectoryValidated`) in `FileUtilsCEImpl`
that validate path containment before delegating to `fileOperations`.
Replaced all 31 direct read call sites and 8 delete call sites with the
validated wrappers.
- **Intentionally not changed:** `FileOperationsCEv2Impl` — this is the
raw I/O layer that doesn't know about git root paths. Validation belongs
in `FileUtilsCEImpl` which owns the path policy. `scanAndDelete*`
methods are also unchanged since they operate on bounded `Files.walk()`
results within an already-validated base directory.
- **Defense-in-depth:** The validation method is now `protected` so EE's
`FileUtilsImpl` (which has its own direct read calls) can inherit and
use the same wrappers.

### CE/EE sync

Shadow EE PR needed. `FileUtilsCEImpl.java` change syncs automatically
via hourly CE→EE sync. EE's `FileUtilsImpl.java` has ~8 additional
direct `fileOperations.readFile()` calls that need to be updated to use
the inherited validated wrappers in a separate EE PR.

### Disclosure

> **Do not merge until advisory is ready for disclosure coordination.**
>
> After merge:
> 1. Confirm fix is in release branch
> 2. Coordinate with security team on disclosure timeline
> 3. Update advisory with patched version and publish
> 4. Notify reporter

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/25638434147>
> Commit: 809c50f
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=25638434147&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.All`
> Spec:
> <hr>Sun, 10 May 2026 21:09:23 UTC
<!-- end of auto-generated comment: Cypress test results  -->

## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No

## Follow-ups

- Shadow EE PR for `FileUtilsImpl.java` to update EE-specific
read/delete calls to use inherited validated wrappers
- `FileOperationsCEv2Impl.saveMetadataResource()` calls its own
`saveResource()` bypassing `FileUtilsCEImpl` validation — pre-existing
gap, separate follow-up


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Enhanced security for Git repository file operations by enforcing path
boundary validation on all read and delete operations to prevent
unauthorized file access outside the configured repository.

* **Tests**
* Added regression tests validating path traversal attack prevention in
Git repository operations.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41790)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Bumps the default Redis image tag in the Helm chart from `7.0.15` to
`7.4.9` to address accumulated CVEs in the 7.0.x line
- Also updates the example comment in the `initContainer` section to
match

## Test plan
- [x] Test on non-prod deployments and verify cluster status

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated Redis dependency to version 7.4.9.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41792)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
1cf4fdb yet
> <hr>Mon, 11 May 2026 18:40:36 UTC
<!-- end of auto-generated comment: Cypress test results  -->

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Description
> [!TIP]  
> _Add a TL;DR when the description is longer than 500 words or
extremely technical (helps the content, marketing, and DevRel team)._
>
> _Please also include relevant motivation and context. List any
dependencies that are required for this change. Add links to Notion,
Figma or any other documents that might be relevant to the PR._


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.Git, @tag.ImportExport"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!IMPORTANT]
> 🟣 🟣 🟣 Your tests are running.
> Tests running at:
<https://github.com/appsmithorg/appsmith/actions/runs/25795345580>
> Commit: d33b2b6
> Workflow: `PR Automation test suite`
> Tags: `@tag.Git, @tag.ImportExport`
> Spec: ``
> <hr>Wed, 13 May 2026 11:09:50 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Improved import handling for actions and action collections in
git-connected repositories to better detect and manage existing
resources across multiple branches
* Enhanced how the system identifies and retrieves resources during
imports for more consistent and reliable behavior in multi-branch git
workflows
* Streamlined resource detection to ensure accurate handling of existing
artifacts when importing in git-connected environments

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41806)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…HSA-v6jh-fx3m-7xhw) (#41803)

## Description

fix(security): Unauthenticated Access to Full OpenAPI Documentation
(GHSA-v6jh-fx3m-7xhw)

- **Primary fix:** Remove `/v3/**` from the `permitAll()` block in
`SecurityConfig.java` so OpenAPI endpoints require authentication
- **Defense-in-depth:** Disable springdoc API docs and Swagger UI by
default via `springdoc.api-docs.enabled=false` and
`springdoc.swagger-ui.enabled=false` in `application-ce.properties`
- **Test coverage:** Added `OpenApiDocsAuthTest` verifying that
unauthenticated requests to `/v3/docs` and `/v3/swagger-ui.html` return
401

Fixes APP-15216

### Vulnerability

| Field | Value |
|-------|-------|
| **GHSA** |
[GHSA-v6jh-fx3m-7xhw](GHSA-v6jh-fx3m-7xhw)
|
| **CVE** | Not assigned |
| **CVSS** | 5.3 (medium) |
| **CWE** | CWE-200 |
| **Affected component** | Unauthenticated Access to Full OpenAPI
Documentation |

### Exposure Analysis

- **Who can exploit:** Any unauthenticated network user. No credentials
or special role required.
- **What an attacker achieves:** Full enumeration of every API endpoint,
request/response schemas, parameter names, and authentication
requirements — significantly accelerating targeted reconnaissance.
- **Exploited in the wild:** No evidence. The standard Caddy reverse
proxy mitigates this by only routing `/api/*` to the backend, so the
endpoints are not reachable through the proxy. However, self-hosted
deployments that expose port 8080 directly or use a different reverse
proxy are vulnerable.
- **Blast radius:** Information disclosure only (API surface topology).
No data modification or privilege escalation.

### Fix

- **Root cause:** The `springdoc-openapi-starter-webflux-ui` dependency
(added in PR #33477 as developer tooling) auto-registers OpenAPI
endpoints at `/v3/docs` and `/v3/swagger`. The `/v3/**` path was
explicitly added to the `permitAll()` block in `SecurityConfig.java`,
bypassing authentication.
- **Fix strategy:** Two defense-in-depth layers at the configuration
level: (1) disable springdoc endpoint registration via properties, (2)
remove the unauthenticated access exception from Spring Security. The
pom.xml dependency is intentionally left in place so developers can
re-enable springdoc locally.
- **Intentionally NOT changed:** The springdoc dependency in `pom.xml` —
removing it would break local development workflows. The `enabled=false`
toggle is the standard springdoc mechanism for production disablement.

### CE/EE sync

CE-only safe: no EE overrides of touched files (`SecurityConfig.java`,
`application-ce.properties`). Hourly sync will propagate.

### Disclosure

> **Do not merge until advisory is ready for disclosure coordination.**
>
> After merge:
> 1. Confirm fix is in release branch
> 2. Coordinate with security team on disclosure timeline
> 3. Update advisory with patched version and publish
> 4. Notify reporter

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/25784782954>
> Commit: 7b1090c
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=25784782954&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.All`
> Spec:
> <hr>Wed, 13 May 2026 08:46:29 UTC
<!-- end of auto-generated comment: Cypress test results  -->

## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No

## Follow-ups

- Integration test (`OpenApiDocsAuthTest`) requires full application
context (MongoDB, Redis). Verified locally that it follows the same
pattern as existing `AuthGuardTest` and `CsrfTest`. Will run in CI.
- No additional instances of the vulnerable pattern found in codebase
audit.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* API documentation endpoints (OpenAPI/Swagger UI) are no longer
publicly accessible and now require authentication.
* **Configuration**
  * API docs and Swagger UI are explicitly disabled by default.
* **Tests**
* Added tests to verify unauthenticated requests to the API docs and
Swagger UI return 401 Unauthorized.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/appsmithorg/appsmith/pull/41803)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@btsgh
btsgh requested a review from subrata71 May 14, 2026 09:23
@btsgh
btsgh requested review from a team and sharat87 as code owners May 14, 2026 09:23
@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (2)
  • pg
  • release

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 12e87f00-7e34-45c3-bb20-02620c7644c5

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release

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.

👉 Get started


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.

@btsgh
btsgh requested a review from yatinappsmith May 14, 2026 09:45
@btsgh
btsgh merged commit e8bc716 into master May 14, 2026
264 of 269 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants