Configuration & .env¶
Everything that maintainers or users would normally pre-set lives in environment variables. They can be set directly in your shell, in CI variables, or in a .env file at the repo root (or any path you point PULSE_DOTENV at).
A real environment variable always wins over the .env file, so CI overrides are easy.
Search order¶
$PULSE_DOTENV → $PWD/.env → <repo-root>/.env
The first file that exists is loaded. We don't merge — pick one location.
File format¶
Standard dotenv subset. Comments with #, optional export, optional surrounding quotes:
# A maintainer's setup
PULSE_RELAY_URL=https://pulse-relay.you.workers.dev/submit
PULSE_GITLAB_PROJECT_URL="https://gitlab.com/you/pulse"
export PULSE_SUBMITTER_NAME="Patrik"
We don't depend on python-dotenv. It's a tiny stdlib parser (src/pulse/dotenv.py) so the uvx cold start stays fast.
Reference¶
Maintainer¶
These are the values the project owner sets once.
| variable | required | what |
|---|---|---|
PULSE_RELAY_URL |
for one-click publishing | URL of your deployed Cloudflare Worker — see Maintainer setup. If unset or left as the example placeholder, the TUI falls back to opening the user's browser with a prefilled GitLab issue URL. |
PULSE_GITLAB_PROJECT_URL |
for the browser fallback | URL of the public project where MRs land (this repo). Used only when the relay isn't reachable. Default: https://gitlab.com/ai-sys0x/pulse. |
User (anyone running benchmarks)¶
| variable | what |
|---|---|
PULSE_SUBMITTER_NAME |
Pre-fill the Name input on the Results screen. The TUI Input is still editable. Used by --headless --publish when no --name flag is passed. |
PULSE_SUBMITTER_EMAIL |
Same, for email. |
PULSE_HEADLESS |
Any non-empty value forces --headless without the flag. Useful for scripts where you want headless even in a TTY. |
PULSE_AUTO_PUBLISH |
Any non-empty value enables --publish for headless runs. Combine with PULSE_SUBMITTER_NAME/EMAIL for fully unattended submissions. |
PULSE_OUT |
Override the run directory (default: ~/.local/share/pulse/runs/<TIMESTAMP>). |
PULSE_DOTENV |
Path to a non-default .env file. |
Advanced¶
| variable | what |
|---|---|
PULSE_ENABLE_CHROMIUM_BUILD |
Set to 1 to enable the compile_chromium benchmark. Off by default because a real Chromium build is hours and ~100 GiB. |
Relay (Cloudflare Worker secrets)¶
These live inside the worker and are pushed via wrangler secret put by the GitLab CI deploy job. Their source-of-truth is GitLab CI variables (and your local .env for testing — same names: RELAY_GITLAB_TOKEN, RELAY_GITLAB_PROJECT, etc.). Never commit values to the repo.
| worker binding | source CI variable | what |
|---|---|---|
GITLAB_TOKEN |
RELAY_GITLAB_TOKEN |
glpat-… from the pulse-relay-worker service account, api scope. |
GITLAB_PROJECT |
RELAY_GITLAB_PROJECT |
This repo, e.g. ai-sys0x/pulse. |
GITLAB_TARGET_BRANCH |
(worker default) | Default branch to merge into. Default: main. |
GITLAB_URL |
(worker default) | GitLab host. Default: https://gitlab.com. |
PULSE_HMAC_SECRET |
RELAY_HMAC_SECRET (optional) |
Shared HMAC; locks the relay to your client. |
TURNSTILE_SECRET |
RELAY_TURNSTILE_SECRET (optional) |
Cloudflare Turnstile site secret. |
See docs/maintainer.md for the full deployment + rotation flow.
Templates¶
A complete starter file lives at the repo root: .env.example. Copy it to .env and fill in the bits you care about — every variable is documented inline.
cp .env.example .env
Don't commit .env (it's in .gitignore).
See also¶
- CLI reference — every flag has an env equivalent.
- Maintainer setup — first-time deployment.