Files
go-task/website/scripts/find-adopters
Valentin Maerten 4bee0c6d66 feat(website): expand adopters list after full scan, harden discovery tool
Runs the refreshed find-adopters tool against every public Taskfile on
GitHub (1190 unique repos, 13 min) and uses the findings to swap in four
higher-signal entries: Azure/Azure-Sentinel replaces Microsoft's niche
Fabric provider, flet-dev/flet (16k stars, #1 non-Task hit), Anthropic's
Rust protobuf, and charmbracelet/glamour join the list. Gogs drops out
since it no longer surfaces in the best-match slice GitHub exposes.

Rewrites the discovery strategy: GitHub Code Search caps at 1000 results
per query and its size: qualifier turned out unreliable (non-monotone
total_count, sporadic 404s), so the tool now paginates each of the four
Taskfile variants to the cap and supplements with an org: scan over
~100 curated organizations. That's the practical ceiling without GH
Archive or BigQuery, and it captures every big-brand hit we care about.
Also drops the code-search rate from 24 to 8.5 req/min to match the
real 10 req/min authenticated limit.
2026-04-19 14:01:12 +02:00
..

find-adopters

A small Go tool that scans GitHub for every public repository containing a Taskfile.yml or Taskfile.yaml and produces a ranked list of adopter candidates for the taskfile.dev "Used by" section.

How it works

GitHub Code Search caps at 1000 results per query and only accepts a narrow set of qualifiers alongside filename: — notably stars:, language:, and pushed: don't combine, and size: does but its total_count isn't monotone as ranges shrink, which makes partitioning unreliable. So the tool takes a pragmatic two-pronged approach:

  1. Global best-match pagination — paginate filename:Taskfile.yml, Taskfile.yaml, Taskfile.dist.yml, and Taskfile.dist.yaml directly up to the 1000-result cap. Captures the top ~900 best-ranked hits per variant.
  2. Per-org scan — iterate a built-in list of ~100 well-known organizations (hyperscalers, OSS vendors, DevOps platforms, etc.) with filename:Taskfile.yml org:<name>. Captures every Taskfile inside those orgs even when their repos don't rank in the global top.

The union is deduplicated and enriched via batched GraphQL calls (stars, description, owner type, language, topics), then sorted by stars.

A full scan typically takes 15-25 minutes — about 120 Code Search calls at the 10 req/min authenticated rate limit, plus a handful of GraphQL batches.

Coverage caveat

GitHub's hard 1000-result cap on the Code Search API means this tool cannot enumerate every Taskfile on GitHub — only the best-ranked slice plus the curated orgs. For truly exhaustive coverage, consider GH Archive or the BigQuery public GitHub dataset, which are out of scope here.

Usage

# From this directory:
go run . -v                           # full scan → adopters-scan.tsv
go run . --min-stars 100 -v           # only >=100 stars
go run . --owner-type org --json -o orgs.json

Or from the website root (if the Taskfile task is installed):

task find-adopters -- --min-stars 100 -v

Flags

Flag Default Description
-o adopters-scan.tsv output path
--json false emit JSON instead of TSV
--min-stars 0 filter results below threshold
--include-forks false include forked repos
--include-archived false include archived repos
--owner-type any org, user, or any
-v false verbose progress logging

Auth

A GitHub token is required. In order of precedence:

  1. GITHUB_TOKEN env var
  2. gh auth token (requires the GitHub CLI)

The token needs no special scopes for public data.

Output (TSV)

stars	full_name	owner_type	language	url	description
13619	OJ/gobuster	User	Go	https://github.com/OJ/gobuster	Directory/File...
10918	FerretDB/FerretDB	Organization	Go	https://github.com/FerretDB/FerretDB	A truly Open Source MongoDB alternative
...