{"id":31570267,"url":"https://github.com/kud/jenkins-cli","last_synced_at":"2026-04-19T05:34:57.833Z","repository":{"id":314258655,"uuid":"1054380830","full_name":"kud/jenkins-cli","owner":"kud","description":"Fast Jenkins terminal companion: rich interactive TUI + focused scripting commands with smart log highlighting \u0026 multi‑server profiles. ","archived":false,"fork":false,"pushed_at":"2026-01-28T17:32:46.000Z","size":254,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-29T08:09:07.700Z","etag":null,"topics":["ci","cli","jenkins"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T18:48:38.000Z","updated_at":"2025-09-11T10:48:00.000Z","dependencies_parsed_at":"2025-09-11T13:41:31.884Z","dependency_job_id":null,"html_url":"https://github.com/kud/jenkins-cli","commit_stats":null,"previous_names":["kud/jenkins-cli"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/kud/jenkins-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kud%2Fjenkins-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kud%2Fjenkins-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kud%2Fjenkins-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kud%2Fjenkins-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kud","download_url":"https://codeload.github.com/kud/jenkins-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kud%2Fjenkins-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31996445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci","cli","jenkins"],"created_at":"2025-10-05T12:19:59.150Z","updated_at":"2026-04-19T05:34:57.821Z","avatar_url":"https://github.com/kud.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jenkins CLI (Interactive + Scriptable)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@kud/jenkins-cli\"\u003e\u003cimg alt=\"npm version\" src=\"https://img.shields.io/npm/v/%40kud%2Fjenkins-cli.svg?color=28a745\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@kud/jenkins-cli\"\u003e\u003cimg alt=\"downloads\" src=\"https://img.shields.io/npm/dm/%40kud%2Fjenkins-cli.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"#license\"\u003e\u003cimg alt=\"license\" src=\"https://img.shields.io/npm/l/%40kud%2Fjenkins-cli.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://nodejs.org\"\u003e\u003cimg alt=\"node version\" src=\"https://img.shields.io/node/v/@kud/jenkins-cli.svg\" /\u003e\u003c/a\u003e\n  \u003c!-- Replace ORG/REPO with real slug if desired --\u003e\n  \u003cimg alt=\"status\" src=\"https://img.shields.io/badge/CI-placeholder-lightgrey\" /\u003e\n  \u003cimg alt=\"PRs welcome\" src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" /\u003e\n\u003c/p\u003e\n\n\u003e Fast Jenkins terminal companion: rich interactive TUI + focused scripting commands with smart log highlighting \u0026 multi‑server profiles. Target: **Node \u003e= 22**, pure **ESM**.\n\n---\n## ✨ TL;DR\n\n```bash\n# Install (global)\nnpm i -g @kud/jenkins-cli\n\n# Configure once\njenkins config set --url https://ci.example.com --user alice --token $JENKINS_TOKEN\n\n# See latest build status (pretty)\njenkins status my-pipeline --pretty\n\n# Stream latest logs (follow)\njenkins logs my-pipeline -f\n\n# Launch full-screen explorer (jobs | builds | logs)\njenkins --interactive\n\n# Trigger with parameters\njenkins build my-pipeline --param BRANCH=feature-x --param CACHE=false\n```\n\nNeed JSON for scripts? Add `--json`. No icons / CI-safe? Set `JENKINS_CLI_PLAIN=1`.\n\n---\n## 📚 Table of Contents\n- [Features](#-features)\n- [Install](#install)\n- [Quick Start](#quick-start)\n- [Usage Cheat Sheet](#-usage-cheat-sheet)\n- [Interactive Explorer](#interactive-explorer)\n- [Configuration \u0026 Multi-Server](#configuration--multi-server-management)\n- [Log Highlighting Magic](#log-formatting--highlighting)\n- [Artifacts](#artifacts)\n- [Queue \u0026 Pipelines](#queue--pipeline-info)\n- [Environment Variables](#environment-variables-summary)\n- [Programmatic API](#programmatic-usage)\n- [Development \u0026 Prepublish](#prepublish--development)\n- [Why Another CLI?](#why-another-jenkins-cli)\n- [Roadmap](#roadmap-ideas)\n- [License](#license)\n\n---\n## 🚀 Features\n- **Unified experience**: quick one-liners + advanced full-screen explorer.\n- **Rich log intelligence**: Docker, Git, JSON, diffs, test summaries, timestamps, levels, artifacts \u0026 more.\n- **Multi-server profiles** with salvage of partially corrupted config.\n- **Incremental job traversal** (BFS) with a safety cap (5000) for huge Jenkins instances.\n- **Smart emoji fallback** on restricted terminals / CI.\n- **Zero heavy deps** — just `commander`, `chalk`, `neo-blessed`, `highlight.js`.\n- **Modern**: Node 22+, native fetch, ESM-first.\n\n---\n## Install\n\n```bash\nnpm i -g @kud/jenkins-cli          # Global binary\n# or project-local\nnpm i -D @kud/jenkins-cli\n```\nBinary: `jenkins`\n\n---\n## Quick Start\n\n```bash\njenkins config set --url https://ci.example.com --user alice --token $JENKINS_TOKEN\njenkins list my-job --pretty\njenkins logs my-job -f\njenkins trigger my-job\njenkins artifacts my-job 123 -p .jar -o jars/\n```\n\n### Non-Interactive Quick Start\nIf you see an error like `missing required argument 'jobOrUrl'`, it means the command expects a job name (or a full job/build URL) as the first positional argument.\n\nCommon patterns:\n```bash\n# Latest build status (pretty colors)\njenkins status my-service --pretty\n\n# Follow live logs of latest (or specific) build\njenkins logs my-service -f\njenkins logs my-service 128 -f\n\n# Plain console (same as logs without -f)\njenkins console my-service\njenkins console https://ci.example.com/job/my-service/128/\n\n# List recent builds (limit 20)\njenkins list my-service -l 20\n```\n`\u003cjobOrUrl\u003e` accepts either:\n- A simple job name (folder paths use `/`, e.g. `team/backend-api`)\n- A full build URL (`.../job/\u003cname\u003e/\u003cbuild\u003e/`) or job URL (`.../job/\u003cname\u003e/`)\n\nIf the build number is omitted, the CLI resolves the latest build where supported.\n\nInteractive exploration (jobs + builds + logs) still uses either:\n```bash\njenkins --interactive            # root flag form\njenkins interactive              # explicit subcommand form\n```\n\n---\n## 🧾 Usage Cheat Sheet\n\n| Task | Command | Notes |\n|------|---------|-------|\n| Latest build status | `jenkins status job` | Add `--pretty` for colored state + icon |\n| List builds | `jenkins list job -l 15` | Uses latest N builds |\n| Stream logs | `jenkins logs job -f` | Progressive API polling |\n| Static logs JSON | `jenkins logs job --json` | Outputs `{ text }` |\n| Trigger build | `jenkins trigger job` | Plain trigger (no params) |\n| Param build | `jenkins build job --param KEY=V --param X=Y` | Repeat flag |\n| Stop build | `jenkins stop job 456` | Aborts running build |\n| Artifacts list | `jenkins artifacts job 456` | Tab separated list |\n| Download artifacts | `jenkins artifacts job 456 -o out/` | All artifacts |\n| Filter artifacts | `jenkins artifacts job 456 -p .jar` | Simple substring |\n| Test summary | `jenkins test-report job 456` | Add `--json` for details |\n| Pipeline stages | `jenkins stages job 456` | Needs workflow-api plugin |\n| Queue list | `jenkins queue` | Items with flags |\n| Cancel queue | `jenkins queue-cancel 123` | Immediate POST |\n| Search jobs | `jenkins search api -l 200` | BFS substring matching |\n| Single-job TUI | `jenkins ui job` | Build list + logs |\n| Multi-job TUI | `jenkins interactive` | Jobs + builds + logs |\n\n---\n## Interactive Explorer\n\n```\n+------------------+------------------+-----------------------------------------+\n|      Jobs        |      Builds      |                 Logs                    |\n|  (filter live)   | (#  State Dur Age)|  syntax highlight / search / follow     |\n+------------------+------------------+-----------------------------------------+\n|  Status / Key Hints \u0026 Active Filters / Pane Focus Indicator / Help (?)        |\n+--------------------------------------------------------------------------------\n```\n\n### Key Bindings (Core)\n| Key | Action | Key | Action |\n|-----|--------|-----|--------|\n| `q` | Quit | `f` | Toggle follow |\n| `r` | Refresh | `S` | Toggle build sort |\n| `1/2/3` | Focus pane | `t` | Auto-refresh toggle |\n| `←/→` | Cycle panes | `a` | Artifacts popup |\n| `/` | Contextual search (jobs or logs) | `c` | Clear filters |\n| `b` | Build text filter | `B` | Build fuzzy search |\n| `m` | Bookmark line | `M` | Jump to bookmark |\n| `e/W/i` | Jump ERROR/WARN/INFO | `g/G` | Top / Bottom |\n| `l` | Toggle line numbers | `?` | Help overlay |\n\n### Focus Tricks\n- Single job mode: `jenkins interactive --jobs my-service` hides the Jobs panel for more log real estate.\n- Emojis auto-replaced in plain terminals (CI, VS Code) → textual tokens.\n\n---\n## Configuration \u0026 Multi-Server Management\nLocation: `~/.config/jenkins-cli/config.json` (respects `$XDG_CONFIG_HOME`).\n\n```bash\n# Primary server\njenkins config set --url https://ci.example.com --user alice --token $TOKEN\n\n# Multiple servers\njenkins config add-server prod    --url https://ci.example.com        --user alice --token $TOKEN_PROD\njenkins config add-server staging --url https://ci.staging.example.com --user alice --token $TOKEN_STG\njenkins config use staging\njenkins config list-servers\n```\n\nPrecedence (highest → lowest): **CLI flags** \u003e **Environment variables** \u003e **Config file**.\n\nSalvage logic automatically:\n- Truncates trailing garbage past final `}` if file partially corrupted.\n- Normalizes markdown links `[text](url)` → `url`.\n\n---\n## Log Formatting \u0026 Highlighting\nPattern-based enrichment turns plain build text into readable diagnostics.\n\n| Category | Examples Detected | Styling |\n|----------|------------------|---------|\n| Build Result | `BUILD SUCCESS`, `BUILD FAILURE`, `UNSTABLE` | Colored + icon |\n| Test Summary | `Tests run: X Failures: Y Errors: Z` | Numeric color emphasis |\n| Tools | `docker pull`, `git clone`, `npm install` | Prefixed icons \u0026 color |\n| Diffs | `@@ ... @@`, `+added`, `-removed` | Magenta hunk / green / red |\n| Levels | `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`, stack traces | Rich labels / dim frames |\n| JSON Lines | Single-line JSON objects / arrays | Pretty-highlighted or manual fallback |\n| Paths \u0026 URLs | `~/file.ts`, `C:\\path\\a.js`, `https://...` | Cyan / underlined URLs |\n| Progress | `31/120 (25%)` or just `31/120` | Recomputed percentage |\n\nDisable icons entirely: `JENKINS_CLI_NO_ICONS=1` (or `JENKINS_CLI_PLAIN=1`).\n\n---\n## Artifacts\n\n```bash\n# List artifacts of latest build (auto-resolves if number omitted)\njenkins artifacts my-job\n\n# List artifacts for specific build\njenkins artifacts my-job 128\n\n# Download all to directory (creates if missing)\njenkins artifacts my-job 128 -o dist/artifacts\n\n# Filter by substring (.jar) BEFORE downloading\njenkins artifacts my-job 128 -p .jar -o jars/\n```\n\n---\n## Queue \u0026 Pipeline Info\n```bash\njenkins queue                 # List queued tasks\njenkins queue-cancel 1234     # Cancel item\njenkins stages my-job 456     # Pipeline stages (needs workflow-api plugin)\njenkins test-report my-job 456 --json  # Full JUnit JSON structure\n```\n\n---\n## Environment Variables Summary\n| Variable | Purpose | Notes |\n|----------|---------|-------|\n| `JENKINS_URL` | Base URL override | Same as `--url` |\n| `JENKINS_USER` | Username override |  |\n| `JENKINS_TOKEN` | Token override |  |\n| `JENKINS_SERVER` | Server alias | Chosen from config file |\n| `JENKINS_TIMEOUT` | Request timeout (ms) | Default 15000 |\n| `JENKINS_RETRIES` | Retry attempts (0–9) | Default 0 |\n| `JENKINS_CLI_NO_ICONS` | Disable Unicode/emoji | Plain text tokens |\n| `JENKINS_CLI_PLAIN` | Same as above |  |\n| `JENKINS_CLI_ASCII_SCROLLBAR` | Force ASCII scrollbar | Usually auto-chosen |\n\n---\n## Programmatic Usage\nImport the client (ESM):\n\n```ts\nimport { JenkinsClient } from '@kud/jenkins-cli';\n\nconst client = new JenkinsClient('https://ci.example.com', 'user', 'token');\nconst build = await client.getBuild('my-job');\nconsole.log('Result:', build.result);\n```\n\nProgressive log stream:\n```ts\nawait client.streamConsole('my-job', 123, chunk =\u003e {\n  process.stdout.write(chunk); // apply your own formatting if desired\n});\n```\n\nSearch jobs incrementally:\n```ts\nconst jobs = await client.searchJobs('backend', 200); // cap results\nfor (const j of jobs) console.log(j.fullName || j.name);\n```\n\nDownload artifact:\n```ts\nconst { artifacts } = await client.getArtifacts('my-job', 123);\nfor (const a of artifacts) {\n  const buf = await client.downloadArtifact('my-job', 123, a.relativePath);\n  // write buffer somewhere\n}\n```\n\n---\n## Prepublish / Development\n```bash\n# Build TS → dist/\nnpm run build\n\n# Watch mode\nnpm run dev\n\n# Tests (placeholder for now)\nnpm test\n```\nPublishing runs the build automatically via `prepublishOnly`.\n\n---\n## Why Another Jenkins CLI?\n- Existing CLIs are bulky or incomplete for log exploration.\n- Need fast traversal \u0026 multi-server context switching.\n- Rich real-time log augmentation without external plugins.\n- Modern Node (fetch, ESM) keeps surface minimal.\n\n---\n## Roadmap Ideas\n- In-log match navigation (cursor → exact line for search hits)\n- Structured log export (JSON objects: timestamp, level, message)\n- Richer pipeline / stage timing visualization\n- Inline artifact preview (JSON / text, maybe diff)\n- Config encryption for tokens (optional)\n\n\u003e Have a feature idea? Open an issue / PR.\n\n---\n## License\nMIT\n\n---\n\n---\nHappy building! 🛠️\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkud%2Fjenkins-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkud%2Fjenkins-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkud%2Fjenkins-cli/lists"}