# Version Management

## Single Source of Truth: `.env.versions`

All tool versions are centrally managed in `.env.versions`:

```bash
NODE_VERSION=24.10.0
GO_VERSION=1.25.1
HUGO_VERSION=0.151.0
```

## Where are versions used?

1. **devbox.json** - Local development environment (manual sync required)
2. **Dockerfile** - Build arguments with defaults
3. **.github/workflows/ci.yaml** - CI/CD pipeline (automatic)
4. **scripts/get-versions.sh** - Helper script for local builds

## Updating Versions

### Step 1: Update `.env.versions`

Edit the file with new versions:

```bash
NODE_VERSION=24.12.0
GO_VERSION=1.25.2
HUGO_VERSION=0.152.0
```

### Step 2: Update `devbox.json`

Manually sync the versions in `devbox.json`:

```json
{
  "packages": [
    "hugo@0.152.0",
    "go@1.25.2",
    "nodejs@24.12.0",
    ...
  ]
}
```

### Step 3: Rebuild devbox environment

```bash
devbox shell --refresh
```

### Step 4: Test Docker build

```bash
source scripts/get-versions.sh
# Follow the printed docker build command
```

## Why not automatic devbox sync?

- devbox.json uses a different version format (e.g., `@latest` vs specific versions)
- devbox package names may differ from Docker image names
- Keeps devbox.json simple and readable
- Manual sync ensures intentional version updates

## CI/CD

The GitHub Actions workflow automatically loads versions from `.env.versions` - no manual intervention needed.
