Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ad-hoc-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ jobs:
platforms: linux/arm64,linux/amd64
build-args: |
APPSMITH_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY }}
APPSMITH_BETTERBUGS_API_KEY=${{ secrets.APPSMITH_BETTERBUGS_API_KEY }}
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:nightly
tags: |
${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:${{ inputs.tag }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/github-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ jobs:
platforms: linux/arm64,linux/amd64
build-args: |
APPSMITH_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY }}
APPSMITH_BETTERBUGS_API_KEY=${{ secrets.APPSMITH_BETTERBUGS_API_KEY }}
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:nightly
tags: |
${{ needs.prelude.outputs.docker_tags }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ jobs:
org.opencontainers.image.version=${{ steps.info_json.outputs.version }}
build-args: |
APPSMITH_CLOUD_SERVICES_BASE_URL=https://release-cs.appsmith.com
APPSMITH_BETTERBUGS_API_KEY=${{ secrets.APPSMITH_BETTERBUGS_API_KEY }}
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:${{ steps.set_base_tag.outputs.base_tag }}

outputs:
Expand Down Expand Up @@ -281,6 +282,7 @@ jobs:
APPSMITH_CARBON_API_KEY: ${{ secrets.APPSMITH_CARBON_API_KEY }}
APPSMITH_CARBON_API_BASE_PATH: ${{ secrets.APPSMITH_CARBON_API_BASE_PATH }}
APPSMITH_AI_SERVER_MANAGED_HOSTING: ${{ secrets.APPSMITH_AI_SERVER_MANAGED_HOSTING }}
APPSMITH_BETTERBUGS_API_KEY: ${{ secrets.APPSMITH_BETTERBUGS_API_KEY }}
IN_DOCKER: ${{ secrets.IN_DOCKER }}
run: |
echo "environment variables set to deploy the image" $IMAGE_HASH
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-build-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ jobs:
platforms: linux/arm64,linux/amd64
build-args: |
APPSMITH_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY_RELEASE }}
APPSMITH_BETTERBUGS_API_KEY=${{ secrets.APPSMITH_BETTERBUGS_API_KEY }}
APPSMITH_CLOUD_SERVICES_BASE_URL=https://release-cs.appsmith.com
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:release
tags: |
Expand Down
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ ENV APPSMITH_CLOUD_SERVICES_BASE_URL=${APPSMITH_CLOUD_SERVICES_BASE_URL}
ARG APPSMITH_SEGMENT_CE_KEY
ENV APPSMITH_SEGMENT_CE_KEY=${APPSMITH_SEGMENT_CE_KEY}

ARG APPSMITH_BETTERBUGS_API_KEY
ENV APPSMITH_BETTERBUGS_API_KEY=${APPSMITH_BETTERBUGS_API_KEY}

COPY deploy/docker/fs /

RUN apt-get update && \
Expand Down
1 change: 1 addition & 0 deletions app/client/docker/templates/nginx-app.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ server {
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
sub_filter __APPSMITH_RECAPTCHA_SITE_KEY__ '${APPSMITH_RECAPTCHA_SITE_KEY}';
sub_filter __APPSMITH_DISABLE_INTERCOM__ '${APPSMITH_DISABLE_INTERCOM}';
sub_filter __APPSMITH_DISABLE_BETTERBUGS__ '${APPSMITH_DISABLE_BETTERBUGS}';
sub_filter __APPSMITH_ZIPY_SDK_KEY__ '${APPSMITH_ZIPY_SDK_KEY}';
sub_filter __APPSMITH_HIDE_WATERMARK__ '${APPSMITH_HIDE_WATERMARK}';
sub_filter __APPSMITH_DISABLE_IFRAME_WIDGET_SANDBOX__ '${APPSMITH_DISABLE_IFRAME_WIDGET_SANDBOX}';
Expand Down
3 changes: 3 additions & 0 deletions app/client/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ module.exports = {
smartLook: {
id: parseConfig("__APPSMITH_SMART_LOOK_ID__"),
},
betterbugs: {
apiKey: parseConfig("__APPSMITH_BETTERBUGS_API_KEY__"),
},
segment: {
apiKey: parseConfig("__APPSMITH_SEGMENT_KEY__"),
ceKey: parseConfig("__APPSMITH_SEGMENT_CE_KEY__"),
Expand Down
1 change: 1 addition & 0 deletions app/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"@appsmith/wds-theming": "workspace:^",
"@aws-sdk/client-s3": "^3.622.0",
"@aws-sdk/lib-storage": "^3.622.0",
"@betterbugs/web-sdk": "^0.0.40",
"@blueprintjs/core": "^3.43.0",
"@blueprintjs/datetime": "^3.23.6",
"@blueprintjs/icons": "3.22.0",
Expand Down
4 changes: 4 additions & 0 deletions app/client/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
parseConfig("%REACT_APP_INTERCOM_APP_ID%") ||
parseConfig('{{env "APPSMITH_INTERCOM_APP_ID"}}');
const DISABLE_INTERCOM = parseConfig('{{env "APPSMITH_DISABLE_INTERCOM"}}');
const DISABLE_BETTERBUGS = parseConfig('{{env "APPSMITH_DISABLE_BETTERBUGS"}}');

// Initialize the Intercom library
if (INTERCOM_APP_ID.length && !DISABLE_INTERCOM) {
Expand Down Expand Up @@ -208,6 +209,9 @@
smartLook: {
id: parseConfig('{{env "APPSMITH_SMART_LOOK_ID"}}'),
},
betterbugs: {
apiKey: DISABLE_BETTERBUGS ? '' : parseConfig('{{env "APPSMITH_BETTERBUGS_API_KEY"}}'),
},
segment: {
apiKey: parseConfig('{{env "APPSMITH_SEGMENT_KEY"}}'),
ceKey: parseConfig('{{env "APPSMITH_SEGMENT_CE_KEY"}}'),
Expand Down
15 changes: 15 additions & 0 deletions app/client/src/ce/configs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ export interface INJECTED_CONFIGS {
smartLook: {
id: string;
};
betterbugs: {
apiKey: string;
};
segment: {
apiKey: string;
ceKey: string;
Expand Down Expand Up @@ -61,6 +64,9 @@ export const getConfigsFromEnvVars = (): INJECTED_CONFIGS => {
smartLook: {
id: process.env.REACT_APP_SMART_LOOK_ID || "",
},
betterbugs: {
apiKey: process.env.REACT_APP_BETTERBUGS_API_KEY || "",
},
segment: {
apiKey: process.env.REACT_APP_SEGMENT_KEY || "",
ceKey: process.env.REACT_APP_SEGMENT_CE_KEY || "",
Expand Down Expand Up @@ -172,6 +178,11 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
APPSMITH_FEATURE_CONFIGS?.smartLook.id,
);

const betterbugs = getConfig(
ENV_CONFIG.betterbugs.apiKey,
APPSMITH_FEATURE_CONFIGS?.betterbugs?.apiKey,
);

const segmentCEKey = getConfig(
ENV_CONFIG.segment.ceKey,
APPSMITH_FEATURE_CONFIGS?.segment.ceKey,
Expand All @@ -193,6 +204,10 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
enabled: smartLook.enabled,
id: smartLook.value,
},
betterbugs: {
enabled: betterbugs.enabled,
apiKey: betterbugs.value,
},
segment: {
enabled: segment.enabled,
apiKey: segment.value,
Expand Down
4 changes: 4 additions & 0 deletions app/client/src/ce/configs/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ export interface AppsmithUIConfigs {
enabled: boolean;
id: string;
};
betterbugs: {
enabled: boolean;
apiKey: string;
};
observability: {
deploymentName: string;
serviceInstanceId: string;
Expand Down
1 change: 1 addition & 0 deletions app/client/src/ce/constants/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -899,6 +899,7 @@ export const NAME_YOUR_NEW_BRANCH = () => "Name your new branch";
export const SWITCH_BRANCHES = () => "Switch branches";

export const DOCUMENTATION = () => "Documentation";
export const SEND_SUPPORT_INFO = () => "Send support info";
export const DOCUMENTATION_TOOLTIP = () => "Open docs in new tab";
export const CONNECT = () => "Connect";
export const LATEST_DP_TITLE = () => "Latest deployed preview";
Expand Down
18 changes: 17 additions & 1 deletion app/client/src/pages/Editor/HelpButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,11 @@ import { getInstanceId } from "ee/selectors/organizationSelectors";
import { updateIntercomConsent, updateUserDetails } from "actions/userActions";
import { getIsAiAgentApp } from "ee/selectors/aiAgentSelectors";
import { DOCS_AI_BASE_URL } from "constants/ThirdPartyConstants";
import BetterbugsUtil from "utils/Analytics/betterbugs";
import { isAirgapped } from "ee/utils/airgapHelpers";

const { appVersion, cloudHosting, intercomAppID } = getAppsmithConfigs();
const { appVersion, betterbugs, cloudHosting, intercomAppID } =
getAppsmithConfigs();

const HelpFooter = styled.div`
display: flex;
Expand Down Expand Up @@ -87,6 +90,14 @@ let HELP_MENU_ITEMS: HelpItem[] = [
},
];

if (betterbugs.enabled && !isAirgapped()) {
HELP_MENU_ITEMS.push({
icon: "support",
label: "Send support info",
id: "betterbugs-trigger",
});
}

if (intercomAppID && window.Intercom) {
HELP_MENU_ITEMS.push({
icon: "chat-help",
Expand Down Expand Up @@ -292,6 +303,11 @@ function HelpButton() {
}
}
}

if (item.id === "betterbugs-trigger") {
Copy link
Contributor

@ashit-rath ashit-rath Feb 10, 2026

Choose a reason for hiding this comment

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

@subrata71 Right now this HelpButton is present in App and Workflows. Should be add it to packages as well?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yes, we should otherwise it will just remain as half-baked solution.

e?.preventDefault();
BetterbugsUtil.show(user);
}
}}
startIcon={item.icon}
>
Expand Down
15 changes: 14 additions & 1 deletion app/client/src/pages/common/SearchBar/HomepageHeaderAction.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
CHAT_WITH_US,
DOCUMENTATION,
HELP,
SEND_SUPPORT_INFO,
WHATS_NEW,
createMessage,
} from "ee/constants/messages";
Expand Down Expand Up @@ -41,7 +42,9 @@ import { DOCS_AI_BASE_URL, DOCS_BASE_URL } from "constants/ThirdPartyConstants";
import { ReduxActionTypes } from "ee/constants/ReduxActionConstants";
import styled from "styled-components";
import { getIsAiAgentInstanceEnabled } from "ee/selectors/aiAgentSelectors";
const { cloudHosting, intercomAppID } = getAppsmithConfigs();
import BetterbugsUtil from "utils/Analytics/betterbugs";

const { betterbugs, cloudHosting, intercomAppID } = getAppsmithConfigs();

export const VersionData = styled.div`
display: flex;
Expand Down Expand Up @@ -141,6 +144,16 @@ const HomepageHeaderAction = ({
>
{createMessage(DOCUMENTATION)}
</MenuItem>
{betterbugs.enabled && !isAirgapped() && (
<MenuItem
onClick={() => {
BetterbugsUtil.show(user);
}}
startIcon="support"
>
{createMessage(SEND_SUPPORT_INFO)}
</MenuItem>
)}
{intercomAppID && window.Intercom && !isAirgapped() && (
<MenuItem
onSelect={(e) => {
Expand Down
Loading
Loading