From 64dffcfb5a39f5601fc969953f633ff51f8f51ee Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 19:23:22 +0400 Subject: [PATCH 1/7] Update Shoppy for v63 part 1 --- .github/workflows/dump.yml | 39 ----------------------------------- README.md | 8 +++---- api/src/constants/users.ts | 9 ++++---- docker-compose.local-dist.yml | 9 +++----- docker-compose.yml | 1 + metabase/entrypoint.sh | 9 ++++++++ 6 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 .github/workflows/dump.yml diff --git a/.github/workflows/dump.yml b/.github/workflows/dump.yml deleted file mode 100644 index ec201037..00000000 --- a/.github/workflows/dump.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Dump -on: - workflow_dispatch: - -jobs: - dump: - runs-on: ubuntu-latest - permissions: - id-token: write - contents: read - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.IAM_ROLE }} - role-session-name: GitHub_to_AWS_via_FederatedOIDC - aws-region: us-east-1 - - name: Tailscale - uses: tailscale/github-action@v2 - with: - oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }} - oauth-secret: ${{ secrets.TAILSCALE_OAUTH_SECRET }} - tags: tag:ci - version: 1.50.1 - sha256sum: d9fe6b480fb5078f0aa57dace686898dda7e2a768884271159faa74846bfb576 - - name: Setup psql client - run: | - sudo apt-get update - sudo apt-get install -y postgresql-client - - name: Export PostgreSQL dump to S3 - run: | - export PGPASSWORD='${{ secrets.APP_DB_PASSWORD }}' - export PGUSER=${{ secrets.APP_DB_USER }} - export PGDATABASE=${{ secrets.APP_DB_SHOPPY_DATABASE }} - export PGHOST=${{ secrets.APP_DB_HOST }} - pg_dump -F c -b -v -f dump.sql - aws s3 cp dump.sql s3://${{ secrets.METABASE_APP_DB_S3_BUCKET }}/${{ vars.METABASE_APP_DB_S3_KEY }} \ No newline at end of file diff --git a/README.md b/README.md index c3d9d366..07dd2959 100644 --- a/README.md +++ b/README.md @@ -45,9 +45,9 @@ For a local development the App DB dump of the Shoppy's Metabase Instance must b See the [Getting the App DB dump](#getting-the-app-db-dump-of-the-shoppys-metabase-instance) section. -- To run containers with a locally built `metabase.jar`, copy it to the `./local-dist` folder as `./local-dist/metabase.jar`. -- To run containers with a locally built Embedding SDK package, copy it to the `./local-dist` folder as `./local-dist/embedding-sdk`. -- Run `yarn docker:local-dist:up` to start containers and use locally built dist from the `./local-dist` folder. +- Run `yarn docker:local-dist:up` to start containers. Only the App DB dump is required; the items below are optional. +- To run containers with a locally built `metabase.jar`, copy it to the `./local-dist` folder as `./local-dist/metabase.jar`. Without it the `metabase.jar` from the Docker image is used. +- To run containers with a locally built Embedding SDK package, copy it to the `./local-dist` folder as `./local-dist/embedding-sdk`. Without it the `@metabase/embedding-sdk-react` version from `package.json` is used. - To remove containers and images completely run `yarn docker:rm`. ### Using an existing running MB instance @@ -87,7 +87,7 @@ To stop containers run `yarn docker:rm`. ### Getting the App DB dump of the Shoppy's Metabase Instance -For a local development or for running e2e locally an App DB dump of the Shoppy's Metabase Instance must be placed to the `./metabase/metabase_dump.sql` +For a local development or for running e2e locally an App DB dump of the Shoppy's Metabase Instance must be placed to the `metabase/metabase_dump_bk.sql` You can get it by: - Enabling the `Tailscale` and logging in using your work email address. diff --git a/api/src/constants/users.ts b/api/src/constants/users.ts index f188be10..c41124c9 100644 --- a/api/src/constants/users.ts +++ b/api/src/constants/users.ts @@ -1,32 +1,31 @@ import { User } from "../types/user" -import { METABASE_ADMIN_EMAIL } from "./env" export const users: User[] = [ { firstName: "Rene", lastName: "Mueller", - email: METABASE_ADMIN_EMAIL ?? "rene@example.com", + email: "rene@example.com", group: "Pug & Play", shopId: 1, }, { firstName: "Cecilia", lastName: "Stark", - email: METABASE_ADMIN_EMAIL ?? "cecilia@example.com", + email: "cecilia@example.com", group: "theStitch", shopId: 2, }, { firstName: "Emily", lastName: "Johnson", - email: METABASE_ADMIN_EMAIL ?? "emily@example.com", + email: "emily@example.com", group: "Luminara Beauty", shopId: 3, }, { firstName: "Jennifer", lastName: "Martinez", - email: METABASE_ADMIN_EMAIL ?? "jennifer@example.com", + email: "jennifer@example.com", group: "ProficiencyLabs", shopId: 4, }, diff --git a/docker-compose.local-dist.yml b/docker-compose.local-dist.yml index 0e0f8d2a..848f8466 100644 --- a/docker-compose.local-dist.yml +++ b/docker-compose.local-dist.yml @@ -1,12 +1,9 @@ services: metabase: volumes: - - type: bind - source: ./local-dist/metabase.jar - target: /app/metabase.jar - read_only: true - bind: - create_host_path: false + # The whole folder is mounted so a missing `metabase.jar` does not fail the bind mount. + # `metabase/entrypoint.sh` picks the jar up when it is present and falls back to the image's jar otherwise. + - ./local-dist:/app/local-dist:ro - type: bind source: ./metabase/metabase_dump.sql target: /app/metabase_dump.sql diff --git a/docker-compose.yml b/docker-compose.yml index ebf4dae0..4c05883c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -77,6 +77,7 @@ services: MB_JWT_IDENTITY_PROVIDER_URI: "http://localhost:${API_PORT}/sso/metabase" MB_JWT_SHARED_SECRET: "${METABASE_JWT_SHARED_SECRET}" MB_SETUP_TOKEN: "${PREMIUM_EMBEDDING_TOKEN}" + MB_WAREHOUSE_ALLOWED_NETWORKS: "allow-all" MB_DB_TYPE: "postgres" MB_DB_HOST: "${METABASE_APP_DB_HOST}" MB_DB_PORT: "${METABASE_APP_DB_PORT}" diff --git a/metabase/entrypoint.sh b/metabase/entrypoint.sh index c2545849..42898313 100644 --- a/metabase/entrypoint.sh +++ b/metabase/entrypoint.sh @@ -2,6 +2,15 @@ set -e DUMP=./app/metabase_dump.sql +LOCAL_JAR=/app/local-dist/metabase.jar + +if [ -f "$LOCAL_JAR" ]; then + echo "Local metabase.jar is found in ./local-dist/metabase.jar, using it..." + # `run_metabase.sh` hardcodes /app/metabase.jar, so point it at the mounted jar + ln -sf "$LOCAL_JAR" /app/metabase.jar +else + echo "Local metabase.jar is not found in ./local-dist/metabase.jar, using the image's metabase.jar" +fi if [ -f $DUMP ]; then echo "Installing dependencies..." From 071d2f26487af486719d3b0f568ff3be3df8ae54 Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 19:30:56 +0400 Subject: [PATCH 2/7] Update Shoppy for v63 part 2 --- .github/workflows/deploy-production.yml | 90 ------------------------- 1 file changed, 90 deletions(-) diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml index 9c182f87..c69a4aa3 100644 --- a/.github/workflows/deploy-production.yml +++ b/.github/workflows/deploy-production.yml @@ -14,68 +14,11 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} permissions: - id-token: write contents: read steps: - name: Checkout code uses: actions/checkout@v4 - - name: Tailscale - uses: tailscale/github-action@v2 - with: - oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }} - oauth-secret: ${{ secrets.TAILSCALE_OAUTH_SECRET }} - tags: tag:ci - version: 1.50.1 - sha256sum: d9fe6b480fb5078f0aa57dace686898dda7e2a768884271159faa74846bfb576 - - - name: Create OIDC Token - id: create-oidc-token - shell: bash - run: | - export OIDC_URL_WITH_AUDIENCE="$ACTIONS_ID_TOKEN_REQUEST_URL&audience=${{ secrets.K8S_AUDIENCE }}" - IDTOKEN=$(curl -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \ - -H "Accept: application/json; api-version=2.0" "$OIDC_URL_WITH_AUDIENCE" \ - | jq -r .value) - echo "::add-mask::${IDTOKEN}" - echo "idToken=${IDTOKEN}" >>$GITHUB_OUTPUT - - - name: Setup Kube Context - uses: azure/k8s-set-context@v2 - with: - method: kubeconfig - kubeconfig: | - kind: Config - apiVersion: v1 - current-context: default - clusters: - - name: default - cluster: - certificate-authority-data: ${{ secrets.K8S_CERTIFICATE_AUTHORITY_DATA }} - server: ${{ secrets.K8S_SERVER }} - users: - - name: oidc-token - user: - token: ${{ steps.create-oidc-token.outputs.IDTOKEN }} - contexts: - - name: default - context: - cluster: default - namespace: ${{secrets.K8S_NAMESPACE}} - user: oidc-token - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.IAM_ROLE }} - role-session-name: GitHub_to_AWS_via_FederatedOIDC - aws-region: us-east-1 - - - name: Setup psql client - run: | - sudo apt-get update - sudo apt-get install -y postgresql-client - - name: Ensure that Esno executable is ready run: yarn install --cwd api --frozen-lockfile @@ -86,39 +29,6 @@ jobs: cd api && yarn db:initialize - - name: Download PostgreSQL dump from S3 - run: | - aws s3 cp s3://${{ secrets.METABASE_APP_DB_S3_BUCKET }}/${{ vars.METABASE_APP_DB_S3_KEY }} dump.sql - - - name: Pause Shoppy's Metabase Instance (set pause.enabled=true) - run: | - kubectl patch metabase hosting-shoppy \ - --type=merge \ - -p '{"spec":{"pause":{"enabled":true}}}' - - - name: Drop Shoppy's Metabase Instance app database and restore - run: | - export PGPASSWORD='${{ secrets.APP_DB_PASSWORD }}' - export PGUSER=${{ secrets.APP_DB_USER }} - export PGDATABASE=${{ secrets.APP_DB_DATABASE }} - export PGHOST=${{ secrets.APP_DB_HOST }} - psql -d ${{ secrets.APP_DB_DATABASE }} \ - -c "DROP DATABASE IF EXISTS ${{ secrets.APP_DB_SHOPPY_DATABASE }} WITH (FORCE);" - psql -d ${{ secrets.APP_DB_DATABASE }} \ - -c "CREATE DATABASE ${{ secrets.APP_DB_SHOPPY_DATABASE }} WITH OWNER ${{ secrets.APP_DB_USER }};" - pg_restore -d ${{ secrets.APP_DB_SHOPPY_DATABASE }} dump.sql - - - name: Update Shoppy's Metabase Instance version and unpause - run: | - kubectl patch metabase hosting-shoppy \ - --type=merge \ - -p '{"spec":{"image":{"repo": "${{ secrets.MB_IMAGE_REPO }}", "name": "${{ vars.MB_IMAGE_NAME }}", "version":"${{ vars.MB_IMAGE_VERSION }}"},"pause":{"enabled":false}}}' - - - name: Verify Shoppy's Metabase Instance deployment - run: | - kubectl get metabase hosting-shoppy -o jsonpath='{.spec.image.version}' - echo "Metabase updated to version ${{ vars.MB_IMAGE_VERSION }} and unpaused" - deploy-to-vercel: needs: [ deploy ] uses: ./.github/workflows/deploy-to-vercel.yml From 6e5badc4539daca41eacd4512ef7cff83b7181e4 Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 19:51:38 +0400 Subject: [PATCH 3/7] Update Shoppy for v63 part 3 --- .github/workflows/e2e-tests.yml | 30 ---------------- README.md | 10 ------ api/.env.example | 2 +- docker-compose.e2e.yml | 10 ------ e2e/package.json | 4 +-- e2e/support/cypress.config.js | 2 +- e2e/support/helpers/sign-in.js | 59 ------------------------------- e2e/test/compatibility.cy.spec.js | 46 ------------------------ metabase/export_metabase_data.sh | 2 +- metabase/import_metabase_data.sh | 2 +- vercel.json | 2 +- 11 files changed, 7 insertions(+), 162 deletions(-) delete mode 100644 docker-compose.e2e.yml delete mode 100644 e2e/support/helpers/sign-in.js diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 5fbb98e5..43ff130a 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -14,12 +14,6 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 10 name: e2e-tests - env: - PREMIUM_EMBEDDING_TOKEN: ${{ secrets.STAGING_MB_ALL_FEATURES_TOKEN }} - MB_RUN_MODE: dev - METASTORE_DEV_SERVER_URL: ${{ secrets.METASTORE_DEV_SERVER_URL }} - METABASE_APP_DB_USER: ${{ secrets.APP_DB_USER }} - METABASE_APP_DB: ${{ secrets.APP_DB_SHOPPY_DATABASE }} permissions: id-token: write contents: read @@ -27,30 +21,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.IAM_ROLE }} - role-session-name: GitHub_to_AWS_via_FederatedOIDC - aws-region: us-east-1 - - - name: Download App DB PostgreSQL dump from S3 - run: | - aws s3 cp s3://${{ secrets.METABASE_APP_DB_S3_BUCKET }}/${{ vars.METABASE_APP_DB_S3_KEY }} ./metabase/metabase_dump.sql - - - name: Run Shoppy in Docker - run: | - cp .env.docker.example .env.docker && - yarn docker:e2e:up --wait - - - name: Dump container logs on failure - if: failure() - run: | - echo "=== shoppy-metabase-1 logs ===" && docker logs shoppy-metabase-1 2>&1 || true - echo "=== shoppy-api-1 logs ===" && docker logs shoppy-api-1 2>&1 || true - echo "=== shoppy-client-1 logs ===" && docker logs shoppy-client-1 2>&1 || true - echo "=== Container statuses ===" && docker ps -a 2>&1 || true - - name: Install Chrome v111 uses: browser-actions/setup-chrome@v1 with: diff --git a/README.md b/README.md index 07dd2959..15f1af92 100644 --- a/README.md +++ b/README.md @@ -83,13 +83,3 @@ See the [Getting the App DB dump](#getting-the-app-db-dump-of-the-shoppys-metaba Then run `yarn docker:e2e:up` to start all required containers. After containers are up, run `cd e2e && yarn cypress:open` to run Cypress. To stop containers run `yarn docker:rm`. - - -### Getting the App DB dump of the Shoppy's Metabase Instance - -For a local development or for running e2e locally an App DB dump of the Shoppy's Metabase Instance must be placed to the `metabase/metabase_dump_bk.sql` - -You can get it by: -- Enabling the `Tailscale` and logging in using your work email address. -- Running `pg_dump "postgres://{{ username }}:{{ password }}@{{ host }}:{{ port }}/{{ database }}" > ./metabase/metabase_dump.sql` command. - - See the `Shoppy Coredev Appdb` record in `1password` for credentials. diff --git a/api/.env.example b/api/.env.example index c6061c9d..20d99180 100644 --- a/api/.env.example +++ b/api/.env.example @@ -1,5 +1,5 @@ PORT=3003 FRONTEND_URL=http://localhost:3004 -METABASE_INSTANCE_URL=https://shoppy.coredev.metabase.com +METABASE_INSTANCE_URL=https://shoppy.metabaseapp.com METABASE_JWT_SHARED_SECRET=your_secret_here DB_URL=your_postgres_url_here \ No newline at end of file diff --git a/docker-compose.e2e.yml b/docker-compose.e2e.yml deleted file mode 100644 index 6737e904..00000000 --- a/docker-compose.e2e.yml +++ /dev/null @@ -1,10 +0,0 @@ -services: - metabase: - image: metabase/metabase-enterprise:v1.63.x - volumes: - - type: bind - source: ./metabase/metabase_dump.sql - target: /app/metabase_dump.sql - read_only: true - bind: - create_host_path: false \ No newline at end of file diff --git a/e2e/package.json b/e2e/package.json index e66e138e..4b818667 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -8,7 +8,7 @@ "env-cmd": "^10.1.0" }, "scripts": { - "cypress:open": "env-cmd -f ../.env.docker cypress open --config-file ./support/cypress.config.js --e2e", - "cypress:run": "env-cmd -f ../.env.docker cypress run --config-file ./support/cypress.config.js" + "cypress:open": "cypress open --config-file ./support/cypress.config.js --e2e", + "cypress:run": "cypress run --config-file ./support/cypress.config.js" } } diff --git a/e2e/support/cypress.config.js b/e2e/support/cypress.config.js index 8082ed37..428ecd6a 100644 --- a/e2e/support/cypress.config.js +++ b/e2e/support/cypress.config.js @@ -4,7 +4,7 @@ const path = require("path") module.exports = defineConfig({ e2e: { - baseUrl: `http://localhost:${process.env.CLIENT_PORT}`, + baseUrl: "https://embedded-analytics-sdk-demo.metabase.com", supportFile: path.resolve(path.join(__dirname, "./cypress.js")), specPattern: path.resolve( path.join( diff --git a/e2e/support/helpers/sign-in.js b/e2e/support/helpers/sign-in.js deleted file mode 100644 index e4cb8a67..00000000 --- a/e2e/support/helpers/sign-in.js +++ /dev/null @@ -1,59 +0,0 @@ -// TODO (Kelvin 2026-07-07) bandage, not a fix (EMB-2059) — see compatibility.cy.spec.js. - -export const METABASE_URL = "http://localhost:4300" - -// JWT_SHARED_SECRET also appears in .env.docker.example, so it's not a real secret. -const JWT_SHARED_SECRET = - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" -const ADMIN_EMAIL = "shoppy@metabase.com" - -function base64url(bytes) { - let binary = "" - new Uint8Array(bytes).forEach((byte) => { - binary += String.fromCharCode(byte) - }) - return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "") -} - -async function getSignedJwtForAdmin() { - const encoder = new TextEncoder() - const header = { alg: "HS256", typ: "JWT" } - const payload = { - email: ADMIN_EMAIL, - first_name: "Shoppy", - last_name: "Admin", - exp: Math.floor(Date.now() / 1000) + 600, - } - const signingInput = `${base64url(encoder.encode(JSON.stringify(header)))}.${base64url( - encoder.encode(JSON.stringify(payload)), - )}` - - const key = await crypto.subtle.importKey( - "raw", - encoder.encode(JWT_SHARED_SECRET), - { name: "HMAC", hash: "SHA-256" }, - false, - ["sign"], - ) - const signature = await crypto.subtle.sign( - "HMAC", - key, - encoder.encode(signingInput), - ) - - return `${signingInput}.${base64url(signature)}` -} - -export function signInAsAdmin() { - return cy - .wrap(getSignedJwtForAdmin()) - .then((jwt) => - cy.request({ - method: "GET", - url: `${METABASE_URL}/auth/sso`, - qs: { jwt }, - headers: { "X-Metabase-Client": "embedding-sdk-react" }, - }), - ) - .then(({ body }) => body.id) -} diff --git a/e2e/test/compatibility.cy.spec.js b/e2e/test/compatibility.cy.spec.js index 470538fd..7bf6214d 100644 --- a/e2e/test/compatibility.cy.spec.js +++ b/e2e/test/compatibility.cy.spec.js @@ -1,5 +1,3 @@ -import { METABASE_URL, signInAsAdmin } from "../support/helpers/sign-in" - const TIMEOUT = 20000 describe("Embedding SDK: shoppy compatibility", () => { @@ -171,51 +169,7 @@ describe("Embedding SDK: shoppy compatibility", () => { }) }) - // TODO (Kelvin 2026-07-07) bandage, not a fix. Metabase's appdb search-index reindex has a - // race that can strand a fully-built index as "pending" instead of activating it. Couldn't - // land the real backend fix yet; this forces a reindex and waits for it first. The actual - // backend bug (QUE2-736) hasn't landed yet. - // Scoped to just this test, not the whole suite — it's the only one that needs it. describe("data picker", () => { - before(() => { - const REINDEX_POLL_INTERVAL_MS = 1000 - const REINDEX_POLL_MAX_ATTEMPTS = 60 - - function waitForDatasetIndex(sessionId, attempt = 0) { - cy.request({ - method: "GET", - url: `${METABASE_URL}/api/search?models=dataset`, - headers: { "X-Metabase-Session": sessionId }, - }).then(({ body }) => { - if (body.total > 0) { - return - } - if (attempt >= REINDEX_POLL_MAX_ATTEMPTS) { - // Fail loudly here instead of silently proceeding into a doomed test — a confusing - // "can't find Orders" UI assertion failure downstream is much harder to diagnose than - // this being the actual problem. - throw new Error( - `waitForDatasetIndex: no datasets found after ${attempt} attempts`, - ) - } - - cy.wait(REINDEX_POLL_INTERVAL_MS) - waitForDatasetIndex(sessionId, attempt + 1) - }) - } - - signInAsAdmin().then((sessionId) => { - cy.request({ - method: "POST", - url: `${METABASE_URL}/api/search/force-reindex`, - headers: { "X-Metabase-Session": sessionId }, - failOnStatusCode: false, - }) - - waitForDatasetIndex(sessionId) - }) - }) - it("should not display tables in the data picker", () => { cy.visit({ url: "/admin/analytics/new/from-scratch", diff --git a/metabase/export_metabase_data.sh b/metabase/export_metabase_data.sh index d329110f..2cdf729b 100755 --- a/metabase/export_metabase_data.sh +++ b/metabase/export_metabase_data.sh @@ -7,7 +7,7 @@ fi curl -X POST \ -H "x-api-key: $SHOPPY_METABASE_INSTANCE_API_KEY" \ - "https://shoppy.coredev.metabase.com/api/ee/serialization/export?data_model=false&dirname=metabase_data" \ + "https://shoppy.metabaseapp.com/api/ee/serialization/export?data_model=false&dirname=metabase_data" \ -o metabase_data.tar.gz tar -xzf metabase_data.tar.gz diff --git a/metabase/import_metabase_data.sh b/metabase/import_metabase_data.sh index 280a1d9e..4b3bf23d 100755 --- a/metabase/import_metabase_data.sh +++ b/metabase/import_metabase_data.sh @@ -8,4 +8,4 @@ fi curl -X POST \ -H "x-api-key: $SHOPPY_METABASE_INSTANCE_API_KEY" \ -F file=@./metabase_data.tar.gz \ - "https://shoppy.coredev.metabase.com/api/ee/serialization/import" \ No newline at end of file + "https://shoppy.metabaseapp.com/api/ee/serialization/import" \ No newline at end of file diff --git a/vercel.json b/vercel.json index a27a7b9a..f2689de3 100644 --- a/vercel.json +++ b/vercel.json @@ -55,7 +55,7 @@ }, { "source": "/mb/:path*", - "destination": "https://shoppy.coredev.metabase.com/:path*" + "destination": "https://shoppy.metabaseapp.com/:path*" }, { "source": "/(.*)", From 4077340beaecaf0833c1aa1fc6b0dbae92933a73 Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 20:09:06 +0400 Subject: [PATCH 4/7] Update Shoppy for v63 part 4 --- .github/workflows/deploy-production.yml | 29 ++++++++++++++++++++++++- .github/workflows/e2e-tests.yml | 1 - README.md | 13 +++++------ package.json | 1 - 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml index c69a4aa3..32e7b12a 100644 --- a/.github/workflows/deploy-production.yml +++ b/.github/workflows/deploy-production.yml @@ -14,21 +14,48 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} permissions: + id-token: write contents: read steps: - name: Checkout code uses: actions/checkout@v4 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.IAM_ROLE }} + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: us-east-1 + + - name: Get runner public IP + id: runner-ip + run: echo "ip=$(curl -s https://checkip.amazonaws.com)" >> "$GITHUB_OUTPUT" + + - name: Authorize runner IP on the warehouse security group + run: | + aws ec2 authorize-security-group-ingress \ + --group-id ${{ vars.SHOPPY_DB_SECURITY_GROUP_ID }} \ + --protocol tcp --port ${{ vars.SHOPPY_DB_PORT }} \ + --cidr ${{ steps.runner-ip.outputs.ip }}/32 + - name: Ensure that Esno executable is ready run: yarn install --cwd api --frozen-lockfile - name: Reinitialize Shoppy's DWH DB env: - DB_URL: postgres://${{ secrets.SHOPPY_DB_USER }}:${{ secrets.SHOPPY_DB_PASSWORD }}@${{ secrets.SHOPPY_DB_HOST }}:${{ vars.SHOPPY_DB_PORT }}/${{ vars.SHOPPY_DB }} + DB_URL: postgres://${{ secrets.SHOPPY_DB_USER }}:${{ secrets.SHOPPY_DB_PASSWORD }}@${{ secrets.SHOPPY_DB_HOST }}:${{ vars.SHOPPY_DB_PORT }}/${{ vars.SHOPPY_DB }}?sslmode=no-verify run: | cd api && yarn db:initialize + - name: Revoke runner IP from the warehouse security group + if: always() + run: | + aws ec2 revoke-security-group-ingress \ + --group-id ${{ vars.SHOPPY_DB_SECURITY_GROUP_ID }} \ + --protocol tcp --port ${{ vars.SHOPPY_DB_PORT }} \ + --cidr ${{ steps.runner-ip.outputs.ip }}/32 + deploy-to-vercel: needs: [ deploy ] uses: ./.github/workflows/deploy-to-vercel.yml diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 43ff130a..c02a1187 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -15,7 +15,6 @@ jobs: timeout-minutes: 10 name: e2e-tests permissions: - id-token: write contents: read steps: diff --git a/README.md b/README.md index 15f1af92..bd101b5d 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,7 @@ This demo uses the data from the hosted Metabase Cloud instance and provides a h #### Local development (For Metabase developers) -For a local development the App DB dump of the Shoppy's Metabase Instance must be downloaded. - -See the [Getting the App DB dump](#getting-the-app-db-dump-of-the-shoppys-metabase-instance) section. +For local development, place the App DB dump of the Shoppy's Metabase Instance at `./metabase/metabase_dump.sql`. Obtain the current dump from the team; it can no longer be produced with `pg_dump` now that the instance runs on Metabase Cloud. - Run `yarn docker:local-dist:up` to start containers. Only the App DB dump is required; the items below are optional. - To run containers with a locally built `metabase.jar`, copy it to the `./local-dist` folder as `./local-dist/metabase.jar`. Without it the `metabase.jar` from the Docker image is used. @@ -76,10 +74,9 @@ If you cannot use the hosted JWT server, you can run the JWT server locally. ### Running e2e tests (For Metabase developers) -To run e2e tests locally, the App DB dump of the Shoppy's Metabase Instance must be downloaded. +The e2e tests run against the deployed production demo at [https://embedded-analytics-sdk-demo.metabase.com](https://embedded-analytics-sdk-demo.metabase.com) (set in `e2e/support/cypress.config.js`), so no local containers or App DB dump are needed. -See the [Getting the App DB dump](#getting-the-app-db-dump-of-the-shoppys-metabase-instance) section. +- `cd e2e && yarn install` +- `yarn cypress:run` to run headless, or `yarn cypress:open` for the Cypress UI. -Then run `yarn docker:e2e:up` to start all required containers. -After containers are up, run `cd e2e && yarn cypress:open` to run Cypress. -To stop containers run `yarn docker:rm`. +CI runs the same suite in `.github/workflows/e2e-tests.yml`. diff --git a/package.json b/package.json index 92f7ff49..6d6d745f 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ }, "scripts": { "docker:up": "docker compose --env-file .env.docker up", - "docker:e2e:up": "docker compose -f docker-compose.yml -f docker-compose.e2e.yml --env-file .env.docker up --build", "docker:local-dist:up": "docker compose -f docker-compose.yml -f docker-compose.local-dist.yml --env-file .env.docker up", "docker:down": "docker compose --env-file .env.docker down", "docker:rm": "yarn docker:down --rmi all --volumes", From 1b4cece8bf5d126b4225b937c6c3cbc439b4d03c Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 20:17:16 +0400 Subject: [PATCH 5/7] Update Shoppy for v63 part 5 --- .gitignore | 9 ------ Dockerfile | 7 ---- README.md | 9 ------ docker-compose.local-dist.yml | 12 ------- local-dist/.gitkeep | 0 metabase/entrypoint.sh | 61 ++++++----------------------------- package.json | 1 - 7 files changed, 9 insertions(+), 90 deletions(-) delete mode 100644 docker-compose.local-dist.yml delete mode 100644 local-dist/.gitkeep diff --git a/.gitignore b/.gitignore index 34ed61fc..ec1940d1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,6 @@ node_modules .pnp .pnp.js -# local dist -local-dist/* -!local-dist/.gitkeep - # testing coverage cypress @@ -17,11 +13,6 @@ cypress dist build -# db dumps -*.sql -# but allow migration files -!api/drizzle/**/*.sql - # misc .DS_Store .env.development.local diff --git a/Dockerfile b/Dockerfile index 601f6b22..874fdab8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,13 +39,6 @@ RUN yarn --frozen-lockfile # Copy source code last (changes most frequently) COPY --exclude=./api --exclude=./metabase . . -RUN if [ -d "./local-dist/embedding-sdk" ]; then \ - echo "Local embedding-sdk dist is found in ./local-dist/embedding-sdk, installing it..."; \ - yarn add file:./local-dist/embedding-sdk; \ - else \ - echo "Local embedding-sdk dist is not found in ./local-dist/embedding-sdk, skipping copy"; \ - fi - RUN if [ "$WATCH" != "true" ]; then \ echo "WATCH env is not set; running production yarn build..."; \ yarn build; \ diff --git a/README.md b/README.md index bd101b5d..618315f2 100644 --- a/README.md +++ b/README.md @@ -39,15 +39,6 @@ This demo uses the data from the hosted Metabase Cloud instance and provides a h - To stop containers run `yarn docker:down`. - To remove containers and images completely run `yarn docker:rm`. -#### Local development (For Metabase developers) - -For local development, place the App DB dump of the Shoppy's Metabase Instance at `./metabase/metabase_dump.sql`. Obtain the current dump from the team; it can no longer be produced with `pg_dump` now that the instance runs on Metabase Cloud. - -- Run `yarn docker:local-dist:up` to start containers. Only the App DB dump is required; the items below are optional. -- To run containers with a locally built `metabase.jar`, copy it to the `./local-dist` folder as `./local-dist/metabase.jar`. Without it the `metabase.jar` from the Docker image is used. -- To run containers with a locally built Embedding SDK package, copy it to the `./local-dist` folder as `./local-dist/embedding-sdk`. Without it the `@metabase/embedding-sdk-react` version from `package.json` is used. -- To remove containers and images completely run `yarn docker:rm`. - ### Using an existing running MB instance - Place the metabase repository in `../metabase` diff --git a/docker-compose.local-dist.yml b/docker-compose.local-dist.yml deleted file mode 100644 index 848f8466..00000000 --- a/docker-compose.local-dist.yml +++ /dev/null @@ -1,12 +0,0 @@ -services: - metabase: - volumes: - # The whole folder is mounted so a missing `metabase.jar` does not fail the bind mount. - # `metabase/entrypoint.sh` picks the jar up when it is present and falls back to the image's jar otherwise. - - ./local-dist:/app/local-dist:ro - - type: bind - source: ./metabase/metabase_dump.sql - target: /app/metabase_dump.sql - read_only: true - bind: - create_host_path: false diff --git a/local-dist/.gitkeep b/local-dist/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/metabase/entrypoint.sh b/metabase/entrypoint.sh index 42898313..a5564b2b 100644 --- a/metabase/entrypoint.sh +++ b/metabase/entrypoint.sh @@ -1,47 +1,6 @@ #!/bin/bash set -e -DUMP=./app/metabase_dump.sql -LOCAL_JAR=/app/local-dist/metabase.jar - -if [ -f "$LOCAL_JAR" ]; then - echo "Local metabase.jar is found in ./local-dist/metabase.jar, using it..." - # `run_metabase.sh` hardcodes /app/metabase.jar, so point it at the mounted jar - ln -sf "$LOCAL_JAR" /app/metabase.jar -else - echo "Local metabase.jar is not found in ./local-dist/metabase.jar, using the image's metabase.jar" -fi - -if [ -f $DUMP ]; then - echo "Installing dependencies..." - - apk update \ - && apk add --no-cache postgresql-client file \ - && rm -rf /var/cache/apk/* - - echo "Restoring MB App DB from dump..."; - - # reset `MB_CONFIG_FILE_PATH` value to prevent initialization from config - export MB_CONFIG_FILE_PATH='' - - METABASE_APP_DB_URL="postgres://${MB_DB_USER}:${MB_DB_PASS}@${MB_DB_HOST}:${MB_DB_PORT}/${MB_DB_DBNAME}" - METABASE_APP_DB_DUMP_TYPE=$(file --brief --mime-type "$DUMP") - - case "$METABASE_APP_DB_DUMP_TYPE" in - application/x-tar|application/octet-stream) - echo "Custom or directory‑format archive → pg_restore" - pg_restore -d "$METABASE_APP_DB_URL" "$DUMP" --no-owner > /dev/null - ;; - text/plain) - echo "Plain text SQL → psql" - psql "$METABASE_APP_DB_URL" -f "$DUMP" --quiet - ;; - *) - echo "Unknown dump format..." - ;; - esac -fi - ./app/run_metabase.sh "$@" & SERVER_PID=$! @@ -52,18 +11,16 @@ done echo "Metabase is healthy. Running additional configuration..." -if [ ! -f $DUMP ]; then - echo "Running import..."; +echo "Running import..."; - SESSION_ID=$(curl -s -X POST \ - -H "Content-Type: application/json" \ - -d "{\"username\": \"${METABASE_ADMIN_EMAIL}\", \"password\": \"${METABASE_ADMIN_PASSWORD}\"}" \ - http://metabase:${MB_JETTY_PORT}/api/session | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') +SESSION_ID=$(curl -s -X POST \ + -H "Content-Type: application/json" \ + -d "{\"username\": \"${METABASE_ADMIN_EMAIL}\", \"password\": \"${METABASE_ADMIN_PASSWORD}\"}" \ + http://metabase:${MB_JETTY_PORT}/api/session | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') - curl -X POST \ - -H "X-Metabase-Session: $SESSION_ID" \ - -F file=@./app/metabase_data.tar.gz \ - http://metabase:${MB_JETTY_PORT}/api/ee/serialization/import -fi +curl -X POST \ + -H "X-Metabase-Session: $SESSION_ID" \ + -F file=@./app/metabase_data.tar.gz \ + http://metabase:${MB_JETTY_PORT}/api/ee/serialization/import wait $SERVER_PID diff --git a/package.json b/package.json index 6d6d745f..8bcbfbd2 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ }, "scripts": { "docker:up": "docker compose --env-file .env.docker up", - "docker:local-dist:up": "docker compose -f docker-compose.yml -f docker-compose.local-dist.yml --env-file .env.docker up", "docker:down": "docker compose --env-file .env.docker down", "docker:rm": "yarn docker:down --rmi all --volumes", "install-deps": "yarn --force", From 5d3358ce91070d44594019a1e464266fc1cfd3e7 Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 20:51:21 +0400 Subject: [PATCH 6/7] Update Shoppy for v63 part 6 --- .env.docker.example | 18 +------- .env.example | 2 +- .github/workflows/e2e-tests.yml | 18 +++++++- README.md | 16 ++++--- docker-compose.yml | 75 +++---------------------------- e2e/package.json | 4 +- e2e/support/cypress.config.js | 2 +- metabase/config.yml | 36 --------------- metabase/entrypoint.sh | 26 ----------- metabase/export_metabase_data.sh | 27 ----------- metabase/import_metabase_data.sh | 11 ----- metabase/metabase_data.tar.gz | Bin 138770 -> 0 bytes package.json | 1 + vite.config.ts | 23 +++++----- 14 files changed, 51 insertions(+), 208 deletions(-) delete mode 100644 metabase/config.yml delete mode 100644 metabase/entrypoint.sh delete mode 100755 metabase/export_metabase_data.sh delete mode 100755 metabase/import_metabase_data.sh delete mode 100644 metabase/metabase_data.tar.gz diff --git a/.env.docker.example b/.env.docker.example index f4368e9d..37dc8f99 100644 --- a/.env.docker.example +++ b/.env.docker.example @@ -1,18 +1,8 @@ -MB_PORT=4300 CLIENT_PORT=4400 API_PORT=4500 -PREMIUM_EMBEDDING_TOKEN="" -METABASE_JWT_SHARED_SECRET="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - -METABASE_ADMIN_EMAIL: "admin@example.com" -METABASE_ADMIN_PASSWORD="foobarbaz" - -METABASE_APP_DB_HOST: "shoppy_app_db" -METABASE_APP_DB_PORT: "5432" -METABASE_APP_DB: "shoppy_app" -METABASE_APP_DB_USER: "shoppy_app" -METABASE_APP_DB_PASSWORD: "foobarbaz" +MB_INSTANCE_URL="https://shoppy.metabaseapp.com" +METABASE_JWT_SHARED_SECRET="your_secret_here" SHOPPY_DB_HOST="shoppy_db" SHOPPY_DB_PORT="5432" @@ -21,7 +11,3 @@ SHOPPY_DB_USER="shoppy" SHOPPY_DB_PASSWORD="foobarbaz" WATCH="false" - -# for development -# MB_RUN_MODE="dev" -# METASTORE_DEV_SERVER_URL="" diff --git a/.env.example b/.env.example index dc8dd415..46101689 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,3 @@ PORT=4173 -VITE_APP_METABASE_INSTANCE_URL=https://shoppy.coredev.metabase.com +VITE_APP_METABASE_INSTANCE_URL=https://shoppy.metabaseapp.com VITE_APP_BACKEND_URL=https://embedded-analytics-sdk-demo.metabase.com diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index c02a1187..85def127 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -12,7 +12,7 @@ on: jobs: e2e-tests: runs-on: ubuntu-22.04 - timeout-minutes: 10 + timeout-minutes: 15 name: e2e-tests permissions: contents: read @@ -20,6 +20,15 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Prepare env + run: | + cp .env.docker.example .env.docker + # The api signs SSO JWTs that production Metabase must trust, so use the production secret. + sed -i "s|^METABASE_JWT_SHARED_SECRET=.*|METABASE_JWT_SHARED_SECRET=\"${{ secrets.SHOPPY_PROD_JWT_SHARED_SECRET }}\"|" .env.docker + + - name: Run Shoppy (client + api + warehouse) against production Metabase + run: yarn docker:e2e:up --wait + - name: Install Chrome v111 uses: browser-actions/setup-chrome@v1 with: @@ -34,6 +43,13 @@ jobs: id: run-e2e-tests run: cd e2e && yarn cypress:run + - name: Dump container logs on failure + if: failure() + run: | + echo "=== shoppy-client-1 ===" && docker logs shoppy-client-1 2>&1 || true + echo "=== shoppy-api-1 ===" && docker logs shoppy-api-1 2>&1 || true + echo "=== container statuses ===" && docker ps -a 2>&1 || true + - name: Upload Cypress Artifacts upon failure uses: actions/upload-artifact@v4 if: ${{ steps.run-e2e-tests.outcome != 'success' }} diff --git a/README.md b/README.md index 618315f2..f079554e 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,9 @@ This demo uses the data from the hosted Metabase Cloud instance and provides a h ### Using Docker -- Clone `.env.docker.example` to `.env.docker` and set the proper `PREMIUM_EMBEDDING_TOKEN` value. -- Run Docker via `yarn docker:up` for the `production` build or `WATCH=true yarn docker:up` for the development build with the `watch` support. - - The command launches containers with the local MB instance, Shoppy DWH, Shoppy API and Shoppy Client. +- Clone `.env.docker.example` to `.env.docker`. Set `MB_INSTANCE_URL` to your Metabase instance and `METABASE_JWT_SHARED_SECRET` to that instance's JWT shared secret. +- Run `yarn docker:up` for a production build, or `WATCH=true yarn docker:up` for a dev build with watch. + - The command launches the Shoppy DWH, API and Client, pointing at the configured Metabase instance. - Visit `http://localhost:4400`. - To stop containers run `yarn docker:down`. - To remove containers and images completely run `yarn docker:rm`. @@ -65,9 +65,11 @@ If you cannot use the hosted JWT server, you can run the JWT server locally. ### Running e2e tests (For Metabase developers) -The e2e tests run against the deployed production demo at [https://embedded-analytics-sdk-demo.metabase.com](https://embedded-analytics-sdk-demo.metabase.com) (set in `e2e/support/cypress.config.js`), so no local containers or App DB dump are needed. +The e2e tests run the client, api and warehouse locally (via Docker) against the production Metabase instance, and drive the local client with Cypress. -- `cd e2e && yarn install` -- `yarn cypress:run` to run headless, or `yarn cypress:open` for the Cypress UI. +- In `.env.docker`, set `METABASE_JWT_SHARED_SECRET` to the production instance's JWT shared secret (from 1Password) so the api's SSO tokens are trusted, and `MB_INSTANCE_URL` to that instance. +- Start the stack: `yarn docker:e2e:up --wait`. +- Run the tests: `cd e2e && yarn cypress:run` (headless) or `yarn cypress:open` (Cypress UI). +- Stop the stack: `yarn docker:down`. -CI runs the same suite in `.github/workflows/e2e-tests.yml`. +CI runs the same suite in `.github/workflows/e2e-tests.yml`, injecting the production secret from the `SHOPPY_PROD_JWT_SHARED_SECRET` GitHub secret. diff --git a/docker-compose.yml b/docker-compose.yml index 4c05883c..55143a10 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +# Shoppy stack: client + api + warehouse. Metabase is the production instance (MB_INSTANCE_URL); +# the client talks to it same-origin via `/mb`, which the api proxies onward (see api/src/main.ts). services: shoppy_db: image: postgres:latest @@ -14,25 +16,8 @@ services: expose: - "${SHOPPY_DB_PORT}" - shoppy_app_db: - image: postgres:latest - environment: - POSTGRES_PORT: "${METABASE_APP_DB_PORT}" - POSTGRES_DB: "${METABASE_APP_DB}" - POSTGRES_USER: "${METABASE_APP_DB_USER}" - POSTGRES_PASSWORD: "${METABASE_APP_DB_PASSWORD}" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${METABASE_APP_DB_USER}"] - interval: 10s - timeout: 5s - retries: 5 - expose: - - "${METABASE_APP_DB_PORT}" - api: depends_on: - shoppy_app_db: - condition: service_healthy shoppy_db: condition: service_healthy build: @@ -45,9 +30,8 @@ services: CLIENT_PORT: "${CLIENT_PORT}" IS_LOCAL_DB: "true" DB_URL: "postgres://${SHOPPY_DB_USER}:${SHOPPY_DB_PASSWORD}@${SHOPPY_DB_HOST}:${SHOPPY_DB_PORT}/${SHOPPY_DB}" - METABASE_INSTANCE_URL: "http://metabase:${MB_PORT}" + METABASE_INSTANCE_URL: "${MB_INSTANCE_URL}" METABASE_JWT_SHARED_SECRET: "${METABASE_JWT_SHARED_SECRET}" - METABASE_ADMIN_EMAIL: "${METABASE_ADMIN_EMAIL}" healthcheck: test: curl --fail -X GET -I "http://localhost:${API_PORT}/" || exit 1 interval: 15s @@ -56,64 +40,15 @@ services: ports: - "${API_PORT}:${API_PORT}" - metabase: - depends_on: - shoppy_app_db: - condition: service_healthy - shoppy_db: - condition: service_healthy - api: - condition: service_healthy - image: metabase/metabase-enterprise:v1.63.x - entrypoint: ["sh", "/app/entrypoint.sh"] - environment: - MB_CONFIG_FILE_PATH: "./app/config.yml" - MB_JETTY_PORT: "${MB_PORT}" - MB_EDITION: "ee" - MB_SITE_URL: "http://localhost:${MB_PORT}/" - MB_PREMIUM_EMBEDDING_TOKEN: "${PREMIUM_EMBEDDING_TOKEN}" - MB_RUN_MODE: "${MB_RUN_MODE}" - METASTORE_DEV_SERVER_URL: "${METASTORE_DEV_SERVER_URL}" - MB_JWT_IDENTITY_PROVIDER_URI: "http://localhost:${API_PORT}/sso/metabase" - MB_JWT_SHARED_SECRET: "${METABASE_JWT_SHARED_SECRET}" - MB_SETUP_TOKEN: "${PREMIUM_EMBEDDING_TOKEN}" - MB_WAREHOUSE_ALLOWED_NETWORKS: "allow-all" - MB_DB_TYPE: "postgres" - MB_DB_HOST: "${METABASE_APP_DB_HOST}" - MB_DB_PORT: "${METABASE_APP_DB_PORT}" - MB_DB_USER: "${METABASE_APP_DB_USER}" - MB_DB_PASS: "${METABASE_APP_DB_PASSWORD}" - MB_DB_DBNAME: "${METABASE_APP_DB}" - METABASE_ADMIN_EMAIL: "${METABASE_ADMIN_EMAIL}" - METABASE_ADMIN_PASSWORD: "${METABASE_ADMIN_PASSWORD}" - SHOPPY_DB_HOST: "${SHOPPY_DB_HOST}" - SHOPPY_DB_PORT: "${SHOPPY_DB_PORT}" - SHOPPY_DB: "${SHOPPY_DB}" - SHOPPY_DB_USER: "${SHOPPY_DB_USER}" - SHOPPY_DB_PASSWORD: "${SHOPPY_DB_PASSWORD}" - healthcheck: - test: curl --fail -X GET -I "http://localhost:${MB_PORT}/api/health" || exit 1 - interval: 15s - timeout: 5s - retries: 10 - ports: - - "${MB_PORT}:${MB_PORT}" - volumes: - - ./metabase/entrypoint.sh:/app/entrypoint.sh - - ./metabase/config.yml:/app/config.yml - - ./metabase/metabase_data.tar.gz:/app/metabase_data.tar.gz - client: depends_on: - metabase: - condition: service_healthy api: condition: service_healthy build: context: . dockerfile: Dockerfile args: - VITE_APP_METABASE_INSTANCE_URL: "http://localhost:${MB_PORT}" + VITE_APP_METABASE_INSTANCE_URL: "/mb" VITE_APP_BACKEND_URL: "http://localhost:${API_PORT}" VITE_DATADOG_APPLICATION_ID: "${DATADOG_APPLICATION_ID}" VITE_DATADOG_CLIENT_TOKEN: "${DATADOG_CLIENT_TOKEN}" @@ -123,7 +58,7 @@ services: WATCH: "${WATCH}" environment: CLIENT_PORT: "${CLIENT_PORT}" - VITE_APP_METABASE_INSTANCE_URL: "http://localhost:${MB_PORT}" + VITE_APP_METABASE_INSTANCE_URL: "/mb" VITE_APP_BACKEND_URL: "http://localhost:${API_PORT}" VITE_APP_DOCKER_OVERRIDE_BACKEND_URL: "http://api:${API_PORT}" WATCH: "${WATCH}" diff --git a/e2e/package.json b/e2e/package.json index 4b818667..e66e138e 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -8,7 +8,7 @@ "env-cmd": "^10.1.0" }, "scripts": { - "cypress:open": "cypress open --config-file ./support/cypress.config.js --e2e", - "cypress:run": "cypress run --config-file ./support/cypress.config.js" + "cypress:open": "env-cmd -f ../.env.docker cypress open --config-file ./support/cypress.config.js --e2e", + "cypress:run": "env-cmd -f ../.env.docker cypress run --config-file ./support/cypress.config.js" } } diff --git a/e2e/support/cypress.config.js b/e2e/support/cypress.config.js index 428ecd6a..8082ed37 100644 --- a/e2e/support/cypress.config.js +++ b/e2e/support/cypress.config.js @@ -4,7 +4,7 @@ const path = require("path") module.exports = defineConfig({ e2e: { - baseUrl: "https://embedded-analytics-sdk-demo.metabase.com", + baseUrl: `http://localhost:${process.env.CLIENT_PORT}`, supportFile: path.resolve(path.join(__dirname, "./cypress.js")), specPattern: path.resolve( path.join( diff --git a/metabase/config.yml b/metabase/config.yml deleted file mode 100644 index 1dd2c826..00000000 --- a/metabase/config.yml +++ /dev/null @@ -1,36 +0,0 @@ -version: 1 -config: - users: - - first_name: "Admin" - last_name: "Admin" - password: "{{ env METABASE_ADMIN_PASSWORD }}" - email: "{{ env METABASE_ADMIN_EMAIL }}" - is_superuser: true - - first_name: "Rene" - last_name: "Mueller" - password: "{{ env METABASE_ADMIN_PASSWORD }}" - email: "rene@example.com" - - first_name: "Cecilia" - last_name: "Stark" - password: "{{ env METABASE_ADMIN_PASSWORD }}" - email: "cecilia@example.com" - - first_name: "Emily" - last_name: "Johnson" - password: "{{ env METABASE_ADMIN_PASSWORD }}" - email: "emily@example.com" - - first_name: "Jennifer" - last_name: "Martinez" - password: "{{ env METABASE_ADMIN_PASSWORD }}" - email: "jennifer@example.com" - settings: - enable-embedding-sdk: true - jwt-enabled: true - databases: - - name: Customer Zero Database - engine: postgres - details: - host: "{{ env SHOPPY_DB_HOST }}" - port: "{{ env SHOPPY_DB_PORT }}" - dbname: "{{ env SHOPPY_DB }}" - user: "{{ env SHOPPY_DB_USER }}" - password: "{{ env SHOPPY_DB_PASSWORD }}" diff --git a/metabase/entrypoint.sh b/metabase/entrypoint.sh deleted file mode 100644 index a5564b2b..00000000 --- a/metabase/entrypoint.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -set -e - -./app/run_metabase.sh "$@" & -SERVER_PID=$! - -until curl -s http://metabase:${MB_JETTY_PORT}/api/health | grep -q "\"status\":\"ok\""; do - echo "Waiting for the Metabase to be healthy..." - sleep 2 -done - -echo "Metabase is healthy. Running additional configuration..." - -echo "Running import..."; - -SESSION_ID=$(curl -s -X POST \ - -H "Content-Type: application/json" \ - -d "{\"username\": \"${METABASE_ADMIN_EMAIL}\", \"password\": \"${METABASE_ADMIN_PASSWORD}\"}" \ - http://metabase:${MB_JETTY_PORT}/api/session | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') - -curl -X POST \ - -H "X-Metabase-Session: $SESSION_ID" \ - -F file=@./app/metabase_data.tar.gz \ - http://metabase:${MB_JETTY_PORT}/api/ee/serialization/import - -wait $SERVER_PID diff --git a/metabase/export_metabase_data.sh b/metabase/export_metabase_data.sh deleted file mode 100755 index 2cdf729b..00000000 --- a/metabase/export_metabase_data.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -if [ -z "$SHOPPY_METABASE_INSTANCE_API_KEY" ]; then - echo "Define SHOPPY_METABASE_INSTANCE_API_KEY value in your environment" - exit 1 -fi - -curl -X POST \ - -H "x-api-key: $SHOPPY_METABASE_INSTANCE_API_KEY" \ - "https://shoppy.metabaseapp.com/api/ee/serialization/export?data_model=false&dirname=metabase_data" \ - -o metabase_data.tar.gz - -tar -xzf metabase_data.tar.gz - -find metabase_data -type f -name "export.log" -delete - -# Find all directories ending with '_user_generated' and process them -find metabase_data/collections -type d -name "*_user_generated" | while IFS= read -r dir; do - # Recursively delete all nested directories inside the '_user_generated' directory - find "$dir" -mindepth 1 -type d -exec rm -rf {} + - - # Make sure to preserve files ending with '_user_generated.yaml' - find "$dir" -type f ! -name "*_user_generated.yaml" -exec rm -f {} + -done - -tar -czf metabase_data.tar.gz metabase_data -rm -rf metabase_data diff --git a/metabase/import_metabase_data.sh b/metabase/import_metabase_data.sh deleted file mode 100755 index 4b3bf23d..00000000 --- a/metabase/import_metabase_data.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -if [ -z "$SHOPPY_METABASE_INSTANCE_API_KEY" ]; then - echo "Define SHOPPY_METABASE_INSTANCE_API_KEY value in your environment" - exit 1 -fi - -curl -X POST \ - -H "x-api-key: $SHOPPY_METABASE_INSTANCE_API_KEY" \ - -F file=@./metabase_data.tar.gz \ - "https://shoppy.metabaseapp.com/api/ee/serialization/import" \ No newline at end of file diff --git a/metabase/metabase_data.tar.gz b/metabase/metabase_data.tar.gz deleted file mode 100644 index 512c114a05e7bdb0a8ebd321a00d44a8c7c2431e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138770 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 { const devPort = parseInt(env.CLIENT_PORT, 10) || 3004 const previewPort = parseInt(env.CLIENT_PORT ?? env.PORT, 10) || undefined + // The client calls same-origin `/mb/*`; forward it to the api, which proxies onward to + // METABASE_INSTANCE_URL (see api/src/main.ts). Applied to both dev and preview. + const mbProxy = { + "/mb": { + target: + env.VITE_APP_DOCKER_OVERRIDE_BACKEND_URL || env.VITE_APP_BACKEND_URL, + changeOrigin: true, + secure: false, + }, + } + return { plugins: [ react(), @@ -24,19 +35,11 @@ export default defineConfig(({ mode }) => { server: { open: false, port: devPort, - proxy: { - // Ensure we have the correct backend host set for local development - "/mb": { - target: - env.VITE_APP_DOCKER_OVERRIDE_BACKEND_URL || - env.VITE_APP_BACKEND_URL, - changeOrigin: true, - secure: false, - }, - }, + proxy: mbProxy, }, preview: { port: previewPort, + proxy: mbProxy, }, } }) From 44ff78a89eaab8511ba1a9a5b8309d9f334a5ff4 Mon Sep 17 00:00:00 2001 From: Timofei Kachalov Date: Mon, 7 Sep 2026 20:55:11 +0400 Subject: [PATCH 7/7] Update Shoppy for v63 part 7 --- .github/workflows/deploy-production.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml index 32e7b12a..da53bb13 100644 --- a/.github/workflows/deploy-production.yml +++ b/.github/workflows/deploy-production.yml @@ -34,7 +34,7 @@ jobs: - name: Authorize runner IP on the warehouse security group run: | aws ec2 authorize-security-group-ingress \ - --group-id ${{ vars.SHOPPY_DB_SECURITY_GROUP_ID }} \ + --group-id ${{ secrets.SHOPPY_DB_SECURITY_GROUP_ID }} \ --protocol tcp --port ${{ vars.SHOPPY_DB_PORT }} \ --cidr ${{ steps.runner-ip.outputs.ip }}/32 @@ -52,7 +52,7 @@ jobs: if: always() run: | aws ec2 revoke-security-group-ingress \ - --group-id ${{ vars.SHOPPY_DB_SECURITY_GROUP_ID }} \ + --group-id ${{ secrets.SHOPPY_DB_SECURITY_GROUP_ID }} \ --protocol tcp --port ${{ vars.SHOPPY_DB_PORT }} \ --cidr ${{ steps.runner-ip.outputs.ip }}/32