mirror of
https://github.com/n8n-io/n8n.git
synced 2026-06-03 18:27:09 +02:00
141 lines
4.7 KiB
YAML
141 lines
4.7 KiB
YAML
name: 'Test: E2E CI'
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
branch:
|
|
description: 'GitHub branch/ref to test'
|
|
required: false
|
|
type: string
|
|
default: ''
|
|
|
|
env:
|
|
DOCKER_IMAGE: ghcr.io/n8n-io/n8n:pr-${{ github.event.pull_request.number }}-${{ github.run_id }}
|
|
|
|
jobs:
|
|
# Build Docker image once and push to GHCR for all shards to pull
|
|
# Only runs for internal PRs (not community/fork PRs)
|
|
build-docker:
|
|
name: 'Build Docker Image'
|
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
|
runs-on: blacksmith-4vcpu-ubuntu-2204
|
|
permissions:
|
|
packages: write
|
|
contents: read
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
with:
|
|
ref: ${{ inputs.branch || github.ref }}
|
|
fetch-depth: 1
|
|
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-nodejs
|
|
with:
|
|
build-command: 'pnpm build:docker'
|
|
enable-docker-cache: true
|
|
env:
|
|
INCLUDE_TEST_CONTROLLER: 'true'
|
|
|
|
- name: Login to GHCR
|
|
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Tag and push to GHCR
|
|
run: |
|
|
# Push n8n image
|
|
docker tag n8nio/n8n:local ${{ env.DOCKER_IMAGE }}
|
|
docker push ${{ env.DOCKER_IMAGE }}
|
|
|
|
# Push runners image (tests derive it from n8n image tag)
|
|
RUNNERS_IMAGE="${{ env.DOCKER_IMAGE }}"
|
|
RUNNERS_IMAGE="${RUNNERS_IMAGE/\/n8n:/\/runners:}"
|
|
docker tag n8nio/runners:local "$RUNNERS_IMAGE"
|
|
docker push "$RUNNERS_IMAGE"
|
|
|
|
# Multi-main: postgres + redis + caddy + 2 mains + 1 worker
|
|
# Only runs for internal PRs (not community/fork PRs)
|
|
# Pulls pre-built Docker image from GHCR
|
|
multi-main-e2e:
|
|
needs: [build-docker]
|
|
name: 'Multi-Main: E2E'
|
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
|
uses: ./.github/workflows/test-e2e-reusable.yml
|
|
with:
|
|
branch: ${{ inputs.branch }}
|
|
test-mode: docker-pull
|
|
docker-image: ghcr.io/n8n-io/n8n:pr-${{ github.event.pull_request.number }}-${{ github.run_id }}
|
|
test-command: pnpm --filter=n8n-playwright test:container:multi-main:e2e
|
|
shards: 15
|
|
runner: blacksmith-2vcpu-ubuntu-2204
|
|
workers: '1'
|
|
use-custom-orchestration: true
|
|
secrets: inherit
|
|
|
|
multi-main-isolated:
|
|
needs: [build-docker]
|
|
name: 'Multi-Main: Isolated'
|
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
|
uses: ./.github/workflows/test-e2e-reusable.yml
|
|
with:
|
|
branch: ${{ inputs.branch }}
|
|
test-mode: docker-pull
|
|
docker-image: ghcr.io/n8n-io/n8n:pr-${{ github.event.pull_request.number }}-${{ github.run_id }}
|
|
test-command: pnpm --filter=n8n-playwright test:container:multi-main:isolated
|
|
shards: 1
|
|
runner: blacksmith-2vcpu-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-e2e:
|
|
name: 'Community: E2E'
|
|
if: ${{ github.event.pull_request.head.repo.fork }}
|
|
uses: ./.github/workflows/test-e2e-reusable.yml
|
|
with:
|
|
branch: ${{ inputs.branch }}
|
|
test-mode: local
|
|
test-command: pnpm --filter=n8n-playwright test:local:e2e-only
|
|
shards: 7
|
|
runner: ubuntu-latest
|
|
workers: '1'
|
|
upload-failure-artifacts: true
|
|
|
|
community-isolated:
|
|
name: 'Community: Isolated'
|
|
if: ${{ github.event.pull_request.head.repo.fork }}
|
|
uses: ./.github/workflows/test-e2e-reusable.yml
|
|
with:
|
|
branch: ${{ inputs.branch }}
|
|
test-mode: local
|
|
test-command: pnpm --filter=n8n-playwright test:local:isolated
|
|
shards: 1
|
|
runner: ubuntu-latest
|
|
workers: '1'
|
|
upload-failure-artifacts: true
|
|
|
|
# Cleanup ephemeral Docker image from GHCR after tests complete
|
|
cleanup-docker:
|
|
name: 'Cleanup Docker Image'
|
|
needs: [multi-main-e2e, multi-main-isolated]
|
|
if: ${{ !failure() && !cancelled() && !github.event.pull_request.head.repo.fork }}
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
packages: write
|
|
contents: read
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
with:
|
|
sparse-checkout: .github/scripts
|
|
sparse-checkout-cone-mode: false
|
|
|
|
- name: Delete images from GHCR
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: node .github/scripts/cleanup-ghcr-images.mjs --tag pr-${{ github.event.pull_request.number }}-${{ github.run_id }}
|