From e63ae55a0cd4bc57918361c51bfbfbec65bf01f4 Mon Sep 17 00:00:00 2001 From: shortstacked Date: Wed, 16 Jul 2025 09:05:11 +0100 Subject: [PATCH] ci: Enable Playwright tests in PRs (#17238) --- .../setup-nodejs-blacksmith/action.yml | 42 +++ .github/workflows/e2e-reusable.yml | 167 ++++-------- .github/workflows/e2e-tests-pr.yml | 59 +--- .github/workflows/e2e-tests.yml | 10 +- .../playwright-test-docker-build.yml | 13 + .../workflows/playwright-test-docker-pull.yml | 37 +++ .../workflows/playwright-test-reusable.yml | 84 ++++++ cypress/cypress.config.js | 4 + cypress/package.json | 1 + .../testing/playwright/currents.config.ts | 5 +- packages/testing/playwright/global-setup.ts | 15 ++ .../testing/playwright/playwright.config.ts | 4 + pnpm-lock.yaml | 255 +++++++++++------- scripts/dockerize-n8n.mjs | 5 +- turbo.json | 2 +- 15 files changed, 436 insertions(+), 267 deletions(-) create mode 100644 .github/actions/setup-nodejs-blacksmith/action.yml create mode 100644 .github/workflows/playwright-test-docker-build.yml create mode 100644 .github/workflows/playwright-test-docker-pull.yml create mode 100644 .github/workflows/playwright-test-reusable.yml diff --git a/.github/actions/setup-nodejs-blacksmith/action.yml b/.github/actions/setup-nodejs-blacksmith/action.yml new file mode 100644 index 0000000000..3d051be73d --- /dev/null +++ b/.github/actions/setup-nodejs-blacksmith/action.yml @@ -0,0 +1,42 @@ +name: 'Blacksmith Node.js Build Setup' +description: 'Configures Node.js with pnpm, installs dependencies, enables Turborepo caching, (optional) sets up Docker layer caching, and builds the project or an optional command.' + +inputs: + node-version: + description: 'Node.js version to use. Uses latest 22.x by default.' + required: false + default: '22.x' + enable-docker-cache: + description: 'Whether to set up Blacksmith Buildx for Docker layer caching.' + required: false + default: 'false' + type: boolean + build-command: + description: 'Command to execute for building the project or an optional command. Leave empty to skip build step.' + required: false + default: 'pnpm build' + type: string + +runs: + using: 'composite' + steps: + - name: Setup Node.js + uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4 + with: + node-version: ${{ inputs.node-version }} + + - name: Setup pnpm and Install Dependencies + uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0 + with: + run_install: true + + - name: Configure Turborepo Cache + uses: useblacksmith/caching-for-turbo@bafb57e7ebdbf1185762286ec94d24648cd3938a # v1 + + - name: Setup Blacksmith Buildx for Docker Cache + if: ${{ inputs.enable-docker-cache == 'true' }} + uses: useblacksmith/build-push-action@574eb0ee0b59c6a687ace24192f0727dfb65d6d7 # v1.2.0 + + - name: Build Project + run: ${{ inputs.build-command }} + shell: bash diff --git a/.github/workflows/e2e-reusable.yml b/.github/workflows/e2e-reusable.yml index beb8408b69..b7fde6ceea 100644 --- a/.github/workflows/e2e-reusable.yml +++ b/.github/workflows/e2e-reusable.yml @@ -40,81 +40,18 @@ on: CYPRESS_RECORD_KEY: description: 'Cypress record key.' required: true - outputs: - tests_passed: - description: 'True if all E2E tests passed, otherwise false' - value: ${{ jobs.check_testing_matrix.outputs.all_tests_passed }} + CURRENTS_RECORD_KEY: + description: 'Currents record key.' + required: true + +env: + NODE_OPTIONS: --max-old-space-size=4096 jobs: - # single job that generates and outputs a common id - prepare: - runs-on: ubuntu-latest - outputs: - uuid: ${{ steps.uuid.outputs.value }} - steps: - - name: Generate unique ID 💎 - id: uuid - # take the current commit + timestamp together - # the typical value would be something like - # "sha-5d3fe...35d3-time-1620841214" - run: echo "value=sha-$GITHUB_SHA-time-$(date +"%s")" >> $GITHUB_OUTPUT - - - name: Calculate Git Ref 🤔 - id: calculate_ref - run: | - if [ -n "${{ inputs.pr_number }}" ]; then - echo "value=refs/pull/${{ inputs.pr_number }}/head" >> $GITHUB_OUTPUT - else - echo "value=${{ inputs.branch }}" >> $GITHUB_OUTPUT - fi - install: - runs-on: blacksmith-4vcpu-ubuntu-2204 - needs: ['prepare'] - - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ steps.calculate_ref.outputs.value }} - - - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0 - - - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - cache: 'pnpm' - - - name: Cache build artifacts - id: cache-build-artifacts - uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 - with: - path: | - /home/runner/.cache/Cypress - /github/home/.pnpm-store - ./packages/**/dist - key: ${{ github.sha }}-ui - - - name: Install dependencies - if: steps.cache-build-artifacts.outputs.cache-hit != 'true' - run: pnpm install --frozen-lockfile - - - name: Cypress build - if: steps.cache-build-artifacts.outputs.cache-hit != 'true' - uses: cypress-io/github-action@be1bab96b388bbd9ce3887e397d373c8557e15af # v6.9.2 - with: - # Disable running of tests within install job - runTests: false - install: false - build: pnpm build - - - name: Cypress install - if: steps.cache-build-artifacts.outputs.cache-hit != 'true' - working-directory: cypress - run: pnpm cypress:install - testing: runs-on: blacksmith-2vcpu-ubuntu-2204 - needs: ['prepare', 'install'] + outputs: + dashboardUrl: ${{ steps.cypress.outputs.dashboardUrl }} strategy: fail-fast: false matrix: @@ -123,31 +60,15 @@ jobs: containers: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.containers || '[1]' ) }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ steps.calculate_ref.outputs.value }} + - name: Set up and build + uses: ./.github/actions/setup-nodejs-blacksmith - - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0 - - - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - cache: 'pnpm' - - - name: Restore cached pnpm modules - id: cache-build-artifacts - uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 - with: - path: | - /home/runner/.cache/Cypress - /github/home/.pnpm-store - ./packages/**/dist - key: ${{ github.sha }}-ui - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Install Cypress + working-directory: cypress + run: pnpm cypress:install - name: Cypress run + id: cypress uses: cypress-io/github-action@be1bab96b388bbd9ce3887e397d373c8557e15af # v6.9.2 with: working-directory: cypress @@ -159,7 +80,7 @@ jobs: parallel: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.parallel || false ) }} # We have to provide custom ci-build-id key to make sure that this workflow could be run multiple times # in the same parent workflow - ci-build-id: ${{ needs.prepare.outputs.uuid }} + ci-build-id: ${{ github.run_id }}-${{ github.run_attempt }} spec: '${{ inputs.spec }}' env: NODE_OPTIONS: --dns-result-order=ipv4first @@ -169,21 +90,49 @@ jobs: COMMIT_INFO_MESSAGE: đŸŒŗ ${{ inputs.branch }} 🤖 ${{ inputs.user }} đŸ—ƒī¸ ${{ inputs.spec }} SHELL: /bin/sh - # Check if all tests passed and set the output variable - check_testing_matrix: + - name: Upload test results artifact + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: test-results-${{ matrix.containers }} + path: cypress/test-results-*.xml + + upload-to-currents: + needs: testing + if: always() runs-on: ubuntu-latest - needs: [testing] - outputs: - all_tests_passed: ${{ steps.all_tests_passed.outputs.result }} steps: - - name: Check all tests passed - id: all_tests_passed + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Download all test results + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + path: test-results + + - name: Merge and upload to Currents run: | - success=true - for status in ${{ needs.testing.result }}; do - if [ $status != "success" ]; then - success=false - break - fi - done - echo "::set-output name=result::$success" + npm install -g @currents/cmd junit-report-merger + # Merge all XML files, so Currents can show a single view for Cypress + jrm combined-results.xml "test-results/**/test-results-*.xml" + + - name: Upload merged XML as artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: merged-junit-results + path: combined-results.xml + + - name: Convert and upload to Currents + run: | + currents convert \ + --input-format=junit \ + --input-file=combined-results.xml \ + --output-dir=.currents \ + --framework=node \ + --framework-version=cypress-14.4.0 + + currents upload \ + --project-id=I0yzoc \ + --key=${{ secrets.CURRENTS_RECORD_KEY }} \ + --ci-build-id=n8n-io/n8n-${{ github.run_id }}-${{ github.run_attempt }} \ + --report-dir=.currents \ + --tag=cypress diff --git a/.github/workflows/e2e-tests-pr.yml b/.github/workflows/e2e-tests-pr.yml index 6474e5afb3..5f569b9d4b 100644 --- a/.github/workflows/e2e-tests-pr.yml +++ b/.github/workflows/e2e-tests-pr.yml @@ -24,56 +24,21 @@ jobs: with: pr_number: ${{ github.event.pull_request.number }} user: ${{ github.event.pull_request.user.login || 'PR User' }} - secrets: - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + secrets: inherit + + run-playwright-tests: + name: Playwright + uses: ./.github/workflows/playwright-test-reusable.yml + needs: [eligibility_check] + if: needs.eligibility_check.outputs.should_run == 'true' + secrets: inherit post-e2e-tests: name: E2E - Checks runs-on: ubuntu-latest - needs: [eligibility_check, run-e2e-tests] + needs: [eligibility_check, run-e2e-tests, run-playwright-tests] if: always() && needs.eligibility_check.result != 'skipped' steps: - - name: Determine Outcome and Comment Message - id: determine_outcome - run: | - JOB_OUTCOME="success" - COMMENT_BODY="" - SHOULD_POST_COMMENT="false" - - if [[ "${{ needs.eligibility_check.outputs.should_run }}" == "false" ]]; then - COMMENT_BODY="â„šī¸ E2E tests were not run for this PR based on the eligibility criteria." - SHOULD_POST_COMMENT="true" - JOB_OUTCOME="success" - elif [[ "${{ needs.run-e2e-tests.result }}" == "success" ]]; then - COMMENT_BODY=":white_check_mark: All Cypress E2E specs passed" - SHOULD_POST_COMMENT="true" - JOB_OUTCOME="success" - elif [[ "${{ needs.run-e2e-tests.result }}" == "failure" ]]; then - COMMENT_BODY=":warning: Some Cypress E2E specs are failing, please fix them before merging" - SHOULD_POST_COMMENT="true" - JOB_OUTCOME="failure" - else - COMMENT_BODY="â„šī¸ E2E tests were scheduled but did not complete as expected (Result: ${{ needs.run-e2e-tests.result }})." - SHOULD_POST_COMMENT="true" - JOB_OUTCOME="failure" - fi - - echo "comment_body=$COMMENT_BODY" >> $GITHUB_OUTPUT - echo "should_post_comment=$SHOULD_POST_COMMENT" >> $GITHUB_OUTPUT - echo "job_outcome=$JOB_OUTCOME" >> $GITHUB_OUTPUT - - - name: Create or Update PR Comment - if: steps.determine_outcome.outputs.should_post_comment == 'true' && needs.eligibility_check.outputs.should_run == 'true' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 - with: - issue-number: ${{ github.event.pull_request.number }} - body: ${{ steps.determine_outcome.outputs.comment_body }} - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Finalize Job Status - run: | - if [[ "${{ steps.determine_outcome.outputs.job_outcome }}" == "failure" ]]; then - exit 1 - else - exit 0 - fi + - name: Fail if tests failed + if: needs.run-e2e-tests.result == 'failure' || needs.run-playwright-tests.result == 'failure' + run: exit 1 diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 57b303ee3b..7c62d9704c 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -48,13 +48,17 @@ jobs: branch: ${{ github.event.inputs.branch || 'master' }} user: ${{ github.event.inputs.user || 'PR User' }} spec: ${{ github.event.inputs.spec || 'e2e/*' }} - secrets: - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + secrets: inherit + + run-playwright-tests: + name: Playwright + uses: ./.github/workflows/playwright-test-reusable.yml + secrets: inherit calls-success-url-notify: name: Calls success URL and notifies runs-on: ubuntu-latest - needs: [run-e2e-tests] + needs: [run-e2e-tests, run-playwright-tests] if: ${{ github.event.inputs.success-url != '' }} steps: - name: Notify Slack on failure diff --git a/.github/workflows/playwright-test-docker-build.yml b/.github/workflows/playwright-test-docker-build.yml new file mode 100644 index 0000000000..41b1fb4b20 --- /dev/null +++ b/.github/workflows/playwright-test-docker-build.yml @@ -0,0 +1,13 @@ +name: Run Playwright Tests (Docker Build) +# This workflow is used to run Playwright tests in a Docker container built from the current branch + +on: + workflow_call: + workflow_dispatch: + +jobs: + build-and-test: + uses: ./.github/workflows/playwright-test-reusable.yml + with: + test-mode: docker-build + secrets: inherit diff --git a/.github/workflows/playwright-test-docker-pull.yml b/.github/workflows/playwright-test-docker-pull.yml new file mode 100644 index 0000000000..233ef7a648 --- /dev/null +++ b/.github/workflows/playwright-test-docker-pull.yml @@ -0,0 +1,37 @@ +name: Run Playwright Tests (Docker Pull) +# This workflow is used to run Playwright tests in a Docker container pulled from the registry + +on: + workflow_call: + inputs: + shards: + description: 'Shards for parallel execution' + required: false + default: '[1]' + type: string + image: + description: 'Image to use' + required: false + default: 'n8nio/n8n:nightly' + type: string + workflow_dispatch: + inputs: + shards: + description: 'Shards for parallel execution' + required: false + default: '[1]' + type: string + image: + description: 'Image to use' + required: false + default: 'n8nio/n8n:nightly' + type: string + +jobs: + build-and-test: + uses: ./.github/workflows/playwright-test-reusable.yml + with: + test-mode: docker-pull + shards: ${{ inputs.shards }} + docker-image: ${{ inputs.image }} + secrets: inherit diff --git a/.github/workflows/playwright-test-reusable.yml b/.github/workflows/playwright-test-reusable.yml new file mode 100644 index 0000000000..24683de640 --- /dev/null +++ b/.github/workflows/playwright-test-reusable.yml @@ -0,0 +1,84 @@ +name: Playwright Tests - Reusable + +on: + workflow_call: + inputs: + test-mode: + description: 'Test mode: local (pnpm start from local), docker-build, or docker-pull' + required: false + default: 'local' + type: string + shards: + description: 'Shards for parallel execution' + required: false + default: '[1]' + type: string + docker-image: + description: 'Docker image to use (for docker-pull mode)' + required: false + default: 'n8nio/n8n:nightly' + type: string + + secrets: + CURRENTS_RECORD_KEY: + required: true + +env: + PLAYWRIGHT_BROWSERS_PATH: packages/testing/playwright/ms-playwright-cache + NODE_OPTIONS: --max-old-space-size=4096 + # Disable Ryuk to avoid issues with Docker since it needs privileged access, containers are cleaned on teardown anyway + TESTCONTAINERS_RYUK_DISABLED: true + +jobs: + test: + runs-on: blacksmith-2vcpu-ubuntu-2204 + strategy: + fail-fast: false + matrix: + shard: ${{ fromJSON(inputs.shards || '[1]') }} + name: Test (Shard ${{ matrix.shard }}/${{ strategy.job-total }}) + + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 1 + + - name: Setup Environment + uses: ./.github/actions/setup-nodejs-blacksmith + with: + build-command: ${{ inputs.test-mode == 'docker-build' && 'pnpm build:docker' || 'pnpm turbo build:playwright' }} + enable-docker-cache: ${{ inputs.test-mode != 'local' }} + + - name: Install Browsers (Docker Build) + if: inputs.test-mode == 'docker-build' + run: pnpm turbo install-browsers:ci + + - name: Start Local Server + if: inputs.test-mode == 'local' + env: + E2E_TESTS: true + run: | + pnpm start & + npx wait-on http://localhost:5678 --timeout 15000 + + - name: Run Tests (Local) + if: inputs.test-mode == 'local' + run: | + pnpm --filter=n8n-playwright test \ + --shard=${{ matrix.shard }}/${{ strategy.job-total }} \ + --workers=2 + env: + N8N_BASE_URL: http://localhost:5678 + RESET_E2E_DB: true + CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} + + - name: Run Tests (Docker) + if: inputs.test-mode != 'local' + run: | + pnpm --filter=n8n-playwright run test:standard \ + --shard=${{ matrix.shard }}/${{ strategy.job-total }} \ + --workers=2 + env: + N8N_DOCKER_IMAGE: ${{ inputs.test-mode == 'docker-build' && 'n8nio/n8n:local' || inputs.docker-image }} + CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js index aac10c0577..24e2f31964 100644 --- a/cypress/cypress.config.js +++ b/cypress/cypress.config.js @@ -31,4 +31,8 @@ module.exports = defineConfig({ return config; }, }, + reporter: 'mocha-junit-reporter', + reporterOptions: { + mochaFile: 'test-results-[hash].xml', + }, }); diff --git a/cypress/package.json b/cypress/package.json index e88f648a20..114c984e1d 100644 --- a/cypress/package.json +++ b/cypress/package.json @@ -20,6 +20,7 @@ "@n8n/api-types": "workspace:*", "@types/lodash": "catalog:", "eslint-plugin-cypress": "^4.3.0", + "mocha-junit-reporter": "^2.2.1", "n8n-workflow": "workspace:*" }, "dependencies": { diff --git a/packages/testing/playwright/currents.config.ts b/packages/testing/playwright/currents.config.ts index 503b494364..8ce5c52fac 100644 --- a/packages/testing/playwright/currents.config.ts +++ b/packages/testing/playwright/currents.config.ts @@ -1,6 +1,9 @@ import type { CurrentsConfig } from '@currents/playwright'; -export const config: CurrentsConfig = { +const config: CurrentsConfig = { recordKey: process.env.CURRENTS_RECORD_KEY ?? '', projectId: process.env.CURRENTS_PROJECT_ID ?? 'I0yzoc', }; + +// eslint-disable-next-line import-x/no-default-export +export default config; diff --git a/packages/testing/playwright/global-setup.ts b/packages/testing/playwright/global-setup.ts index 98c30b2d64..d150c64604 100644 --- a/packages/testing/playwright/global-setup.ts +++ b/packages/testing/playwright/global-setup.ts @@ -1,6 +1,18 @@ import { request } from '@playwright/test'; import { ApiHelpers } from './services/api-helper'; +import { createN8NStack } from 'n8n-containers/n8n-test-container-creation'; + +async function pullImagesForCI() { + console.log(`🔄 Pulling images for ${process.env.N8N_DOCKER_IMAGE}...`); + const stack = await createN8NStack({ + postgres: true, + }); + + console.log(`🔄 Images pulled for ${process.env.N8N_DOCKER_IMAGE}...`); + + await stack.stop(); +} async function globalSetup() { console.log('🚀 Starting global setup...'); @@ -9,6 +21,9 @@ async function globalSetup() { const n8nBaseUrl = process.env.N8N_BASE_URL; if (!n8nBaseUrl) { console.log('âš ī¸ N8N_BASE_URL environment variable is not set, skipping database reset'); + if (process.env.CI) { + await pullImagesForCI(); + } return; } diff --git a/packages/testing/playwright/playwright.config.ts b/packages/testing/playwright/playwright.config.ts index b42bf20d9e..958bb456b8 100644 --- a/packages/testing/playwright/playwright.config.ts +++ b/packages/testing/playwright/playwright.config.ts @@ -1,7 +1,10 @@ /* eslint-disable import-x/no-default-export */ +import { currentsReporter } from '@currents/playwright'; import type { Project } from '@playwright/test'; import { defineConfig } from '@playwright/test'; +import currentsConfig from './currents.config'; + /* * Mode-based Test Configuration * @@ -105,6 +108,7 @@ export default defineConfig({ ['html', { open: 'never' }], ['json', { outputFile: 'test-results.json' }], ['blob'], + currentsReporter(currentsConfig), ] : [['html']], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43b77950b3..07448f6293 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -375,6 +375,9 @@ importers: eslint-plugin-cypress: specifier: ^4.3.0 version: 4.3.0(eslint@9.29.0(jiti@1.21.7)) + mocha-junit-reporter: + specifier: ^2.2.1 + version: 2.2.1(mocha@11.7.1) n8n-workflow: specifier: workspace:* version: link:../packages/workflow @@ -4328,12 +4331,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6889,9 +6886,6 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -8228,6 +8222,9 @@ packages: resolution: {integrity: sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==} engines: {'0': node} + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browserslist-to-esbuild@2.1.1: resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} engines: {node: '>=18'} @@ -9097,6 +9094,10 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -9199,6 +9200,10 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} + dingbat-to-unicode@1.0.1: resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} @@ -9667,10 +9672,6 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -10475,10 +10476,6 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -10805,6 +10802,10 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -12098,8 +12099,10 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -12133,6 +12136,16 @@ packages: mobx@6.12.0: resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==} + mocha-junit-reporter@2.2.1: + resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==} + peerDependencies: + mocha: '>=2.2.5' + + mocha@11.7.1: + resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} @@ -12931,9 +12944,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-types@1.1.3: - resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} - pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -14779,9 +14789,6 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -15455,6 +15462,9 @@ packages: worker-timers@7.1.8: resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} + workerpool@9.3.3: + resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -15602,6 +15612,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -16591,7 +16605,7 @@ snapshots: '@azure/abort-controller@1.1.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@azure/abort-controller@2.0.0': dependencies: @@ -16611,7 +16625,7 @@ snapshots: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-util': 1.12.0 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -16623,7 +16637,7 @@ snapshots: '@azure/core-tracing': 1.0.1 '@azure/core-util': 1.7.0 '@azure/logger': 1.0.3 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -16661,7 +16675,7 @@ snapshots: '@azure/core-util': 1.12.0 '@azure/logger': 1.0.3 '@typespec/ts-http-runtime': 0.2.2 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -16686,13 +16700,13 @@ snapshots: '@azure/core-tracing@1.2.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@azure/core-util@1.12.0': dependencies: '@azure/abort-controller': 2.1.2 '@typespec/ts-http-runtime': 0.2.2 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -16759,7 +16773,7 @@ snapshots: '@azure/logger@1.0.3': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@azure/msal-browser@3.19.0': dependencies: @@ -16810,15 +16824,15 @@ snapshots: '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@babel/generator': 7.26.10 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helpers': 7.26.10 - '@babel/parser': 7.26.10 + '@babel/parser': 7.27.5 '@babel/template': 7.26.9 '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/types': 7.27.6 convert-source-map: 2.0.0 debug: 4.4.1(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -16851,7 +16865,7 @@ snapshots: dependencies: '@babel/compat-data': 7.27.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.4 + browserslist: 4.25.0 lru-cache: 5.1.1 semver: 7.7.2 @@ -17510,13 +17524,13 @@ snapshots: '@babel/template@7.26.9': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 '@babel/traverse@7.26.10': dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@babel/generator': 7.26.10 '@babel/parser': 7.27.5 '@babel/template': 7.26.9 @@ -17756,7 +17770,7 @@ snapshots: '@currents/commit-info': 1.0.1-beta.0 async-retry: 1.3.3 axios: 1.10.0(debug@4.4.1) - axios-retry: 4.5.0(axios@1.10.0) + axios-retry: 4.5.0(axios@1.10.0(debug@4.4.1)) c12: 1.11.2(magicast@0.3.5) chalk: 4.1.2 commander: 12.1.0 @@ -17945,11 +17959,6 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.29.0(jiti@1.21.7))': - dependencies: - eslint: 9.29.0(jiti@1.21.7) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))': dependencies: eslint: 9.29.0(jiti@1.21.7) @@ -18206,7 +18215,7 @@ snapshots: debug: 4.4.1(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.5.0 - mlly: 1.7.1 + mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -20798,7 +20807,7 @@ snapshots: '@types/asn1@0.2.0': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/aws4@1.11.2': dependencies: @@ -20884,8 +20893,6 @@ snapshots: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 - '@types/estree@1.0.6': {} - '@types/estree@1.0.8': {} '@types/eventsource@1.1.9': {} @@ -20919,12 +20926,12 @@ snapshots: '@types/ftp@0.3.33': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/glob@8.0.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/gm@1.25.0': dependencies: @@ -20984,7 +20991,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 optional: true '@types/jsonpath@0.2.0': {} @@ -21064,7 +21071,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 form-data: 4.0.2 '@types/node@20.17.57': @@ -21192,7 +21199,7 @@ snapshots: '@types/ssh2@1.11.6': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/sshpk@1.17.4': dependencies: @@ -21230,7 +21237,7 @@ snapshots: '@types/tedious@4.0.9': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/temp@0.9.4': dependencies: @@ -21238,7 +21245,7 @@ snapshots: '@types/through@0.0.30': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/tough-cookie@4.0.2': {} @@ -22278,16 +22285,29 @@ snapshots: axe-core@4.7.2: {} - axios-retry@4.5.0(axios@1.10.0): + axios-retry@4.5.0(axios@1.10.0(debug@4.4.1)): dependencies: axios: 1.10.0(debug@4.4.1) is-retry-allowed: 2.2.0 + axios-retry@4.5.0(axios@1.10.0): + dependencies: + axios: 1.10.0 + is-retry-allowed: 2.2.0 + axios-retry@4.5.0(axios@1.8.3): dependencies: axios: 1.8.3 is-retry-allowed: 2.2.0 + axios@1.10.0: + dependencies: + follow-redirects: 1.15.9(debug@4.3.6) + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axios@1.10.0(debug@4.3.6): dependencies: follow-redirects: 1.15.9(debug@4.3.6) @@ -22509,6 +22529,8 @@ snapshots: browser-request@0.3.3: {} + browser-stdout@1.3.1: {} + browserslist-to-esbuild@2.1.1(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -22586,7 +22608,7 @@ snapshots: bundlemon@3.1.0(typescript@5.8.3): dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 axios-retry: 4.5.0(axios@1.10.0) brotli-size: 4.0.0 bundlemon-utils: 2.0.1 @@ -23507,6 +23529,8 @@ snapshots: decamelize@1.2.0: {} + decamelize@4.0.0: {} + decimal.js@10.4.3: {} decko@1.2.0: {} @@ -23596,6 +23620,8 @@ snapshots: diff@4.0.2: optional: true + diff@7.0.0: {} + dingbat-to-unicode@1.0.1: {} dir-glob@3.0.1: @@ -24074,7 +24100,7 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) is-core-module: 2.16.1 resolve: 1.22.10 transitivePeerDependencies: @@ -24098,7 +24124,7 @@ snapshots: eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)): dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) optionalDependencies: '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3) eslint: 9.29.0(jiti@1.21.7) @@ -24137,7 +24163,7 @@ snapshots: array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) doctrine: 2.1.0 eslint: 9.29.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 @@ -24235,7 +24261,7 @@ snapshots: eslint@9.29.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.29.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.3 @@ -24246,7 +24272,7 @@ snapshots: '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 @@ -24256,7 +24282,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -24289,10 +24315,6 @@ snapshots: esprima@4.0.1: {} - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -25067,7 +25089,7 @@ snapshots: array-parallel: 0.1.3 array-series: 0.1.5 cross-spawn: 7.0.6 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -25133,7 +25155,7 @@ snapshots: groq-sdk@0.19.0(encoding@0.1.13): dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -25309,13 +25331,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-agent@7.0.0: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 @@ -25448,7 +25463,7 @@ snapshots: infisical-node@1.3.0: dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 dotenv: 16.3.1 tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 @@ -25681,6 +25696,8 @@ snapshots: is-path-inside@3.0.3: {} + is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -26434,7 +26451,7 @@ snapshots: decimal.js: 10.4.3 form-data: 4.0.2 html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.0 + http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.7 @@ -26610,7 +26627,7 @@ snapshots: '@langchain/groq': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) '@langchain/mistralai': 0.2.1(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) '@langchain/ollama': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 cheerio: 1.0.0 handlebars: 4.7.8 transitivePeerDependencies: @@ -27466,12 +27483,7 @@ snapshots: mkdirp@2.1.3: {} - mlly@1.7.1: - dependencies: - acorn: 8.14.0 - pathe: 1.1.2 - pkg-types: 1.1.3 - ufo: 1.5.4 + mkdirp@3.0.1: {} mlly@1.7.4: dependencies: @@ -27498,6 +27510,40 @@ snapshots: mobx@6.12.0: {} + mocha-junit-reporter@2.2.1(mocha@11.7.1): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + md5: 2.3.0 + mkdirp: 3.0.1 + mocha: 11.7.1 + strip-ansi: 6.0.1 + xml: 1.0.1 + transitivePeerDependencies: + - supports-color + + mocha@11.7.1: + dependencies: + browser-stdout: 1.3.1 + chokidar: 4.0.3 + debug: 4.4.1(supports-color@8.1.1) + diff: 7.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.4.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 9.0.5 + ms: 2.1.3 + picocolors: 1.1.1 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 9.3.3 + yargs: 17.7.2 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 + module-details-from-path@1.0.3: {} moment-timezone@0.5.37: @@ -28210,7 +28256,7 @@ snapshots: pdf-parse@1.1.1: dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) node-ensure: 0.0.0 transitivePeerDependencies: - supports-color @@ -28337,12 +28383,6 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.1.3: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 1.1.2 - pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -28464,7 +28504,7 @@ snapshots: posthog-node@3.2.1: dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 rusha: 0.8.14 transitivePeerDependencies: - debug @@ -28599,7 +28639,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.17.57 + '@types/node': 20.19.1 long: 5.3.2 proxy-addr@2.0.7: @@ -29091,7 +29131,7 @@ snapshots: retry-axios@2.6.0(axios@1.10.0(debug@4.4.1)): dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 retry-request@7.0.2(encoding@0.1.13): dependencies: @@ -29116,7 +29156,7 @@ snapshots: rhea@1.0.24: dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -29579,7 +29619,7 @@ snapshots: asn1.js: 5.4.1 asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1) asn1.js-rfc5280: 3.0.0 - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 big-integer: 1.6.52 bignumber.js: 9.1.2 binascii: 0.0.2 @@ -30375,7 +30415,7 @@ snapshots: ts-type@3.0.1(ts-toolbelt@9.6.0): dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 ts-toolbelt: 9.6.0 tslib: 2.8.1 typedarray-dts: 1.0.0 @@ -30600,8 +30640,6 @@ snapshots: uc.micro@2.1.0: {} - ufo@1.5.4: {} - ufo@1.6.1: {} uglify-js@3.17.4: {} @@ -30672,7 +30710,7 @@ snapshots: '@antfu/install-pkg': 0.3.3 '@antfu/utils': 0.7.10 '@iconify/utils': 2.1.25 - debug: 4.4.0 + debug: 4.4.1(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.5.0 unplugin: 1.11.0 @@ -31342,6 +31380,8 @@ snapshots: worker-timers-broker: 6.1.8 worker-timers-worker: 7.0.71 + workerpool@9.3.3: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -31441,6 +31481,13 @@ snapshots: yargs-parser@21.1.1: {} + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/scripts/dockerize-n8n.mjs b/scripts/dockerize-n8n.mjs index 5b3ec45a91..ded701ddab 100755 --- a/scripts/dockerize-n8n.mjs +++ b/scripts/dockerize-n8n.mjs @@ -14,7 +14,6 @@ import path from 'path'; // Disable verbose mode for cleaner output $.verbose = false; process.env.FORCE_COLOR = '1'; -process.env.DOCKER_BUILDKIT = '1'; // #region ===== Helper Functions ===== @@ -136,10 +135,12 @@ async function buildDockerImage() { echo(chalk.yellow('INFO: Building Docker image...')); try { - const { stdout } = await $`DOCKER_BUILDKIT=1 docker build \ + const { stdout } = await $`docker build \ --platform ${platform} \ + --build-arg TARGETPLATFORM=${platform} \ -t ${config.fullImageName} \ -f ${config.dockerfilePath} \ + --load \ ${config.buildContext}`; echo(stdout); diff --git a/turbo.json b/turbo.json index 32b1a42415..ae2ed4316b 100644 --- a/turbo.json +++ b/turbo.json @@ -12,7 +12,7 @@ "cache": false }, "build:playwright": { - "dependsOn": ["install-browsers", "build"] + "dependsOn": ["install-browsers:ci", "build"] }, "build:backend": { "dependsOn": ["n8n#build"]