From first push to production.

Git hosting, stacked pull requests, CI, and releases in one place. Review a change layer by layer, run the right checks, and know what reached production.

Change 2 of 3Show sync state
Stack #24· 3 changes onto main1 ready to merge
  1. 41Add sync stateApproved
  2. 42Show sync stateAwaiting review
  3. 43Handle offlineChecks pending
apps/rezee/src/WorkspaceView.tsx
01import { useState } from 'react'
02import { Channel, Workspace } from '@rezee/core'
03import { useWorkspace, SyncState } from '@hooks/useWorkspace'
04import { Sidebar } from '@components/Sidebar'
05import { RepoCard } from '@components/RepoCard'
06import { Spinner } from '@components/Spinner'
07
08export function WorkspaceView({ workspaceId }: Props) {
09 const { repos, syncState } = useWorkspace(workspaceId)
10 const [active, setActive] = useState<string>()
11
12 if (syncState === SyncState.Pending) {
13 return <Spinner size="large" />
14 }
15
16 return (
17 <Panel>
18 <Sidebar repos={repos} active={active} syncState={syncState} />
19 <main className="grid gap-4">
20 {repos.map((repo) => (
21 <RepoCard
22 key={repo.id}
23 repo={repo}
24 active={active === repo.id}
25 />
26 ))}
27 </main>
28 </Panel>
29 )
30}

Smaller reviews. Clearer releases.

The workflow now spans stack authoring and review, flexible pipeline runs, and the changes waiting for the next release.

Merge with the full picture, not fingers crossed.

See every changed line, every CI result, and every teammate's comment in one view. No chasing status across three tabs before you dare to merge. Say what concerns you, request changes or approve, and merge when the verdicts and the pipeline both say yes - the whole flow happens without leaving Rezee.

Mask secret values in the runner env

#131 · kobeni wants to merge kobeni/mask-env into main · +84 −12 across 6 files

aakiapproved20 minutes ago
kobeniAgentwrote the tests12 minutes ago
src/runner/step.ts+4 −1
@@ -14,7 +14,9 @@ export function runStep(
const env = { ...base };
- for (const [k, v] of secrets) env[k] = v;
+ const sealed = await openBox(secrets, key);
+ for (const [k, v] of sealed) env[k] = v;
+ redact.register(sealed.values());
return spawn(step.command, { env });
aakion line 17

Register the sealed values before the first step runs, not after - otherwise checkout's log is unmasked.

See exactly which line failed, and why.

Define pipelines in .rezee/actions.yml. Every push runs each step in its own throwaway container, streams logs directly to your browser, and uses secrets encrypted at rest. No context-switching to a separate CI tool. Pipeline status sits next to the pull request it belongs to. When a step fails, you jump straight to the line.

aki/drop-token

4f1ac02

pushed by aki · 2 hours ago · took 51s

runner - a decommissioned runner keeps no credentials

failedrunner.rezee/actions.yml2/3 steps
$ go test ./...
--- FAIL: TestTokenRevoked (0.02s)
    token_test.go:41: want revoked, got active
FAIL

See what's live. Know what's next.

Ship is the system of record for what is running where. Every deploy is a row - reported by a pipeline job, by the CLI, or by whatever you already run - so the grid is right whether or not the deploy went through us. Rollback and promote are plain verbs on it. A release plan lives in .rezee/release.yml and the canvas edits that file: deploy, bake, check, sign off, deploy again. Above the grid sit four delivery numbers folded from the same rows, and each one opens into the deployments, merges or runs behind it.

Train 41 · v0.9.5 · Release

staging

deploy

10m

bake

smoke

check

Sign-off

waiting for you

production

deploy

Deploys to production4.2/ week50 in 12 weeks
Merge to live18h41 merges
Rolled back or failed7.1%3h to recover
Builds passing94%820 of 2,500 min
stagingproduction
web
b89e62c

12 minutes ago

v0.9.4

1 hour ago · 4 behind

api
4f1c0abdeploying

40 minutes ago

v0.9.3

3 days ago · 21 behind

runner
9e30f7d

2 hours ago

v0.9.3failed

3 days ago · 9 behind

Bring your next project.

Start free, with no card. Connect the agent you already use, hand it an issue, and approve its first merge today.