# What this PR does - add missing labels-related permissions for external service account used by new oncall init process - fix expensive e2e tests in new oncall init process - unify Grafana versions between standard and expensive e2e tests - fix running tilt through ops-devenv in new oncall init process - avoid duplicated standard e2e tests on workflows that run daily and on merges to main ## Which issue(s) this PR closes Related to https://github.com/grafana/oncall-private/issues/2656 <!-- *Note*: If you want the issue to be auto-closed once the PR is merged, change "Related to" to "Closes" in the line above. If you have more than one GitHub issue that this PR closes, be sure to preface each issue link with a [closing keyword](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests#linking-a-pull-request-to-an-issue). This ensures that the issue(s) are auto-closed once the PR has been merged. --> ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] Added the relevant release notes label (see labels prefixed w/ `release:`). These labels dictate how your PR will show up in the autogenerated release notes. --------- Co-authored-by: Joey Orlando <joseph.t.orlando@gmail.com>
196 lines
6.8 KiB
YAML
196 lines
6.8 KiB
YAML
name: e2e tests
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
grafana_version:
|
|
required: true
|
|
type: string
|
|
browsers:
|
|
required: true
|
|
type: string
|
|
run-expensive-tests:
|
|
description: >
|
|
Whether or not to run Playwright tests that're annotated as "@expensive"
|
|
(ex. tests that incur costs such as sending SMSes via Twilio/Mailslurp)
|
|
required: true
|
|
type: boolean
|
|
secrets:
|
|
# NOTE: these are only required for the "expensive" e2e tests, which are only run via
|
|
# a daily GitHub Actions cron job (see .github/workflows/daily-e2e-tests.yml)
|
|
TWILIO_ACCOUNT_SID:
|
|
required: false
|
|
TWILIO_AUTH_TOKEN:
|
|
required: false
|
|
TWILIO_PHONE_NUMBER:
|
|
required: false
|
|
TWILIO_VERIFY_SID:
|
|
required: false
|
|
MAILSLURP_API_KEY:
|
|
required: false
|
|
|
|
jobs:
|
|
end-to-end-tests:
|
|
# default "ubuntu-latest" runners only provide 2 CPU cores + 7GB of RAM. this seems to lead to HTTP 504s from
|
|
# the oncall backend, and hence, flaky tests. Let's use CI runners w/ more resources to avoid this (plus
|
|
# this will allow us to run more backend containers and parralelize the tests)
|
|
runs-on: ubuntu-latest-16-cores
|
|
name: "Grafana: ${{ inputs.grafana_version }}"
|
|
environment:
|
|
name: github-pages
|
|
permissions:
|
|
id-token: write
|
|
pages: write
|
|
contents: read
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Collect Workflow Telemetry
|
|
uses: catchpoint/workflow-telemetry-action@v2
|
|
with:
|
|
comment_on_pr: false
|
|
proc_trace_chart_show: false
|
|
proc_trace_table_show: false
|
|
|
|
- name: Install Kind
|
|
uses: helm/kind-action@v1.10.0
|
|
with:
|
|
config: ./dev/kind.yml
|
|
install_only: true
|
|
|
|
- name: Install frontend dependencies
|
|
uses: ./.github/actions/install-frontend-dependencies
|
|
|
|
- name: Install Tilt
|
|
run: |
|
|
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
|
|
|
|
- name: Install ctlptl
|
|
run: |
|
|
CTLPTL_VERSION="0.8.20"
|
|
CTLPTL_FILE_NAME="ctlptl.$CTLPTL_VERSION.linux.x86_64.tar.gz"
|
|
curl -fsSL https://github.com/tilt-dev/ctlptl/releases/download/v$CTLPTL_VERSION/$CTLPTL_FILE_NAME | \
|
|
tar -xzv -C /usr/local/bin ctlptl
|
|
|
|
- name: Use cached plugin frontend build
|
|
id: cache-plugin-frontend
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: grafana-plugin/dist
|
|
key: ${{ runner.os }}-plugin-frontend-${{ hashFiles('grafana-plugin/src/**/*', 'grafana-plugin/yarn.lock') }}
|
|
|
|
- name: Build plugin frontend
|
|
if: steps.cache-plugin-frontend.outputs.cache-hit != 'true'
|
|
working-directory: grafana-plugin
|
|
run: yarn build:dev
|
|
|
|
# helpful reference for properly caching the playwright binaries/dependencies
|
|
# https://playwrightsolutions.com/playwright-github-action-to-cache-the-browser-binaries/
|
|
- name: Get installed Playwright version
|
|
id: playwright-version
|
|
working-directory: grafana-plugin
|
|
run: >
|
|
echo "PLAYWRIGHT_VERSION=$(cat ./package.json |
|
|
jq -r '.devDependencies["@playwright/test"]')" >> $GITHUB_ENV
|
|
|
|
- name: Cache Playwright binaries/dependencies
|
|
id: playwright-cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: "~/.cache/ms-playwright"
|
|
key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}-${{ inputs.browsers }}
|
|
|
|
- name: Create cluster
|
|
run: make cluster/up
|
|
|
|
- name: Install Playwright deps
|
|
uses: docker://mcr.microsoft.com/playwright:next-jammy
|
|
|
|
# ---------- Expensive e2e tests steps start -----------
|
|
- name: Install Go
|
|
uses: actions/setup-go@v4
|
|
with:
|
|
go-version: "1.21.5"
|
|
|
|
- name: Install Mage
|
|
run: go install github.com/magefile/mage@v1.15.0
|
|
|
|
- name: Get Vault secrets
|
|
if: inputs.run-expensive-tests
|
|
id: get-secrets
|
|
uses: grafana/shared-workflows/actions/get-vault-secrets@main
|
|
with:
|
|
repo_secrets: |
|
|
GH_APP_ID=github-app:app-id
|
|
GH_APP_INSTALLATION_ID=github-app:app-installation-id
|
|
GH_APP_PRIVATE_KEY=github-app:private-key
|
|
|
|
- name: Generate Github App token
|
|
if: inputs.run-expensive-tests
|
|
id: generate-token
|
|
uses: actions/create-github-app-token@v1
|
|
with:
|
|
app-id: ${{ env.GH_APP_ID }}
|
|
private-key: ${{ env.GH_APP_PRIVATE_KEY }}
|
|
owner: grafana
|
|
repositories: "ops-devenv,gops-labels"
|
|
|
|
- name: Clone other repos needed for cross-plugin e2e tests
|
|
if: inputs.run-expensive-tests
|
|
shell: bash
|
|
run: |
|
|
cd ..
|
|
git clone https://x-access-token:${{ steps.generate-token.outputs.token }}@github.com/grafana/ops-devenv.git
|
|
git clone https://x-access-token:${{ steps.generate-token.outputs.token }}@github.com/grafana/gops-labels.git
|
|
|
|
- name: Tilt CI - Expensive E2E tests
|
|
if: inputs.run-expensive-tests
|
|
shell: bash
|
|
env:
|
|
E2E_TESTS_CMD: "cd ../../grafana-plugin && yarn test:e2e-expensive"
|
|
GRAFANA_VERSION: ${{ inputs.grafana_version }}
|
|
GF_FEATURE_TOGGLES_ENABLE: "externalServiceAccounts"
|
|
ONCALL_API_URL: "http://oncall-dev-engine:8080"
|
|
GRAFANA_ADMIN_USERNAME: "irm"
|
|
GRAFANA_ADMIN_PASSWORD: "irm"
|
|
BROWSERS: ${{ inputs.browsers }}
|
|
MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }}
|
|
TWILIO_ACCOUNT_SID: ${{ secrets.TWILIO_ACCOUNT_SID }}
|
|
TWILIO_AUTH_TOKEN: ${{ secrets.TWILIO_AUTH_TOKEN }}
|
|
# wrapping single quotes are required to prevent stripping leading "+" from the number
|
|
TWILIO_PHONE_NUMBER: '"${{ secrets.TWILIO_PHONE_NUMBER }}"'
|
|
TWILIO_VERIFY_SID: ${{ secrets.TWILIO_VERIFY_SID }}
|
|
run: cd ../ops-devenv && tilt ci gops-labels oncall
|
|
# ---------- Expensive e2e tests steps end -----------
|
|
|
|
- name: Tilt CI - standard E2E tests
|
|
shell: bash
|
|
if: ${{ inputs.run-expensive-tests == false }}
|
|
env:
|
|
GRAFANA_VERSION: ${{ inputs.grafana_version }}
|
|
BROWSERS: ${{ inputs.browsers }}
|
|
run: tilt ci
|
|
|
|
- name: Setup Pages
|
|
if: failure()
|
|
uses: actions/configure-pages@v2
|
|
|
|
- name: Upload artifact
|
|
if: failure()
|
|
uses: actions/upload-pages-artifact@v1
|
|
with:
|
|
path: ./grafana-plugin/playwright-report/
|
|
|
|
- name: Deploy to GitHub Pages
|
|
if: failure()
|
|
id: deployment
|
|
uses: actions/deploy-pages@v3
|
|
with:
|
|
preview: true
|
|
|
|
- name: Linked Github Page
|
|
if: failure()
|
|
run: |
|
|
echo "Test report has been deployed to [GitHub Pages](https://grafana.github.io/oncall/) :rocket:" \
|
|
>> $GITHUB_STEP_SUMMARY
|