---
module: processes.release
title: Release Process
tab: Overview
order: 10
audience: bcos
---

How we cut and ship releases. **BCOS admin only.** Golden order: **bcos.dev first → verify → PR to
`main` → production.** Never skip staging.

## Microservice release
1. Merge to `main` via the [[processes.main]] gate.
2. Build + push: `./build.sh --registry registry.bcos.cloud --push` (image `hiveiq-<svc>`).
3. Deploy on the production services VM (`173.231.195.250`): `docker compose pull hiveiq-<svc>`
   → `docker compose up -d hiveiq-<svc>` — blue/green rules apply (see [[processes.main]]).
4. Update **VERSIONS.md** and add a **What's New** entry (below).

## Agent release (`hiveops-agent`)
1. **Bump first** (current version in repo = already in prod): `mvn versions:set -DnewVersion=X.Y.Z
   -DgenerateBackupPoms=false`.
2. `mvn clean package -DskipTests` → build fat JAR.
3. Build the 4 dist packages (`deployment/build-dist.sh`, run sequentially — it clears `dist/`
   each run: standard+patch × windows+linux). SCP each to the CDN VM (`173.231.195.252`)
   `downloads/agent/`.
4. On the CDN VM: `./scripts/release-agent.sh X.Y.Z <all 5 args>` — must pass all 5 so patches
   appear in Fleet › Artifacts.
5. Commit the version bump + push; update **VERSIONS.md**.

## Browser release (`hiveops-browser`, CDN — not Docker)
Build installers (`npm run build:win|linux`) → SCP to CDN `downloads/` → on the CDN VM
`./scripts/release-browser.sh X.X.XX <exe> <AppImage> <deb>` → commit `downloads/` → `./deploy.sh`.

## What's New (every release)
Edit `hiveops-release/releases.json` — **prepend** the entry under the app's key — then
`./deploy.sh` in `hiveops-release`. Section types: `added / fixed / improved / changed / removed`.
Verify at `https://cdn.bcos.cloud/whats-new?app=<key>`.

## Do NOT
- Do NOT ship an unverified build to a customer-facing channel (a fleet-wide `latest.json` flip,
  an ungated CDN publish). Stage on bcos.dev → QA → prod, no skips.
- Do NOT frame a customer-facing release as routine plumbing when asking for approval — name it as
  exactly what it is.
