Skip to main content

redmine-core

Thin Python CLI for Redmine. Originally built as the backend for redmine.nvim, but works standalone — handy for quick CLI workflows against a Redmine instance.

  • Stdlib-only (no requests / httpx — uses urllib.request)
  • One narrow shape per subcommand; JSON output where it makes sense
  • Exit codes are documented and stable so callers can branch on auth failure vs. config errors vs. generic failures

Install

uv tool install redmine-core    # recommended (isolated, fastest)
# or
pipx install redmine-core
# or
pip install --user redmine-core

For local development / editable install:

git clone https://github.com/willysk73/redmine-core
cd redmine-core
uv pip install -e .             # or `pip install -e .`

Build & publish

uv build                                          # → dist/*.whl + dist/*.tar.gz
uv publish --publish-url https://test.pypi.org/legacy/   # TestPyPI
uv publish                                        # PyPI (UV_PUBLISH_TOKEN env)

uv build replaces python -m build; uv publish replaces twine upload. Both honor a standard ~/.pypirc if you prefer that over env vars.

Configure

The CLI reads credentials from environment variables first, then from ~/.config/redmine-core/config.toml:

export REDMINE_URL=https://redmine.example.com
export REDMINE_API_KEY=<your-api-key>
# Optional, used by `list --filter mine`:
export REDMINE_USER=<your-login>

Or ~/.config/redmine-core/config.toml:

url = "https://redmine.example.com"
api_key = "..."
user_login = "..."

Verify with:

redmine whoami

Subcommands at a glance

command what it does
redmine list [--filter mine|open|all] [--json] List issues. JSON output for tooling.
redmine fetch <id> [--format display|json|task] Fetch a single issue. task prints a markdown task-context block.
redmine detect [--cwd DIR] Resolve the current issue id from branch name / .redmine / cwd.
redmine whoami [--json] Authenticated user.
redmine meta statuses [--issue N] Allowed status transitions (or global list).
redmine meta members --project <id|identifier> Project members for assignee pickers.
redmine update <id> [--status .. --progress .. --notes ..] Single-purpose update (one PUT, one journal).
redmine assign <id> --user <name|id|""|none> Change assignee. Empty/none unassigns.
redmine log <id> --hours N [--activity .. --comment ..] Log a time entry.
redmine post --file <draft.md> Compose-driven: bundle comment + status + progress + assignee + time. Single PUT, single journal. Empty body + frontmatter changes also accepted.
redmine attachment download --id N [--issue M] [--out PATH] [--force] Download an attachment, print absolute path. Default: /tmp/redmine-attachments/<issue>/<filename>. Idempotent — re-runs reuse the cached file.
redmine path draft|task|archive --id N Print the resolved path for a compose draft / task / archive.
redmine suggest assignee --id N Suggest a default assignee (last commenter, falls back to author).

Compose drafts

post --file <path> reads a markdown draft with YAML-lite frontmatter:

---
id: 123
status: Resolved
progress: 80
assignee: Alice
time: 1.5
---

본문 — 코멘트 텍스트.

<!-- ━━━ 아래는 참고용. post 시 무시됨. ━━━ -->
(이슈 컨텍스트, 이전 코멘트, 변경 로그 등 — 무시됨)
  • All frontmatter fields are optional. id is the only required key.
  • A single PUT bundles notes + status_id + done_ratio + assigned_to_id → exactly one journal entry.
  • Empty body with frontmatter changes is allowed (status-only updates).
  • time: triggers a separate POST /time_entries.json.

Exit codes

code meaning
0 success
1 generic failure (e.g. detect found nothing)
2 bad argv
11 authentication failure (HTTP 401/403 from Redmine)

11 is split out so callers can re-prompt for credentials without having to parse error text.

License

MIT — see LICENSE.

Metadata

Release files for redmine-core 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for redmine-core 0.1.0
File Size Uploaded
redmine_core-0.1.0.tar.gz 18.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for redmine-core 0.1.0
File Interpreter ABI Platform
redmine_core-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.5 kB

Release files / redmine_core-0.1.0.tar.gz

Download URL redmine_core-0.1.0.tar.gz
Size 18.2 kB
Tags Source
SHA-256 checksum
How to use checksums
57bfdcaa98052d63a048cb01dd175233f877753d0ac85f701e625100eee9161d
BLAKE2b-256 checksum
How to use checksums
743f51a97e253903f8ce23ddaca42abec45b72d9fc78f44331e680a87b529134
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.19

Release files / redmine_core-0.1.0-py3-none-any.whl

Download URL redmine_core-0.1.0-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f650994ad6d4010ebbeb4a88296efaac4c4d0f838a599c6979640f2635847629
BLAKE2b-256 checksum
How to use checksums
8293db436b7363b2479e8aa8a9ac641a257fb4712da7c07bebe3936112fca03c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.19

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page