From b79383971294cf300421355a9c3d324f14a771f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20=C5=BBuraw?= <9116238+krzysztofzuraw@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:29:03 +0100 Subject: [PATCH 1/4] Remove test passed asci art after test run (#5344) --- package.json | 1 - scripts/pika.js | 34 ---------------------------------- 2 files changed, 35 deletions(-) delete mode 100644 scripts/pika.js diff --git a/package.json b/package.json index 3bc0f75162a..4d77f5bf6ad 100644 --- a/package.json +++ b/package.json @@ -260,7 +260,6 @@ "serve:lhci": "cross-env NODE_ENV=production npm run server", "prestart": "npm run build-types", "test": "jest src/", - "posttest": "node scripts/pika.js", "test:watch": "jest --watch src/", "lint": "eslint \"{src,playwright}/**/*.@(tsx|ts|jsx|js)\" --fix", "lint:check-progress": "eslint-nibble \"src/**/*.@(tsx|ts|jsx|js)\"", diff --git a/scripts/pika.js b/scripts/pika.js deleted file mode 100644 index 8d3469dd0a7..00000000000 --- a/scripts/pika.js +++ /dev/null @@ -1,34 +0,0 @@ - -const image = ` - -████████╗███████╗░██████╗████████╗  ██████╗░░█████╗░░██████╗░██████╗███████╗██████╗░  ██╗ -╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝  ██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝██╔══██╗  ██║ -░░░██║░░░█████╗░░╚█████╗░░░░██║░░░  ██████╔╝███████║╚█████╗░╚█████╗░█████╗░░██║░░██║  ██║ -░░░██║░░░██╔══╝░░░╚═══██╗░░░██║░░░  ██╔═══╝░██╔══██║░╚═══██╗░╚═══██╗██╔══╝░░██║░░██║  ╚═╝ -░░░██║░░░███████╗██████╔╝░░░██║░░░  ██║░░░░░██║░░██║██████╔╝██████╔╝███████╗██████╔╝  ██╗ -░░░╚═╝░░░╚══════╝╚═════╝░░░░╚═╝░░░  ╚═╝░░░░░╚═╝░░╚═╝╚═════╝░╚═════╝░╚══════╝╚═════╝░  ╚═╝ - -.//////:-.\`-hyo/----.:////////////////////::o++++++++oooo++\` -.//////-/+-.ydddhs/:.-////////////////////:-oo++oooooo+++++\` -./////::ooo::hdddddhs/:////////////////////-/o+o++/+osyhddd. -.////:-/++++/+hdddddddho/://///////////////:-/++syhdddddddh. -.///:.-::--:/:/ydddddddddy+///////////////++oyhddddddddddds\` -.///-.----------+hddddddddddhhhhhddddddddddddddddddddddhys+\` -.//:.------------:ohhhdddddddddddddddddddddddddddddddhs/:::\` -.//-.---------..----ohdddddddddddddddddddddddddddhhy+:::---\` -./:......----..\`\`.-:yddddddddddddddddddddddddddddh+::::----\` -.:..---..----.\`\`.-.odddhyo+ydddddddddddhyy/+hdddddh/-::::::\` -.-\`--.......----:-:hddds/:.+hddddddddddh+/..sddddddy-//////\` -.\`...\`\`\`\`\`\`\`---::-odddddysoyddhyyhddddddhysshddddddd+/+////\` -\`.--.\`\`\`\`\`\`.-:::-./0syddddddddhsoshdddddddddhyyyyhdds/++++/\` -\`------:::::::::.-++++hdddddddddhhhddddddddhs++++ohdh//++//\` -\`----------::::-.:/++ohddddddh+/+oooshdddddho+++++hddy:////\` -.:-------------.-yssyhdddddddh/oyyyyohddddddhssssydddd+////\` --:---------------oddddddddddddyoossoohddddddddddddddddy:+//\` -.--://///++++////:odddddddddddddhhhhhdddddddddddddddddh/:::\` -.------:://////:::/ydddddddddddddddddddddddddddddddddddo:::\` -\`---------:///////:oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys---\` -`; - - -console.log(image) \ No newline at end of file From 4595e652214e90a8a48d56e9a425c4ab8dda8e33 Mon Sep 17 00:00:00 2001 From: Wojciech Mista Date: Fri, 10 Jan 2025 12:28:52 +0100 Subject: [PATCH 2/4] Custom auth header in GraphiQL Playground (#5336) * feature: custom auth header in graphiql * handle lowercase --------- Co-authored-by: Patryk Andrzejewski --- .changeset/flat-owls-sniff.md | 5 ++ src/components/DevModePanel/DevModePanel.tsx | 12 +-- src/components/DevModePanel/utils.test.ts | 95 ++++++++++++++++++++ src/components/DevModePanel/utils.ts | 23 +++++ 4 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 .changeset/flat-owls-sniff.md create mode 100644 src/components/DevModePanel/utils.test.ts create mode 100644 src/components/DevModePanel/utils.ts diff --git a/.changeset/flat-owls-sniff.md b/.changeset/flat-owls-sniff.md new file mode 100644 index 00000000000..67d5c289c09 --- /dev/null +++ b/.changeset/flat-owls-sniff.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +You can now use custom auth headers in graphiql dev mode panel. diff --git a/src/components/DevModePanel/DevModePanel.tsx b/src/components/DevModePanel/DevModePanel.tsx index 4cb3a9e8ff3..6f854418d29 100644 --- a/src/components/DevModePanel/DevModePanel.tsx +++ b/src/components/DevModePanel/DevModePanel.tsx @@ -2,8 +2,7 @@ import { useDashboardTheme } from "@dashboard/components/GraphiQL/styles"; import { DashboardModal } from "@dashboard/components/Modal"; import { useOnboarding } from "@dashboard/welcomePage/WelcomePageOnboarding/onboardingContext"; -import { createGraphiQLFetcher, FetcherOpts, FetcherParams } from "@graphiql/toolkit"; -import { createFetch } from "@saleor/sdk"; +import { FetcherOpts, FetcherParams } from "@graphiql/toolkit"; import React from "react"; import { useIntl } from "react-intl"; @@ -12,8 +11,7 @@ import { useContextualLink } from "../AppLayout/ContextualLinks/useContextualLin import PlainGraphiQL from "../GraphiQLPlain"; import { useDevModeContext } from "./hooks"; import { messages } from "./messages"; - -const authorizedFetch = createFetch(); +import { getFetcher } from "./utils"; export const DevModePanel: React.FC = () => { const intl = useIntl(); @@ -21,15 +19,13 @@ export const DevModePanel: React.FC = () => { const { rootStyle } = useDashboardTheme(); const { markOnboardingStepAsCompleted } = useOnboarding(); const { isDevModeVisible, variables, devModeContent, setDevModeVisibility } = useDevModeContext(); - const baseFetcher = createGraphiQLFetcher({ - url: process.env.API_URL, - fetch: authorizedFetch, - }); const fetcher = async (graphQLParams: FetcherParams, opts: FetcherOpts) => { if (graphQLParams.operationName !== "IntrospectionQuery") { markOnboardingStepAsCompleted("graphql-playground"); } + const baseFetcher = getFetcher(opts); + const result = await baseFetcher(graphQLParams, opts); // Call the base fetcher return result; diff --git a/src/components/DevModePanel/utils.test.ts b/src/components/DevModePanel/utils.test.ts new file mode 100644 index 00000000000..66f6721d1ea --- /dev/null +++ b/src/components/DevModePanel/utils.test.ts @@ -0,0 +1,95 @@ +import { createGraphiQLFetcher, FetcherOpts } from "@graphiql/toolkit"; +import { createFetch } from "@saleor/sdk"; + +import { getFetcher } from "./utils"; + +jest.mock("@graphiql/toolkit", () => ({ + createGraphiQLFetcher: jest.fn(), +})); + +jest.mock("@saleor/sdk", () => ({ + createFetch: jest.fn().mockReturnValue(jest.fn()), +})); + +const mockCreateGraphiQLFetcher = createGraphiQLFetcher as jest.Mock; +const authorizedFetch = createFetch as jest.Mock; + +describe("getFetcher", () => { + const mockApiUrl = "http://test-api.com"; + let originalFetch: typeof fetch; + + beforeEach(() => { + process.env.API_URL = mockApiUrl; + originalFetch = global.fetch; + }); + + afterEach(() => { + jest.resetAllMocks(); + global.fetch = originalFetch; + }); + + it("should return fetcher with authorizedFetch when no auth headers", () => { + // Arrange + const opts: FetcherOpts = { headers: {} }; + + // Act + getFetcher(opts); + + // Assert + expect(authorizedFetch).toHaveBeenCalled(); + // 'toHaveBeenCalledWith' can't properly compare mock functions + expect(mockCreateGraphiQLFetcher).toHaveBeenCalledWith( + expect.objectContaining({ + url: mockApiUrl, + }), + ); + }); + + it("should return fetcher with fetch when Authorization header present", () => { + // Arrange + const opts: FetcherOpts = { + headers: { Authorization: "Bearer token" }, + }; + + // Act + getFetcher(opts); + + // Assert + expect(mockCreateGraphiQLFetcher).toHaveBeenCalledWith({ + url: mockApiUrl, + fetch: fetch, + }); + }); + + it("should return fetcher with fetch when Authorization-Bearer header present", () => { + // Arrange + const opts: FetcherOpts = { + headers: { "Authorization-Bearer": "token" }, + }; + + // Act + getFetcher(opts); + + // Assert + expect(mockCreateGraphiQLFetcher).toHaveBeenCalledWith({ + url: mockApiUrl, + fetch: fetch, + }); + }); + + it("should return fetcher with fetch when lowercase header present", () => { + // Arrange + const opts: FetcherOpts = { + headers: { "authorization-bearer": "token" }, + }; + + // Act + getFetcher(opts); + + // Assert + expect(mockCreateGraphiQLFetcher).toHaveBeenCalledWith({ + url: mockApiUrl, + fetch: fetch, + }); + }); +}); diff --git a/src/components/DevModePanel/utils.ts b/src/components/DevModePanel/utils.ts new file mode 100644 index 00000000000..321ba6b4813 --- /dev/null +++ b/src/components/DevModePanel/utils.ts @@ -0,0 +1,23 @@ +import { createGraphiQLFetcher, FetcherOpts } from "@graphiql/toolkit"; +import { createFetch } from "@saleor/sdk"; + +const authHeaders = ["Authorization", "Authorization-Bearer"]; + +const authorizedFetch = createFetch(); + +export const getFetcher = (opts: FetcherOpts) => { + let httpFetch = authorizedFetch; + + const hasAuthorizationHeaders = + opts.headers && + authHeaders.some(header => opts.headers![header] || opts.headers![header.toLowerCase()]); + + if (hasAuthorizationHeaders) { + httpFetch = fetch; + } + + return createGraphiQLFetcher({ + url: process.env.API_URL as string, + fetch: httpFetch as typeof fetch, + }); +}; From e6e3f6b0a13d536d767fae8294c81ad4a3e60604 Mon Sep 17 00:00:00 2001 From: Patryk Andrzejewski Date: Fri, 10 Jan 2025 13:00:57 +0100 Subject: [PATCH 3/4] Exclude pothog traffic (#5342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Paweł Chyła --- .changeset/popular-actors-talk.md | 5 +++++ .github/workflows/deploy-cloud.yaml | 2 -- .github/workflows/deploy-master-staging.yaml | 2 -- .../deploy-staging-and-prepare-release.yaml | 1 + src/components/ProductAnalytics/index.tsx | 17 +++++++++++++++++ vite.config.js | 3 +++ 6 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 .changeset/popular-actors-talk.md diff --git a/.changeset/popular-actors-talk.md b/.changeset/popular-actors-talk.md new file mode 100644 index 00000000000..b6e6df8af8b --- /dev/null +++ b/.changeset/popular-actors-talk.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +Posthog no longer collect the events from the staging environments. This means we track the data only in production environments. diff --git a/.github/workflows/deploy-cloud.yaml b/.github/workflows/deploy-cloud.yaml index 4a87b846313..c5d2edd4a14 100644 --- a/.github/workflows/deploy-cloud.yaml +++ b/.github/workflows/deploy-cloud.yaml @@ -24,8 +24,6 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} APPS_MARKETPLACE_API_URL: "https://apps.saleor.io/api/v2/saleor-apps" IS_CLOUD_INSTANCE: true - POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }} - POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} ONBOARDING_USER_JOINED_DATE_THRESHOLD: ${{ vars.CLOUD_ONBOARDING_USER_JOINED_DATE_THRESHOLD }} steps: - name: Check region diff --git a/.github/workflows/deploy-master-staging.yaml b/.github/workflows/deploy-master-staging.yaml index 7eb95603b01..b171b5e2e53 100644 --- a/.github/workflows/deploy-master-staging.yaml +++ b/.github/workflows/deploy-master-staging.yaml @@ -24,8 +24,6 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} APPS_MARKETPLACE_API_URL: "https://apps.staging.saleor.io/api/v2/saleor-apps" IS_CLOUD_INSTANCE: true - POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }} - POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} ONBOARDING_USER_JOINED_DATE_THRESHOLD: ${{ vars.STAGING_ONBOARDING_USER_JOINED_DATE_THRESHOLD }} steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/deploy-staging-and-prepare-release.yaml b/.github/workflows/deploy-staging-and-prepare-release.yaml index c502e53073f..6ea0bdd7f7c 100644 --- a/.github/workflows/deploy-staging-and-prepare-release.yaml +++ b/.github/workflows/deploy-staging-and-prepare-release.yaml @@ -61,6 +61,7 @@ jobs: IS_CLOUD_INSTANCE: true POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }} POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} + POSTHOG_EXCLUDED_DOMAINS: ${{ vars.EXCLUDED_DOMAINS }} ONBOARDING_USER_JOINED_DATE_THRESHOLD: ${{ vars.STAGING_ONBOARDING_USER_JOINED_DATE_THRESHOLD }} steps: - uses: actions/checkout@v4 diff --git a/src/components/ProductAnalytics/index.tsx b/src/components/ProductAnalytics/index.tsx index 26e70d5e9af..9a39f02be98 100644 --- a/src/components/ProductAnalytics/index.tsx +++ b/src/components/ProductAnalytics/index.tsx @@ -2,6 +2,18 @@ import { PostHogConfig } from "posthog-js"; import { PostHogProvider } from "posthog-js/react"; import React from "react"; +const isDomainExcluded = () => { + const domainsString = process.env.POSTHOG_EXCLUDED_DOMAINS; + + if (!domainsString) { + return false; + } + + const excludedDomains = domainsString.split(","); + + return excludedDomains.some(domain => window.location.hostname.includes(domain)); +}; + const useConfig = () => { const options = { api_host: process.env.POSTHOG_HOST, @@ -14,11 +26,16 @@ const useConfig = () => { } satisfies Partial; const apiKey = process.env.POSTHOG_KEY; const isCloudInstance = process.env.IS_CLOUD_INSTANCE; + const canRenderAnalytics = () => { if (!isCloudInstance) { return false; } + if (isDomainExcluded()) { + return false; + } + if (!options.api_host || !apiKey) { return false; } diff --git a/vite.config.js b/vite.config.js index 5ffc95b53ea..514b90d22e1 100644 --- a/vite.config.js +++ b/vite.config.js @@ -51,6 +51,7 @@ export default defineConfig(({ command, mode }) => { FLAGS_SERVICE_ENABLED, LOCALE_CODE, POSTHOG_KEY, + POSTHOG_EXCLUDED_DOMAINS, POSTHOG_HOST, SENTRY_AUTH_TOKEN, SENTRY_ORG, @@ -84,6 +85,7 @@ export default defineConfig(({ command, mode }) => { IS_CLOUD_INSTANCE, LOCALE_CODE, POSTHOG_KEY, + POSTHOG_EXCLUDED_DOMAINS, POSTHOG_HOST, ONBOARDING_USER_JOINED_DATE_THRESHOLD, injectOgTags: @@ -161,6 +163,7 @@ export default defineConfig(({ command, mode }) => { SENTRY_RELEASE, STATIC_URL, POSTHOG_KEY, + POSTHOG_EXCLUDED_DOMAINS, POSTHOG_HOST, ONBOARDING_USER_JOINED_DATE_THRESHOLD, // eslint-disable-next-line camelcase From 3227c9752c86c23e81d095be2c1d6c48eac72bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chy=C5=82a?= Date: Fri, 10 Jan 2025 15:41:10 +0100 Subject: [PATCH 4/4] Fix generate raport name before run tests in workflow (#5347) * Generate raport name before run tests * Add changeset --- .changeset/tender-boxes-bow.md | 5 +++++ .github/actions/run-pw-tests/action.yml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/tender-boxes-bow.md diff --git a/.changeset/tender-boxes-bow.md b/.changeset/tender-boxes-bow.md new file mode 100644 index 00000000000..83d7fa70c16 --- /dev/null +++ b/.changeset/tender-boxes-bow.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +Playwright tests raport is generated even test failed diff --git a/.github/actions/run-pw-tests/action.yml b/.github/actions/run-pw-tests/action.yml index 9657daca227..b1858dd03bd 100644 --- a/.github/actions/run-pw-tests/action.yml +++ b/.github/actions/run-pw-tests/action.yml @@ -88,8 +88,8 @@ runs: for PROJECT in "${PROJECTS[@]}"; do PROJECT_PARAMS+="--project=${PROJECT} " done - npx playwright test --grep @e2e $PROJECT_PARAMS --shard "$SHARD_NUMBER" echo "reportName=all-blob-reports-${SHARD_NUMBER%%/*}" >> $GITHUB_ENV + npx playwright test --grep @e2e $PROJECT_PARAMS --shard "$SHARD_NUMBER" - name: Upload blob report to GitHub Actions Artifacts uses: actions/upload-artifact@v4