| Name | h4-hello JSON |
| Version |
0.1.8
JSON |
| download |
| home_page | None |
| Summary | A simple hello world example |
| upload_time | 2025-09-19 05:04:45 |
| maintainer | None |
| docs_url | None |
| author | heiwa4126 |
| requires_python | >=3.10 |
| license | MIT License
Copyright (c) 2025 heiwa4126@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
| keywords |
demo
hello
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# h4-hello
**Table of Contents**
- [Installation](#installation)
- [License](#license)
- [---ここまではテンプレ、以下メモ---](#---ここまではテンプレ以下メモ---)
- [これは何か](#これは何か)
- [参考](#参考)
- [ビルド関連](#ビルド関連)
- [パブリッシュ関連](#パブリッシュ関連)
- [testPyPI のトークン取得](#testpypi-のトークン取得)
- [testPyPI への手動パブリッシュ](#testpypi-への手動パブリッシュ)
- [GitHub Actions でビルドとパブリッシュ (uv 版)](#github-actions-でビルドとパブリッシュ-uv-版)
- [PyPI(testPyPI)で "Trusted Publisher Management" のページまで行く方法](#pypitestpypiで-trusted-publisher-management-のページまで行く方法)
- [既存のプロジェクトの場合](#既存のプロジェクトの場合)
- [新プロジェクトの場合](#新プロジェクトの場合)
- [GitHub Actions 用の各フィールド](#github-actions-用の各フィールド)
- [(新プロジェクトの場合のみ) PyPI Project Name](#新プロジェクトの場合のみ-pypi-project-name)
- [Owner (=リポジトリの所有者)](#owner-リポジトリの所有者)
- [Repository name (=リポジトリ名)](#repository-name-リポジトリ名)
- [Workflow name(=ワークフローファイルのパス)](#workflow-nameワークフローファイルのパス)
- [Environment (任意)](#environment-任意)
- [以上をまとめると](#以上をまとめると)
- [`uv deploy` は PEP740 はまだ駄目 (2025-09)](#uv-deploy-は-pep740-はまだ駄目-2025-09)
## Installation
```console
pip install h4-hello
```
## License
`h4-hello` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
## ---ここまではテンプレ、以下メモ---
(本当は別ページにする)
## これは何か
練習プロジェクト
0. uv でパッケージを作る(build backend も uv)
1. testPyPI で公開する(手動)。publish も `uv publish`で。twine を使わない
2. GitHub Actions 経由で、testPyPI に公開する
- その過程で suzuki-shunsuke/pinact, rhysd/actionlint, nektos/act などを使う (あと aqua)
3. Sigstore 署名をつけて testPyPI に公開する
## 参考
### ビルド関連
- [Building and publishing a package | uv](https://docs.astral.sh/uv/guides/package/)
- [Build backend | uv](https://docs.astral.sh/uv/concepts/build-backend/)
- [build\-backend](https://docs.astral.sh/uv/reference/settings/#build-backend)
### パブリッシュ関連
- [Publishing your package](https://docs.astral.sh/uv/guides/package/#publishing-your-package)
## testPyPI のトークン取得
0. TestPyPI にアカウント作成\
https://test.pypi.org で PyPI とは別のアカウントを作成します
1. 2 段階認証を有効化\
アカウント設定から 2FA を設定(Google Authenticator など)
2. API トークンを発行
- TestPyPI の右上メニュー → Account Settings → API tokens →「Add API token」
- トークン名を入力し、Create token をクリック
- **表示されたトークンは一度しか表示されないので必ずコピーして保存**
ここでは .env に保存
## testPyPI への手動パブリッシュ
例:
```sh
uv version --bump patch # このへんはアレンジ
git commit -am 'v9.9.9' # 上で表示されたやつ
git tag -a 'v9.9.9' -m 'v9.9.9'
rm dist/* -f
uv build
poe testpypi
```
なんかめんどくさいね。自動化する。
パブリッシュできたら別環境でテストする。
```sh
mkdir tmp1 && cd $!
uv init --python 3.12
uv sync
uv add --index-url https://test.pypi.org/simple/ h4-hello
. .venv/bin/activate
h4-hello
# -> hello!
```
## GitHub Actions でビルドとパブリッシュ (uv 版)
- [Publishing to PyPI - Using uv in GitHub Actions | uv](https://docs.astral.sh/uv/guides/integration/github/#publishing-to-pypi)
- [Commands | uv build](https://docs.astral.sh/uv/reference/cli/#uv-build)
- [Commands | uv publish](https://docs.astral.sh/uv/reference/cli/#uv-publish)
- [Adding a Trusted Publisher to an Existing PyPI Project - PyPI Docs](https://docs.pypi.org/trusted-publishers/adding-a-publisher/)
- [Publishing with a Trusted Publisher - PyPI Docs](https://docs.pypi.org/trusted-publishers/using-a-publisher/)
- [Trusted publishing support for GitHub Actions + TestPyPI via \`uv publish\` · Issue #8584 · astral-sh/uv](https://github.com/astral-sh/uv/issues/8584)
## PyPI(testPyPI)で "Trusted Publisher Management" のページまで行く方法
(2025-09) UI なんでよく変わる
### 既存のプロジェクトの場合
すでに PyPI/TestPyPI 上にプロジェクトがあるとき。
1. **PyPI(testPyPI)にログイン**\
<https://pypi.org> (<https://test.pypi.org>) にアクセスし、アカウントでログインします
2. **対象プロジェクトを選択**\
右上のメニューから「Your projects (自分のプロジェクト)」をクリックし、設定したいプロジェクトを選びます
3. **「Manage」ページへ移動**\
プロジェクト一覧で対象プロジェクトの「Manage (管理)」ボタンをクリック
4. **「Publishing」メニューを開く**\
左サイドバーの「Publishing」をクリックします
5. **"Trusted Publisher Management"に着いたので Trusted Publisher を追加**\
GitHub タブを選択すると、必要な入力フィールドが表示されます
### 新プロジェクトの場合
PyPI/TestPyPI には、「空のプロジェクトを作る」機能はない。でも Trusted Publishing の設定はできる。
1. **PyPI(testPyPI)にログイン**\
<https://pypi.org> (<https://test.pypi.org>) にアクセスし、アカウントでログインします
2. **対象プロジェクトを選択**\
右上のメニューから「Your projects (自分のプロジェクト)」をクリックし、設定したいプロジェクトを選びます
3. **「Publishing」メニューを開く**\
左サイドバーの「Publishing」をクリックします
4. **"Trusted Publisher Management"に着いたので Trusted Publisher を追加**\
GitHub タブを選択すると、必要な入力フィールドが表示されます
### GitHub Actions 用の各フィールド
参照: [warehouse/docs/user/trusted-publishers/adding-a-publisher.md at main · pypi/warehouse · GitHub](https://github.com/pypi/warehouse/blob/main/docs/user/trusted-publishers/adding-a-publisher.md)
#### (新プロジェクトの場合のみ) PyPI Project Name
このパブリッシャーを使用すると PyPI/TestPyPI で作成されるプロジェクト名
#### Owner (=リポジトリの所有者)
**意味:** GitHub 上の組織またはユーザー名(リポジトリの最初の要素)。
例: `https://github.com/octo-org/sampleproject` の場合、
Owner = octo-org
**注意:**
- チーム名や表示名ではなく、オーナーのハンドル (org/ユーザー名)を入力します。
- フォークではなく本家の所有者を指定してください (PyPI が信頼するのは指定オーナー配下のワークフローです)
- リポジトリを別オーナーへ Transfer した場合は、この Owner も更新が必要です
#### Repository name (=リポジトリ名)
**例:** `octo-org/sampleproject` の `sampleproject` に相当
#### Workflow name(=ワークフローファイルのパス)
**例:** `.github/workflows/example.yml` だったら `example.yml` を指定。
#### Environment (任意)
GitHub Actions の Environment 名 (例:testpypi)。
PyPI の UI では任意ですが、セキュリティと運用上の理由で利用が強く推奨されています。
#### 以上をまとめると
[publish-testpypi.yml](.github/workflows/publish-testpypi.yml) の場合は
- Owner: heiwa4126
- Repository name: h4-hello
- Workflow name: publish-testpypi.yml
- Environment: testpypi
[publish-pypi.yml](.github/workflows/publish-pypi.yml) の場合は (こっちは新規プロジェクト)
- PyPI Project Name: h4-hello
- Owner: heiwa4126
- Repository name: h4-hello
- Workflow name: publish-pypi.yml
- Environment: pypi
## `uv deploy` は PEP740 はまだ駄目 (2025-09)
- [uv publish: create attestations · Issue #15618 · astral-sh/uv](https://github.com/astral-sh/uv/issues/15618)
[pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish)
に入れ替える。
...あっさりできた。GitHub Actions のログがなんかえらいことに。
Docker イメージ `ghcr.io/pypa/gh-action-pypi-publish:release-v1` で実行されるらしい。
GitHub Container Registry (GHCR)
これ [Package gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish/pkgs/container/gh-action-pypi-publish)
比較
前:
- [h4-hello v0.1.3 · TestPyPI](https://test.pypi.org/project/h4-hello/0.1.3/) - Verified マークは過去のにも着くなあ..
- [h4_hello-0.1.0-py3-none-any.whl · TestPyPI](https://test.pypi.org/project/h4-hello/0.1.0/#h4_hello-0.1.0-py3-none-any.whl)
後:
- [h4-hello v0.1.4 · TestPyPI](https://test.pypi.org/project/h4-hello/0.1.4/)
- [h4_hello-0.1.4-py3-none-any.whl · TestPyPI](https://test.pypi.org/project/h4-hello/#h4_hello-0.1.4-py3-none-any.whl)
どうやら "Verified details" の横のチェックマークは Sigstore 署名とは無関係に付くみたい。
そのパッケージが Sigstore 署名されているかを確認するには、個別の tgz や whl のページに行って確認するしかない
Raw data
{
"_id": null,
"home_page": null,
"name": "h4-hello",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "demo, hello",
"author": "heiwa4126",
"author_email": "heiwa4126 <heiwa4126@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/12/20/446dc575a99bd70b91f586eb71bee958425b99f6bd5c7f1a5f12e14e2a57/h4_hello-0.1.8.tar.gz",
"platform": null,
"description": "# h4-hello\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [License](#license)\n- [---\u3053\u3053\u307e\u3067\u306f\u30c6\u30f3\u30d7\u30ec\u3001\u4ee5\u4e0b\u30e1\u30e2---](#---\u3053\u3053\u307e\u3067\u306f\u30c6\u30f3\u30d7\u30ec\u4ee5\u4e0b\u30e1\u30e2---)\n- [\u3053\u308c\u306f\u4f55\u304b](#\u3053\u308c\u306f\u4f55\u304b)\n- [\u53c2\u8003](#\u53c2\u8003)\n\t- [\u30d3\u30eb\u30c9\u95a2\u9023](#\u30d3\u30eb\u30c9\u95a2\u9023)\n\t- [\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u95a2\u9023](#\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u95a2\u9023)\n- [testPyPI \u306e\u30c8\u30fc\u30af\u30f3\u53d6\u5f97](#testpypi-\u306e\u30c8\u30fc\u30af\u30f3\u53d6\u5f97)\n- [testPyPI \u3078\u306e\u624b\u52d5\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5](#testpypi-\u3078\u306e\u624b\u52d5\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5)\n- [GitHub Actions \u3067\u30d3\u30eb\u30c9\u3068\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5 (uv \u7248)](#github-actions-\u3067\u30d3\u30eb\u30c9\u3068\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5-uv-\u7248)\n- [PyPI(testPyPI)\u3067 \"Trusted Publisher Management\" \u306e\u30da\u30fc\u30b8\u307e\u3067\u884c\u304f\u65b9\u6cd5](#pypitestpypi\u3067-trusted-publisher-management-\u306e\u30da\u30fc\u30b8\u307e\u3067\u884c\u304f\u65b9\u6cd5)\n\t- [\u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408](#\u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408)\n\t- [\u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408](#\u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408)\n\t- [GitHub Actions \u7528\u306e\u5404\u30d5\u30a3\u30fc\u30eb\u30c9](#github-actions-\u7528\u306e\u5404\u30d5\u30a3\u30fc\u30eb\u30c9)\n\t\t- [(\u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\u306e\u307f) PyPI Project Name](#\u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\u306e\u307f-pypi-project-name)\n\t\t- [Owner (=\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6240\u6709\u8005)](#owner-\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6240\u6709\u8005)\n\t\t- [Repository name (=\u30ea\u30dd\u30b8\u30c8\u30ea\u540d)](#repository-name-\u30ea\u30dd\u30b8\u30c8\u30ea\u540d)\n\t\t- [Workflow name(=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9)](#workflow-name\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9)\n\t\t- [Environment (\u4efb\u610f)](#environment-\u4efb\u610f)\n\t\t- [\u4ee5\u4e0a\u3092\u307e\u3068\u3081\u308b\u3068](#\u4ee5\u4e0a\u3092\u307e\u3068\u3081\u308b\u3068)\n- [`uv deploy` \u306f PEP740 \u306f\u307e\u3060\u99c4\u76ee (2025-09)](#uv-deploy-\u306f-pep740-\u306f\u307e\u3060\u99c4\u76ee-2025-09)\n\n## Installation\n\n```console\npip install h4-hello\n```\n\n## License\n\n`h4-hello` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.\n\n## ---\u3053\u3053\u307e\u3067\u306f\u30c6\u30f3\u30d7\u30ec\u3001\u4ee5\u4e0b\u30e1\u30e2---\n\n(\u672c\u5f53\u306f\u5225\u30da\u30fc\u30b8\u306b\u3059\u308b)\n\n## \u3053\u308c\u306f\u4f55\u304b\n\n\u7df4\u7fd2\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\n\n0. uv \u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f5c\u308b(build backend \u3082 uv)\n1. testPyPI \u3067\u516c\u958b\u3059\u308b(\u624b\u52d5)\u3002publish \u3082 `uv publish`\u3067\u3002twine \u3092\u4f7f\u308f\u306a\u3044\n2. GitHub Actions \u7d4c\u7531\u3067\u3001testPyPI \u306b\u516c\u958b\u3059\u308b\n - \u305d\u306e\u904e\u7a0b\u3067 suzuki-shunsuke/pinact, rhysd/actionlint, nektos/act \u306a\u3069\u3092\u4f7f\u3046 (\u3042\u3068 aqua)\n3. Sigstore \u7f72\u540d\u3092\u3064\u3051\u3066 testPyPI \u306b\u516c\u958b\u3059\u308b\n\n## \u53c2\u8003\n\n### \u30d3\u30eb\u30c9\u95a2\u9023\n\n- [Building and publishing a package | uv](https://docs.astral.sh/uv/guides/package/)\n- [Build backend | uv](https://docs.astral.sh/uv/concepts/build-backend/)\n- [build\\-backend](https://docs.astral.sh/uv/reference/settings/#build-backend)\n\n### \u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u95a2\u9023\n\n- [Publishing your package](https://docs.astral.sh/uv/guides/package/#publishing-your-package)\n\n## testPyPI \u306e\u30c8\u30fc\u30af\u30f3\u53d6\u5f97\n\n0. TestPyPI \u306b\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\\\n https://test.pypi.org \u3067 PyPI \u3068\u306f\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\n1. 2 \u6bb5\u968e\u8a8d\u8a3c\u3092\u6709\u52b9\u5316\\\n \u30a2\u30ab\u30a6\u30f3\u30c8\u8a2d\u5b9a\u304b\u3089 2FA \u3092\u8a2d\u5b9a(Google Authenticator \u306a\u3069)\n2. API \u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\n - TestPyPI \u306e\u53f3\u4e0a\u30e1\u30cb\u30e5\u30fc \u2192 Account Settings \u2192 API tokens \u2192\u300cAdd API token\u300d\n - \u30c8\u30fc\u30af\u30f3\u540d\u3092\u5165\u529b\u3057\u3001Create token \u3092\u30af\u30ea\u30c3\u30af\n - **\u8868\u793a\u3055\u308c\u305f\u30c8\u30fc\u30af\u30f3\u306f\u4e00\u5ea6\u3057\u304b\u8868\u793a\u3055\u308c\u306a\u3044\u306e\u3067\u5fc5\u305a\u30b3\u30d4\u30fc\u3057\u3066\u4fdd\u5b58**\n \u3053\u3053\u3067\u306f .env \u306b\u4fdd\u5b58\n\n## testPyPI \u3078\u306e\u624b\u52d5\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\n\n\u4f8b:\n\n```sh\nuv version --bump patch # \u3053\u306e\u3078\u3093\u306f\u30a2\u30ec\u30f3\u30b8\ngit commit -am 'v9.9.9' # \u4e0a\u3067\u8868\u793a\u3055\u308c\u305f\u3084\u3064\ngit tag -a 'v9.9.9' -m 'v9.9.9'\nrm dist/* -f\nuv build\npoe testpypi\n```\n\n\u306a\u3093\u304b\u3081\u3093\u3069\u304f\u3055\u3044\u306d\u3002\u81ea\u52d5\u5316\u3059\u308b\u3002\n\n\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u3067\u304d\u305f\u3089\u5225\u74b0\u5883\u3067\u30c6\u30b9\u30c8\u3059\u308b\u3002\n\n```sh\nmkdir tmp1 && cd $!\nuv init --python 3.12\nuv sync\nuv add --index-url https://test.pypi.org/simple/ h4-hello\n. .venv/bin/activate\nh4-hello\n# -> hello!\n```\n\n## GitHub Actions \u3067\u30d3\u30eb\u30c9\u3068\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5 (uv \u7248)\n\n- [Publishing to PyPI - Using uv in GitHub Actions | uv](https://docs.astral.sh/uv/guides/integration/github/#publishing-to-pypi)\n- [Commands | uv build](https://docs.astral.sh/uv/reference/cli/#uv-build)\n- [Commands | uv publish](https://docs.astral.sh/uv/reference/cli/#uv-publish)\n- [Adding a Trusted Publisher to an Existing PyPI Project - PyPI Docs](https://docs.pypi.org/trusted-publishers/adding-a-publisher/)\n- [Publishing with a Trusted Publisher - PyPI Docs](https://docs.pypi.org/trusted-publishers/using-a-publisher/)\n- [Trusted publishing support for GitHub Actions + TestPyPI via \\`uv publish\\` \u00b7 Issue #8584 \u00b7 astral-sh/uv](https://github.com/astral-sh/uv/issues/8584)\n\n## PyPI(testPyPI)\u3067 \"Trusted Publisher Management\" \u306e\u30da\u30fc\u30b8\u307e\u3067\u884c\u304f\u65b9\u6cd5\n\n(2025-09) UI \u306a\u3093\u3067\u3088\u304f\u5909\u308f\u308b\n\n### \u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\n\n\u3059\u3067\u306b PyPI/TestPyPI \u4e0a\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u3042\u308b\u3068\u304d\u3002\n\n1. **PyPI(testPyPI)\u306b\u30ed\u30b0\u30a4\u30f3**\\\n <https://pypi.org> (<https://test.pypi.org>) \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\n2. **\u5bfe\u8c61\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9078\u629e**\\\n \u53f3\u4e0a\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u300cYour projects (\u81ea\u5206\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u8a2d\u5b9a\u3057\u305f\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9078\u3073\u307e\u3059\n3. **\u300cManage\u300d\u30da\u30fc\u30b8\u3078\u79fb\u52d5**\\\n \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4e00\u89a7\u3067\u5bfe\u8c61\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u300cManage (\u7ba1\u7406)\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\n4. **\u300cPublishing\u300d\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f**\\\n \u5de6\u30b5\u30a4\u30c9\u30d0\u30fc\u306e\u300cPublishing\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\n5. **\"Trusted Publisher Management\"\u306b\u7740\u3044\u305f\u306e\u3067 Trusted Publisher \u3092\u8ffd\u52a0**\\\n GitHub \u30bf\u30d6\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u5fc5\u8981\u306a\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n\n### \u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\n\nPyPI/TestPyPI \u306b\u306f\u3001\u300c\u7a7a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308b\u300d\u6a5f\u80fd\u306f\u306a\u3044\u3002\u3067\u3082 Trusted Publishing \u306e\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u3002\n\n1. **PyPI(testPyPI)\u306b\u30ed\u30b0\u30a4\u30f3**\\\n <https://pypi.org> (<https://test.pypi.org>) \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\n2. **\u5bfe\u8c61\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9078\u629e**\\\n \u53f3\u4e0a\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u300cYour projects (\u81ea\u5206\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u8a2d\u5b9a\u3057\u305f\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9078\u3073\u307e\u3059\n3. **\u300cPublishing\u300d\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f**\\\n \u5de6\u30b5\u30a4\u30c9\u30d0\u30fc\u306e\u300cPublishing\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\n4. **\"Trusted Publisher Management\"\u306b\u7740\u3044\u305f\u306e\u3067 Trusted Publisher \u3092\u8ffd\u52a0**\\\n GitHub \u30bf\u30d6\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u5fc5\u8981\u306a\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n\n### GitHub Actions \u7528\u306e\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\n\n\u53c2\u7167: [warehouse/docs/user/trusted-publishers/adding-a-publisher.md at main \u00b7 pypi/warehouse \u00b7 GitHub](https://github.com/pypi/warehouse/blob/main/docs/user/trusted-publishers/adding-a-publisher.md)\n\n#### (\u65b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\u306e\u307f) PyPI Project Name\n\n\u3053\u306e\u30d1\u30d6\u30ea\u30c3\u30b7\u30e3\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068 PyPI/TestPyPI \u3067\u4f5c\u6210\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\n\n#### Owner (=\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6240\u6709\u8005)\n\n**\u610f\u5473:** GitHub \u4e0a\u306e\u7d44\u7e54\u307e\u305f\u306f\u30e6\u30fc\u30b6\u30fc\u540d(\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6700\u521d\u306e\u8981\u7d20)\u3002\n\n\u4f8b: `https://github.com/octo-org/sampleproject` \u306e\u5834\u5408\u3001\nOwner = octo-org\n\n**\u6ce8\u610f:**\n\n- \u30c1\u30fc\u30e0\u540d\u3084\u8868\u793a\u540d\u3067\u306f\u306a\u304f\u3001\u30aa\u30fc\u30ca\u30fc\u306e\u30cf\u30f3\u30c9\u30eb (org/\u30e6\u30fc\u30b6\u30fc\u540d)\u3092\u5165\u529b\u3057\u307e\u3059\u3002\n- \u30d5\u30a9\u30fc\u30af\u3067\u306f\u306a\u304f\u672c\u5bb6\u306e\u6240\u6709\u8005\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 (PyPI \u304c\u4fe1\u983c\u3059\u308b\u306e\u306f\u6307\u5b9a\u30aa\u30fc\u30ca\u30fc\u914d\u4e0b\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3059)\n- \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u5225\u30aa\u30fc\u30ca\u30fc\u3078 Transfer \u3057\u305f\u5834\u5408\u306f\u3001\u3053\u306e Owner \u3082\u66f4\u65b0\u304c\u5fc5\u8981\u3067\u3059\n\n#### Repository name (=\u30ea\u30dd\u30b8\u30c8\u30ea\u540d)\n\n**\u4f8b:** `octo-org/sampleproject` \u306e `sampleproject` \u306b\u76f8\u5f53\n\n#### Workflow name(=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9)\n\n**\u4f8b:** `.github/workflows/example.yml` \u3060\u3063\u305f\u3089 `example.yml` \u3092\u6307\u5b9a\u3002\n\n#### Environment (\u4efb\u610f)\n\nGitHub Actions \u306e Environment \u540d (\u4f8b:testpypi)\u3002\nPyPI \u306e UI \u3067\u306f\u4efb\u610f\u3067\u3059\u304c\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u904b\u7528\u4e0a\u306e\u7406\u7531\u3067\u5229\u7528\u304c\u5f37\u304f\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n#### \u4ee5\u4e0a\u3092\u307e\u3068\u3081\u308b\u3068\n\n[publish-testpypi.yml](.github/workflows/publish-testpypi.yml) \u306e\u5834\u5408\u306f\n\n- Owner: heiwa4126\n- Repository name: h4-hello\n- Workflow name: publish-testpypi.yml\n- Environment: testpypi\n\n[publish-pypi.yml](.github/workflows/publish-pypi.yml) \u306e\u5834\u5408\u306f (\u3053\u3063\u3061\u306f\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)\n\n- PyPI Project Name: h4-hello\n- Owner: heiwa4126\n- Repository name: h4-hello\n- Workflow name: publish-pypi.yml\n- Environment: pypi\n\n## `uv deploy` \u306f PEP740 \u306f\u307e\u3060\u99c4\u76ee (2025-09)\n\n- [uv publish: create attestations \u00b7 Issue #15618 \u00b7 astral-sh/uv](https://github.com/astral-sh/uv/issues/15618)\n\n[pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish)\n\u306b\u5165\u308c\u66ff\u3048\u308b\u3002\n\n...\u3042\u3063\u3055\u308a\u3067\u304d\u305f\u3002GitHub Actions \u306e\u30ed\u30b0\u304c\u306a\u3093\u304b\u3048\u3089\u3044\u3053\u3068\u306b\u3002\nDocker \u30a4\u30e1\u30fc\u30b8 `ghcr.io/pypa/gh-action-pypi-publish:release-v1` \u3067\u5b9f\u884c\u3055\u308c\u308b\u3089\u3057\u3044\u3002\nGitHub Container Registry (GHCR)\n\u3053\u308c [Package gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish/pkgs/container/gh-action-pypi-publish)\n\n\u6bd4\u8f03\n\n\u524d:\n\n- [h4-hello v0.1.3 \u00b7 TestPyPI](https://test.pypi.org/project/h4-hello/0.1.3/) - Verified \u30de\u30fc\u30af\u306f\u904e\u53bb\u306e\u306b\u3082\u7740\u304f\u306a\u3042..\n- [h4_hello-0.1.0-py3-none-any.whl \u00b7 TestPyPI](https://test.pypi.org/project/h4-hello/0.1.0/#h4_hello-0.1.0-py3-none-any.whl)\n\n\u5f8c:\n\n- [h4-hello v0.1.4 \u00b7 TestPyPI](https://test.pypi.org/project/h4-hello/0.1.4/)\n- [h4_hello-0.1.4-py3-none-any.whl \u00b7 TestPyPI](https://test.pypi.org/project/h4-hello/#h4_hello-0.1.4-py3-none-any.whl)\n\n\u3069\u3046\u3084\u3089 \"Verified details\" \u306e\u6a2a\u306e\u30c1\u30a7\u30c3\u30af\u30de\u30fc\u30af\u306f Sigstore \u7f72\u540d\u3068\u306f\u7121\u95a2\u4fc2\u306b\u4ed8\u304f\u307f\u305f\u3044\u3002\n\n\u305d\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u304c Sigstore \u7f72\u540d\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\u3001\u500b\u5225\u306e tgz \u3084 whl \u306e\u30da\u30fc\u30b8\u306b\u884c\u3063\u3066\u78ba\u8a8d\u3059\u308b\u3057\u304b\u306a\u3044\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 heiwa4126@gmail.com\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "A simple hello world example",
"version": "0.1.8",
"project_urls": {
"Documentation": "https://github.com/heiwa4126/h4-hello#readme",
"Issues": "https://github.com/heiwa4126/h4-hello/issues",
"Source": "https://github.com/heiwa4126/h4-hello"
},
"split_keywords": [
"demo",
" hello"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a52c7a827b4b3e23282ec5f03deeb3e8804498b5cf8a1356ac3247295e36720d",
"md5": "dc23317adc7c49d0b1bd19bbc5d57636",
"sha256": "9e29b4976781de86ad9eae303fb279efd245f0748a1a5e49c23ca4d50ab0672f"
},
"downloads": -1,
"filename": "h4_hello-0.1.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dc23317adc7c49d0b1bd19bbc5d57636",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 6240,
"upload_time": "2025-09-19T05:04:44",
"upload_time_iso_8601": "2025-09-19T05:04:44.154237Z",
"url": "https://files.pythonhosted.org/packages/a5/2c/7a827b4b3e23282ec5f03deeb3e8804498b5cf8a1356ac3247295e36720d/h4_hello-0.1.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1220446dc575a99bd70b91f586eb71bee958425b99f6bd5c7f1a5f12e14e2a57",
"md5": "6263afa2d2d5c33a1944586e4803532d",
"sha256": "2ee37fa01d27ec7815b67e028c79e1fd512c0bc7eda423728e2c308a0c798cf3"
},
"downloads": -1,
"filename": "h4_hello-0.1.8.tar.gz",
"has_sig": false,
"md5_digest": "6263afa2d2d5c33a1944586e4803532d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 5481,
"upload_time": "2025-09-19T05:04:45",
"upload_time_iso_8601": "2025-09-19T05:04:45.529898Z",
"url": "https://files.pythonhosted.org/packages/12/20/446dc575a99bd70b91f586eb71bee958425b99f6bd5c7f1a5f12e14e2a57/h4_hello-0.1.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-19 05:04:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "heiwa4126",
"github_project": "h4-hello#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "h4-hello"
}