mirror of
https://github.com/n8n-io/n8n.git
synced 2026-09-24 23:22:38 +08:00
Merge branch 'master' into v2
This commit is contained in:
@@ -5,3 +5,4 @@ self-hosted-runner:
|
||||
- blacksmith-2vcpu-ubuntu-2204-arm
|
||||
- blacksmith-4vcpu-ubuntu-2204-arm
|
||||
- blacksmith-8vcpu-ubuntu-2204
|
||||
- ubuntu-slim
|
||||
|
||||
@@ -123,24 +123,26 @@ jobs:
|
||||
with:
|
||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
||||
|
||||
e2e-test:
|
||||
e2e-tests:
|
||||
name: E2E Tests
|
||||
needs: [install-and-build, unit-test, typecheck, lint]
|
||||
if: |
|
||||
always() &&
|
||||
needs.install-and-build.result == 'success' &&
|
||||
needs.unit-test.result != 'failure' &&
|
||||
needs.typecheck.result != 'failure' &&
|
||||
needs.lint.result != 'failure'
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
needs: [install-and-build]
|
||||
if: needs.install-and-build.outputs.non_python_changed == 'true'
|
||||
uses: ./.github/workflows/playwright-test-ci.yml
|
||||
secrets: inherit
|
||||
|
||||
e2e-checks:
|
||||
name: E2E - Checks
|
||||
runs-on: ubuntu-latest
|
||||
needs: [e2e-test]
|
||||
# This job is required by GitHub branch protection rules.
|
||||
# PRs cannot be merged unless this job passes.
|
||||
# If you add/remove jobs that should block merging, update the 'needs' array below.
|
||||
required-checks:
|
||||
name: Required Checks
|
||||
needs: [install-and-build, unit-test, typecheck, lint, e2e-tests]
|
||||
if: always()
|
||||
runs-on: ubuntu-slim
|
||||
steps:
|
||||
- name: Fail if E2E tests failed
|
||||
if: needs.e2e-test.result == 'failure'
|
||||
- name: Fail if any required job failed or was skipped unexpectedly
|
||||
# The non_python_changed check allows jobs to be skipped for python-only changes,
|
||||
# since those jobs don't run when only python files are modified.
|
||||
if: |
|
||||
contains(needs.*.result, 'failure') ||
|
||||
(needs.install-and-build.outputs.non_python_changed == 'true' && contains(needs.*.result, 'skipped'))
|
||||
run: exit 1
|
||||
|
||||
@@ -42,18 +42,6 @@ on:
|
||||
required: false
|
||||
type: string
|
||||
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- ready_for_review
|
||||
paths:
|
||||
- '.github/workflows/docker-build-push.yml'
|
||||
- '.github/scripts/docker/docker-config.mjs'
|
||||
- '.github/scripts/docker/docker-tags.mjs'
|
||||
- 'docker/images/n8n/Dockerfile'
|
||||
- 'docker/images/runners/Dockerfile'
|
||||
- 'docker/images/runners/Dockerfile.distroless'
|
||||
|
||||
jobs:
|
||||
determine-build-context:
|
||||
name: Determine Build Context
|
||||
@@ -83,7 +71,7 @@ jobs:
|
||||
name: Build App, then Build and Push Docker Image (${{ matrix.platform }})
|
||||
needs: determine-build-context
|
||||
runs-on: ${{ matrix.runner }}
|
||||
timeout-minutes: 15
|
||||
timeout-minutes: 25
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(needs.determine-build-context.outputs.build_matrix) }}
|
||||
outputs:
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
name: Playwright Tests - Nightly
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 4 * * *'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
image:
|
||||
description: 'Docker image to test against'
|
||||
required: false
|
||||
default: 'n8nio/n8n:nightly'
|
||||
type: string
|
||||
push:
|
||||
branches:
|
||||
- ci-containers-nightly
|
||||
|
||||
jobs:
|
||||
test-configurations:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config: [standard, postgres]
|
||||
name: Test ${{ matrix.config }}
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
with:
|
||||
test-mode: docker-pull
|
||||
docker-image: ${{ github.event.inputs.image || 'n8nio/n8n:nightly' }}
|
||||
test-command: pnpm --filter=n8n-playwright test:container:${{ matrix.config }}
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,55 @@
|
||||
name: E2E Tests for CI
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
# Multi-main: postgres + redis + caddy + 2 mains + 1 worker
|
||||
# Only runs for internal PRs (not community/fork PRs)
|
||||
multi-main-ui:
|
||||
name: 'Multi-Main: UI'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
with:
|
||||
test-mode: docker-build
|
||||
test-command: pnpm --filter=n8n-playwright test:container:multi-main:ui
|
||||
shards: '[1, 2, 3, 4, 5, 6, 7, 8]'
|
||||
runner: blacksmith-4vcpu-ubuntu-2204
|
||||
workers: '1'
|
||||
secrets: inherit
|
||||
|
||||
multi-main-isolated:
|
||||
name: 'Multi-Main: Isolated'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
with:
|
||||
test-mode: docker-build
|
||||
test-command: pnpm --filter=n8n-playwright test:container:multi-main:isolated
|
||||
shards: '[1]'
|
||||
runner: blacksmith-4vcpu-ubuntu-2204
|
||||
workers: '1'
|
||||
secrets: inherit
|
||||
|
||||
# Community PR tests: Local mode with SQLite (no container building, no secrets required)
|
||||
# Runs on GitHub-hosted runners without Currents reporting
|
||||
community-ui:
|
||||
name: 'Community: UI'
|
||||
if: ${{ github.event.pull_request.head.repo.fork }}
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
with:
|
||||
test-mode: local
|
||||
test-command: pnpm --filter=n8n-playwright test:local
|
||||
shards: '[1, 2, 3, 4, 5]'
|
||||
runner: ubuntu-latest
|
||||
workers: '2'
|
||||
|
||||
community-isolated:
|
||||
name: 'Community: Isolated'
|
||||
if: ${{ github.event.pull_request.head.repo.fork }}
|
||||
uses: ./.github/workflows/playwright-test-reusable.yml
|
||||
with:
|
||||
test-mode: local
|
||||
test-command: pnpm --filter=n8n-playwright test:local:isolated
|
||||
shards: '[1]'
|
||||
runner: ubuntu-latest
|
||||
workers: '1'
|
||||
@@ -22,15 +22,21 @@ jobs:
|
||||
|
||||
- name: Setup Environment
|
||||
uses: ./.github/actions/setup-nodejs-blacksmith
|
||||
with:
|
||||
build-command: pnpm turbo build:playwright
|
||||
env:
|
||||
INCLUDE_TEST_CONTROLLER: 'true'
|
||||
|
||||
- name: Build with Coverage
|
||||
run: pnpm --filter n8n-editor-ui build:coverage
|
||||
- name: Build Docker Image with Coverage
|
||||
run: pnpm build:docker:coverage
|
||||
env:
|
||||
INCLUDE_TEST_CONTROLLER: 'true'
|
||||
|
||||
- name: Run Coverage Tests
|
||||
- name: Install Browsers
|
||||
run: pnpm turbo install-browsers:ci
|
||||
|
||||
- name: Run Container Coverage Tests
|
||||
id: coverage-tests
|
||||
run: |
|
||||
pnpm --filter n8n-playwright test:local \
|
||||
pnpm --filter n8n-playwright test:container:standard \
|
||||
--workers=${{ env.PLAYWRIGHT_WORKERS }}
|
||||
env:
|
||||
BUILD_WITH_COVERAGE: 'true'
|
||||
@@ -40,11 +46,23 @@ jobs:
|
||||
QA_PERFORMANCE_METRICS_WEBHOOK_PASSWORD: ${{ secrets.QA_PERFORMANCE_METRICS_WEBHOOK_PASSWORD }}
|
||||
|
||||
- name: Generate Coverage Report
|
||||
if: always() && steps.coverage-tests.outcome != 'skipped'
|
||||
run: pnpm --filter n8n-playwright coverage:report
|
||||
|
||||
- name: Upload Coverage Report
|
||||
- name: Upload Coverage Report Artifact
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: coverage-report
|
||||
path: packages/testing/playwright/coverage/
|
||||
retention-days: 14
|
||||
|
||||
- name: Upload E2E Coverage to Codecov
|
||||
if: always()
|
||||
uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: packages/testing/playwright/coverage/lcov.info
|
||||
flags: frontend-e2e
|
||||
name: playwright-e2e
|
||||
fail_ci_if_error: false
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
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
|
||||
test-command: pnpm --filter=n8n-playwright test:container:standard
|
||||
secrets: inherit
|
||||
@@ -32,6 +32,11 @@ on:
|
||||
required: false
|
||||
default: ''
|
||||
type: string
|
||||
runner:
|
||||
description: 'GitHub runner to use'
|
||||
required: false
|
||||
default: 'blacksmith-2vcpu-ubuntu-2204'
|
||||
type: string
|
||||
|
||||
secrets:
|
||||
CURRENTS_RECORD_KEY:
|
||||
@@ -42,6 +47,10 @@ on:
|
||||
required: false
|
||||
QA_PERFORMANCE_METRICS_WEBHOOK_PASSWORD:
|
||||
required: false
|
||||
N8N_LICENSE_ACTIVATION_KEY:
|
||||
required: false
|
||||
N8N_ENCRYPTION_KEY:
|
||||
required: false
|
||||
|
||||
env:
|
||||
PLAYWRIGHT_BROWSERS_PATH: packages/testing/playwright/ms-playwright-cache
|
||||
@@ -49,10 +58,13 @@ env:
|
||||
# Disable Ryuk to avoid issues with Docker since it needs privileged access, containers are cleaned on teardown anyway
|
||||
TESTCONTAINERS_RYUK_DISABLED: true
|
||||
PLAYWRIGHT_WORKERS: ${{ inputs.workers || '2' }} # Configurable workers, defaults to 2 to reduce resource contention
|
||||
# Must match CI's COVERAGE_ENABLED to ensure Turbo cache hits (it's a globalEnv in turbo.json)
|
||||
COVERAGE_ENABLED: 'true'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2204
|
||||
runs-on: ${{ inputs.runner }}
|
||||
timeout-minutes: 30
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -101,3 +113,4 @@ jobs:
|
||||
QA_PERFORMANCE_METRICS_WEBHOOK_URL: ${{ secrets.QA_PERFORMANCE_METRICS_WEBHOOK_URL }}
|
||||
QA_PERFORMANCE_METRICS_WEBHOOK_USER: ${{ secrets.QA_PERFORMANCE_METRICS_WEBHOOK_USER }}
|
||||
QA_PERFORMANCE_METRICS_WEBHOOK_PASSWORD: ${{ secrets.QA_PERFORMANCE_METRICS_WEBHOOK_PASSWORD }}
|
||||
N8N_LICENSE_ACTIVATION_KEY: ${{ secrets.N8N_LICENSE_ACTIVATION_KEY }}
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
pnpm add --global wrangler
|
||||
|
||||
- name: Deploy
|
||||
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65
|
||||
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
|
||||
id: cloudflare_deployment
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
|
||||
@@ -137,7 +137,7 @@ jobs:
|
||||
if: steps.verify_file.outputs.file_exists == 'true'
|
||||
|
||||
# Pin v7.0.8
|
||||
uses: peter-evans/create-pull-request@18e469570b1cf0dfc11d60ec121099f8ff3e617a
|
||||
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
|
||||
|
||||
@@ -56,5 +56,5 @@ jobs:
|
||||
branch: update-node-popularity
|
||||
base: master
|
||||
delete-branch: true
|
||||
author: n8n Bot <191478365+n8n-bot@users.noreply.github.com>
|
||||
committer: n8n Bot <191478365+n8n-bot@users.noreply.github.com>
|
||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
|
||||
Reference in New Issue
Block a user