From 1a1631bd3c95c0b3ead1c4c90d6d1835ae48fadf Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 12:03:49 +0200 Subject: [PATCH 1/9] Build the stats page into the site The stats page lived in scverse/stats with its own frontend, so it did not look or navigate like the rest of scverse.org. This renders the same data through the site's own layout, type and tiles, and links it from the About menu. stats.json and contributors.json are still produced by scverse/stats and fetched at build time, the same way the packages page reads the ecosystem registry. The data is a snapshot rather than a time series, so the page is a set of numbers and a contributor list, not the growth charts the issue imagined. Refs #157. --- assets/main.scss | 140 +++++++++++++++++++++++++++++++++++ content/stats/_index.md | 4 + layouts/partials/header.html | 3 + layouts/stats/list.html | 105 ++++++++++++++++++++++++++ 4 files changed, 252 insertions(+) create mode 100644 content/stats/_index.md create mode 100644 layouts/stats/list.html diff --git a/assets/main.scss b/assets/main.scss index 7bdb074..b09864b 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -1032,6 +1032,146 @@ body { border-top: 0px; } +// Specific to /stats + +#stats-content { + .stats-updated { + font-size: 0.9rem; + color: $greydesc; + } + + // The one number the page leads with + .stats-hero { + display: flex; + flex-direction: column; + gap: 0.35rem; + margin: 2.5rem 0 1rem; + + .stats-hero-value { + font-size: 4.5rem; + font-weight: 800; + line-height: 1; + color: black; + } + .stats-hero-label { + font-size: 1.15rem; + color: $tiletext; + } + .stats-hero-hint { + font-size: 0.9rem; + color: $greydesc; + } + @media (max-width: 50rem) { + .stats-hero-value { + font-size: 3rem; + } + } + } + + .stats-tiles { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); + gap: 0.75rem; + } + + .stats-tile { + display: flex; + flex-direction: column; + gap: 0.3rem; + padding: 1.1rem 1.25rem; + background-color: $tilebg4; + border: 1px solid $overline; + border-radius: 0.75rem; + + .stats-tile-value { + font-size: 2rem; + font-weight: 800; + line-height: 1.1; + color: black; + } + .stats-tile-label { + font-size: 0.85rem; + line-height: 1.35; + color: $tiletext2; + } + } + + .stats-contributors { + display: grid; + gap: 0.15rem; + margin: 1.5rem 0; + padding: 0; + list-style: none; + + a { + display: grid; + grid-template-columns: 2.5rem minmax(7rem, 11rem) 1fr auto; + align-items: center; + gap: 0.85rem; + padding: 0.35rem 0.5rem; + border-radius: 0.5rem; + color: $tiletext; + text-decoration: none; + transition: all 200ms ease-in-out; + + &:hover { + color: black; + background-color: $tilebg4; + } + } + img { + width: 2.5rem; + height: 2.5rem; + border-radius: 50%; + } + .stats-contributor-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + // Thin recessive track, value anchored to the baseline with 4px ends + .stats-contributor-bar { + height: 0.5rem; + background-color: $tilebg; + border-radius: 0.25rem; + + > span { + display: block; + height: 100%; + background-color: $tiletext; + border-radius: 0.25rem; + } + } + .stats-contributor-count { + font-size: 0.85rem; + color: $greydesc; + font-variant-numeric: tabular-nums; + } + + @media (max-width: 50rem) { + a { + grid-template-columns: 2.5rem 1fr auto; + } + .stats-contributor-bar { + display: none; + } + } + } + + .stats-more { + margin: 0 0 0 0.5rem; + font-size: 0.85rem; + color: $greydesc; + } + + .stats-source { + margin-top: 2.5rem; + font-size: 0.85rem; + line-height: 1.6; + color: $greydesc; + } +} + // Specific to /tutorials #tutorials-content { diff --git a/content/stats/_index.md b/content/stats/_index.md new file mode 100644 index 0000000..5bff4e4 --- /dev/null +++ b/content/stats/_index.md @@ -0,0 +1,4 @@ ++++ +title = "scverse in numbers" +preface = "How the scverse community and its packages are doing. The numbers cover the core packages and the scverse GitHub organisation, and are refreshed twice a week by scverse/stats." ++++ diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 17be1ab..f40bdcc 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -118,6 +118,9 @@
  • AI Policy
  • +
  • + scverse in numbers +
  • Media kit
  • diff --git a/layouts/stats/list.html b/layouts/stats/list.html new file mode 100644 index 0000000..2a55131 --- /dev/null +++ b/layouts/stats/list.html @@ -0,0 +1,105 @@ +{{ define "main" }} +

    {{ .Title }}

    +
    +
    + {{ $base := "https://scverse.org/stats/" }} + {{ $stats := transform.Unmarshal (resources.GetRemote (printf "%sstats.json" $base)).Content }} + {{ $contributors := transform.Unmarshal (resources.GetRemote (printf "%scontributors.json" $base)).Content }} + {{ $gh := $stats.github }} + + +

    {{ .Params.preface | safeHTML }}

    + +

    + Updated + +

    + + {{/* The one number the page leads with. Everything else is a tile. */}} +
    + {{ printf "%.1fM" (div (float $stats.pepy_downloads) 1000000.0) }} + downloads of the core packages, all time + + {{ lang.FormatNumberCustom 0 $stats.pepy_avg_daily_30 }} a day on average over the last 30 days + +
    + + {{ $groups := slice + (dict + "name" "Community" + "tiles" (slice + (dict "value" $stats.zulip_users "label" "Zulip members") + (dict "value" $stats.bluesky_followers "label" "Bluesky followers") + (dict "value" $gh.unique_contributors "label" "code contributors") + (dict "value" $gh.organization_members "label" "GitHub organisation members") + (dict "value" $stats.core_team_size "label" "core team members") + ) + ) + (dict + "name" "Packages and code" + "tiles" (slice + (dict "value" $stats.ecosystem_packages "label" "ecosystem packages") + (dict "value" $gh.total_repositories "label" "core repositories") + (dict "value" $gh.total_stars "label" "GitHub stars") + (dict "value" $gh.total_pull_requests_last_year "label" "pull requests in the last year") + (dict "value" $gh.total_pull_requests_closed "label" "pull requests closed, all time") + ) + ) + (dict + "name" "Issues and citations" + "tiles" (slice + (dict "value" $gh.total_issues_closed "label" "issues closed") + (dict "value" $gh.total_issues_open "label" "issues open") + (dict "value" $stats.citation_count "label" "citations of scverse papers") + ) + ) + }} + + {{ range $groups }} +

    {{ .name }}

    +
    + {{ range .tiles }} +
    + {{ lang.FormatNumberCustom 0 .value }} + {{ .label }} +
    + {{ end }} +
    + {{ end }} + + +

    Top contributors

    +

    + {{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core + packages. These are the busiest, by number of commits. +

    + + {{ $top := first 24 $contributors.contributors }} + {{ $most := (index $top 0).contributions }} +
      + {{ range $top }} +
    1. + + + {{ .name | default .login }} + + {{ lang.FormatNumberCustom 0 .contributions }} + +
    2. + {{ end }} +
    + +

    + …and {{ lang.FormatNumberCustom 0 (sub $contributors.total_contributors (len $top)) }} more. +

    + +

    + Collected from the GitHub, Zulip, Bluesky, PePy and OpenAlex APIs by + scverse/stats. Contribution counts come from the core + repositories only, so they undercount anyone whose work lives in an ecosystem package. +

    +
    +
    +{{ end }} From dffeb42866324c63a2ad7e79288f8c8251746769 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 12:10:16 +0200 Subject: [PATCH 2/9] Colour the contribution bars and shorten the nav label A dark neutral bar disappears under extensions that invert the page, so use the blue from the Join button gradient. It is the only site hue besides the cerise that clears 3:1 against the page, checked rather than eyeballed. "scverse in numbers" stays as the page title, but the menu entry reads Statistics. --- assets/main.scss | 4 +++- layouts/partials/header.html | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/main.scss b/assets/main.scss index b09864b..9f71d1b 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -19,6 +19,7 @@ $spatialdatablue: #40a9ff; $squidpyviolet: #969dea; $scirpypurple: #da347f; $scviyellow: #fbb822; +$scversedeepblue: #262fb5; // the darker end of the Join button gradient $github-black: #171b21; $twitter-blue: #469be5; @@ -1138,7 +1139,8 @@ body { > span { display: block; height: 100%; - background-color: $tiletext; + // A hue rather than a dark neutral, so extensions that invert the page keep the bar visible + background-color: $scversedeepblue; border-radius: 0.25rem; } } diff --git a/layouts/partials/header.html b/layouts/partials/header.html index f40bdcc..792e35b 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -119,7 +119,7 @@ AI Policy
  • - scverse in numbers + Statistics
  • Media kit From b7b0aee6429055c7f18e0341537c419cfb87c3c2 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 13:07:04 +0200 Subject: [PATCH 3/9] Make the tiles that lead somewhere clickable, and drop the Impact group MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tiles with a destination are anchors and pick up the hover the rest of the site uses — background shift plus a small scale. Only eight of the thirteen link: a tile links out where the destination shows the same number, so Zulip, Bluesky, the org people page, /people, the two packages sections and the org page do, while the pull request and issue counts do not, since a GitHub search covers all 99 org repos and these numbers cover 12. Issues move in with the packages, citations join the community, and the daily download average goes back under the headline figure, which leaves two groups instead of three and nothing stranded. --- assets/main.scss | 20 ++++++++++++++++++ layouts/stats/list.html | 47 +++++++++++++++++++++++------------------ 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/assets/main.scss b/assets/main.scss index 9f71d1b..d8f684a 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -1097,6 +1097,26 @@ body { } } + // Only tiles that lead somewhere get the affordance + a.stats-tile { + text-decoration: none; + transition: all 200ms ease-in-out; + + &:hover, + &:focus-visible { + background-color: $tilebg; + border-color: $tilebg2; + transform: scale(1.02); + + .stats-tile-value { + color: black; + } + .stats-tile-label { + color: $tiletext; + } + } + } + .stats-contributors { display: grid; gap: 0.15rem; diff --git a/layouts/stats/list.html b/layouts/stats/list.html index 2a55131..ab3184f 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -24,33 +24,29 @@

    {{ .Title }}

    + {{/* A tile only gets a link where the destination genuinely shows the same number. */}} {{ $groups := slice (dict "name" "Community" "tiles" (slice - (dict "value" $stats.zulip_users "label" "Zulip members") - (dict "value" $stats.bluesky_followers "label" "Bluesky followers") - (dict "value" $gh.unique_contributors "label" "code contributors") - (dict "value" $gh.organization_members "label" "GitHub organisation members") - (dict "value" $stats.core_team_size "label" "core team members") + (dict "value" $stats.zulip_users "label" "Zulip members" "url" "https://scverse.zulipchat.com/") + (dict "value" $stats.bluesky_followers "label" "Bluesky followers" "url" "https://bsky.app/profile/scverse.bsky.social") + (dict "value" $gh.unique_contributors "label" "code contributors" "url" "#contributors") + (dict "value" $gh.organization_members "label" "GitHub organisation members" "url" "https://github.com/orgs/scverse/people") + (dict "value" $stats.core_team_size "label" "core team members" "url" "/people") + (dict "value" $stats.citation_count "label" "citations of scverse papers") ) ) (dict "name" "Packages and code" "tiles" (slice - (dict "value" $stats.ecosystem_packages "label" "ecosystem packages") - (dict "value" $gh.total_repositories "label" "core repositories") - (dict "value" $gh.total_stars "label" "GitHub stars") + (dict "value" $stats.ecosystem_packages "label" "ecosystem packages" "url" "/packages#ecosystem") + (dict "value" $gh.total_repositories "label" "core repositories" "url" "/packages#core-packages") + (dict "value" $gh.total_stars "label" "GitHub stars" "url" "https://github.com/scverse") (dict "value" $gh.total_pull_requests_last_year "label" "pull requests in the last year") (dict "value" $gh.total_pull_requests_closed "label" "pull requests closed, all time") - ) - ) - (dict - "name" "Issues and citations" - "tiles" (slice - (dict "value" $gh.total_issues_closed "label" "issues closed") (dict "value" $gh.total_issues_open "label" "issues open") - (dict "value" $stats.citation_count "label" "citations of scverse papers") + (dict "value" $gh.total_issues_closed "label" "issues closed") ) ) }} @@ -59,16 +55,27 @@

    {{ .Title }}

    {{ .name }}

    {{ range .tiles }} -
    - {{ lang.FormatNumberCustom 0 .value }} - {{ .label }} -
    + {{ if .url }} + + {{ lang.FormatNumberCustom 0 .value }} + {{ .label }} + + {{ else }} +
    + {{ lang.FormatNumberCustom 0 .value }} + {{ .label }} +
    + {{ end }} {{ end }}
    {{ end }} -

    Top contributors

    +

    Top contributors

    {{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core packages. These are the busiest, by number of commits. From a4ee2c1751810e04691f85178ed8ca5f816e84fa Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 13:15:36 +0200 Subject: [PATCH 4/9] Show LinkedIn followers when the registry has them scverse/stats#9 adds the field. It is scraped from the logged-out company page, so a run that gets blocked will not have it, and the tile is behind a `with` rather than assuming it is there. --- layouts/stats/list.html | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/layouts/stats/list.html b/layouts/stats/list.html index ab3184f..b923552 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -25,12 +25,19 @@

    {{ .Title }}

    {{/* A tile only gets a link where the destination genuinely shows the same number. */}} + {{/* LinkedIn is scraped upstream, so any given run may not have it. */}} + {{ $social := slice + (dict "value" $stats.zulip_users "label" "Zulip members" "url" "https://scverse.zulipchat.com/") + (dict "value" $stats.bluesky_followers "label" "Bluesky followers" "url" "https://bsky.app/profile/scverse.bsky.social") + }} + {{ with $stats.linkedin_followers }} + {{ $social = $social | append (dict "value" . "label" "LinkedIn followers" "url" "https://www.linkedin.com/company/scverse/") }} + {{ end }} + {{ $groups := slice (dict "name" "Community" - "tiles" (slice - (dict "value" $stats.zulip_users "label" "Zulip members" "url" "https://scverse.zulipchat.com/") - (dict "value" $stats.bluesky_followers "label" "Bluesky followers" "url" "https://bsky.app/profile/scverse.bsky.social") + "tiles" ($social | append (dict "value" $gh.unique_contributors "label" "code contributors" "url" "#contributors") (dict "value" $gh.organization_members "label" "GitHub organisation members" "url" "https://github.com/orgs/scverse/people") (dict "value" $stats.core_team_size "label" "core team members" "url" "/people") @@ -103,7 +110,7 @@

    Top contributors

    - Collected from the GitHub, Zulip, Bluesky, PePy and OpenAlex APIs by + Collected from the GitHub, Zulip, Bluesky, LinkedIn, PePy and OpenAlex sources by scverse/stats. Contribution counts come from the core repositories only, so they undercount anyone whose work lives in an ecosystem package.

    From 4b5496c00485a1c76881c707a4f0df30e91c9a40 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 13:36:50 +0200 Subject: [PATCH 5/9] Pair citations with the download figure, expand the contributor list Citations sat awkwardly among the community tiles; they belong next to downloads, so the two impact numbers now share the headline row with the citation count set smaller. The remaining contributors go behind a details element rather than a count of people you cannot see. It needs no JavaScript, and the avatars in it are not fetched until it is opened. Drop the sources footnote: the intro already credits scverse/stats, and the contributor paragraph already says the counts are core-only. --- assets/main.scss | 53 +++++++++++++++++++------ layouts/partials/stats-contributor.html | 12 ++++++ layouts/stats/list.html | 52 ++++++++++++------------ 3 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 layouts/partials/stats-contributor.html diff --git a/assets/main.scss b/assets/main.scss index d8f684a..131e6a6 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -1044,10 +1044,31 @@ body { // The one number the page leads with .stats-hero { display: flex; - flex-direction: column; - gap: 0.35rem; + flex-wrap: wrap; + align-items: baseline; + gap: 1rem 3.5rem; margin: 2.5rem 0 1rem; + .stats-hero-figure { + display: flex; + flex-direction: column; + gap: 0.35rem; + } + .stats-hero-figure--second { + padding-left: 3.5rem; + border-left: 1px solid $overline; + + .stats-hero-value { + font-size: 2.75rem; + } + } + @media (max-width: 50rem) { + .stats-hero-figure--second { + padding-left: 0; + border-left: 0; + } + } + .stats-hero-value { font-size: 4.5rem; font-weight: 800; @@ -1158,6 +1179,7 @@ body { > span { display: block; + min-width: 0.15rem; height: 100%; // A hue rather than a dark neutral, so extensions that invert the page keep the bar visible background-color: $scversedeepblue; @@ -1180,17 +1202,24 @@ body { } } - .stats-more { - margin: 0 0 0 0.5rem; - font-size: 0.85rem; - color: $greydesc; - } + .stats-rest { + summary { + width: fit-content; + padding: 0.35rem 0.5rem; + font-size: 0.9rem; + color: $tiletext2; + border-radius: 0.5rem; + cursor: pointer; + transition: all 200ms ease-in-out; - .stats-source { - margin-top: 2.5rem; - font-size: 0.85rem; - line-height: 1.6; - color: $greydesc; + &:hover { + color: black; + background-color: $tilebg4; + } + } + &[open] summary { + margin-bottom: 0.5rem; + } } } diff --git a/layouts/partials/stats-contributor.html b/layouts/partials/stats-contributor.html new file mode 100644 index 0000000..6722a0d --- /dev/null +++ b/layouts/partials/stats-contributor.html @@ -0,0 +1,12 @@ +{{ $person := .person }} +{{ $most := .most }} +
  • + + + {{ $person.name | default $person.login }} + + {{ lang.FormatNumberCustom 0 $person.contributions }} + +
  • diff --git a/layouts/stats/list.html b/layouts/stats/list.html index b923552..74e22ec 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -17,11 +17,19 @@

    {{ .Title }}

    {{/* The one number the page leads with. Everything else is a tile. */}}
    - {{ printf "%.1fM" (div (float $stats.pepy_downloads) 1000000.0) }} - downloads of the core packages, all time - - {{ lang.FormatNumberCustom 0 $stats.pepy_avg_daily_30 }} a day on average over the last 30 days - +
    + {{ printf "%.1fM" (div (float $stats.pepy_downloads) 1000000.0) }} + downloads of the core packages, all time + + {{ lang.FormatNumberCustom 0 $stats.pepy_avg_daily_30 }} a day on average over the last 30 days + +
    + {{ with $stats.citation_count }} +
    + {{ lang.FormatNumberCustom 0 . }} + citations of scverse papers +
    + {{ end }}
    {{/* A tile only gets a link where the destination genuinely shows the same number. */}} @@ -41,7 +49,6 @@

    {{ .Title }}

    (dict "value" $gh.unique_contributors "label" "code contributors" "url" "#contributors") (dict "value" $gh.organization_members "label" "GitHub organisation members" "url" "https://github.com/orgs/scverse/people") (dict "value" $stats.core_team_size "label" "core team members" "url" "/people") - (dict "value" $stats.citation_count "label" "citations of scverse papers") ) ) (dict @@ -88,32 +95,27 @@

    Top contributors

    packages. These are the busiest, by number of commits.

    - {{ $top := first 24 $contributors.contributors }} + {{ $shown := 24 }} + {{ $top := first $shown $contributors.contributors }} + {{ $rest := after $shown $contributors.contributors }} {{ $most := (index $top 0).contributions }}
      {{ range $top }} -
    1. - - - {{ .name | default .login }} - - {{ lang.FormatNumberCustom 0 .contributions }} - -
    2. + {{ partial "stats-contributor.html" (dict "person" . "most" $most) }} {{ end }}
    -

    - …and {{ lang.FormatNumberCustom 0 (sub $contributors.total_contributors (len $top)) }} more. -

    + {{ with $rest }} +
    + Show the other {{ lang.FormatNumberCustom 0 (len .) }} contributors +
      + {{ range . }} + {{ partial "stats-contributor.html" (dict "person" . "most" $most) }} + {{ end }} +
    +
    + {{ end }} -

    - Collected from the GitHub, Zulip, Bluesky, LinkedIn, PePy and OpenAlex sources by - scverse/stats. Contribution counts come from the core - repositories only, so they undercount anyone whose work lives in an ecosystem package. -

    {{ end }} From a3fd4460b082af8a4f9349827349d53d33918ea5 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 13:38:19 +0200 Subject: [PATCH 6/9] Give both headline figures the same size --- assets/main.scss | 4 ---- 1 file changed, 4 deletions(-) diff --git a/assets/main.scss b/assets/main.scss index 131e6a6..52956e4 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -1057,10 +1057,6 @@ body { .stats-hero-figure--second { padding-left: 3.5rem; border-left: 1px solid $overline; - - .stats-hero-value { - font-size: 2.75rem; - } } @media (max-width: 50rem) { .stats-hero-figure--second { From 290a7105dbf99d8b59a978946eb9024c312fb316 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Fri, 14 Aug 2026 13:48:42 +0200 Subject: [PATCH 7/9] Say the ranking is by commits without calling anyone busiest --- layouts/stats/list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/stats/list.html b/layouts/stats/list.html index 74e22ec..79207df 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -92,7 +92,7 @@

    {{ .name }}

    Top contributors

    {{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core - packages. These are the busiest, by number of commits. + packages, ranked here by number of commits.

    {{ $shown := 24 }} From 1815091d4aada815a31abf285e86bbe60a95cd78 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Thu, 3 Sep 2026 11:51:57 +0200 Subject: [PATCH 8/9] Read stats from the public S3 bucket scverse/stats keeps scverse.org/stats/ occupied for as long as it deploys to Pages, and that is the path this page wants. Point both stats fetches at the public scverse-stats bucket instead, which scverse/stats uploads to in scverse/stats#11. --- layouts/people/list.html | 2 +- layouts/stats/list.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/people/list.html b/layouts/people/list.html index 176896b..62374d6 100644 --- a/layouts/people/list.html +++ b/layouts/people/list.html @@ -53,7 +53,7 @@

    {{ .name }}

    {{ end }}

    - {{ $url := "https://scverse.org/stats/contributors.json" }} + {{ $url := "https://scverse-stats.s3.eu-west-1.amazonaws.com/contributors.json" }} {{ $resource := resources.GetRemote $url }} {{ with $resource }} {{ $data := . | transform.Unmarshal }} diff --git a/layouts/stats/list.html b/layouts/stats/list.html index 79207df..3a2e4fe 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -2,7 +2,7 @@

    {{ .Title }}

    - {{ $base := "https://scverse.org/stats/" }} + {{ $base := "https://scverse-stats.s3.eu-west-1.amazonaws.com/" }} {{ $stats := transform.Unmarshal (resources.GetRemote (printf "%sstats.json" $base)).Content }} {{ $contributors := transform.Unmarshal (resources.GetRemote (printf "%scontributors.json" $base)).Content }} {{ $gh := $stats.github }} From 0937d4e8874051450a3d2dd398c26cd69ceb42b1 Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Thu, 3 Sep 2026 14:40:30 +0200 Subject: [PATCH 9/9] Read stats from the dev bucket The role behind AWS_ROLE_ARN only covers scverse-stats-dev, so that is where scverse/stats publishes until the pipeline is proven. Tracked in scverse/stats#13. --- layouts/people/list.html | 2 +- layouts/shortcodes/stats.html | 2 +- layouts/stats/list.html | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/layouts/people/list.html b/layouts/people/list.html index 8a8496f..382e497 100644 --- a/layouts/people/list.html +++ b/layouts/people/list.html @@ -42,7 +42,7 @@ {{ $packages = sort $packages }} {{ $contributors := slice }} - {{ with (try (resources.GetRemote "https://scverse-stats.s3.eu-west-1.amazonaws.com/contributors.json")).Value }} + {{ with (try (resources.GetRemote "https://scverse-stats-dev.s3.eu-west-1.amazonaws.com/contributors.json")).Value }} {{ $contributors = (. | transform.Unmarshal).contributors | default slice }} {{ end }} diff --git a/layouts/shortcodes/stats.html b/layouts/shortcodes/stats.html index f8ad0eb..fb083fb 100644 --- a/layouts/shortcodes/stats.html +++ b/layouts/shortcodes/stats.html @@ -6,7 +6,7 @@ {{ $pkgs = transform.Unmarshal .Content }} {{ end }} {{ $contributors := slice }} -{{ with (try (resources.GetRemote "https://scverse-stats.s3.eu-west-1.amazonaws.com/contributors.json")).Value }} +{{ with (try (resources.GetRemote "https://scverse-stats-dev.s3.eu-west-1.amazonaws.com/contributors.json")).Value }} {{ $contributors = (. | transform.Unmarshal).contributors | default slice }} {{ end }} diff --git a/layouts/stats/list.html b/layouts/stats/list.html index 27d6b37..1209bdf 100644 --- a/layouts/stats/list.html +++ b/layouts/stats/list.html @@ -2,14 +2,14 @@

    {{ .Title }}

    - {{ $base := "https://scverse-stats.s3.eu-west-1.amazonaws.com/" }} + {{ $base := "https://scverse-stats-dev.s3.eu-west-1.amazonaws.com/" }} {{ $stats := dict }} {{ $contributors := dict }} {{ range $name := slice "stats" "contributors" }} {{ $url := printf "%s%s.json" $base $name }} {{ $res := try (resources.GetRemote $url) }} {{ if or $res.Err (not $res.Value) }} - {{ errorf "%s is unreachable. scverse/stats#11 populates this bucket and is not merged yet." $url }} + {{ errorf "%s is unreachable. scverse/stats publishes it; see scverse/stats#13." $url }} {{ else if eq $name "stats" }} {{ $stats = transform.Unmarshal $res.Value.Content }} {{ else }}