Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
b463e17
fix(cli): drop stale fmt.Sprintf args from localnet up help
zheli Jun 25, 2026
302e263
refactor(ui): update wallet labels to include usernames for clarity
zheli Jun 25, 2026
bb1c3ad
fix(e2e): correct non-devkit container count in M1-DWN-001
zheli Jun 26, 2026
ba4f546
ci(e2e): remove adopted volumes left by prior runs
zheli Jun 26, 2026
60995d4
docs(agents): add guidelines for creating temporary files and folders
zheli Jun 26, 2026
53bb275
docs(agents): track proposal deviations in changes-from-proposal.md
zheli Jun 27, 2026
95746ea
docs: reorganize changes-from-proposal.md by subcommand group
zheli Jun 27, 2026
1dad920
chore: move OCI publish to homebrew-canton-devkit
zheli Jun 27, 2026
24446e1
Revert "chore: move OCI publish to homebrew-canton-devkit"
zheli Jun 28, 2026
b8c7749
docs: fix README — GHCR artifact is a DPM component, not a Docker image
zheli Jun 28, 2026
eb4b724
Fix formatting in README for DPM component section
zheli Jun 28, 2026
195ff51
docs: add implementation plan for weekly OCI artifact verification wo…
zheli Jun 28, 2026
665806f
ci: add weekly verify-public-oci workflow
zheli Jun 28, 2026
dcc2f71
Delete PLAN-verify-public-oci.md
zheli Jun 28, 2026
a458cf5
fix(ci): call dpm by absolute path in Install step
zheli Jun 28, 2026
9ec575c
fix(ci): fix two more failures in verify-public-oci smoke test
zheli Jun 28, 2026
768703f
chore(deps): bump undici from 7.27.0 to 7.28.0 in /frontend
dependabot[bot] Jun 28, 2026
5bd1be3
chore(ci): rename e2e.yml to e2e-test-devkit-functions.yml
zheli Jun 28, 2026
73d3a31
chore(ci): rename verify-public-oci.yml to e2e-test-dpm-installation.yml
zheli Jun 28, 2026
cdb72c7
fix(webui): show usable JWTs in Developer Setup for LocalNet
zheli Jun 28, 2026
ed6f4a5
fix(ci): quote E2E workflow names to fix YAML parse error
zheli Jun 28, 2026
12b7a40
docs: refresh README milestone roadmap (#194)
srikanth-bitdynamics Jun 30, 2026
1690b13
docs: clean up outdated/duplicated content and fix cross-links
zheli Jul 2, 2026
8797be0
docs: reframe for open source; remove internal process docs
srikanth-bitdynamics Jul 2, 2026
c64818f
refactor: repo-wide simplification pass (no behavior change)
srikanth-bitdynamics Jul 2, 2026
2c70964
docs: add Astro Starlight documentation site
srikanth-bitdynamics Jul 2, 2026
505248a
ci: run docs workflow on self-hosted runner
zheli Jul 2, 2026
b20fdc5
docs: restore test milestones and changes-from-proposal
zheli Jul 2, 2026
75e1b2b
docs: remove resolved limitations (locking, splice version pinning)
zheli Jul 2, 2026
3ef17d3
Remove unused document
zheli Jul 2, 2026
37df194
docs: remove validation-checklist page and its references
zheli Jul 2, 2026
320035a
ci: grant contents:read to docs deploy job
zheli Jul 3, 2026
eb3f75c
Remove outdated docs (#200)
zheli Jul 4, 2026
6fa06cf
docs: add release download-stats charts to README (#203)
zheli Jul 4, 2026
38ecbb1
chore(deps): bump golang.org/x/net from 0.51.0 to 0.55.0
dependabot[bot] Jul 5, 2026
181beb3
docs: make docs/ the single source for the website
zheli Jul 5, 2026
b17560b
feat(localnet): standalone stop/start commands + unpause alias (#201)
zheli Jul 5, 2026
7de56e4
fix(release): install gh CLI on self-hosted runner (#211)
zheli Jul 6, 2026
f568fe8
fix(ui): preserve profile recovery on start fallback (#205)
zheli Jul 6, 2026
d19257d
fix(ui): show down action for stopped instances (#206)
zheli Jul 6, 2026
a77d1ec
fix(ui): generalize action failure banner (#208)
zheli Jul 6, 2026
972f64d
ci(release): trigger only on v* tags, not main pushes (#212)
zheli Jul 6, 2026
0cc1000
fix(ci): publish release stats to release-stats-data branch (#213)
zheli Jul 6, 2026
03ec6c9
Web UI: adopt the Canton Infrastructure Design System (#215)
srikanth-bitdynamics Jul 7, 2026
a596942
README and docs site: Canton Infrastructure Design System (#216)
srikanth-bitdynamics Jul 7, 2026
4bd5bb2
docs: cut the prev/next pagination cards to the system scale (#219)
srikanth-bitdynamics Jul 7, 2026
69f52a2
feat(localnet): probe UI endpoint reachability in status, doctor, and…
srikanth-bitdynamics Jul 7, 2026
980c24d
fix(status): resolve wallet endpoints by stable key, not display labe…
srikanth-bitdynamics Jul 7, 2026
947c9cc
docs: align README with grant-facing documentation standards (#220)
zheli Jul 7, 2026
2e05a4e
docs: verify docs with latest code changes (#221)
srikanth-bitdynamics Jul 7, 2026
25a69e3
Revise README for clarity on Canton devkit usage (#222)
zheli Jul 7, 2026
9b79424
docs(website): align index intro with revised README (#223)
zheli Jul 7, 2026
785ba11
docs: add distribution install paths from homebrew-canton-devkit (#225)
zheli Jul 7, 2026
7ab614b
feat(cli): rename localnet clean to remove, keep clean as alias (#227)
zheli Jul 7, 2026
c746a45
Update installation instructions in README (#226)
zheli Jul 7, 2026
cfdd7b3
Update README to clarify Daml Package Manager usage and sdk-version r…
zheli Jul 7, 2026
4f13fef
refactor: rename clean symbols to remove, accept positional name (#229)
zheli Jul 8, 2026
521eba2
Update README badges for Homebrew and downloads (#232)
zheli Jul 9, 2026
a3be54d
Clarify installation instructions in README (#233)
zheli Jul 9, 2026
6ff0ce7
feat(cli): detect direct vs DPM invocation (#231)
zheli Jul 9, 2026
f67e8a9
docs: add canonical installer script and CI syntax check (#234)
zheli Jul 9, 2026
3207f48
chore(cli): align localnet help tagline with project description (#236)
zheli Jul 10, 2026
a3fb422
docs: document local Web UI dev loop (frontend + backend) (#242)
zheli Jul 10, 2026
3ff4200
chore: add PR and bug report GitHub templates (#243)
zheli Jul 10, 2026
e3a7a65
fix(observability): keep prometheus in profile set when enabling graf…
srikanth-bitdynamics Jul 10, 2026
34ef4f9
feat(docs): bar download charts with dual-repo aggregation (#244)
zheli Jul 10, 2026
d4a35a9
Web UI: dual-theme design system, Carbon Slate palette, and the V1 de…
srikanth-bitdynamics Jul 10, 2026
7d0bf52
ci: gate jobs by changed paths and merge Go lint with test
zheli Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 0 additions & 14 deletions .claude/launch.json

This file was deleted.

106 changes: 106 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Bug report
description: Report a problem with canton-devkit or a LocalNet instance
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Before filing, run `canton-devkit localnet doctor` and check [troubleshooting](https://github.com/bitdynamics-ab/canton-devkit/blob/main/docs/troubleshooting.md).
Redact JWTs, party IDs, and other secrets from pasted output.

- type: textarea
id: description
attributes:
label: Description
description: What went wrong?
validations:
required: true

- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: Numbered steps to trigger the issue.
placeholder: |
1. Run `canton-devkit localnet up demo`
2. Run `canton-devkit localnet status --name demo`
3. See error
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual behavior
validations:
required: true

- type: input
id: version
attributes:
label: canton-devkit version
description: Output of `canton-devkit version` or `dpm version`.
placeholder: e.g. v0.1.0
validations:
required: true

- type: input
id: splice_version
attributes:
label: Splice / LocalNet version
description: If applicable.
placeholder: e.g. 0.6.4, token-standard-v2

- type: dropdown
id: surface
attributes:
label: Surface
options:
- CLI
- Web UI
- Both
- Unsure
validations:
required: true

- type: dropdown
id: platform
attributes:
label: OS / platform
options:
- macOS
- Linux
- Windows
- Other
validations:
required: true

- type: input
id: instance
attributes:
label: Instance name
description: If applicable.
placeholder: e.g. demo

- type: textarea
id: doctor
attributes:
label: Diagnostic output
description: Paste `canton-devkit localnet doctor` output (redact secrets).
render: shell

- type: textarea
id: logs
attributes:
label: Logs / command output
description: stderr, docker compose output, or other relevant output.
render: shell
21 changes: 21 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Summary

<!-- 1-3 sentences: what changed and why -->

## Changes

<!-- bullet list; omit section for trivial fixes -->

## Test plan

- [ ] `make test`
- [ ] `make lint`
- [ ] `scripts/e2e-milestone1.sh`
- [ ] <!-- manual verification steps -->

## Checklist

- [ ] Tests pass locally
- [ ] No coverage regression on touched code
- [ ] Docs updated (and `website/` synced if any mirrored `docs/*.md` changed)
- [ ] CLI ↔ Web UI parity maintained (or follow-up issue + `TODO(#issue)` comment)
87 changes: 60 additions & 27 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- "go.mod"
- "go.sum"
- ".github/workflows/ci.yml"
- "install.sh"
- "docs/design/mockups/**.jsx"
- "frontend/**"
- "Makefile"
Expand All @@ -26,6 +27,7 @@ on:
- "go.mod"
- "go.sum"
- ".github/workflows/ci.yml"
- "install.sh"
- "docs/design/mockups/**.jsx"
- "frontend/**"
- "Makefile"
Expand All @@ -40,8 +42,44 @@ permissions:
contents: read

jobs:
test:
name: Build and test
changes:
name: Detect changed paths
runs-on: [self-hosted, Linux]
outputs:
go: ${{ steps.filter.outputs.go }}
install_sh: ${{ steps.filter.outputs.install_sh }}
frontend: ${{ steps.filter.outputs.frontend }}
mockups: ${{ steps.filter.outputs.mockups }}
steps:
- name: Check out repository
# actions/checkout@v5
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- name: Filter changed paths
# dorny/paths-filter@v4.0.2
id: filter
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d
with:
filters: |
go:
- '**/*.go'
- 'go.mod'
- 'go.sum'
- 'Makefile'
- 'internal/skills/docs/**'
- 'packaging/**'
- '.github/workflows/ci.yml'
install_sh:
- 'install.sh'
frontend:
- 'frontend/**'
- 'Makefile'
mockups:
- 'docs/design/mockups/**.jsx'

go:
name: Build, lint, and test
needs: changes
if: needs.changes.outputs.go == 'true' || needs.changes.outputs.install_sh == 'true'
runs-on: [self-hosted, Linux]

steps:
Expand All @@ -56,10 +94,23 @@ jobs:
go-version-file: go.mod
cache: false

- name: Validate install.sh syntax
if: needs.changes.outputs.install_sh == 'true'
run: sh -n install.sh

- name: Run golangci-lint
if: needs.changes.outputs.go == 'true'
# golangci/golangci-lint-action@v9.2.0
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20
with:
version: v2.12.2

- name: Build
if: needs.changes.outputs.go == 'true'
run: go build ./...

- name: Test
if: needs.changes.outputs.go == 'true'
run: go test ./...

mockup-syntax:
Expand All @@ -69,6 +120,8 @@ jobs:
# browser. esbuild's `--loader=jsx` is the cheapest JSX-aware parser
# available; no node_modules install needed.
name: Mockup JSX syntax
needs: changes
if: needs.changes.outputs.mockups == 'true'
runs-on: [self-hosted, Linux]
steps:
- name: Check out repository
Expand All @@ -90,39 +143,19 @@ jobs:
|| { echo "::error file=$f::JSX syntax error"; exit 1; }
done

lint:
name: Lint
runs-on: [self-hosted, Linux]

steps:
- name: Check out repository
# actions/checkout@v5
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd

- name: Set up Go
# actions/setup-go@v6
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: go.mod
cache: false

- name: Run golangci-lint
# golangci/golangci-lint-action@v9.2.0
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20
with:
version: v2.12.2

frontend:
# Frontend lint + typecheck + Vitest suite. Gated on
# frontend/** + Makefile path filters above, so a Go-only
# change doesn't pay the npm-install cost.
# Frontend typecheck + Vitest suite. Job-level path filter (via the
# `changes` job) skips this when only Go/mockup/install.sh files
# change, so a Go-only PR doesn't pay the npm-install cost.
#
# Deliberately does NOT run `npm run build` — the production
# bundle goes through `make frontend` at release time
# (release.yml), which also runs `go build` and proves
# //go:embed picks it up. This job is the per-PR fast loop:
# tsc + vitest, ~30s on a warm runner.
name: Frontend test
needs: changes
if: needs.changes.outputs.frontend == 'true'
runs-on: [self-hosted, Linux]

steps:
Expand Down
65 changes: 65 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: docs

on:
push:
branches: [main]
paths:
- "website/**"
- "docs/**"
- ".github/workflows/docs.yml"
workflow_dispatch:

permissions:
contents: read

# One Pages deployment at a time; don't cancel an in-flight production deploy.
concurrency:
group: pages
cancel-in-progress: false

jobs:
build:
name: Build site
runs-on: [self-hosted, Linux]
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: website/.nvmrc
cache: npm
cache-dependency-path: website/package-lock.json

- name: Install dependencies
working-directory: website
run: npm ci

- name: Build
working-directory: website
run: npm run build

- name: Configure Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: website/dist

deploy:
name: Deploy to GitHub Pages
needs: build
runs-on: [self-hosted, Linux]
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: E2E
name: "E2E: canton-devkit Functions"

# Shell-based end-to-end tests. Each milestone adds a job to this
# workflow. Currently: Milestone 1 (LocalNet CLI lifecycle).
Expand Down Expand Up @@ -56,6 +56,14 @@ jobs:
run: |
for name in e2e-test-default e2e-named-test e2e-version-test e2e-bad-version; do
docker compose -p "canton-${name}" down --volumes 2>/dev/null || true
# `compose down --volumes` only removes volumes Compose itself
# created; volumes left by a prior run get re-adopted as
# external and survive. On this persistent self-hosted runner
# that strands canton-<name>_postgres / _domain-upgrade-dump and
# trips M1-CLN-001's "volumes remain after clean" check. Remove
# them explicitly by project-name prefix to guarantee a clean slate.
docker volume ls -q --filter "name=^canton-${name}_" \
| xargs -r docker volume rm -f 2>/dev/null || true
rm -f "$HOME/.canton-devkit/localnet/${name}/.lock"
done

Expand All @@ -74,5 +82,9 @@ jobs:
run: |
for name in e2e-test-default e2e-named-test e2e-version-test e2e-bad-version; do
docker compose -p "canton-${name}" down --volumes 2>/dev/null || true
# Also drop adopted/external volumes Compose won't remove, so the
# next run on this persistent runner starts from a clean slate.
docker volume ls -q --filter "name=^canton-${name}_" \
| xargs -r docker volume rm -f 2>/dev/null || true
done
rm -f /tmp/e2e-m1-snapshot.tgz
Loading