Running the editor's own pipeline
This page is about the pipeline of the editor repository — the application, not a website built with it. For the pipeline a cratly website needs, see the pipeline reference and the setup guide.
The editor is an npm project: package-lock.json is the lock of record, and CI installs with npm ci.
End-to-end tests
The Playwright suite drives the editor against a real GitLab instance and a repository kept for that purpose. Locally it reads its credentials from .env.test.local at the project root.
| Variable | Example | What it is |
|---|---|---|
TEST_GITLAB_URL | https://git.example.com | Instance the tests work against |
TEST_GITLAB_TOKEN | glpat-… | Access token with api scope on the test repository |
TEST_REPO_PATH | sites/cratly-test-website | Namespace and project path of that repository |
TEST_REPO_ID | 238 | Numeric project ID |
TEST_REPO_BRANCH | main | Its default branch |
In CI the same names come from the project's CI/CD variables. The token belongs to the sandbox repository alone and is deliberately unprotected, so merge-request pipelines from feature branches can run the suite too; its blast radius is that one throwaway project.
.env.test.local.example in the repository names the variables; copy it to .env.test.local and fill it in. That copy is gitignored, so it never appears in a file listing — its absence from ls is not evidence that it is missing, which is a conclusion that has been drawn here before.
A run creates a branch, a commit and a merge request in the sandbox repository per test and removes them afterwards. The default branch is never written to, which is what makes runs repeatable. An interrupted run leaves its branch behind; that is worth checking before blaming a later failure on the code.
Preview origin
The editor opens previews on a separate origin so a previewed site cannot reach the editor's storage. In CI and locally that is derived from the dev server's own port — modern Linux kernels resolve *.localhost to the loopback address, so http://preview.localhost:5174 works without configuration.
Where an environment does not resolve *.localhost, set VITE_PREVIEW_ORIGIN explicitly. See Preview → Preview origin.
Deployment
The editor is published to S3-compatible storage, the same way this documentation site is.
| Variable | What it is |
|---|---|
S3_ENDPOINT | Service endpoint URL |
S3_ACCESS_KEY, S3_SECRET_KEY | Credentials with write access to the bucket |
S3_BUCKET | Bucket name, without the s3:// prefix |
S3_PREFIX | Key prefix for the application itself |
S3_PREVIEW_PREFIX | Key prefix the preview origin is served from |
Both prefixes matter: the bucket holds one folder per subdomain, so mirroring to its root would prune the siblings.
Running the tests locally
cp .env.test.local.example .env.test.local # then fill it in
npm run test:unit
npx playwright test --reporter=lineUse the line reporter unless you are watching: the configured default is the HTML reporter, which serves its report when the run ends and blocks. A run whose output never arrives is usually that.