Upload Your First Run
Use this page when local tests already work and you want a shared run history in Cloud.
Before you start
- The CLI is installed
glubean runalready works locally- You have access to a Glubean Cloud project
1. Create a project token
In Glubean Cloud, open your project and go to Settings → Tokens.
Create a token with the runs:write scope. Project tokens start with gpt_. Copy the value now — Glubean won’t show it again.
For when to use a project token vs a user API key, see Tokens.
2. Store the token
Local development
Put the token in .env.secrets (must be gitignored), and the project ID in .env (committed):
# .env.secrets — NOT committed
GLUBEAN_TOKEN=gpt_your_project_token# .env — committed; shared by every contributor
GLUBEAN_PROJECT_ID=prj_abc123The project ID isn’t sensitive and belongs in the repo (.env). The token is sensitive and goes in .env.secrets. Because it’s an env var, every run mode — glubean run --upload, glubean ci run --upload, or a filtered/tagged run — uploads to the same project.
Working on multiple Glubean projects from one laptop? See Multi-workspace setup.
CI
Store the project token in your provider’s secret store and inject it as the GLUBEAN_TOKEN env var. The CLI auto-picks it up — no glubean login step in CI.
GitHub Actions example:
- name: Upload Glubean run
env:
GLUBEAN_TOKEN: ${{ secrets.GLUBEAN_TOKEN }}
run: npx glubean ci run --uploadThe project ID is in .env, so no second secret is needed.
3. Upload a run
npx glubean ci run --uploadYou can still target a file, folder, filter, or tag:
glubean run ./tests/auth.test.ts --upload
glubean run --filter "login" --upload
glubean run --tag smoke --upload4. Open the run
After upload, the CLI prints a Cloud URL. Open it to inspect:
- Run summary
- Test results
- Logs, traces, and metrics
Credential lookup order
The CLI uses the first matching credential source for GLUBEAN_TOKEN, GLUBEAN_PROJECT_ID, and GLUBEAN_API_URL:
--token/--project/--api-urlCLI flagsGLUBEAN_TOKEN/GLUBEAN_PROJECT_ID/GLUBEAN_API_URLenv vars.envand.env.secretsfiles in the project root~/.glubean/credentials.json(written byglubean login)
The chain is per-field — for example, the token can come from an env var while the project ID comes from .env. This is what makes the recommended CI pattern (1 secret) work. Keep token values in .env.secrets (gitignored) — a literal GLUBEAN_TOKEN in the committed .env is read, so never commit one there.
For project ID, a profile’s upload.projectId in glubean.yaml is also honored when you run that profile — and it takes precedence over GLUBEAN_PROJECT_ID. A profile can also set upload.tokenEnv (the name of the env var holding its token) so different profiles upload to different projects. See Tokens for the exact order and the full config reference at Configuration.