Metadata-Version: 2.4
Name: rbrowser
Version: 0.1.10
Summary: Launch RBrowser with a local or remote (SSH) directory as a file server
Author: RBrowser Team
License: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: click>=8.0
Requires-Dist: flask>=2.0
Requires-Dist: flask-cors>=4.0

# RBrowser CLI

Launch [RBrowser](https://rbrowser.org) with a local or remote (SSH) directory
as a file server backend. **The frontend UI is bundled inside the wheel** —
one `pip install` and you're ready to go (no Node.js, no extra build step).

## Install

```bash
pip install rbrowser-cli
```

## Usage

```bash
# Open current directory (UI served from http://localhost:<port>)
rbrowser open .

# Open a specific directory
rbrowser open /data/myproject

# Open a remote SSH directory (requires ssh-agent or key auth)
rbrowser open user@host:/data/myproject

# Use a custom port
rbrowser open . --port 8888

# Override the bundled UI with a hosted RBrowser
rbrowser open . --frontend https://rbrowser.org
```

The CLI prints (and auto-opens) a URL like
`http://localhost:<port>/#/main?fileServerUrl=...`, which jumps the user
directly to the Main view's File Explorer panel — no home-page detour.

When run on a remote SSH host, the URL is printed as a Ctrl+Click hyperlink so
you can open it from your local terminal.

---

## Maintainer notes (release flow)

End users do **not** need to do this. To produce a wheel that ships the UI:

```bash
# One-shot: install JS deps, build frontend, build sdist + wheel
node rbrowser-cli/scripts/build_release.mjs

# Skip the npm install (faster local iterations)
node rbrowser-cli/scripts/build_release.mjs --skip-install

# Or via npm:
npm run release:cli                 # full pipeline
npm run build:cli-wheel             # skip-install variant

# Output is in rbrowser-cli/dist/  (sdist + wheel)
```

### Publishing to PyPI via GitHub Actions

The workflow [`.github/workflows/publish-rbrowser-cli.yml`](../.github/workflows/publish-rbrowser-cli.yml)
publishes a release to PyPI using **Trusted Publishing** (OIDC — no API
token in repo secrets). To set it up once:

1. On <https://pypi.org/manage/account/publishing/>, add a _pending publisher_:
   - PyPI project name: `rbrowser-cli`
   - Owner: `typekey` · Repository: `rna-browser`
   - Workflow: `publish-rbrowser-cli.yml`
   - Environment: `pypi`
2. In the GitHub repo Settings → Environments, create an environment named
   `pypi` (optionally with a required reviewer).

Then to release:

```bash
# One-liner: bump patch version, build, commit, tag, push.
# (PyPI is published automatically by the GitHub Action.)
npm run release:cli:patch        # 0.1.0 -> 0.1.1
npm run release:cli:minor        # 0.1.0 -> 0.2.0
npm run release:cli:major        # 0.1.0 -> 1.0.0

# Or pick an explicit version (and add --push when ready):
node rbrowser-cli/scripts/release.mjs 0.2.3 --push

# Dry-run / inspect first; create the tag locally without pushing:
node rbrowser-cli/scripts/release.mjs patch              # local tag only
node rbrowser-cli/scripts/release.mjs patch --dry-run    # print, don't mutate
```

What `release.mjs` does:

1. Resolves the new version (explicit or `patch` / `minor` / `major` bump).
2. Verifies the working tree is clean and on `main` (override with
   `--allow-dirty` / `--branch=…`).
3. Rewrites `pyproject.toml`'s version.
4. Runs the full local build (skip with `--no-build`) so you can spot any
   issue before the tag is pushed.
5. Commits, creates the annotated tag `rbrowser-cli-vX.Y.Z`, and (with
   `--push`) pushes both to `origin` — which fires the publish workflow.

Manual fallback (no script):

```bash
# Update version in rbrowser-cli/pyproject.toml first.
git commit -am "chore(rbrowser-cli): release v0.1.1"
git tag rbrowser-cli-v0.1.1
git push origin main rbrowser-cli-v0.1.1
```

`pyproject.toml` already declares `frontend/**/*` as `package-data`, so the
built UI is included in the wheel automatically.
