Metadata-Version: 2.4
Name: buildify-publish-cli
Version: 1.1.0
Summary: CLI for Buildify bundle publish server (machine Bearer auth)
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: httpx<1,>=0.27
Requires-Dist: typer<1,>=0.12
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
Requires-Dist: tomli-w<2,>=1.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"

# buildify-publish-cli

Command-line client for the **Buildify bundle publish** HTTP API. Use it to check health, validate publish keys, query bundle metadata, and upload JAR bundles from your terminal or CI.

**Requires:** Python 3.10 or newer.

## Install

From [PyPI](https://pypi.org/project/buildify-publish-cli/):

```bash
pip install buildify-publish-cli
```

Other installers:

```bash
pipx install buildify-publish-cli
uv tool install buildify-publish-cli
```

After install, the command is **`buildify-publish`**.

## Authentication

The API uses **Bearer** credentials: `Authorization: Bearer <keyId>.<secret>`.

One key belongs to one workspace. Set the full secret (both parts after `Bearer`) as:

- Environment variable **`BUILDIFY_PUBLISH_API_KEY`** (ignores saved profiles), or
- **`buildify-publish config add-profile <name>`** (reads from stdin — avoids putting the secret on the command line). This does not change the default profile.

Publish keys are **created and rotated in the Buildify console**, not through this CLI. When several keys are saved, pass `--profile <name>` (or set `BUILDIFY_PUBLISH_PROFILE`). `config use` changes the machine default; agents should not run it unless asked.

## Quick start

```bash
printf '%s' 'yourKeyId.yourSecret' | buildify-publish config add-profile acme

buildify-publish health
buildify-publish --profile acme key test
buildify-publish bundle info --name 'my/group/plugin'
buildify-publish bundle upload \
  --name 'my/group/plugin' \
  --version '1.0.0-SNAPSHOT' \
  --file ./plugin.jar \
  --overwrite \
  --release-notes-file ./CHANGELOG.md
```

**发布说明：** `bundle upload` 支持 **`--release-notes-file`**（UTF-8 Markdown，通常为本仓库根目录 **`CHANGELOG.md`**），随 JAR 以 multipart 字段 **`releaseNote`** 提交至 **`POST /v1/bundles/versions`**；服务端写入 **`bundle_version_release_note`**（与控制台开发者上传、§十八 一致）。规范要求见 `docs/spec/dev-spec.md` §17.7。

### API base URL

Default: **`https://publish.buildify.cn`**

Override for self-hosted or other environments:

```bash
export BUILDIFY_PUBLISH_BASE_URL='https://your-publish-host.example.com'
# or per invocation:
buildify-publish --base-url 'https://your-publish-host.example.com' health
```

Persist in **`~/.buildifyrc`**:

- **`base_url`** — which publish API host to call (top-level; default host above if unset).
- **`api_key`** — legacy single credential `keyId.secret`, listed as profile `default`.
- **`[publish].profiles.<name>`** — one key per workspace. `add-profile` does not change the default.

```bash
buildify-publish config set-key base_url https://publish.buildify.cn
printf '%s' 'keyId.secret' | buildify-publish config add-profile acme
buildify-publish --json config profiles
buildify-publish config show
```

`config set-key api_key` still updates the current profile, or the legacy top-level key. Shortcuts **`config set-base-url`** and **`config set-api-key`** remain.

**File:** `~/.buildifyrc` (Unix) or `%USERPROFILE%\.buildifyrc` (Windows), mode `600`. Shared with `buildify`; publish keys are not written into `[openapi]`. **Key selection:** `--api-key` / **`BUILDIFY_PUBLISH_API_KEY`** → `--profile` / **`BUILDIFY_PUBLISH_PROFILE`** → `.buildify-workspace` → `[publish].current` → the only saved key.

## Built-in reference

Full Markdown reference (commands, env vars, HTTP mapping, exit codes, JSON schema):

```bash
buildify-publish help
```

Same content ships as `usage.md` inside the package.

## Scripting and CI

Machine-readable output (one JSON object per run):

```bash
export BUILDIFY_PUBLISH_JSON=1
buildify-publish --json key test
```

Environment: `BUILDIFY_PUBLISH_BASE_URL`, `BUILDIFY_PUBLISH_API_KEY`, `BUILDIFY_PUBLISH_PROFILE`, `BUILDIFY_PUBLISH_JSON`, `BUILDIFY_PUBLISH_NO_PROMPT`, `NO_COLOR`.

Global flags: `--json`, `--api-key`, `--profile`, `--base-url`, `--quiet`.

## Developing from source

If you have the Git repository checked out:

```bash
cd tools/buildify-publish-cli
python3 -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install .
```

Run without installing into the environment:

```bash
python -m buildify_publish --help
```

## License

Same as the upstream project repository unless stated otherwise.
