This commit is contained in:
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: 'pnpm'
|
cache: pnpm
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
name: Publish npm package
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
cache: pnpm
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Build package
|
||||||
|
run: pnpm run build:dist
|
||||||
|
|
||||||
|
- name: Publish to Gitea Packages
|
||||||
|
run: |
|
||||||
|
npm config set @yuta:registry "$GITEA_NPM_REGISTRY"
|
||||||
|
npm config set "${GITEA_NPM_REGISTRY#https:}:_authToken" "$NODE_AUTH_TOKEN"
|
||||||
|
npm publish --access public
|
||||||
|
env:
|
||||||
|
GITEA_NPM_REGISTRY: ${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/npm/
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
@@ -10,14 +10,27 @@ query IDs, and anti-bot behavior at any time — **expect this to break without
|
|||||||
## Install
|
## Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g @steipete/bird
|
npm install -g @yuta/bird
|
||||||
# or
|
# or
|
||||||
pnpm add -g @steipete/bird
|
pnpm add -g @yuta/bird
|
||||||
# or
|
# or
|
||||||
bun add -g @steipete/bird
|
bun add -g @yuta/bird
|
||||||
|
|
||||||
# one-shot (no install)
|
# one-shot (no install)
|
||||||
bunx @steipete/bird whoami
|
bunx @yuta/bird whoami
|
||||||
|
```
|
||||||
|
|
||||||
|
Gitea Packages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm config set @yuta:registry=https://git.yutakobayashi.com/api/packages/yuta/npm/
|
||||||
|
npm install -g @yuta/bird
|
||||||
|
```
|
||||||
|
|
||||||
|
Nix flakes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix run git+https://git.yutakobayashi.com/yuta/bird -- --help
|
||||||
```
|
```
|
||||||
|
|
||||||
Homebrew (macOS, prebuilt Bun binary):
|
Homebrew (macOS, prebuilt Bun binary):
|
||||||
@@ -130,7 +143,7 @@ By default, the command fetches from For You, News, Sports, and Entertainment ta
|
|||||||
`bird` can be used as a library (same GraphQL client as the CLI):
|
`bird` can be used as a library (same GraphQL client as the CLI):
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { TwitterClient } from '@steipete/bird';
|
import { TwitterClient } from '@yuta/bird';
|
||||||
|
|
||||||
const client = new TwitterClient({
|
const client = new TwitterClient({
|
||||||
relayBaseUrl: process.env.TWITTER_RELAY_BASE_URL
|
relayBaseUrl: process.env.TWITTER_RELAY_BASE_URL
|
||||||
@@ -334,6 +347,8 @@ pnpm install
|
|||||||
pnpm run build # dist/ + bun binary
|
pnpm run build # dist/ + bun binary
|
||||||
pnpm run build:dist # dist/ only
|
pnpm run build:dist # dist/ only
|
||||||
pnpm run build:binary
|
pnpm run build:binary
|
||||||
|
nix build .#bird
|
||||||
|
nix run .# -- --help
|
||||||
|
|
||||||
pnpm run dev tweet "Test"
|
pnpm run dev tweet "Test"
|
||||||
pnpm run dev -- --plain check
|
pnpm run dev -- --plain check
|
||||||
|
|||||||
+1
-2
@@ -35,9 +35,8 @@
|
|||||||
<p class="lede lede--small">That path doesn’t exist. The CLI does.</p>
|
<p class="lede lede--small">That path doesn’t exist. The CLI does.</p>
|
||||||
<div class="cta">
|
<div class="cta">
|
||||||
<a class="btn btn--hot" href="./">Go home</a>
|
<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>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
+17
-17
@@ -53,7 +53,7 @@
|
|||||||
<nav class="nav">
|
<nav class="nav">
|
||||||
<a class="nav__link" href="#install">Install</a>
|
<a class="nav__link" href="#install">Install</a>
|
||||||
<a class="nav__link" href="#commands">Commands</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>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
<div class="cta" data-reveal>
|
<div class="cta" data-reveal>
|
||||||
<a class="btn btn--hot" href="#install">Install</a>
|
<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>
|
||||||
|
|
||||||
<div class="terminal" data-reveal>
|
<div class="terminal" data-reveal>
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
<span class="terminal__label">copy & run</span>
|
<span class="terminal__label">copy & run</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="terminal__body">
|
<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 whoami
|
||||||
bird tweet "hi from bird.fast"</code></pre>
|
bird tweet "hi from bird.fast"</code></pre>
|
||||||
@@ -97,15 +97,15 @@ bird tweet "hi from bird.fast"</code></pre>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="badges" data-reveal>
|
<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__k">npm</span>
|
||||||
<span class="badge__v">@steipete/bird</span>
|
<span class="badge__v">@yuta/bird</span>
|
||||||
</a>
|
</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__k">repo</span>
|
||||||
<span class="badge__v">steipete/bird</span>
|
<span class="badge__v">yuta/bird</span>
|
||||||
</a>
|
</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__k">auth</span>
|
||||||
<span class="badge__v">relay</span>
|
<span class="badge__v">relay</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -120,14 +120,14 @@ bird tweet "hi from bird.fast"</code></pre>
|
|||||||
<article class="card">
|
<article class="card">
|
||||||
<h3 class="h3">npm / pnpm / bun</h3>
|
<h3 class="h3">npm / pnpm / bun</h3>
|
||||||
<p class="p">Pick your poison. Node ≥ 20.</p>
|
<p class="p">Pick your poison. Node ≥ 20.</p>
|
||||||
<pre class="code"><code>npm install -g @steipete/bird
|
<pre class="code"><code>npm install -g @yuta/bird
|
||||||
pnpm add -g @steipete/bird
|
pnpm add -g @yuta/bird
|
||||||
bun add -g @steipete/bird</code></pre>
|
bun add -g @yuta/bird</code></pre>
|
||||||
</article>
|
</article>
|
||||||
<article class="card">
|
<article class="card">
|
||||||
<h3 class="h3">One-shot</h3>
|
<h3 class="h3">One-shot</h3>
|
||||||
<p class="p">No install. Just prove it works.</p>
|
<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>
|
||||||
<article class="card">
|
<article class="card">
|
||||||
<h3 class="h3">Homebrew (macOS)</h3>
|
<h3 class="h3">Homebrew (macOS)</h3>
|
||||||
@@ -206,13 +206,13 @@ bun add -g @steipete/bird</code></pre>
|
|||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<div class="footerline">
|
<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
|
Authentication details
|
||||||
</a>
|
</a>
|
||||||
<span class="sep" aria-hidden="true">•</span>
|
<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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -221,9 +221,9 @@ bun add -g @steipete/bird</code></pre>
|
|||||||
<footer class="bottom">
|
<footer class="bottom">
|
||||||
<div class="bottom__inner">
|
<div class="bottom__inner">
|
||||||
<p class="tiny">
|
<p class="tiny">
|
||||||
Made by <a href="https://steipete.me">Peter</a>. MIT licensed. Built for GitHub Pages.
|
MIT licensed.
|
||||||
</p>
|
</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>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|||||||
+29
-15
@@ -1,10 +1,12 @@
|
|||||||
# Releasing bird
|
# Releasing bird
|
||||||
|
|
||||||
Target destinations:
|
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`)
|
- Homebrew: tap formula in `steipete/homebrew-tap` (e.g., `bird.rb`)
|
||||||
|
|
||||||
## Checklist (npm + GitHub)
|
## Checklist (npm + Gitea)
|
||||||
1) Version bump
|
1) Version bump
|
||||||
- Update `package.json` `version` (semver, e.g., `0.5.0`).
|
- Update `package.json` `version` (semver, e.g., `0.5.0`).
|
||||||
- Update `CHANGELOG.md` and tag the release section.
|
- Update `CHANGELOG.md` and tag the release section.
|
||||||
@@ -13,22 +15,31 @@ Target destinations:
|
|||||||
- `pnpm install`
|
- `pnpm install`
|
||||||
- `pnpm test`
|
- `pnpm test`
|
||||||
- `pnpm run build`
|
- `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`).
|
- 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:
|
- Verify:
|
||||||
- `npm view @steipete/bird version`
|
- `npm view @yuta/bird version`
|
||||||
- `npx -y @steipete/bird@<version> --help`
|
- `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>`
|
- `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
|
## 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`).
|
- 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)
|
## Homebrew tap update (steipete/homebrew-tap)
|
||||||
1) Package the binary
|
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
|
2) Update formula in tap repo
|
||||||
- File: `homebrew-tap/bird.rb` (create if absent). Model it after `poltergeist.rb`.
|
- File: `homebrew-tap/bird.rb` (create if absent). Model it after `poltergeist.rb`.
|
||||||
- Fields to update:
|
- 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>"`
|
- `sha256 "<calculated_sha>"`
|
||||||
- `version "<version>"`
|
- `version "<version>"`
|
||||||
- Install block: `bin.install "bird"`
|
- Install block: `bin.install "bird"`
|
||||||
@@ -49,11 +60,14 @@ If you want a single-file binary for Homebrew/GitHub assets:
|
|||||||
|
|
||||||
## Release order suggestion
|
## Release order suggestion
|
||||||
1) Merge to `main` and tag.
|
1) Merge to `main` and tag.
|
||||||
2) Publish npm.
|
2) Publish npmjs.
|
||||||
3) Build binary, upload to GitHub release.
|
3) Let Gitea Actions publish the package to Gitea Packages.
|
||||||
4) Update Homebrew tap with new URL/SHA.
|
4) Build binary, upload to Gitea release.
|
||||||
|
5) Update Homebrew tap with new URL/SHA.
|
||||||
|
|
||||||
## Notes
|
## 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.
|
- 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.
|
- Config defaults (JSON5) and twitter safe relay setup are documented in `README.md` — keep that in sync for each release.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
description = "A Nix-flake-based Node.js development environment";
|
description = "bird - fast X CLI for tweeting, replying, and reading";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1"; # unstable Nixpkgs
|
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1"; # unstable Nixpkgs
|
||||||
|
|
||||||
@@ -27,10 +27,107 @@
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
overlays.default = final: prev: rec {
|
overlays.default = final: prev: rec {
|
||||||
nodejs = prev.nodejs;
|
bird = final.callPackage (
|
||||||
|
{
|
||||||
|
fetchPnpmDeps,
|
||||||
|
lib,
|
||||||
|
makeWrapper,
|
||||||
|
nodejs-slim_22,
|
||||||
|
pnpm_10,
|
||||||
|
pnpmConfigHook,
|
||||||
|
stdenv,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
packageJson = builtins.fromJSON (builtins.readFile ./package.json);
|
||||||
|
pnpm = pnpm_10.override { nodejs-slim = nodejs-slim_22; };
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "bird";
|
||||||
|
version = packageJson.version;
|
||||||
|
|
||||||
|
src = lib.cleanSource ./.;
|
||||||
|
|
||||||
|
pnpmDeps = fetchPnpmDeps {
|
||||||
|
inherit (finalAttrs) pname version src;
|
||||||
|
inherit pnpm;
|
||||||
|
fetcherVersion = 4;
|
||||||
|
pnpmInstallFlags = [ "--config.auto-install-peers=true" ];
|
||||||
|
hash = "sha256-nB6IPSG/2XSVJVNHwtDFVL3ocwVWEzmR7o3o3rNSKP0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
nodejs-slim_22
|
||||||
|
pnpm
|
||||||
|
pnpmConfigHook
|
||||||
|
];
|
||||||
|
|
||||||
|
pnpmInstallFlags = [ "--config.auto-install-peers=true" ];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
./node_modules/.bin/tsc
|
||||||
|
node scripts/copy-dist-assets.js
|
||||||
|
CI=true pnpm prune --prod --config.auto-install-peers=true
|
||||||
|
find node_modules -xtype l -delete
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib/bird $out/bin
|
||||||
|
cp -r dist node_modules package.json README.md CHANGELOG.md LICENSE $out/lib/bird/
|
||||||
|
chmod +x $out/lib/bird/dist/cli.js
|
||||||
|
|
||||||
|
makeWrapper ${lib.getExe nodejs-slim_22} $out/bin/bird \
|
||||||
|
--add-flags "$out/lib/bird/dist/cli.js"
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = packageJson.description;
|
||||||
|
homepage = "https://bird.fast/";
|
||||||
|
license = lib.licenses.mit;
|
||||||
|
mainProgram = "bird";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
) { };
|
||||||
|
|
||||||
|
nodejs = prev.nodejs_22;
|
||||||
yarn = (prev.yarn.override { inherit nodejs; });
|
yarn = (prev.yarn.override { inherit nodejs; });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
packages = forEachSupportedSystem (
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
default = pkgs.bird;
|
||||||
|
bird = pkgs.bird;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
apps = forEachSupportedSystem (
|
||||||
|
{ system, ... }:
|
||||||
|
{
|
||||||
|
default = {
|
||||||
|
type = "app";
|
||||||
|
program = "${self.packages.${system}.default}/bin/bird";
|
||||||
|
meta.description = "Run bird";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
checks = forEachSupportedSystem (
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
default = pkgs.bird;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
devShells = forEachSupportedSystem (
|
devShells = forEachSupportedSystem (
|
||||||
{ pkgs, system }:
|
{ pkgs, system }:
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@steipete/bird",
|
"name": "@yuta/bird",
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"description": "CLI tool for tweeting and replying via Twitter/X GraphQL API",
|
"description": "CLI tool for tweeting and replying via Twitter/X GraphQL API",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -8,6 +8,10 @@
|
|||||||
"bin": {
|
"bin": {
|
||||||
"bird": "dist/cli.js"
|
"bird": "dist/cli.js"
|
||||||
},
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.yutakobayashi.com/yuta/bird.git"
|
||||||
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
"README.md",
|
"README.md",
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Lessons
|
||||||
|
|
||||||
|
- Twitter safe relay is Twitter API compatible. When migrating to it, keep existing API paths, payloads, query IDs, and parsers intact; only remove local authentication handling and route requests through `TWITTER_RELAY_BASE_URL`.
|
||||||
|
- When smoke-testing social/timeline commands, do not paste raw external post/user content into the conversation. Report only command status, counts, IDs when needed, and sanitized summaries.
|
||||||
|
- When the user asks to investigate odd API counts, do not change client-side limiting behavior unless they explicitly approve the behavior change.
|
||||||
|
- When adding package registry publishing for this repository, use the `@yuta` package scope unless the user explicitly asks for another namespace.
|
||||||
Reference in New Issue
Block a user