.envrcでやらかした

Python

pypi.orgで色々公開しているとAPIトークンがたくさん出来ますよね。いや、全体をスコープにすればそんなことにはならない訳ですが、普通はトークンを分けると思うんですよ。

そうすると、

cd agefreighter
rm -rf dist
uv sync
uv build
uv publish --token=$TOKEN_FOR_AGEFREIGHTER

みたいに、プロジェクト毎に--tokenを切り替えないとならないのが面倒だな、と。

んで、

brew install direnv

して、例えば、'agefreighter/.envrc'を作るわけです。

cat .envrc
export UV_PUBLISH_TOKEN='pypi-XXXXXXXX'
export BREW_FORMULA='Formula/agefreighter.rb'

こうすれば、ワンライナーでイケるじゃん!と。

rm -rf dist; uv sync; uv build; uv publish

ついでに言うと、コードを弄った後は、どのディレクトリでも以下の3つを編集すれば良いわけです。brewのformulaファイルは環境変数にしてあるから。

open README.md pyproject.toml $BREW_FORMULA

そうしたらですよ、pypi.orgからメールが無事飛んできました。

[PyPI] Your API credentials from PyPI were found on a public webpage

あ……。pyproject.tomlを全部修正ですわ。.envrcをdistファイルに含めないようにしないとダメじゃん。

[tool.hatch.build.targets.sdist]
include = ["src/agefreighter/", "docs/"]
exclude = ["__pycache__", "*.rb", "uv.lock", "dist/.DS_Store", ".envrc"]

気を付けましょうね(APIトークンを全て再発行、.envrc/pyproject.tomlを全て修正、全て修正リリースするハメになった)。