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
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

## Unreleased

## 0.3.0

- Explorer's Constellation view shows connections across the whole architecture.
Follow recorded relations, placements and contributions on one map, or focus
on a local graph up to four links from a selected object.
- Switch between Architecture and Constellation with `g` while keeping the
selection, Inspector, comparison side and change filters.
- Constellation is available in the local Explorer and self-contained HTML
exports, with grouping by scope, provider or kind.
- Trackpad panning stays inside the Explorer without triggering browser Back
or Forward navigation.

## 0.2.1

- The AWS Dialect presents AWS resources with the official AWS Architecture
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.1 \
--version 0.3.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.1/examples/playground/commerce-platform/head/plan.json
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.2.1/examples/playground/commerce-platform/head/plan.tfplan
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.3.0/examples/playground/commerce-platform/head/plan.json
curl -fsSLO https://raw.githubusercontent.com/rootform-dev/rootform/v0.3.0/examples/playground/commerce-platform/head/plan.tfplan
```

Analyze the plan. Rootform reads both files, prints a summary, and opens the
Expand Down
6 changes: 4 additions & 2 deletions docs/guides/explore-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@ open the home context.

## How do connections span the architecture?

In the [Playground](https://rootform.dev/playground/?representation=constellation),
open the view name at the top left to choose **Architecture** or
Open the view name at the top left to choose **Architecture** or
**Constellation**. Architecture opens one context and its contents at a time.
Constellation puts all canvas objects on one map, so you can follow connections
across contexts without opening each one. Its lines come from architectural
Expand All @@ -114,6 +113,9 @@ returns to the full map.
Press `g` to switch between the two views. Your selection, Inspector,
comparison side, and change filters stay with you.

Both views work in the local Explorer, self-contained HTML exports and the
[Playground](https://rootform.dev/playground/?representation=constellation).

## What does this plan change?

The selector under the navigation controls names the current view and the
Expand Down
24 changes: 12 additions & 12 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,13 @@ rootform version
**Recommended**

```sh
docker pull ghcr.io/rootform-dev/rootform:0.2.1
docker pull ghcr.io/rootform-dev/rootform:0.3.0
```

**Verify**

```sh
docker run --rm ghcr.io/rootform-dev/rootform:0.2.1 rootform version
docker run --rm ghcr.io/rootform-dev/rootform:0.3.0 rootform version
```

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

| Platform | Archive |
| --- | --- |
| macOS, Apple silicon | `rootform_0.2.1_darwin_arm64.tar.gz` |
| macOS, Intel | `rootform_0.2.1_darwin_amd64.tar.gz` |
| Linux, x86-64 | `rootform_0.2.1_linux_amd64.tar.gz` |
| Linux, ARM64 | `rootform_0.2.1_linux_arm64.tar.gz` |
| Windows, x86-64 | `rootform_0.2.1_windows_amd64.zip` |
| macOS, Apple silicon | `rootform_0.3.0_darwin_arm64.tar.gz` |
| macOS, Intel | `rootform_0.3.0_darwin_amd64.tar.gz` |
| Linux, x86-64 | `rootform_0.3.0_linux_amd64.tar.gz` |
| Linux, ARM64 | `rootform_0.3.0_linux_arm64.tar.gz` |
| Windows, x86-64 | `rootform_0.3.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.1_darwin_arm64.tar.gz
shasum -a 256 rootform_0.3.0_darwin_arm64.tar.gz
```

```sh title="Linux"
sha256sum rootform_0.2.1_linux_amd64.tar.gz
sha256sum rootform_0.3.0_linux_amd64.tar.gz
```

```powershell title="Windows"
Get-FileHash .\rootform_0.2.1_windows_amd64.zip -Algorithm SHA256
Get-FileHash .\rootform_0.3.0_windows_amd64.zip -Algorithm SHA256
```

Extract the `.tar.gz` or `.zip`, then place `rootform` or `rootform.exe` in
Expand All @@ -130,15 +130,15 @@ Update package-managed installations with their package managers:
- 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.1`.
`docker pull ghcr.io/rootform-dev/rootform:0.3.0`.

Remove package-managed installations with:

- Homebrew: `brew uninstall rootform-dev/tap/rootform`
- 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.1`.
- Container: `docker image rm ghcr.io/rootform-dev/rootform:0.3.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.2.1`) 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.3.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.2.1 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.3.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.2.1}
version=${ROOTFORM_VERSION:-0.3.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@86eb7a7ca072d3564c4ca66f074cdc2e2763bf04 # v1.0.0
id: rootform
with:
version: 0.2.1
version: 0.3.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.2.1
ROOTFORM_VERSION: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.1
version: 0.3.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.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.3.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.1 rootform version
docker run --rm ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.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.1 \
ghcr.io/rootform-dev/rootform:0.3.0 \
rootform init . --locked --no-input
```

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.1"
"version": "0.3.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.1"
"version": "0.3.0"
},
"before": {
"form": {
"format_version": "1",
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.1"
"version": "0.3.0"
},
"evidence": {
"origin": "plan",
Expand Down Expand Up @@ -92696,7 +92696,7 @@
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.1"
"version": "0.3.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.1"
"version": "0.3.0"
},
"evidence": {
"origin": "plan",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
"kind": "comparison",
"generator": {
"name": "rootform",
"version": "0.2.1"
"version": "0.3.0"
},
"before": {
"form": {
"format_version": "1",
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.1"
"version": "0.3.0"
},
"evidence": {
"origin": "plan",
Expand Down Expand Up @@ -82864,7 +82864,7 @@
"kind": "plan",
"generator": {
"name": "rootform",
"version": "0.2.1"
"version": "0.3.0"
},
"evidence": {
"origin": "plan",
Expand Down
Loading
Loading