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
11 changes: 2 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,22 +132,15 @@ For general Canton and Daml questions, use the

### Standalone installs

Release asset downloads only (Homebrew formula tarballs and direct GitHub
Release downloads). DPM installs via `dpm install` are counted separately
below. Charts refresh daily via
[`release-stats.yml`](.github/workflows/release-stats.yml). Exact numbers:
[release-downloads.md](https://github.com/bitdynamics-ab/canton-devkit/blob/release-stats-data/docs/assets/release-downloads.md).
Homebrew install, installer script, and GitHub Release direct download:

![Monthly release downloads](https://raw.githubusercontent.com/bitdynamics-ab/canton-devkit/release-stats-data/docs/assets/release-downloads-monthly.svg)

![All-time downloads per platform](https://raw.githubusercontent.com/bitdynamics-ab/canton-devkit/release-stats-data/docs/assets/release-downloads-by-platform.svg)

### DPM package downloads

GHCR package pulls for `canton-devkit` (the `dpm install` path). Tracked
separately from standalone release downloads. Charts refresh daily via
[`package-stats.yml`](.github/workflows/package-stats.yml). Exact numbers:
[package-downloads.md](https://github.com/bitdynamics-ab/canton-devkit/blob/release-stats-data/docs/assets/package-downloads.md).
The `dpm install` path:

![Daily DPM package downloads](https://raw.githubusercontent.com/bitdynamics-ab/canton-devkit/release-stats-data/docs/assets/package-downloads-daily.svg)

Expand Down
18 changes: 7 additions & 11 deletions scripts/package-stats.sh
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,15 @@ render_line_chart() {
local out="$1" title="$2" xlabel="$3" data="$4"

local W=760 H=380
local ml=56 mr=180 mt=48 mb=64
# Narrow right margin: single-series chart has no legend.
local ml=56 mr=24 mt=48 mb=64
local pw ph
pw=$(( W - ml - mr ))
ph=$(( H - mt - mb ))

local n maxv step
local n maxv step nseries
n="$(printf '%s' "${data}" | jq '.labels | length')"
nseries="$(printf '%s' "${data}" | jq '.series | length')"
maxv="$(printf '%s' "${data}" | jq '[.series[].values[]] | max // 0')"
maxv="$(nice_max "${maxv}")"
step=$(awk -v n="$n" 'BEGIN{ if (n <= 12) print 1; else print int((n + 11) / 12) }')
Expand Down Expand Up @@ -146,8 +148,8 @@ render_line_chart() {
printf '<text x="%d" y="%d" font-size="12" fill="#374151" text-anchor="middle">%s</text>\n' \
$(( ml + pw/2 )) $(( H - 12 )) "$(svg_escape "${xlabel}")"

local si=0 sname scolor
while IFS= read -r sname; do
local si=0 scolor
while [ "$si" -lt "$nseries" ]; do
scolor="$(printf '%s' "${data}" | jq -r --argjson i "$si" '.series[$i].color')"
local pts=""
local vi=0 v px py
Expand All @@ -167,14 +169,8 @@ render_line_chart() {
printf '<circle cx="%s" cy="%s" r="3.5" fill="%s"/>\n' "${p%,*}" "${p#*,}" "${scolor}"
done

local ly=$(( mt + si*22 ))
printf '<rect x="%d" y="%d" width="14" height="14" rx="2" fill="%s"/>\n' \
$(( ml + pw + 16 )) "$ly" "${scolor}"
printf '<text x="%d" y="%d" font-size="12" fill="#374151">%s</text>\n' \
$(( ml + pw + 36 )) $(( ly + 12 )) "$(svg_escape "${sname}")"

si=$(( si + 1 ))
done < <(printf '%s' "${data}" | jq -r '.series[].name')
done

printf '</svg>\n'
} > "${out}"
Expand Down
8 changes: 8 additions & 0 deletions scripts/package-stats_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ assert_eq "first seeded row" \
assert_file_contains "md total" "${md}" "**Total downloads:** 100"
assert_file_contains "md day" "${md}" "| 2026-10-20 | 20 |"
assert_file_contains "svg title" "${svg}" "Daily DPM package downloads"
if grep -Fq 'width="14" height="14"' "${svg}"; then
echo "FAIL: svg still contains a legend swatch" >&2
exit 1
fi
if grep -Fq '>Downloads</text>' "${svg}"; then
echo "FAIL: svg still contains a Downloads legend label" >&2
exit 1
fi

# Idempotent same-day re-run must not duplicate rows.
OUT_DIR="${out}" \
Expand Down