DOCS release
Support
# Release Workflow

This guide describes the process for creating and publishing Bauxite releases.

## Overview

The release process is split into two distinct phases:

1. **Package** — Build binaries and artifacts locally for review
2. **Publish** — Push artifacts to GitHub Releases and GHCR

This separation prevents accidental releases and allows artifact verification before publishing.

## Prerequisites

- `gh` CLI authenticated: `gh auth login`
- Docker authenticated: `docker login ghcr.io`
- Git configured with proper credentials
- Zig installed (for cross-compilation): `brew install zig` or `sudo apt install zig`
- `cargo-zigbuild` installed: `cargo install cargo-zigbuild`

## Release Process

### 1. Package Artifacts

```bash
make package
```

This builds all release binaries and places them in `target/package/`:

- `bauxite-x86_64` — Standard Linux AMD64
- `bauxite-aarch64` — Standard Linux ARM64
- `bauxite-fips-x86_64` — FIPS 140-3 compliant variant
- `checksums.txt` — SHA256 checksums

Review the artifacts:

```bash
ls -lh target/package/
sha256sum -c target/package/checksums.txt
```

### 2. Tag and Push

```bash
git tag v0.2.0
git push origin v0.2.0
```

> **Important:** The `make publish` command requires a git tag to exist. It uses the most recent tag to name the release.

### 3. Publish

```bash
make publish
```

This performs two actions:

1. **GitHub Release** — Creates a release with binaries and checksums
2. **Docker Push** — Builds and pushes multi-arch Docker image to GHCR

The Docker image is tagged with:
- Full version: `v0.2.0`
- Major.minor: `0.2`
- `latest`

## Manual Publishing

If you need to publish components separately:

### Binaries Only

```bash
make publish-binaries
```

### Docker Only

```bash
make publish-docker
```

## Enterprise Releases

Enterprise components (Dispatch, Forge, Android) are released separately from the `bauxite-enterprise` repository.

Enterprise components (Dispatch, Forge, Android) are released from the `bauxite-enterprise` repository. See its README for enterprise-specific release instructions.

## Rollback Procedure

If a release needs to be rolled back:

1. Delete the Docker tag:
   ```bash
   docker buildx imagetools rm ghcr.io/bauxite-networks/bauxite-agent:v0.2.0
   ```

2. Delete or draft the GitHub Release via the GitHub UI or CLI:
   ```bash
   gh release delete v0.2.0 --yes
   ```

3. Push a patch version:
   ```bash
   git tag v0.2.1
   git push origin v0.2.1
   make publish
   ```