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.
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/CHANGELOG.md +10 -0
- runspec_gitlab-0.2.1/PKG-INFO +90 -0
- runspec_gitlab-0.2.1/README.md +72 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/pyproject.toml +9 -1
- runspec_gitlab-0.2.0/PKG-INFO +0 -11
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/.gitignore +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/runspec_gitlab/__init__.py +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/runspec_gitlab/cli.py +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/runspec_gitlab/runspec.toml +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/tests/__init__.py +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/tests/test_cli.py +0 -0
- {runspec_gitlab-0.2.0 → runspec_gitlab-0.2.1}/tests/test_spec.py +0 -0
|
@@ -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.
|
|
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"
|
runspec_gitlab-0.2.0/PKG-INFO
DELETED
|
@@ -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'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|