No description
Find a file
kjuulh 1e4d456568
All checks were successful
ci/woodpecker/push/ci/4 Pipeline was successful
ci/woodpecker/push/ci/3 Pipeline was successful
ci/woodpecker/push/forest-ci-image/2 Pipeline was successful
ci/woodpecker/push/forest-ci-image/1 Pipeline was successful
ci/woodpecker/push/forest-ci-manifest Pipeline was successful
ci/woodpecker/push/ci/2 Pipeline was successful
ci/woodpecker/push/ci/1 Pipeline was successful
ci/woodpecker/push/manifest/2 Pipeline was successful
ci/woodpecker/push/manifest/1 Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
chore(deploy): per-env config, sccache fallback, annotation-driven deploy
- deployment/projects/{forest,forage}/forest.cue: move env-specific host
  and advertised URLs into per-env config blocks (dev keeps
  *.dev.forage.sh, prod uses *.forage.sh)
- .woodpecker/deploy.yaml: deploy via `forest release prepare` once per
  project (emits manifests for all envs) then `forest release annotate`
  — no per-env `release create`; server-side triggers pick up the
  annotation and fire the per-environment releases
- apps/forest/crates/forest/src/cli/release/create.rs: add --skip-commit
  to stop create after prepare+annotate, leaving the release for
  server-side triggers
- apps/{forest,forage}/Dockerfile: probe the sccache memcached endpoint
  and build without RUSTC_WRAPPER when it is unreachable, instead of
  failing the build

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: kjuulh <contact@kjuulh.io>
2026-06-02 22:13:56 +02:00
.woodpecker chore(deploy): per-env config, sccache fallback, annotation-driven deploy 2026-06-02 22:13:56 +02:00
apps chore(deploy): per-env config, sccache fallback, annotation-driven deploy 2026-06-02 22:13:56 +02:00
deployment chore(deploy): per-env config, sccache fallback, annotation-driven deploy 2026-06-02 22:13:56 +02:00
scripts docs(forest-ci): warn that image_tag is kjuulh/service-only 2026-06-02 20:21:15 +02:00
.gitignore docs(forest-ci): warn that image_tag is kjuulh/service-only 2026-06-02 20:21:15 +02:00
.ignore feat: rename namespace -> organisation 2026-02-14 01:40:26 +01:00
.release-please-manifest.json chore(main): release 0.1.12 (#49) 2026-06-02 20:10:52 +02:00
cliff.toml docs(forest-ci): warn that image_tag is kjuulh/service-only 2026-06-02 20:21:15 +02:00
mise.toml feat(forage): merged components/tools surface + GitHub-style project Overview 2026-05-19 14:29:13 +02:00
README.md docs(forest-ci): warn that image_tag is kjuulh/service-only 2026-06-02 20:21:15 +02:00

Forest - developer platform

Codify your development workflows; CI, deployments, component sharing as CUE manifests, then share them across your team.

rawpotion fork. This is a personal mirror of understory-io/forest hosted on src.rawpotion.io with Woodpecker CI and rawpotion-specific release artifacts. Container images publish to git.kjuulh.io/kjuulh/<app>.

Install

  • cue Cuelang (yaml and golang had a baby)

To install forest run the below command, it will install forest as a cli, and set your current profile to run against the production instance of forest.

Public releases on src.rawpotion.io, plain curl, no auth tooling required.

curl -fsSL https://src.rawpotion.io/rawpotion/forest/raw/branch/kjuulh/gitea-fork/scripts/install.sh | bash

To pin to a specific version, pass it to both the download (so the script itself comes from that release) and to the install script (so it grabs the matching tarball). bash -s -- forwards positional args when the script comes in via stdin: Next you need to add it to .zshrc to get full cli support

curl -fsSL https://src.rawpotion.io/rawpotion/forest/releases/download/v0.1.13/install.sh \
  | bash -s -- v0.1.13

The fork ships linux-x86_64 and linux-aarch64 binaries. macOS users can build from source (cargo build --release -p forest from apps/forest) or install from the upstream understory-io release.

Logging in

Either create an account or sign in, both can be done entirely in the terminal if wanted

forest auth login

Keeping forest up to date

forest self update    # upgrade to latest

A one-line nag also prints at the end of every command when a newer release exists (cached 24h; suppress with FOREST_NO_UPDATE_CHECK=1 or CI=true).

What's here

Release flow (fork)

Releases are tag-driven. release-please is gone; the fork uses git-cliff for changelog/release-notes generation (see cliff.toml) and a single Woodpecker pipeline.

# 1. Bump apps/forest/crates/forest/Cargo.toml $.package.version
# 2. Commit, tag, push
git commit -am "chore(release): v0.2.0"
git tag v0.2.0
git push origin main --tags

The .woodpecker/release-prepare.yaml + release-build.yaml workflows trigger on v* tags. release-prepare generates release notes from conventional commits and creates the release on src.rawpotion.io via the gitea API. release-build then runs a matrix on native amd64 and arm64 runners (no QEMU) and attaches the per-arch tarballs.