Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 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
ee2537d
feat(splice): catalogue Splice 0.6.9, 0.6.10, and 0.6.11 (#246)
srikanth-bitdynamics Jul 11, 2026
d7aa9c7
fix(ui): remove redundant note from frontend placeholder page (#251)
zheli Jul 11, 2026
0079005
style(webui): type scale — role-aware sizing on a centralized rem sca…
srikanth-bitdynamics Jul 11, 2026
2caa7c6
test(e2e): expect remove in localnet help after rename (#253)
zheli Jul 11, 2026
2054bc4
chore: pin CI/e2e to devkit v0.15.1 and Splice 0.6.12 (#252)
zheli Jul 11, 2026
5582598
docs(ui): align placeholder page with CONTRIBUTING.md workflows (#255)
zheli Jul 11, 2026
b5e9283
ci: add static analysis workflow for e2e-milestone1.sh (#257)
zheli Jul 11, 2026
b753114
test(e2e): use remove instead of clean in milestone 1 script (#256)
zheli Jul 11, 2026
62beda9
ci(e2e): run workflow when e2e-milestone1.sh changes on main (#258)
zheli Jul 11, 2026
817b8f7
fix(cli): use positional instance names in help and error text (#261)
zheli Jul 11, 2026
4f960b1
fix(ledger): emit LF-v2 #package-name references for --template filte…
srikanth-bitdynamics Jul 12, 2026
fa540ae
fix(dar): strip DPM_RESOLUTION_FILE from nested build env (#266)
zheli Jul 12, 2026
d148d47
ci(e2e): split Milestone 1 into per-test jobs for selective re-runs (…
zheli Jul 12, 2026
de6f32e
test(e2e): CLI-first cleanup with complete docker fallback (#268)
zheli Jul 12, 2026
f2f6dbe
feat(ui): show build commit id in side nav footer (#272)
zheli Jul 12, 2026
792120d
ci(e2e): fix invalid actions/download-artifact SHA pin (#270)
srikanth-bitdynamics Jul 12, 2026
d942d92
feat(observability): --observability-mode to skip redundant per-insta…
srikanth-bitdynamics Jul 12, 2026
70bf114
feat(observability): Web UI picker for --observability-mode (parity) …
srikanth-bitdynamics Jul 12, 2026
ce00faa
test(integration): fix stale RunUp call after Progress refactor (#271)
srikanth-bitdynamics Jul 12, 2026
aadf048
test(e2e): add bats-core dpm localnet suite (DPM-DAR-001) (#267)
zheli Jul 12, 2026
bfb8ad7
fix(localnet): restore requires a prior up; never create a volume out…
zheli Jul 13, 2026
e4d92e8
fix(cli): shorten DAR instance help text (#274)
zheli Jul 13, 2026
21df4b5
fix(cli): simplify operator-facing help text (#275)
zheli Jul 13, 2026
01465e8
chore: simplify GitHub bug report issue template (#278)
zheli Jul 14, 2026
d7e760c
fix(localnet): route bare wallet URLs to each role's wallet (#279)
zheli Jul 14, 2026
aa06629
chore (frontend): return 404 instead of index.html on requests for no…
elfedy Jul 15, 2026
507ea49
docs: list full DPM SDK packages in daml.yaml examples (#281)
zheli Jul 18, 2026
6a82c37
feat(localnet): role-scoped nginx vhosts for wallet and ledger APIs (…
zheli Jul 20, 2026
7b63afc
test(e2e): clarify DPM-DAR-001 scope and add bats summary to CI (#282)
zheli Jul 23, 2026
1793a42
feat(token): CIP-0112 V2 token features — identity picker, EventLog h…
srikanth-bitdynamics Jul 25, 2026
8f082cb
docs: restructure README as GitHub front door linking the docs site (…
zheli Jul 27, 2026
403801d
docs: restore command reference table in README (#286)
zheli Jul 27, 2026
1d64582
feat(frontend): add Vite mock API for UI-only development (#285)
zheli Jul 28, 2026
ad4f804
Update mock data (#287)
zheli Jul 28, 2026
3584e2f
fix: expose raw JWTs across LocalNet surfaces (#289)
zheli Jul 28, 2026
421cfd0
feat(analyzer): daml-analyzer core — types + JAR wrapper package
srikanth-bitdynamics Jul 21, 2026
affa126
feat(analyzer): run analyzer as a pinned Docker image (not a vendored…
srikanth-bitdynamics Jul 21, 2026
aa10cdb
feat(analyzer): REST handlers + CLI `dar analyze`
srikanth-bitdynamics Jul 21, 2026
8dfca51
feat(analyzer): Analyzer tab in the Web UI
srikanth-bitdynamics Jul 21, 2026
12bfbbb
feat(analyzer): prefer the DPM component runtime
srikanth-bitdynamics Jul 25, 2026
47993ca
feat(analyzer): full upstream view parity in the Analyzer tab
srikanth-bitdynamics Jul 25, 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.

56 changes: 56 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
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: what_happened
attributes:
label: What happened?
description: Describe the problem and what you expected instead.
placeholder: |
I ran `canton-devkit localnet up demo`. The command exited with an error instead of starting containers.
validations:
required: true

- type: textarea
id: steps
attributes:
label: Steps to reproduce
placeholder: |
1. Run `canton-devkit localnet up demo`
2. Run `canton-devkit localnet status --name demo`
3. See error
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: textarea
id: context
attributes:
label: Environment (optional)
description: OS, CLI vs Web UI, instance name, Splice version.
placeholder: |
macOS, CLI, instance `demo`, Splice 0.6.4

- type: textarea
id: output
attributes:
label: Command output / logs (optional)
description: stderr, `canton-devkit localnet doctor`, or docker compose output.
render: shell
105 changes: 105 additions & 0 deletions .github/actions/e2e-dpm-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Run dpm localnet bats E2E test
description: Build the binary, install the DPM CLI, and run one dpm localnet bats e2e file.

# Keep dpm-version / dpm-linux-sha256 defaults in sync with release.yml
# and e2e-test-dpm-installation.yml.
inputs:
bats-file:
description: Bats file under e2e-tests/ (for example dpm-dar-001.bats)
required: true
dpm-version:
description: DPM CLI version to install
required: false
default: "1.0.16"
dpm-linux-sha256:
description: SHA-256 of the linux/amd64 DPM tarball
required: false
default: "387421d4b3d0e799f05cde1f5c2adc704acd2824796d436861602eb2be759874"

runs:
using: composite
steps:
- name: Build binary
# All jobs run on the same single self-hosted runner, so the binary
# is built here rather than passed between jobs via a GitHub
# artifact. CDK_BIN then lets bats skip its own rebuild.
shell: bash
run: make build

- name: Install DPM CLI (sha256-verified)
shell: bash
run: |
set -euo pipefail
tar="${RUNNER_TEMP}/dpm-${{ inputs.dpm-version }}-linux-amd64.tar.gz"
curl -sSfL \
"https://github.com/digital-asset/dpm/releases/download/${{ inputs.dpm-version }}/dpm-${{ inputs.dpm-version }}-linux-amd64.tar.gz" \
-o "$tar"
echo "${{ inputs.dpm-linux-sha256 }} ${tar}" | sha256sum --check --strict -
bindir="${RUNNER_TEMP}/dpm-bin"
mkdir -p "$bindir"
tar -xzf "$tar" -C "$bindir" dpm
chmod 0755 "$bindir/dpm"
echo "$bindir" >> "$GITHUB_PATH"
"$bindir/dpm" --version

- name: Run bats test (TAP)
shell: bash
env:
# Use the binary built above; skips the in-bats `make build`.
CDK_BIN: ${{ github.workspace }}/bin/canton-devkit
BATS_LIB_PATH: ${{ github.workspace }}/e2e-tests/test_helper
run: |
set -o pipefail
e2e-tests/bats/bin/bats --formatter tap "e2e-tests/${{ inputs.bats-file }}" \
| tee "${RUNNER_TEMP}/bats.tap"

- name: Write job summary
if: always()
shell: bash
run: |
tap="${RUNNER_TEMP}/bats.tap"
[ -f "$tap" ] || exit 0

{
echo "### E2E: ${{ inputs.bats-file }}"
echo
echo "| Result | # | Test |"
echo "| --- | --- | --- |"
} >> "$GITHUB_STEP_SUMMARY"

passed=0 failed=0 skipped=0
while IFS= read -r line; do
case "$line" in
"ok "*"# skip"*|"ok "*"SKIP"*)
num="${line#ok }"; num="${num%% *}"
name="${line#ok "$num" }"; name="${name%%#*}"
echo "| ⏭️ | $num | ${name% } |" >> "$GITHUB_STEP_SUMMARY"
skipped=$((skipped + 1))
;;
"ok "*)
num="${line#ok }"; num="${num%% *}"
name="${line#ok "$num" }"
echo "| ✅ | $num | $name |" >> "$GITHUB_STEP_SUMMARY"
passed=$((passed + 1))
;;
"not ok "*)
num="${line#not ok }"; num="${num%% *}"
name="${line#not ok "$num" }"
echo "| ❌ | $num | $name |" >> "$GITHUB_STEP_SUMMARY"
failed=$((failed + 1))
;;
esac
done < "$tap"

{
echo
echo "**Total:** ${passed} passed, ${failed} failed, ${skipped} skipped"
} >> "$GITHUB_STEP_SUMMARY"

- name: Dump container state on failure
if: failure()
shell: bash
run: |
docker ps -a || true
docker compose ls || true
docker volume ls || true
33 changes: 33 additions & 0 deletions .github/actions/e2e-m1-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Run Milestone 1 E2E test
description: Download the built binary and run one Milestone 1 E2E test script.

inputs:
script:
description: Script filename under scripts/e2e/ (for example m1-up-001.sh)
required: true

runs:
using: composite
steps:
- name: Download built binary
# actions/download-artifact@v4.1.7
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e
with:
name: canton-devkit-binary
path: bin

- name: Make scripts executable
shell: bash
run: chmod +x bin/canton-devkit scripts/e2e/*.sh

- name: Run test
shell: bash
run: scripts/e2e/${{ inputs.script }}

- name: Dump container state on failure
if: failure()
shell: bash
run: |
docker ps -a || true
docker compose ls || true
docker volume ls || true
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/run-all.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)
35 changes: 35 additions & 0 deletions .github/workflows/analyzer-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: daml-analyzer image

# Builds the pinned daml-analyzer image (build/daml-analyzer/Dockerfile) and
# pushes it to GHCR. Manual dispatch: the analyzer image changes rarely (only
# when the pinned upstream commit is bumped), so it is not built on every push.
on:
workflow_dispatch:
inputs:
tag:
description: "Image tag (keep in sync with analyzer.DefaultImage)"
required: true
default: "0.1.0-143a7e2"

permissions:
contents: read
packages: write

jobs:
build-push:
runs-on: [self-hosted, Linux]
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
run: |
set -euo pipefail
owner=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
image="ghcr.io/${owner}/daml-analyzer:${{ inputs.tag }}"
docker build -t "$image" build/daml-analyzer
docker push "$image"
echo "pushed $image"
5 changes: 5 additions & 0 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 Down Expand Up @@ -56,6 +58,9 @@ jobs:
go-version-file: go.mod
cache: false

- name: Validate install.sh syntax
run: sh -n install.sh

- name: Build
run: go build ./...

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
Loading
Loading