Skip to content

chore(release): promote release to master - #42242

Merged
appsmith-promotion[bot] merged 3 commits into
masterfrom
release
Sep 16, 2026
Merged

appsmith-promotion[bot] merged 3 commits into
masterfrom
release

Conversation

@appsmith-smithes

@appsmith-smithes appsmith-smithes Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Description

Promote release to master.

Commits

Automation

/ok-to-test tags=""

Warning

Tests have not run on the HEAD 616c80a yet


Wed, 16 Sep 2026 18:20:31 UTC

subrata71 and others added 3 commits September 16, 2026 16:56
…lures (#42221)

## Description

**TL;DR:** Make the base-image `apt` install resilient to transient
Ubuntu-mirror connection failures, so a momentary network blip on the
build host doesn't red the whole `Docker Base Image` build.

### Background / root cause

The `Docker Base Image` workflow (`deploy/docker/base.dockerfile`)
intermittently fails at the apt dependency-install layer when the
builder briefly can't reach the Ubuntu mirrors. Most recent example:
appsmith-ee run
[34570186320](https://github.com/appsmithorg/appsmith-ee/actions/runs/34570186320)
failed twice with `connect (101: Network is unreachable)` (IPv6) and
`connection timed out` (IPv4) to `archive.ubuntu.com` /
`security.ubuntu.com`. The same base-image build has flaked on apt
before (a same-SHA run failed, then passed, on 2026-09-05).

Verified cause: `ubuntu:24.04` ships **no** apt retry configuration —
`apt-config dump` shows no `Acquire::Retries` and there is no drop-in in
`/etc/apt/apt.conf.d/`, so the compiled default of **0 retries**
applies. A single dropped connection fails the build. The two GPG-key
`curl` fetches also had no retry, and the PostgreSQL one lacked `--fail`
(so an HTTP error body could be piped into `apt-key`).

### Changes (`deploy/docker/base.dockerfile`, apt layer only)

- Add a **build-scoped** apt drop-in before the apt operations:
`Acquire::Retries "3"` + `Acquire::http(s)::Timeout "30"`. It is deleted
in the same layer's cleanup (`rm -rf`), so the **shipped image's apt
behavior is unchanged**.
- Add `--retry 3 --retry-connrefused --connect-timeout 15
--retry-max-time 60` to the MongoDB and PostgreSQL key-fetch curls; add
`--fail` to the PostgreSQL one.
- Deliberately **not** done: no `Acquire::ForceIPv4` (IPv4 also timed
out in the incident, so it wouldn't help), and no change to the
deprecated `apt-key` usage (out of scope).

This matches the retry pattern already used in this file (the Keycloak
jar overlay uses `curl --fail --retry 3 --connect-timeout 15`).

### Scope / honest limitation

This reduces flake frequency for **transient** mirror blips. It will
**not** rescue a sustained multi-minute total egress outage — retries
only help if egress recovers within the retry window. That class of
failure is infra, not the Dockerfile.

### Verification

- `ubuntu:24.04` default confirmed: no `Acquire::Retries`, no apt.conf.d
retry drop-in → default 0.
- Built the exact RUN structure (comment + `\`-continuation + `printf`
drop-in + cleanup) with `docker build`: `apt-config dump` reports
`Acquire::Retries "3"`; the drop-in is removed by cleanup (`test ! -f`
passes); build prints success. BuildKit strips the inline `#` comment
lines before the shell runs (same idiom already in this file).
- All new `curl` flags accepted by `ubuntu:24.04`'s curl (connect
failure exit 7 with 3 retries observed; no unknown-option error).

### Impact on existing instances

None. The drop-in is created and deleted within the same build layer, so
the produced image is byte-equivalent in apt configuration to before.
Fresh install, upgrade-from-default, upgrade-from-customized, and
rollback are all unaffected (this only changes how the base image is
*built*, not its contents).

### Reviewers / second opinion

Approach independently reviewed by GPT-5.6 sol and reconciled: retries
tuned to 3 (not 5), `Acquire::Retries::Delay` dropped as redundant,
drop-in build-scoped rather than persisted, `--fail` not duplicated on
the mongo curl (already has `-f`), curl retries bounded, IPv4 not
forced.

Linear: https://linear.app/appsmith/issue/APP-15960

## Automation

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

> Note: this is a build/base-image change; the meaningful CI gate is the
`Docker Base Image` build itself. Full Cypress requires a base-image
rebuild + deploy preview.

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


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

## Chores

- Improved container build reliability with retry and timeout handling
for package, signing-key, and Java downloads.
- Added clearer failure handling when signing keys or Java archives
cannot be downloaded or processed.
- Ensured temporary download files and package-manager settings are
cleaned up after installation, keeping the final image free of
build-time artifacts.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Fixes
https://linear.app/appsmith/issue/APP-15960/base-image-build-make-apt-install-resilient-to-transient-mirror

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
1d82958 yet
> <hr>Wed, 16 Sep 2026 07:48:45 UTC
<!-- end of auto-generated comment: Cypress test results  -->
…#42216)

## Summary

Reduces Segment API call volume by ~48% on EE (~4M calls/day,
~120M/month) by removing redundant and disabled analytics events. 5
files changed, +37 / -218.

### Commit 1: Remove redundant client-side events (~2.93M/day)

**1. Remove `EXECUTE_ACTION_SUCCESS` from plugin action paths**
(~1.35M/day)

The client `EXECUTE_ACTION_SUCCESS` carried identical properties to the
preceding `EXECUTE_ACTION` — same action/plugin/datasource/app identity,
zero additional data. Removed from 2 call sites in
`PluginActionSaga.ts`.

**NOT touched:**
- `EXECUTE_ACTION` (client, pre-execution intent) — still fires
- `EXECUTE_ACTION_FAILURE` (client, captures network/timeout/CORS errors
that never reach the server) — still fires
- JS expression SUCCESS/FAILURE in `analyticsSaga.ts` — no server
equivalent, still fires

**2. Remove `DEBUGGER_RESOLVED_ERROR_MESSAGE` fan-out where parent
already fires** (~1.08M/day)

On complete error deletion, both `DEBUGGER_RESOLVED_ERROR` (with
`errorMessages[]` array) and N × `DEBUGGER_RESOLVED_ERROR_MESSAGE` fired
in parallel. Removed the per-message fan-out since the parent already
contains all message data. Partial-resolution paths where only
`_MESSAGE` fires (the only record) are preserved.

**3. Throttle `CUSTOM_WIDGET_API_UPDATE_MODEL` with count aggregation**
(~500k+/day)

Previously fired per `appsmith.model.key = value` call. Now emits once
per widget per 60s with `{ widgetId, updateCount }`.

### Commit 2: Remove server-side `execute_ACTION_TRIGGERED` (~1.03M/day)

**This is the richest execution analytics event** — it carries
`timeElapsed`, `statusCode`, `isSuccessfulExecution`, query text, error
details, datasource metadata, and request params that no other event
has.

**Why it is safe to remove NOW:** The Segment warehouse sync for this
event has already been turned off. The event was costing ~1.03M API
calls/day (~31M/month) with no downstream consumer. The data was already
not flowing anywhere.

**What is lost:** Execution outcome analytics — latency, success/failure
rates, status codes, error details, query text. These are **not
available from any remaining event**. The client `EXECUTE_ACTION` only
captures intent (pre-execution), not outcome.

**Reversibility:** Re-enabling is a one-commit revert if execution
analytics are needed again.

### Impact on Segment cost

**API calls (throughput):**

| Change | Saved/day (EE) | Saved/month |
|---|---|---|
| Remove `EXECUTE_ACTION_SUCCESS` | ~1.35M | ~41M |
| Remove debugger `_MESSAGE` fan-out | ~1.08M | ~32M |
| Throttle custom widget | ~500k+ | ~15M |
| Remove `execute_ACTION_TRIGGERED` (server) | ~1.03M | ~31M |
| **Total** | **~3.96M/day (~48% of EE)** | **~119M/month** |

CE source sees a proportional cut. Combined workspace savings estimated
at ~119M+ API calls/month.

**MTU:** No impact — same userIds, no identity changes.

**Throughput ratio:** August was 644 calls/MTU (limit: 1,000). After
this PR, projected ratio drops to ~350-400 — well within limits even if
the MTU plan is downsized.

### What still fires after this PR (per plugin query execution)

| Event | Side | What it captures |
|---|---|---|
| `EXECUTE_ACTION` | Client | Intent — action/plugin/datasource
identity, app context. Fires before HTTP call. |
| `EXECUTE_ACTION_FAILURE` | Client | Only on failure — error details
for network/timeout/CORS failures. |
| ~~`EXECUTE_ACTION_SUCCESS`~~ | ~~Client~~ | **Removed** — identical
properties to EXECUTE_ACTION, zero additional data. |
| ~~`execute_ACTION_TRIGGERED`~~ | ~~Server~~ | **Removed** — richest
event but warehouse sync already off. No downstream consumer. |

### Warehouse impact

- `execute_action_success` — stops receiving plugin-action rows (JS
expression SUCCESS still flows)
- `execute_action_triggered` — stops receiving rows (warehouse sync was
already off)
- `debugger_resolved_error_message` — receives fewer rows (only partial
resolutions; full-deletion data in parent)
- `custom_widget_api_update_model` — fewer rows, now includes
`update_count`

### Linear

https://linear.app/appsmith/issue/APP-15946

### Slack thread

https://theappsmith.slack.com/archives/C0B02MW6JMS/p1788271277313719

### Automation

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

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
be5a057 yet
> <hr>Wed, 16 Sep 2026 12:56:31 UTC
<!-- end of auto-generated comment: Cypress test results  -->


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

* **Analytics**
* Removed individual success and error-resolution event emissions while
retaining aggregate tracking.
* Improved model-update tracking so pending counts are recorded after
activity stops and when widgets are closed.
* Simplified action execution analytics handling and reduced unnecessary
contextual data collection.

* **Reliability**
* Ensured pending tracking updates are cleared and finalized
consistently during widget lifecycle changes.
* Preserved accurate tracking when updates stop unexpectedly or widgets
are unmounted.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
## Description

Now `APPSMITH_DB_URL` takes precedence over `APPSMITH_MONGODB_URI` in
mcp server

Fixes #`Issue Number`  

## Testing

> [!NOTE]
> **How CI runs on fork PRs — no action needed from you.**
> 1. **Workflow approval.** GitHub holds the first run on fork PRs until
a maintainer approves it, so a pause before any check appears is
expected.
> 2. **Credential-free checks.** Once approved, format, lint, typecheck,
unit tests, cyclic-dependency and compile-only build checks run without
repository secrets. Only the checks relevant to what you changed (client
/ server / RTS) will run, and their logs are safe to debug against.
> 3. **Maintainer-triggered checks.** Cypress, Playwright, Docker builds
and deploy previews need secrets, so a maintainer starts them with
`/approve-ci`, and `/build-deploy-preview` when hands-on testing is
needed. Approval is pinned to one commit — pushing again requires fresh
approval.
>
> The `awaiting-maintainer` / `awaiting-contributor` labels show whose
turn it is. You do **not** need `ok-to-test` or any slash command. Full
detail: [Pull request check
states](https://github.com/appsmithorg/appsmith/blob/release/contributions/CodeContributionsGuidelines.md#pull-request-check-states).

Select the validation relevant to this change:

- [ ] Client unit tests
- [ ] Server unit tests
- [ ] Cypress
- [ ] Playwright
- [ ] Deploy preview
- [ ] Not applicable

Suggested Cypress tags or specs:


## 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

* **Bug Fixes**
* Updated MongoDB connection handling to prioritize `APPSMITH_DB_URL`,
with `APPSMITH_MONGODB_URI` used as a fallback.
* Governance features now correctly remain unavailable when the selected
database URL is not MongoDB.

* **Documentation**
* Updated setup guidance and startup messaging to reflect the database
URL precedence.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@appsmith-smithes
appsmith-smithes Bot requested a review from a team as a code owner September 16, 2026 18:20
@appsmith-smithes appsmith-smithes Bot added the hacktron-exclude Skip Hacktron security scan for this PR label Sep 16, 2026
@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 4b382e17-db88-496b-8c2f-0c2d9dd92fea

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

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

@appsmith-promotion
appsmith-promotion Bot merged commit 349f8c3 into master Sep 16, 2026
220 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hacktron-exclude Skip Hacktron security scan for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants