mirror of https://github.com/OpenVidu/openvidu.git
114 lines
4.7 KiB
Markdown
114 lines
4.7 KiB
Markdown
# ci Specification
|
|
|
|
## Purpose
|
|
The GitHub Actions pipeline of the dashboard workspace in the `openvidu` repository: which checks gate every
|
|
change of the dashboard, where they run, how they are pinned and cached, and how dependencies are kept
|
|
current. The image is built and published by the release workflow of `openvidu-deployment`, not here.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Triggers and path filters
|
|
Edition: CE. The workflow `openvidu-dashboard-ci.yml` SHALL run on pushes to `master`, on pull requests to `master`
|
|
and on `workflow_dispatch`, only when files under `openvidu-dashboard/**` or the workflow itself change. Runs on the
|
|
same ref SHALL cancel in-progress runs.
|
|
|
|
#### Scenario: Unrelated change
|
|
- **WHEN** a pull request changes only files outside `openvidu-dashboard/` and the workflow file
|
|
- **THEN** the workflow does not run
|
|
|
|
#### Scenario: Superseded run
|
|
- **GIVEN** a run in progress for a branch
|
|
- **WHEN** a new push to the same branch arrives
|
|
- **THEN** the earlier run is cancelled
|
|
|
|
#### Scenario: Merge to master
|
|
- **WHEN** a pull request that changes `openvidu-dashboard/` is merged into `master`
|
|
- **THEN** the workflow runs on the resulting push to `master`
|
|
|
|
### Requirement: GitHub-hosted runners
|
|
Edition: CE. Every job SHALL run on `ubuntu-latest` and use no secret, so pull requests from forks run the same jobs.
|
|
|
|
#### Scenario: Default run
|
|
- **WHEN** the workflow runs on a pull request
|
|
- **THEN** every job executes on `ubuntu-latest`
|
|
|
|
### Requirement: Actions pinned by commit SHA
|
|
Edition: CE. Every `uses:` reference SHALL point to a full 40-character commit SHA with the version as a
|
|
trailing comment.
|
|
|
|
#### Scenario: Workflow audit
|
|
- **WHEN** the workflow file is inspected
|
|
- **THEN** no `uses:` references a tag or branch
|
|
|
|
### Requirement: Static checks job
|
|
Edition: CE. A job SHALL run `./dashboard.sh lint`, `format-check`, `typecheck` and `spec-validate` with
|
|
`--skip-install` after a frozen-lockfile install; any warning fails the job.
|
|
|
|
#### Scenario: Lint warning
|
|
- **GIVEN** a change that introduces an ESLint warning
|
|
- **WHEN** the checks job runs
|
|
- **THEN** it fails
|
|
|
|
### Requirement: Unit test job
|
|
Edition: CE. A job SHALL run `./dashboard.sh test-unit` (Vitest in every package) and fail on any failing
|
|
test.
|
|
|
|
#### Scenario: Failing unit test
|
|
- **GIVEN** a failing Vitest test in any package
|
|
- **WHEN** the unit job runs
|
|
- **THEN** it fails and the report names the test
|
|
|
|
### Requirement: Integration test job with a real MongoDB
|
|
Edition: CE. A job SHALL run `./dashboard.sh test-integration`, which starts a MongoDB 8 replica set with
|
|
Testcontainers. The job SHALL fail, not skip, when Docker is unavailable on the runner.
|
|
|
|
#### Scenario: Docker available
|
|
- **GIVEN** a runner with a working Docker daemon
|
|
- **WHEN** the integration job runs
|
|
- **THEN** repository tests execute against a MongoDB 8 replica set and pass
|
|
|
|
#### Scenario: Docker unavailable
|
|
- **GIVEN** a runner without Docker
|
|
- **WHEN** the integration job runs
|
|
- **THEN** it fails with a message stating that Docker is required
|
|
|
|
### Requirement: End-to-end job
|
|
|
|
Edition: CE. A job SHALL run `./dashboard.sh e2e`: build the application, seed a MongoDB with fixtures, run the
|
|
Playwright suites against it, and upload the Playwright reports and test results as one artifact on failure.
|
|
|
|
#### Scenario: Report on failure
|
|
- **GIVEN** a failing Playwright test
|
|
- **WHEN** the e2e job finishes
|
|
- **THEN** it fails and an `openvidu-dashboard-playwright-report` artifact is attached to the run
|
|
|
|
### Requirement: Writer contract job
|
|
|
|
Edition: CE. A job SHALL check out `openvidu-livekit` at `openvidu/main` and run
|
|
`./dashboard.sh contract-check` against it, after installing only the backend and its workspace dependencies.
|
|
The job fails when the writer does not vendor this contract, its structs do not produce the fixtures, its server
|
|
rejects a fixture or the schema versions differ.
|
|
|
|
#### Scenario: Contract drift
|
|
- **GIVEN** a contract change in `dashboard-ce/typings` that the writer branch has not vendored
|
|
- **WHEN** the contract job runs
|
|
- **THEN** it fails
|
|
|
|
### Requirement: Dependency update automation
|
|
|
|
Edition: CE. Dependabot SHALL watch the npm ecosystem of `/openvidu-dashboard` weekly, grouping minor and patch
|
|
updates and ignoring `@types/node` major updates while the dashboard runs on Node.js 24, in addition to the existing
|
|
`github-actions` entry.
|
|
|
|
#### Scenario: Weekly update
|
|
- **WHEN** a dependency in the workspace catalog has a new patch version
|
|
- **THEN** Dependabot opens a pull request and the pipeline runs on it
|
|
|
|
### Requirement: Caching
|
|
Edition: CE. Jobs that install the workspace SHALL cache the pnpm store keyed by `pnpm-lock.yaml`.
|
|
|
|
#### Scenario: Unchanged lockfile
|
|
- **GIVEN** a previous run with the same `pnpm-lock.yaml`
|
|
- **WHEN** a job installs dependencies
|
|
- **THEN** the pnpm store is restored from cache
|