oncall-engine/helm
Joey Orlando 3783aeab64
fix a few flaky e2e tests + allow running project locally via k8s/helm (#2751)
# What this PR does

- updates the GitHub Actions workflow to move the e2e tests into a
"[reusable
workflow](https://docs.github.com/en/actions/using-workflows/reusing-workflows#creating-a-reusable-workflow)"
which are run in two scenarios:
- all tests _except_ those annotated as `@expensive` are run against
`grafana/grafana:latest` on all feature branches
- all tests _including_ `@expensive` tests are run on weekdays @ 07h00
UTC, against a matrix of 6 grafana versions. Results of these builds
will be posted to `#irm-amixr-flux` Slack channel.
- local development will now be:
  ```bash
  make build-dev-images init-k8s start-k8s
  ```
- `build-dev-images` - builds the engine and UI docker images (only need
to run first time)
- `init-k8s` - creates a `kind` cluster and loads the two Docker images
onto the cluster nodes (only need to run first time)
- `start-k8s` - switches `kubectl` context to the created `kind`
cluster, and uses `helm` to deploy everything as defined in
`./dev/helm-local.yml` and `./dev/helm-local.dev.yml` (that latter file
is `.gitignored` and specific to how _you_ want your setup to look like.
Hot reloading works as before. This is the _start_ of #2381. (I've
marked these `make` commands as beta, because they've not yet been
thoroughly tested for local development).
- modifies the `helm` chart to add the concept of `oncall.devMode`,
`ui`, and ability to run oncall w/ sqlite
- `oncall.devMode` will essentially just add `volumes` and
`volumeMounts` to the various engine/migrate containers +
- `ui.enabled` + `ui.env` - create a ui container (which is needed for
hot reloading locally)
- `sqlite` - this was useful for the e2e test environments where Github
runner resources are scarce. Running `mariadb` eats up precious
resources, instead lets just use sqlite here
- fixes an issue that caused sporadic HTTP 502s from the grafana
plugin-proxy, which led to flaky tests. See [this
comment](https://github.com/grafana/oncall/pull/2751/files#diff-09040e8df192699b9c5742110ebbe8d9d5c3938cb156cc1cb99fa1c3fdee4fefR72-R77)
for more context + a link to a relevant Slack conversation. **tldr;**
there is a bug with the Grafana plugin proxy in Grafana >= v10.0.3.
Let's stop using the `latest`/`main` docker tags in our test and pin to
`10.0.2` for now
- ~~re-enables the e2e test which validates a phone number via SMS, and
asserts that we can receive an alert escalation via SMS (new Mailslurp
API Key has been added as a repo secret)~~ update: this is still blocked
by procurement, will be done in a future PR

## 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] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not
required)
2023-08-22 19:03:29 +02:00
..
oncall fix a few flaky e2e tests + allow running project locally via k8s/helm (#2751) 2023-08-22 19:03:29 +02:00
cr.yaml configure yamllint pre-commit step (#2728) 2023-08-03 02:35:08 -04:00
ct.yaml configure yamllint pre-commit step (#2728) 2023-08-03 02:35:08 -04:00
kind.yml first UI integration test - phone verification + receive SMS alert flow (#900) 2023-03-06 16:28:52 +00:00
README.md Upgrade helm dependecies, improve local setup (#2144) 2023-06-09 15:16:51 +08:00
simple.yml first UI integration test - phone verification + receive SMS alert flow (#900) 2023-03-06 16:28:52 +00:00

How to run the chart locally

  1. Create the cluster with kind

    Make sure ports 30001 and 30002 are free on your machine

    kind create cluster --image kindest/node:v1.24.7 --config kind.yml
    
  2. (Optional) Build oncall image locally and load it to kind cluster

  3. docker build ../engine -t oncall/engine:latest --target dev
    kind load docker-image oncall/engine:latest
    
  4. Install the helm chart

       helm install helm-testing \
       --wait \
       --values ./simple.yml \
       ./oncall
    
  5. Get credentials

    echo "\n\nOpen Grafana on localhost:30002 with credentials - user: admin, password: $(kubectl get secret --namespace default helm-testing-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo)"
    echo "Open Plugins -> Grafana OnCall -> fill form: backend url: http://host.docker.internal:30001"
    
  6. Clean up

    kind delete cluster