name: Run Nightly Benchmark run-name: Benchmark ${{ inputs.n8n_tag || 'nightly' }} on: schedule: - cron: '30 1,2,3 * * *' workflow_dispatch: inputs: debug: description: 'Use debug logging' required: true default: 'false' n8n_tag: description: 'Name of the n8n docker tag to run the benchmark against.' required: true default: 'nightly' benchmark_tag: description: 'Name of the benchmark cli docker tag to run the benchmark with.' required: true default: 'latest' env: ARM_CLIENT_ID: ${{ secrets.BENCHMARK_ARM_CLIENT_ID }} ARM_SUBSCRIPTION_ID: ${{ secrets.BENCHMARK_ARM_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.BENCHMARK_ARM_TENANT_ID }} N8N_TAG: ${{ inputs.n8n_tag || 'nightly' }} N8N_BENCHMARK_TAG: ${{ inputs.benchmark_tag || 'latest' }} DEBUG: ${{ inputs.debug == 'true' && '--debug' || '' }} permissions: id-token: write contents: read concurrency: group: benchmark cancel-in-progress: false jobs: build: runs-on: ubuntu-latest environment: benchmarking steps: - name: Checkout uses: actions/checkout@v4.1.1 - uses: hashicorp/setup-terraform@v3 with: terraform_version: '1.8.5' - run: corepack enable - uses: actions/setup-node@v4.0.2 with: node-version: 20.x cache: pnpm - name: Install dependencies run: pnpm install --frozen-lockfile - name: Azure login uses: azure/login@v2.1.1 with: client-id: ${{ env.ARM_CLIENT_ID }} tenant-id: ${{ env.ARM_TENANT_ID }} subscription-id: ${{ env.ARM_SUBSCRIPTION_ID }} - name: Destroy any existing environment run: pnpm destroy-cloud-env working-directory: packages/@n8n/benchmark - name: Provision the environment run: pnpm provision-cloud-env ${{ env.DEBUG }} working-directory: packages/@n8n/benchmark - name: Run the benchmark env: BENCHMARK_RESULT_WEBHOOK_URL: ${{ secrets.BENCHMARK_RESULT_WEBHOOK_URL }} BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER: ${{ secrets.BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER }} N8N_LICENSE_CERT: ${{ secrets.N8N_BENCHMARK_LICENSE_CERT }} run: | pnpm benchmark-in-cloud \ --vus 5 \ --duration 1m \ --n8nTag ${{ env.N8N_TAG }} \ --benchmarkTag ${{ env.N8N_BENCHMARK_TAG }} \ ${{ env.DEBUG }} working-directory: packages/@n8n/benchmark # We need to login again because the access token expires - name: Azure login if: always() uses: azure/login@v2.1.1 with: client-id: ${{ env.ARM_CLIENT_ID }} tenant-id: ${{ env.ARM_TENANT_ID }} subscription-id: ${{ env.ARM_SUBSCRIPTION_ID }} - name: Destroy the environment if: always() run: pnpm destroy-cloud-env ${{ env.DEBUG }} working-directory: packages/@n8n/benchmark