{"id":50777046,"url":"https://github.com/jbcom/pkgs","last_synced_at":"2026-06-12T00:30:39.973Z","repository":{"id":351471344,"uuid":"1211127455","full_name":"jbcom/pkgs","owner":"jbcom","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-02T06:07:19.000Z","size":272,"stargazers_count":0,"open_issues_count":10,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T08:10:24.955Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jbcom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-15T05:06:14.000Z","updated_at":"2026-06-02T06:05:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jbcom/pkgs","commit_stats":null,"previous_names":["jbcom/pkgs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jbcom/pkgs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jbcom%2Fpkgs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jbcom%2Fpkgs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jbcom%2Fpkgs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jbcom%2Fpkgs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jbcom","download_url":"https://codeload.github.com/jbcom/pkgs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jbcom%2Fpkgs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34224103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-12T00:30:35.050Z","updated_at":"2026-06-12T00:30:39.939Z","avatar_url":"https://github.com/jbcom.png","language":"Astro","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jbcom/pkgs\n\nUnified package repository for every `jbcom/*` project — Homebrew,\nScoop, and Chocolatey from one git tree. Public package index at\n\u003chttps://jonbogaty.com/pkgs/\u003e.\n\n## Install\n\nPick the format that matches your OS.\n\n### Homebrew (macOS, Linux, WSL2+Linuxbrew)\n\n```bash\nbrew tap jbcom/tap\nbrew install \u003cpackage\u003e\n```\n\nThe `jbcom/tap` shorthand resolves to `github.com/jbcom/homebrew-tap`,\na GoReleaser-managed mirror of this repo's `Formula/` directory. Both\nlocations stay in sync on every release.\n\n### Scoop (Windows)\n\n```powershell\nscoop bucket add jbcom https://github.com/jbcom/pkgs\nscoop install \u003cpackage\u003e\n```\n\n### Chocolatey (Windows)\n\n```powershell\nchoco install \u003cpackage\u003e\n```\n\nChocolatey packages are published to the community feed directly on\nrelease; the `choco/` directory here holds the package sources for\nreproducibility.\n\n## Repository layout\n\n```text\n.\n├── Formula/                  # Homebrew formulas (*.rb) — written by release CI\n├── bucket/                   # Scoop manifests (*.json) — written by release CI\n├── choco/                    # Chocolatey package sources (*.nuspec, tools/)\n├── src/                      # Astro site source\n│   ├── content.config.ts     # Content collection wiring\n│   ├── data/\n│   │   ├── directory/        # Auto-generated: directory.json\n│   │   │                     # Run `pnpm generate-directory` to rebuild\n│   │   └── pages/            # Hand-written MDX (landing + static pages)\n│   ├── config/settings.toml  # Site title, nav, tag colors, theme\n│   ├── components/           # UI components (cards, search, grid)\n│   ├── layouts/              # Page layouts\n│   ├── pages/                # Astro routes\n│   └── styles/               # Global Tailwind theme overrides\n├── scripts/\n│   └── generate-directory.mjs   # Scans Formula/ bucket/ choco/ → JSON\n├── astro.config.mjs\n├── package.json              # pnpm + node 24\n└── .github/workflows/\n    ├── validate-packages.yml # Validates Formula / bucket / choco on PR\n    └── deploy.yml            # Deploys site to GitHub Pages on push to main\n```\n\n## How releases land here\n\nEach upstream project's release pipeline publishes into this repo:\n\n- **Go projects** (e.g., `radioactive-ralph`) use GoReleaser. The\n  `brews:`, `scoops:`, and `chocolateys:` blocks in their\n  `.goreleaser.yaml` write to `jbcom/pkgs` directly. See\n  [the radioactive-ralph config](https://github.com/jbcom/radioactive-ralph/blob/main/.goreleaser.yaml)\n  for a reference implementation.\n\n- **Non-Go projects** (e.g., `paranoid-passwd`) use a dedicated\n  publishing workflow in their own repo that commits manifests here\n  via `gh` CLI on every tagged release.\n\nDirect edits to `Formula/`, `bucket/`, or `choco/` are rare; when they\nhappen, CI validates them on every PR.\n\n## Local development\n\nRequires Node 24 LTS (Homebrew: `brew install node@24 \u0026\u0026 brew link node@24`)\nand pnpm 10 (`brew install pnpm`).\n\n```bash\npnpm install\npnpm dev       # live-reload at http://localhost:4321/pkgs/\npnpm build     # static build in dist/\npnpm preview   # serve the built site\n```\n\n`pnpm generate-directory` rebuilds `src/data/directory/directory.json`\nfrom the current `Formula/`, `bucket/`, and `choco/` content. Runs\nautomatically on `predev` and `prebuild`.\n\n## Publishing standards\n\n- Package definitions live in-repo and are reviewable by pull request\n- Every PR runs CI validation (`.github/workflows/validate-packages.yml`)\n- Versions are semantic\n- Download URLs and checksums are pinned to GitHub release artifacts\n- Architecture metadata is explicit wherever the packager supports it\n\n## Validation\n\nCI runs three checks on every PR:\n\n- **Homebrew** — Ruby syntax (`ruby -c`) on every `Formula/*.rb`\n- **Scoop** — JSON parse + required keys (`version`, `description`,\n  `homepage`, `license`, `url`, `hash`) on every `bucket/*.json`\n- **Chocolatey** — XML parse on every `choco/**/*.nuspec`\n\nRun locally:\n\n```bash\nruby -c Formula/*.rb\n\npython3 - \u003c\u003c'PY'\nimport glob, json\nrequired = {\"version\", \"description\", \"homepage\", \"license\", \"url\", \"hash\"}\nfor path in glob.glob('bucket/*.json'):\n    with open(path) as f:\n        data = json.load(f)\n    missing = required - set(data)\n    if missing:\n        raise SystemExit(f\"{path}: missing {', '.join(sorted(missing))}\")\nprint('scoop manifests ok')\nPY\n\npython3 - \u003c\u003c'PY'\nimport glob, xml.etree.ElementTree as ET\nfor path in glob.glob('choco/**/*.nuspec', recursive=True):\n    ET.parse(path)\nprint('nuspec files ok')\nPY\n```\n\n## Deployment\n\n`deploy.yml` runs on every push to `main` using `withastro/action@v6`.\nThe built site is deployed to GitHub Pages at\n\u003chttps://jonbogaty.com/pkgs/\u003e.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjbcom%2Fpkgs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjbcom%2Fpkgs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjbcom%2Fpkgs/lists"}