runspec-gitlab 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to `runspec-gitlab` are documented here.
4
4
 
5
+ ## [0.2.1] — 2026-09-20
6
+
7
+ ### Changed
8
+
9
+ - **Packaging metadata for the runspec-console Marketplace.** Add a README
10
+ (rendered in the Marketplace card's Details view) and publish `keywords`
11
+ and Documentation / Source / Changelog / Issues project URLs, so the
12
+ package's Marketplace card shows a description, tags and links. No
13
+ runnable, argument, or behaviour changes.
14
+
5
15
  ## [0.2.0]
6
16
 
7
17
  Reconciled the verb set against GitLab's canonical MCP tool registry
@@ -0,0 +1,90 @@
1
+ Metadata-Version: 2.5
2
+ Name: runspec-gitlab
3
+ Version: 0.2.1
4
+ Summary: GitLab read runnable for runspec — issues, merge requests, pipelines, and repository reads, ported from the GitLab MCP server
5
+ Project-URL: Documentation, https://runspec.app/
6
+ Project-URL: Source, https://github.com/jasonfinestone/runspec/tree/main/packages/python/runspec-gitlab
7
+ Project-URL: Changelog, https://github.com/jasonfinestone/runspec/blob/main/packages/python/runspec-gitlab/CHANGELOG.md
8
+ Project-URL: Issues, https://github.com/jasonfinestone/runspec/issues
9
+ Keywords: gitlab,mcp,runnable,runspec
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: runspec-gitlab-core>=0.2.0
12
+ Requires-Dist: runspec>=0.44.0
13
+ Provides-Extra: dev
14
+ Requires-Dist: mypy; extra == 'dev'
15
+ Requires-Dist: pytest>=8.0; extra == 'dev'
16
+ Requires-Dist: ruff==0.15.20; extra == 'dev'
17
+ Description-Content-Type: text/markdown
18
+
19
+ # runspec-gitlab
20
+
21
+ A read-only GitLab runnable for [runspec](https://pypi.org/project/runspec/),
22
+ ported onto the GitLab REST API (v4) — **not** proxying GitLab's hosted MCP
23
+ server. One runnable — **`gitlab`** — with 17 read verbs, all `autonomy =
24
+ "autonomous"`. `pip install` it into a venv and it's discoverable by `runspec
25
+ local`, `runspec serve` (MCP), and runspec-console.
26
+
27
+ `runspec serve` flattens each verb into a leaf MCP tool (`gitlab_get-issue`, …).
28
+ Verb names are reconciled against GitLab's canonical MCP tool registry; the
29
+ extras (`whoami`, `get-project`, `search-projects`, `list-issues`, `get-file`,
30
+ `list-tree`) are useful REST reads GitLab has no MCP tool for.
31
+
32
+ ## Install
33
+
34
+ ```
35
+ pip install runspec-gitlab
36
+ ```
37
+
38
+ ## Verbs
39
+
40
+ | Area | Verbs |
41
+ |---|---|
42
+ | Account / project | `whoami`, `get-project`, `search-projects`, `get-file`, `list-tree` |
43
+ | Issues | `list-issues`, `get-issue` |
44
+ | Merge requests | `list-merge-requests`, `get-merge-request`, `get-merge-request-diffs`, `get-merge-request-commits`, `get-merge-request-notes`, `get-merge-request-pipelines`, `get-merge-request-conflicts` |
45
+ | Pipelines | `list-pipelines`, `get-pipeline-jobs`, `get-job-log` |
46
+
47
+ `get-merge-request-conflicts` is best-effort — GitLab has no public `/api/v4`
48
+ conflicts endpoint, so it relays the web-UI endpoint and returns its JSON
49
+ verbatim.
50
+
51
+ ## Auth — env vars only
52
+
53
+ ```
54
+ export GITLAB_URL=https://gitlab.example.com # default https://gitlab.com
55
+ export GITLAB_TOKEN=<personal-or-project-access-token>
56
+ export GITLAB_PROJECT=group/subgroup/project # optional default
57
+ ```
58
+
59
+ Every verb takes `--env`, selecting `GITLAB_<ENV>_*` prefixed vars. `--project`
60
+ accepts a numeric id or a `group/project` path and falls back to
61
+ `GITLAB_PROJECT`.
62
+
63
+ ```
64
+ gitlab whoami
65
+ gitlab list-merge-requests --project group/app --state opened
66
+ gitlab get-job-log --project group/app --job-id 998877
67
+ ```
68
+
69
+ ## Public Python API
70
+
71
+ The pure logic is in **[`runspec-gitlab-core`](../runspec-gitlab-core)** —
72
+ `httpx`-only, no `runspec` dependency, no entry points. Every op takes a
73
+ `GitlabConfig` first arg and raises `GitlabError`, so a private wrapper can
74
+ inject credentials and bake in a default `project` / `env`:
75
+
76
+ ```python
77
+ from runspec_gitlab_core import config_from_env, get_issue, list_merge_requests
78
+
79
+ cfg = config_from_env(env="prod")
80
+ mrs = list_merge_requests(cfg, state="opened")
81
+ ```
82
+
83
+ ## Development
84
+
85
+ ```
86
+ python -m venv .venv && . .venv/bin/activate
87
+ pip install -e ".[dev]"
88
+ ruff check . && ruff format --check .
89
+ pytest
90
+ ```
@@ -0,0 +1,72 @@
1
+ # runspec-gitlab
2
+
3
+ A read-only GitLab runnable for [runspec](https://pypi.org/project/runspec/),
4
+ ported onto the GitLab REST API (v4) — **not** proxying GitLab's hosted MCP
5
+ server. One runnable — **`gitlab`** — with 17 read verbs, all `autonomy =
6
+ "autonomous"`. `pip install` it into a venv and it's discoverable by `runspec
7
+ local`, `runspec serve` (MCP), and runspec-console.
8
+
9
+ `runspec serve` flattens each verb into a leaf MCP tool (`gitlab_get-issue`, …).
10
+ Verb names are reconciled against GitLab's canonical MCP tool registry; the
11
+ extras (`whoami`, `get-project`, `search-projects`, `list-issues`, `get-file`,
12
+ `list-tree`) are useful REST reads GitLab has no MCP tool for.
13
+
14
+ ## Install
15
+
16
+ ```
17
+ pip install runspec-gitlab
18
+ ```
19
+
20
+ ## Verbs
21
+
22
+ | Area | Verbs |
23
+ |---|---|
24
+ | Account / project | `whoami`, `get-project`, `search-projects`, `get-file`, `list-tree` |
25
+ | Issues | `list-issues`, `get-issue` |
26
+ | Merge requests | `list-merge-requests`, `get-merge-request`, `get-merge-request-diffs`, `get-merge-request-commits`, `get-merge-request-notes`, `get-merge-request-pipelines`, `get-merge-request-conflicts` |
27
+ | Pipelines | `list-pipelines`, `get-pipeline-jobs`, `get-job-log` |
28
+
29
+ `get-merge-request-conflicts` is best-effort — GitLab has no public `/api/v4`
30
+ conflicts endpoint, so it relays the web-UI endpoint and returns its JSON
31
+ verbatim.
32
+
33
+ ## Auth — env vars only
34
+
35
+ ```
36
+ export GITLAB_URL=https://gitlab.example.com # default https://gitlab.com
37
+ export GITLAB_TOKEN=<personal-or-project-access-token>
38
+ export GITLAB_PROJECT=group/subgroup/project # optional default
39
+ ```
40
+
41
+ Every verb takes `--env`, selecting `GITLAB_<ENV>_*` prefixed vars. `--project`
42
+ accepts a numeric id or a `group/project` path and falls back to
43
+ `GITLAB_PROJECT`.
44
+
45
+ ```
46
+ gitlab whoami
47
+ gitlab list-merge-requests --project group/app --state opened
48
+ gitlab get-job-log --project group/app --job-id 998877
49
+ ```
50
+
51
+ ## Public Python API
52
+
53
+ The pure logic is in **[`runspec-gitlab-core`](../runspec-gitlab-core)** —
54
+ `httpx`-only, no `runspec` dependency, no entry points. Every op takes a
55
+ `GitlabConfig` first arg and raises `GitlabError`, so a private wrapper can
56
+ inject credentials and bake in a default `project` / `env`:
57
+
58
+ ```python
59
+ from runspec_gitlab_core import config_from_env, get_issue, list_merge_requests
60
+
61
+ cfg = config_from_env(env="prod")
62
+ mrs = list_merge_requests(cfg, state="opened")
63
+ ```
64
+
65
+ ## Development
66
+
67
+ ```
68
+ python -m venv .venv && . .venv/bin/activate
69
+ pip install -e ".[dev]"
70
+ ruff check . && ruff format --check .
71
+ pytest
72
+ ```
@@ -4,9 +4,11 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "runspec-gitlab"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  requires-python = ">=3.10"
9
9
  description = "GitLab read runnable for runspec — issues, merge requests, pipelines, and repository reads, ported from the GitLab MCP server"
10
+ readme = "README.md"
11
+ keywords = ["runspec", "runnable", "gitlab", "mcp"]
10
12
  dependencies = [
11
13
  # 0.44.0 surfaces inherited args (the global --env) on each leaf subcommand's
12
14
  # MCP tool via `runspec serve`.
@@ -14,6 +16,12 @@ dependencies = [
14
16
  "runspec-gitlab-core>=0.2.0",
15
17
  ]
16
18
 
19
+ [project.urls]
20
+ Documentation = "https://runspec.app/"
21
+ Source = "https://github.com/jasonfinestone/runspec/tree/main/packages/python/runspec-gitlab"
22
+ Changelog = "https://github.com/jasonfinestone/runspec/blob/main/packages/python/runspec-gitlab/CHANGELOG.md"
23
+ Issues = "https://github.com/jasonfinestone/runspec/issues"
24
+
17
25
  [project.scripts]
18
26
  # Entry point name MUST match the runnable name in runspec.toml (`gitlab`).
19
27
  gitlab = "runspec_gitlab.cli:main"
@@ -1,11 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: runspec-gitlab
3
- Version: 0.2.0
4
- Summary: GitLab read runnable for runspec — issues, merge requests, pipelines, and repository reads, ported from the GitLab MCP server
5
- Requires-Python: >=3.10
6
- Requires-Dist: runspec-gitlab-core>=0.2.0
7
- Requires-Dist: runspec>=0.44.0
8
- Provides-Extra: dev
9
- Requires-Dist: mypy; extra == 'dev'
10
- Requires-Dist: pytest>=8.0; extra == 'dev'
11
- Requires-Dist: ruff==0.15.20; extra == 'dev'