anvil

command module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 24, 2026 License: MIT Imports: 1 Imported by: 0

README

anvil

A guided, zero-config build and release pipeline for mobile and app projects.

One command detects the stack, fetches dependencies, analyzes, surfaces errors, tests, builds, signs, and uploads, without memorizing each framework's CLI.

CI Release

Part of OpenForge.

What it does

Point anvil at a project and it works out the stack, then runs the right lifecycle: dependencies, static analysis, tests, build, and (where set up) signing and store upload. It prints every command it runs, so it is also a way to learn the underlying tools instead of hiding them.

$ anvil detect
PATH  STACK    SUBTYPE  CONFIDENCE
.     flutter  app      0.98

$ anvil build
flutter pub get       ok
flutter analyze       0 issues
flutter test          42 passed
flutter build appbundle
Supported stacks

Flutter, React Native, native Android, native iOS, Swift, Kotlin/JVM, Go, and web/Node (Next, Nuxt, SvelteKit, Angular, Vite, CRA, Vue, Svelte, Astro, Remix, Gatsby). Adding another is one driver. See docs/ARCHITECTURE.md.

Install

anvil is a single static binary.

Prebuilt binary

Download the archive for your OS and architecture from the latest release, extract it, and put anvil on your PATH.

Go
go install github.com/openforge-oss/anvil@latest

Homebrew and Scoop distribution is wired and lands in the next release.

Usage

anvil detect                       # identify the project and its stack
anvil build                        # deps, analyze, test, build (guided)
anvil build --release --flavor prod
anvil sign                         # set up Android or iOS signing
anvil build --sign                 # build and sign
anvil upload                       # dry-run by default, pass --yes to perform

Useful flags: --path (project directory), --target (android or ios), --flavor, --release, --dry-run (print the plan without running it), and --plain (no TUI, for CI). Every command has --help.

anvil never puts secrets on the command line or in the repo. Keystore and store credentials come from a prompt or an environment variable, and a credential located inside the working tree is refused.

The problem

Shipping a build is a fiddly, error-prone grind: Gradle and AGP version matrices, the CocoaPods to Swift Package Manager migration, iOS provisioning and code signing, and per-stack commands nobody remembers. Existing tools either need config and a cloud account (fastlane, Codemagic), only output server containers (Nixpacks, buildpacks), or are heavy monorepo build systems (Nx, Bazel). anvil is a local, zero-config, auto-detecting, guided CLI that produces real artifacts.

Contributing

This repo runs a disciplined, low-token workflow. Read CLAUDE.md first. In short: branch then PR (never push main), and run ./check (lint plus test) before every push.

./check    # gofmt, go vet, staticcheck/govulncheck, go test -race
./build    # produces bin/anvil

Progress lives in tasks/todo.md and docs/ROADMAP.md.

License

MIT, OpenForge, 2026.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package cmd implements the anvil command line.
Package cmd implements the anvil command line.
internal
detect
Package detect identifies the stack(s) of a project tree from marker files.
Package detect identifies the stack(s) of a project tree from marker files.
driver
Package driver defines the build lifecycle contract and the per-stack drivers.
Package driver defines the build lifecycle contract and the per-stack drivers.
pipeline
Package pipeline runs a driver's steps: it executes each phase in order, streams combined output line by line, captures exit codes, applies the driver's classification, collects artifacts, and stops on the first failure.
Package pipeline runs a driver's steps: it executes each phase in order, streams combined output line by line, captures exit codes, applies the driver's classification, collects artifacts, and stops on the first failure.
sign
Package sign provides guided release-signing setup: it generates and wires signing material without committing secrets.
Package sign provides guided release-signing setup: it generates and wires signing material without committing secrets.
tui
Package tui renders pipeline events, either as an interactive Bubble Tea view or as plain line-oriented output for non-TTY and CI use.
Package tui renders pipeline events, either as an interactive Bubble Tea view or as plain line-oriented output for non-TTY and CI use.
upload
Package upload pushes a signed artifact to its store or registry.
Package upload pushes a signed artifact to its store or registry.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL