Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

## Unreleased

- `rootform run form.json` and comparisons of saved Forms draw provider icons and labels when the Form records the Dialects shipped with the same executable.

## 0.2.0-rc.1
## 0.2.0

- Analyze Terraform and OpenTofu plan and state exports into portable Forms,
with stage architectures, comparisons, drift, evidence and explicit limits.
- Explore architectures locally or through a self-contained HTML export.
A reopened Form keeps provider icons and labels when it records the
Dialects embedded in the same release.
- Explain instances, Rules and recorded Policy outcomes with their provenance.
- Evaluate selected Policies and Policy Packs against plans, states or
comparison Forms, with text, Markdown, JSON and SARIF reports.
Expand Down
2 changes: 1 addition & 1 deletion distribution/installers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Generate from exact final release assets:

```sh
bun scripts/generate-installation.ts \
--version 0.2.0-rc.1 \
--version 0.2.0 \
--release build/release \
--output build/installers
```
Expand Down
4 changes: 2 additions & 2 deletions docs/getting-started/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ from.

```sh
mkdir rootform-quickstart && cd rootform-quickstart
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.2.0-rc.1/examples/playground/commerce-platform/head/plan.json
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.2.0-rc.1/examples/playground/commerce-platform/head/plan.tfplan
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.2.0/examples/playground/commerce-platform/head/plan.json
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.2.0/examples/playground/commerce-platform/head/plan.tfplan
```

Analyze the plan. Rootform reads both files, prints a summary, and opens the
Expand Down
34 changes: 12 additions & 22 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,26 +61,18 @@ Invoke-RestMethod https://rootform.dev/install.ps1 | Invoke-Expression
rootform version
```

**Other options**

WinGet:

```shell
winget install --id Rootform.Rootform --exact
```

<!-- rootform:tab Container -->

**Recommended**

```sh
docker pull ghcr.io/rootform-dev/rootform:0.2.0-rc.1
docker pull ghcr.io/rootform-dev/rootform:0.2.0
```

**Verify**

```sh
docker run --rm ghcr.io/rootform-dev/rootform:0.2.0-rc.1 rootform version
docker run --rm ghcr.io/rootform-dev/rootform:0.2.0 rootform version
```

[Container usage](integrations/oci-image.md)
Expand All @@ -99,25 +91,25 @@ provide a product installation.

| Platform | Archive |
| --- | --- |
| macOS, Apple silicon | `rootform_0.2.0-rc.1_darwin_arm64.tar.gz` |
| macOS, Intel | `rootform_0.2.0-rc.1_darwin_amd64.tar.gz` |
| Linux, x86-64 | `rootform_0.2.0-rc.1_linux_amd64.tar.gz` |
| Linux, ARM64 | `rootform_0.2.0-rc.1_linux_arm64.tar.gz` |
| Windows, x86-64 | `rootform_0.2.0-rc.1_windows_amd64.zip` |
| macOS, Apple silicon | `rootform_0.2.0_darwin_arm64.tar.gz` |
| macOS, Intel | `rootform_0.2.0_darwin_amd64.tar.gz` |
| Linux, x86-64 | `rootform_0.2.0_linux_amd64.tar.gz` |
| Linux, ARM64 | `rootform_0.2.0_linux_arm64.tar.gz` |
| Windows, x86-64 | `rootform_0.2.0_windows_amd64.zip` |

Release archives include binary license and third-party notices. Match the
archive against its `SHA256SUMS` entry before extraction:

```sh title="macOS"
shasum -a 256 rootform_0.2.0-rc.1_darwin_arm64.tar.gz
shasum -a 256 rootform_0.2.0_darwin_arm64.tar.gz
```

```sh title="Linux"
sha256sum rootform_0.2.0-rc.1_linux_amd64.tar.gz
sha256sum rootform_0.2.0_linux_amd64.tar.gz
```

```powershell title="Windows"
Get-FileHash .\rootform_0.2.0-rc.1_windows_amd64.zip -Algorithm SHA256
Get-FileHash .\rootform_0.2.0_windows_amd64.zip -Algorithm SHA256
```

Extract the `.tar.gz` or `.zip`, then place `rootform` or `rootform.exe` in
Expand All @@ -133,22 +125,20 @@ described in [Locks and vendored content](offline-security.md).
Update package-managed installations with their package managers:

- Homebrew: `brew upgrade rootform-dev/tap/rootform`
- WinGet: `winget upgrade --id Rootform.Rootform --exact`
- Shell installer: run the recommended install command again. It replaces the
executable in the same installation directory.
- Manual archive: replace the executable with the binary from the new release,
then verify it with `rootform version`.
- Container: pull the selected release tag again, for example
`docker pull ghcr.io/rootform-dev/rootform:0.2.0-rc.1`.
`docker pull ghcr.io/rootform-dev/rootform:0.2.0`.

Remove package-managed installations with:

- Homebrew: `brew uninstall rootform-dev/tap/rootform`
- WinGet: `winget uninstall --id Rootform.Rootform --exact`
- Shell installer: remove `~/.local/bin/rootform` by default, or the file
under the custom `ROOTFORM_INSTALL_DIR`.
- Manual archive: remove `rootform` or `rootform.exe` from its `PATH` directory.
- Container: `docker image rm ghcr.io/rootform-dev/rootform:0.2.0-rc.1`.
- Container: `docker image rm ghcr.io/rootform-dev/rootform:0.2.0`.

These steps remove the executable or image. `rootform uninstall` removes
installed Dialects or Policy Packs from `$ROOTFORM_HOME`; it does not remove
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/ci/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ Keep the workflow, these scripts, `ROOTFORM_MODE=check`, and the selected Dialec

## Script settings

The portable script reads these settings from the environment. The installation wrapper also accepts `ROOTFORM_VERSION` (default `0.1.0`) and `ROOTFORM_HOME` for a prepared home; these are wrapper settings, not CLI flags.
The portable script reads these settings from the environment. The installation wrapper also accepts `ROOTFORM_VERSION` (default `0.2.0`) and `ROOTFORM_HOME` for a prepared home; these are wrapper settings, not CLI flags.

| Variable | Default | Use |
| --- | --- | --- |
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/ci/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ steps:
terraform -chdir=infra init -input=false
terraform -chdir=infra plan -input=false -out="$plan_dir/plan.tfplan"
terraform -chdir=infra show -json "$plan_dir/plan.tfplan" > "$plan_dir/plan.json"
ROOTFORM_MODE=check ROOTFORM_VERSION=0.1.0 ROOTFORM_PROJECT=./infra ROOTFORM_INPUT="$plan_dir/plan.json" ROOTFORM_PLAN_FILE="$plan_dir/plan.tfplan" ROOTFORM_OUTPUT_DIR="$(Build.SourcesDirectory)/.rootform-ci-$(Build.BuildId)" sh ./ci/generic-ci.sh
ROOTFORM_MODE=check ROOTFORM_VERSION=0.2.0 ROOTFORM_PROJECT=./infra ROOTFORM_INPUT="$plan_dir/plan.json" ROOTFORM_PLAN_FILE="$plan_dir/plan.tfplan" ROOTFORM_OUTPUT_DIR="$(Build.SourcesDirectory)/.rootform-ci-$(Build.BuildId)" sh ./ci/generic-ci.sh
displayName: Review architecture and check Policies
- publish: $(Build.SourcesDirectory)/.rootform-ci-$(Build.BuildId)
artifact: rootform-results
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/ci/generic-ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ set -eu
umask 077
tools=$(mktemp -d "${TMPDIR:-/tmp}/rootform-ci-tools.XXXXXXXX")
trap 'rm -rf -- "$tools"' 0
version=${ROOTFORM_VERSION:-0.1.0}
version=${ROOTFORM_VERSION:-0.2.0}
if [ -z "${ROOTFORM_BIN:-}" ]; then
curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' \
https://rootform.dev/install > "$tools/install.sh"
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/ci/github-actions-plan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- uses: rootform-dev/action@17cf0cbefae80ac388b54e0329dd40f3cd0f659e # v1
id: rootform
with:
version: 0.1.0
version: 0.2.0
project: ./infra
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/ci/gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ rootform-review:
stage: review
variables:
ROOTFORM_MODE: check
ROOTFORM_VERSION: 0.1.0
ROOTFORM_VERSION: 0.2.0
ROOTFORM_PROJECT: ./infra
ROOTFORM_OUTPUT_DIR: .rootform-ci-${CI_JOB_ID}
script:
Expand Down
6 changes: 3 additions & 3 deletions docs/integrations/github-actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ state JSON or a saved Form. Choose an exact [published Rootform version](https:/
- uses: rootform-dev/action@v1
id: rootform
with:
version: 0.2.0-rc.1
version: 0.2.0
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
```
Expand Down Expand Up @@ -74,7 +74,7 @@ To compare two revisions, give the same Action both operands instead of
- uses: rootform-dev/action@v1
id: rootform
with:
version: 0.2.0-rc.1
version: 0.2.0
before: before/form.json
after: after/form.json
policy-pack: ./policies
Expand Down Expand Up @@ -142,7 +142,7 @@ jobs:
# Checkout and export your input before this step.
- uses: rootform-dev/action@v1
with:
version: 0.2.0-rc.1
version: 0.2.0
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
comment: true
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/action.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ reinterpreting the original exports.
- uses: rootform-dev/action@v1
id: rootform
with:
version: 0.2.0-rc.1
version: 0.2.0
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
policy-pack: ./policies/team
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/analyze.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ and prepares required project content itself; setup and init are optional.
- uses: rootform-dev/action/analyze@v1
id: analysis
with:
version: 0.2.0-rc.1
version: 0.2.0
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
```
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/check.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ required. A supplied Form or Comparison Form is reused without new analysis.
- uses: rootform-dev/action/check@v1
id: checks
with:
version: 0.2.0-rc.1
version: 0.2.0
input: ${{ runner.temp }}/plan.json
plan-file: ${{ runner.temp }}/plan.tfplan
policy-pack: ./policies/team
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/compare.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ setup, init and separate analyze steps are optional.
- uses: rootform-dev/action/compare@v1
id: comparison
with:
version: 0.2.0-rc.1
version: 0.2.0
before: ${{ runner.temp }}/before/plan.json
before-plan-file: ${{ runner.temp }}/before/plan.tfplan
after: ${{ runner.temp }}/after/plan.json
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/init.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ when needed, so a separate init step is optional.
```yaml title="Prepare an existing locked project"
- uses: rootform-dev/action/init@v1
with:
version: 0.2.0-rc.1
version: 0.2.0
project: ./infra
locked: true
```
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/github-actions/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ is optional.
- uses: rootform-dev/action/setup@v1
id: installation
with:
version: 0.2.0-rc.1
version: 0.2.0
- run: rootform version
```

Expand Down
16 changes: 8 additions & 8 deletions docs/integrations/oci-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ title: "Container image"
description: "Analyze a mounted plan or state export with the official Rootform image, persistent package storage, and offline inputs."
---

The official image runs the same `rootform` CLI as the release archive for `linux/amd64` and `linux/arm64`. It contains the embedded RF Vocabulary and Dialects, not Terraform, OpenTofu, providers, project source, or external selections. Produce a plan or state JSON before starting the container; OpenTofu users replace `terraform` with `tofu` in those commands, and [Plan inputs](../inputs/plans.md#produce-the-accepted-json) gives the procedure. Use an exact version tag such as `ghcr.io/rootform-dev/rootform:0.2.0-rc.1` or the reviewed multi-platform index digest; there is no moving `latest` tag. The image has no entrypoint, so put `rootform` after the image reference in every command.
The official image runs the same `rootform` CLI as the release archive for `linux/amd64` and `linux/arm64`. It contains the embedded RF Vocabulary and Dialects, not Terraform, OpenTofu, providers, project source, or external selections. Produce a plan or state JSON before starting the container; OpenTofu users replace `terraform` with `tofu` in those commands, and [Plan inputs](../inputs/plans.md#produce-the-accepted-json) gives the procedure. Use an exact version tag such as `ghcr.io/rootform-dev/rootform:0.2.0` or the reviewed multi-platform index digest; there is no moving `latest` tag. The image has no entrypoint, so put `rootform` after the image reference in every command.

## Check the CLI version

```sh
docker run --rm ghcr.io/rootform-dev/rootform:0.2.0-rc.1 rootform version
docker run --rm ghcr.io/rootform-dev/rootform:0.2.0 rootform version
```

The version must match the release your team reviewed. To pin exact image bytes, replace the version tag with `ghcr.io/rootform-dev/rootform@sha256:<index-digest>`, using the complete reviewed index digest. For disconnected use, the image must already be present locally.
Expand All @@ -21,7 +21,7 @@ Mount the directory containing `plan.json` read-only and run a one-shot analysis
docker run --rm \
--volume "$PWD:/workspace:ro" \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform run plan.json --no-serve
```

Expand All @@ -33,7 +33,7 @@ To keep the Form while the project mount stays read-only, ask for JSON on standa
docker run --rm \
--volume "$PWD:/workspace:ro" \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform run plan.json --no-serve --format json > analysis.json
```

Expand All @@ -51,7 +51,7 @@ docker run --rm \
--volume "$PWD:/workspace:ro" \
--volume "$PWD/reports:/reports" \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform run plan.json --no-serve \
-o /reports/analysis.json -o /reports/report.md -o /reports/explorer.html
```
Expand All @@ -68,7 +68,7 @@ docker run --rm \
--volume "$PWD:/workspace:ro" \
--volume rootform-home:/home/rootform/.rootform \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform init . --locked --no-input
```

Expand All @@ -91,7 +91,7 @@ docker run --rm \
--tmpfs /home/rootform/.rootform:uid=65532,gid=65532,mode=0700 \
--volume "$PWD:/workspace:ro" \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform run plan.json --locked --no-serve --format json > analysis.json
```

Expand All @@ -108,7 +108,7 @@ docker run --rm \
--volume rootform-home:/home/rootform/.rootform \
--env DOCKER_CONFIG=/run/docker-config \
--workdir /workspace \
ghcr.io/rootform-dev/rootform:0.2.0-rc.1 \
ghcr.io/rootform-dev/rootform:0.2.0 \
rootform init . --locked --no-input
```

Expand Down
16 changes: 14 additions & 2 deletions docs/integrations/vscode.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,20 @@ help you navigate a Dialect or Policy Pack.
## Start editing

1. [Install Rootform](../installation.md) and confirm `rootform version` works.
2. Open **Extensions**, search for **Rootform**, and install the extension
published by **rootform-dev**. Use VS Code 1.133 or later.
2. Package the extension from the
[editors repository](https://github.com/rootform-dev/editors). Packaging
needs Bun and Node.js 22 or later with npm:

```sh
git clone https://github.com/rootform-dev/editors.git
cd editors
bun install --frozen-lockfile
cd vscode
bun run package
```

In VS Code 1.133 or later, run **Extensions: Install from VSIX...** and
select the `.vsix` file created in `vscode`.
3. Open a trusted workspace containing `.rf.hcl` files. Select the **Rootform**
language mode if VS Code has not selected it automatically.

Expand Down
4 changes: 3 additions & 1 deletion docs/integrations/zed.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ indentation and folding keep Dialects and Policy Packs readable.
## Start editing

1. [Install Rootform](../installation.md) and confirm `rootform version` works.
2. Open **Extensions**, search for **Rootform**, and install it.
2. Clone the [editors repository](https://github.com/rootform-dev/editors).
In Zed, run **zed: install dev extension** and select its `zed` directory.
Zed builds the extension with Rust installed through rustup.
3. Open a `.rf.hcl` file.

The extension finds `rootform` on the workspace `PATH` and starts the language
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.0-rc.1"
"version": "0.2.0"
},
"evidence": {
"origin": "plan",
Expand Down
6 changes: 3 additions & 3 deletions examples/playground/forms/commerce-platform-comparison.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
"kind": "comparison",
"generator": {
"name": "rootform",
"version": "0.2.0-rc.1"
"version": "0.2.0"
},
"before": {
"form": {
"format_version": "1",
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.0-rc.1"
"version": "0.2.0"
},
"evidence": {
"origin": "plan",
Expand Down Expand Up @@ -80959,7 +80959,7 @@
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.0-rc.1"
"version": "0.2.0"
},
"evidence": {
"origin": "plan",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.0-rc.1"
"version": "0.2.0"
},
"evidence": {
"origin": "plan",
Expand Down
Loading
Loading