···11+# Changelog
22+33+All notable changes to this project will be documented in this file.
44+55+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77+88+## [Unreleased]
99+1010+## [0.1.0] - 2026-04-02
1111+1212+Initial release of the spindle-docker stack.
1313+1414+### Added
1515+- Docker Compose stack with OpenBao (vault), OpenBao proxy (AppRole sidecar), and Spindle (CI runner)
1616+- One-time vault bootstrap script (`init-openbao.sh`) with interactive AppRole Secret ID TTL prompt
1717+- `.env`-based configuration with documented variables and defaults; Compose loads it automatically
1818+- All images pinned to versioned SHA256 digests (OpenBao `2.5.2`, Go `1.23.12-alpine3.22`, Alpine `3.23.3`)
1919+- Spindle source pinned to `v1.13.0-alpha` with commit SHA verification at build time (`go mod verify` included)
2020+- OpenBao port bound to `127.0.0.1` only — not reachable from the network
2121+- `IPC_LOCK` capability on both OpenBao and OpenBao proxy to prevent secrets from swapping to disk
2222+- AppRole token file permissions hardened to `0600`
2323+- Pinned versions table in README
2424+- Early development warning in README
2525+2626+[Unreleased]: https://tangled.org/daniel.gay/spindle-docker/compare/v0.1.0...HEAD
2727+[0.1.0]: https://tangled.org/daniel.gay/spindle-docker/releases/tag/v0.1.0
+14-1
README.md
···9898- **openbao-proxy** — AppRole sidecar; auto-authenticates and exposes a token-authenticated proxy to spindle
9999- **spindle** — the CI runner; starts only after the proxy is healthy
100100101101+## Pinned versions
102102+103103+All images and source are pinned to specific versions and verified by digest or commit SHA to prevent unexpected changes on rebuild.
104104+105105+| Component | Version | Where |
106106+|-----------|---------|--------|
107107+| OpenBao | `2.5.2` | `docker-compose.yml` |
108108+| Go (builder) | `1.23.12-alpine3.22` | `Dockerfile` |
109109+| Alpine (runtime) | `3.23.3` | `Dockerfile` |
110110+| Spindle source | `v1.13.0-alpha` (`3572988`) | `Dockerfile` |
111111+112112+To upgrade any component, update the tag/version and its corresponding `@sha256:...` digest (or commit SHA for Spindle). All versions are currently alpha — there are no stable Spindle releases yet.
113113+101114## Notes
102115103103-- Port 8200 is exposed for local CLI access. Remove that port mapping in production.
116116+- Port 8200 is exposed for local CLI access only (`127.0.0.1`). Remove that port mapping entirely if you don't need it.
104117- TLS is disabled on both listeners. Put nginx or Caddy in front for production traffic.
105118- Spindle mounts the Docker socket, so pipeline containers run on the **host** daemon.
+75
RELEASING.md
···11+# Releasing
22+33+How to cut a new release and tag it on tangled.org.
44+55+## Before you release
66+77+1. **Update `CHANGELOG.md`** — move everything under `[Unreleased]` into a new versioned section:
88+99+ ```markdown
1010+ ## [0.2.0] - YYYY-MM-DD
1111+ ```
1212+1313+ Update the comparison links at the bottom of the file.
1414+1515+2. **Commit the changelog:**
1616+1717+ ```
1818+ jj commit -m "chore: release v0.2.0"
1919+ ```
2020+2121+3. **Push to main:**
2222+2323+ ```
2424+ jj git push
2525+ ```
2626+2727+## Tagging
2828+2929+jj only creates lightweight tags. For release notes to appear on tangled.org, use an **annotated** git tag instead:
3030+3131+```bash
3232+git tag -a v0.2.0 -m "Release v0.2.0
3333+3434+<paste the changelog entry here>"
3535+```
3636+3737+Then push the tag:
3838+3939+```bash
4040+jj git push --tag v0.2.0
4141+```
4242+4343+The tag will appear on tangled.org under your repository's tags/releases page.
4444+4545+## Versioning
4646+4747+This project uses [Semantic Versioning](https://semver.org/):
4848+4949+- **Patch** (`0.1.x`) — bug fixes, dependency updates, documentation
5050+- **Minor** (`0.x.0`) — new features, config changes that are backwards compatible
5151+- **Major** (`x.0.0`) — breaking changes (e.g. incompatible config format, changed volume layout)
5252+5353+## Updating pinned versions
5454+5555+When upgrading a dependency, update both the tag/version **and** the digest in the relevant file:
5656+5757+| Dependency | File | What to update |
5858+|------------|------|----------------|
5959+| OpenBao | `docker-compose.yml` | image tag + `@sha256:...` |
6060+| Go builder | `Dockerfile` | `FROM golang:X.Y.Z-alpineA.B@sha256:...` |
6161+| Alpine runtime | `Dockerfile` | `FROM alpine:X.Y.Z@sha256:...` |
6262+| Spindle source | `Dockerfile` | `--branch vX.Y.Z` + commit SHA in the verify step |
6363+6464+To find a new SHA256 digest:
6565+6666+```bash
6767+# Docker Hub images
6868+curl -s "https://hub.docker.com/v2/repositories/library/alpine/tags/3.23.3" | python3 -c "import sys,json; print(json.load(sys.stdin)['digest'])"
6969+7070+# Quay.io images
7171+curl -s "https://quay.io/api/v1/repository/openbao/openbao/tag/?specificTag=2.5.2" | python3 -c "import sys,json; [print(t['manifest_digest']) for t in json.load(sys.stdin)['tags']]"
7272+7373+# Spindle commit SHA
7474+git ls-remote https://tangled.org/tangled.org/core refs/tags/vX.Y.Z-alpha
7575+```