feat: publish bird via gitea and nix
CI / test (push) Failing after 6m27s

This commit is contained in:
2026-06-24 14:55:06 +09:00
parent fd78705954
commit 96535c33f9
9 changed files with 222 additions and 44 deletions
+1 -2
View File
@@ -35,9 +35,8 @@
<p class="lede lede--small">That path doesn’t exist. The CLI does.</p>
<div class="cta">
<a class="btn btn--hot" href="./">Go home</a>
<a class="btn btn--ghost" href="https://github.com/steipete/bird">Open GitHub</a>
<a class="btn btn--ghost" href="https://git.yutakobayashi.com/yuta/bird">Open Gitea</a>
</div>
</main>
</body>
</html>
+17 -17
View File
@@ -53,7 +53,7 @@
<nav class="nav">
<a class="nav__link" href="#install">Install</a>
<a class="nav__link" href="#commands">Commands</a>
<a class="nav__link" href="https://github.com/steipete/bird">GitHub</a>
<a class="nav__link" href="https://git.yutakobayashi.com/yuta/bird">Gitea</a>
</nav>
</div>
</header>
@@ -74,7 +74,7 @@
<div class="cta" data-reveal>
<a class="btn btn--hot" href="#install">Install</a>
<a class="btn btn--ghost" href="https://github.com/steipete/bird#quickstart">Quickstart</a>
<a class="btn btn--ghost" href="https://git.yutakobayashi.com/yuta/bird#quickstart">Quickstart</a>
</div>
<div class="terminal" data-reveal>
@@ -85,7 +85,7 @@
<span class="terminal__label">copy &amp; run</span>
</div>
<div class="terminal__body">
<pre><code id="installCmd">npm install -g @steipete/bird
<pre><code id="installCmd">npm install -g @yuta/bird
bird whoami
bird tweet "hi from bird.fast"</code></pre>
@@ -97,15 +97,15 @@ bird tweet "hi from bird.fast"</code></pre>
</div>
<div class="badges" data-reveal>
<a class="badge" href="https://www.npmjs.com/package/@steipete/bird">
<a class="badge" href="https://www.npmjs.com/package/@yuta/bird">
<span class="badge__k">npm</span>
<span class="badge__v">@steipete/bird</span>
<span class="badge__v">@yuta/bird</span>
</a>
<a class="badge" href="https://github.com/steipete/bird">
<a class="badge" href="https://git.yutakobayashi.com/yuta/bird">
<span class="badge__k">repo</span>
<span class="badge__v">steipete/bird</span>
<span class="badge__v">yuta/bird</span>
</a>
<a class="badge" href="https://github.com/steipete/bird#authentication-graphql">
<a class="badge" href="https://git.yutakobayashi.com/yuta/bird#authentication-graphql">
<span class="badge__k">auth</span>
<span class="badge__v">relay</span>
</a>
@@ -120,14 +120,14 @@ bird tweet "hi from bird.fast"</code></pre>
<article class="card">
<h3 class="h3">npm / pnpm / bun</h3>
<p class="p">Pick your poison. Node ≥ 20.</p>
<pre class="code"><code>npm install -g @steipete/bird
pnpm add -g @steipete/bird
bun add -g @steipete/bird</code></pre>
<pre class="code"><code>npm install -g @yuta/bird
pnpm add -g @yuta/bird
bun add -g @yuta/bird</code></pre>
</article>
<article class="card">
<h3 class="h3">One-shot</h3>
<p class="p">No install. Just prove it works.</p>
<pre class="code"><code>bunx @steipete/bird whoami</code></pre>
<pre class="code"><code>bunx @yuta/bird whoami</code></pre>
</article>
<article class="card">
<h3 class="h3">Homebrew (macOS)</h3>
@@ -206,13 +206,13 @@ bun add -g @steipete/bird</code></pre>
</aside>
<div class="footerline">
<a class="tiny" href="https://github.com/steipete/bird#authentication-graphql">
<a class="tiny" href="https://git.yutakobayashi.com/yuta/bird#authentication-graphql">
Authentication details
</a>
<span class="sep" aria-hidden="true">•</span>
<a class="tiny" href="https://github.com/steipete/bird#config-json5">Config (JSON5)</a>
<a class="tiny" href="https://git.yutakobayashi.com/yuta/bird#config-json5">Config (JSON5)</a>
<span class="sep" aria-hidden="true">•</span>
<a class="tiny" href="https://github.com/steipete/bird/issues">Issues</a>
<a class="tiny" href="https://git.yutakobayashi.com/yuta/bird/issues">Issues</a>
</div>
</div>
</section>
@@ -221,9 +221,9 @@ bun add -g @steipete/bird</code></pre>
<footer class="bottom">
<div class="bottom__inner">
<p class="tiny">
Made by <a href="https://steipete.me">Peter</a>. MIT licensed. Built for GitHub Pages.
MIT licensed.
</p>
<p class="tiny tiny--muted">bird.fast is the landing page; the project lives on GitHub.</p>
<p class="tiny tiny--muted">bird.fast is the landing page; the project lives on Gitea.</p>
</div>
</footer>
+29 -15
View File
@@ -1,10 +1,12 @@
# Releasing bird
Target destinations:
- npm: `@steipete/bird`
- npm: `@yuta/bird`
- Gitea Packages: `https://git.yutakobayashi.com/api/packages/yuta/npm/`
- Nix flake: `packages.<system>.bird` and `apps.<system>.default`
- Homebrew: tap formula in `steipete/homebrew-tap` (e.g., `bird.rb`)
## Checklist (npm + GitHub)
## Checklist (npm + Gitea)
1) Version bump
- Update `package.json` `version` (semver, e.g., `0.5.0`).
- Update `CHANGELOG.md` and tag the release section.
@@ -13,22 +15,31 @@ Target destinations:
- `pnpm install`
- `pnpm test`
- `pnpm run build`
- `nix build .#bird`
- `nix flake check`
3) Publish to npm (scoped)
3) Publish to npmjs (scoped)
- Ensure you are logged in (`npm whoami`).
- `npm publish --access public` (from repo root). Package name is `@steipete/bird`.
- `npm publish --access public` (from repo root). Package name is `@yuta/bird`.
- Verify:
- `npm view @steipete/bird version`
- `npx -y @steipete/bird@<version> --help`
- `npm view @yuta/bird version`
- `npx -y @yuta/bird@<version> --help`
4) Git tag & GitHub release
4) Publish to Gitea Packages
- Push a `v<version>` tag or run the `Publish npm package` workflow manually.
- The workflow writes npm auth for `https://git.yutakobayashi.com/api/packages/yuta/npm/` and publishes `@yuta/bird`.
- Verify:
- `npm view @yuta/bird version --registry=https://git.yutakobayashi.com/api/packages/yuta/npm/`
- `npm exec --yes --registry=https://git.yutakobayashi.com/api/packages/yuta/npm/ @yuta/bird@<version> -- --help`
5) Git tag & Gitea release
- `git tag v<version> && git push origin v<version>`
- Create GitHub release from the tag. Include changelog notes and attach optional binary (see below).
- Create a Gitea release from the tag. Include changelog notes and attach optional binary (see below).
## Optional: attach compiled binary
If you want a single-file binary for Homebrew/GitHub assets:
If you want a single-file binary for Homebrew/Gitea release assets:
- Build: `pnpm run binary` (uses Bun to produce `./bird`).
- Upload `bird` to the GitHub release and use it for the Homebrew tarball.
- Upload `bird` to the Gitea release and use it for the Homebrew tarball.
## Homebrew tap update (steipete/homebrew-tap)
1) Package the binary
@@ -38,7 +49,7 @@ If you want a single-file binary for Homebrew/GitHub assets:
2) Update formula in tap repo
- File: `homebrew-tap/bird.rb` (create if absent). Model it after `poltergeist.rb`.
- Fields to update:
- `url "https://github.com/steipete/bird/releases/download/v<version>/bird-macos-universal-v<version>.tar.gz"`
- `url "https://git.yutakobayashi.com/yuta/bird/releases/download/v<version>/bird-macos-universal-v<version>.tar.gz"`
- `sha256 "<calculated_sha>"`
- `version "<version>"`
- Install block: `bin.install "bird"`
@@ -49,11 +60,14 @@ If you want a single-file binary for Homebrew/GitHub assets:
## Release order suggestion
1) Merge to `main` and tag.
2) Publish npm.
3) Build binary, upload to GitHub release.
4) Update Homebrew tap with new URL/SHA.
2) Publish npmjs.
3) Let Gitea Actions publish the package to Gitea Packages.
4) Build binary, upload to Gitea release.
5) Update Homebrew tap with new URL/SHA.
## Notes
- Scoped npm name (`@steipete/bird`) requires `--access public` on first publish.
- Scoped npm name (`@yuta/bird`) requires `--access public` on first publish.
- Gitea npm registry auth follows Gitea's package registry format:
`npm config set @yuta:registry=https://git.yutakobayashi.com/api/packages/yuta/npm/`.
- Homebrew formula assumes macOS universal binary; adjust URL/name if you ship per-arch.
- Config defaults (JSON5) and twitter safe relay setup are documented in `README.md` — keep that in sync for each release.