gitlab

작성자: microsoft

Python CLI로 GitLab 병합 요청 및 파이프라인 관리 - microsoft/hve-core 제공

npx skills add https://github.com/microsoft/hve-core --skill gitlab

GitLab Skill

Overview

Use this skill to inspect and update GitLab merge requests, notes, pipelines, and job logs against GitLab.com or self-managed GitLab instances.

This skill is the repository-local Python workflow for GitLab tasks. It is not the official GitLab MCP server integration surface.

This first hve-core implementation is Python-only. Run the CLI through python scripts/gitlab.py and prefer --fields for read operations to keep output concise.

Prerequisites

The skill requires Python 3.11 or later.

Set these environment variables before running any command:

VariableRequiredExamplePurpose
GITLAB_URLYeshttps://gitlab.comGitLab instance URL
GITLAB_AUTH_MODEOptionaloauthoauth or explicit legacy-token compatibility mode
GITLAB_OAUTH_CLIENT_IDOAuthApplication IDNon-confidential OAuth application ID; no client secret
GITLAB_TOKENLegacy modeglpat-...PAT accepted only with GITLAB_AUTH_MODE=legacy-token
GITLAB_PROFILENodefaultNamed OAuth profile
GITLAB_TOKEN_STORENopathOAuth store override; parent must be owner-only on POSIX
GITLAB_ALLOW_INSECURENo1Permit explicit loopback HTTP development endpoints only
XDG_DATA_HOMENopathPOSIX data root used for the default OAuth store
LOCALAPPDATANopathReserved Windows data root; OAuth persistence currently fails closed on Windows
GITLAB_PROJECTNogroup/projectProject path or numeric project ID

If GITLAB_PROJECT is not set, the script attempts to detect the project from git remote get-url origin. Set the variable explicitly when you are not in a git repository or when you want to target a different project.

Operational Variables

VariableRequiredPurpose
GITLAB_AUDIT_LOGNoPath to a JSON Lines audit log. When set, every request is audited (see Audit Logging).
GITLAB_AUDIT_ACTORNoOverrides the recorded actor identity (for example, a CI service principal).
GITLAB_DEBUGNoSet to 1 to print a redacted traceback on failure. Never disables redaction.

Audit Logging

When GITLAB_AUDIT_LOG is set, the script writes a structured JSON Lines audit trail for every REST API and OAuth form request. Auditing is fail-closed and write-ahead:

  • An attempt record is written before the request is sent. If the audit log cannot be written, the operation is aborted and nothing is sent to GitLab.
  • An outcome record (success or error, with HTTP status on failure) is written after the request completes.

REST records include a UTC timestamp, actor, auth mode, normalized origin, operation, HTTP method, and event. OAuth records use bounded operation and failure kinds without actor, origin, client, profile, code, body, or free-form error fields. Resource paths, queries, profile names, and profile contents are excluded. The optional audit sink is operationally sensitive because origins can identify tenants or internal hosts. Place it at an access-controlled path and retain it only as long as operations require. Tokens and authorization headers are never written. Audit failures after the request emit a warning without altering the result.

Credential Rotation

OAuth is the default. Register a non-confidential user-, group-, or self-managed instance-owned application with redirect URI http://127.0.0.1:8766/callback and the api scope. Set only GITLAB_URL and GITLAB_OAUTH_CLIENT_ID, then run auth login or the human-assisted auth device-login. Browser login requires a rotating refresh token; access tokens refresh before expiry and replacements are stored atomically. Device login can return an access-token-only profile and then requires another device login after expiry. A provider/local crash window can still require re-login.

The default store is $XDG_DATA_HOME/hve-core/gitlab/gitlab-token.json on POSIX, falling back to ~/.local/share/hve-core/gitlab/gitlab-token.json. POSIX store and lock files use mode 0600 inside a dedicated owner-only directory. OAuth profile persistence fails closed on Windows because Python 3.11 mode bits cannot enforce an owner-only DACL. Use explicit legacy-token mode on Windows until a protected OAuth backend is available.

PAT authentication remains available through GITLAB_AUTH_MODE=legacy-token. Device authorization requires user approval on a browser-capable device and is not unattended workload identity.

Quick Start

Export your environment variables, then run a read command with --fields.

export GITLAB_URL="https://gitlab.com"
export GITLAB_OAUTH_CLIENT_ID="your-application-id"
export GITLAB_PROJECT="group/project"

python scripts/gitlab.py auth login
python scripts/gitlab.py mr-list opened --fields iid,title,author.name

Read pipeline jobs for a known pipeline:

python scripts/gitlab.py pipeline-jobs 12345 --fields id,name,status,stage

Parameters Reference

Common Option

ParameterApplies ToExampleDescription
--fieldsmr-list, mr-get, mr-notes, pipeline-get, pipeline-jobs--fields iid,title,stateExtract specific fields with dot notation and print concise tabular or key-value output

Commands

CommandArgumentsDescription
auth loginNoneAuthenticate with Authorization Code and PKCE
auth device-loginNoneAuthenticate through human-assisted device authorization
auth statusNonePrint secret-free local profile status
auth logoutNoneDelete one local profile without revoking server authorization
mr-list[state] [max]List merge requests, defaulting to all states and 20 results
mr-get<mr-iid>Get one merge request by project-scoped IID
mr-create<json> or stdinCreate a merge request from a JSON payload
mr-update<mr-iid> <json> or stdinUpdate merge request fields from a JSON payload
mr-comment<mr-iid> <body> or stdinAdd a comment to a merge request
mr-notes<mr-iid> [max]List merge request notes, excluding system notes when using --fields
pipeline-get<pipeline-id>Get one pipeline by numeric ID
pipeline-run<branch-or-tag>Trigger a pipeline for a branch or tag
pipeline-jobs<pipeline-id>List jobs for a pipeline
job-log<job-id>Print raw log output for a job

Script Reference

List recent open merge requests:

python scripts/gitlab.py mr-list opened --fields iid,title,author.name,user_notes_count

Get one merge request:

python scripts/gitlab.py mr-get 42 --fields iid,title,state,source_branch,target_branch

Create a merge request from inline JSON:

python scripts/gitlab.py mr-create '{
  "source_branch": "feature/add-auth",
  "target_branch": "main",
  "title": "feat(auth): add OAuth login"
}'

Add a merge request comment from standard input:

echo "CI passed. Ready for review." | python scripts/gitlab.py mr-comment 42

Inspect a failed pipeline:

python scripts/gitlab.py pipeline-get 12345 --fields id,status,web_url
python scripts/gitlab.py pipeline-jobs 12345 --fields id,name,status,stage
python scripts/gitlab.py job-log 67890

Troubleshooting

SymptomCauseResolution
GITLAB_URL is not setRequired environment variable missingExport GITLAB_URL before running the script
GITLAB_TOKEN is not set for legacy-token modeExplicit legacy mode has no PATExport a PAT only with GITLAB_AUTH_MODE=legacy-token
GITLAB_TOKEN must not be set in oauth modeLegacy PAT leaked into the OAuth configurationRemove GITLAB_TOKEN or explicitly select legacy-token mode
OAuth persistence is unavailable on WindowsNo protected Windows profile-store backendUse explicit legacy-token mode or run OAuth from POSIX
GITLAB_OAUTH_CLIENT_ID is not setOAuth application is not configuredSet the public client ID, then run auth login
Callback listener cannot bindPort 8766 is unavailable or not forwardedFree the port or use auth device-login
timed out waiting for the GitLab OAuth token store lockAnother process holds the profile-store lockWait for the other command to finish, then retry
GitLab device response has invalid verification_uriThe verification URI is unsafe to display or does not match GITLAB_URLConfirm GITLAB_URL matches the instance that serves device verification
cannot parse git remote URLProject autodetection failedSet GITLAB_PROJECT explicitly
HTTP 401 or HTTP 403Credential is invalid or lacks accessRe-login for OAuth; rotate the PAT in explicit legacy mode
HTTP 404Wrong project, MR IID, pipeline ID, or job IDVerify GITLAB_PROJECT and confirm the numeric identifiers
expected numeric IDNon-numeric value passed to an ID argumentUse project MR IID values and numeric pipeline or job IDs
python3 is required or syntax errors on launchUnsupported interpreterRun the script with Python 3.11 or later

GitLab uses MR IIDs such as !42 inside a project. This skill expects the numeric IID, not the global merge request ID.

microsoft의 다른 스킬

oss-growth
microsoft
OSS 성장 해커 페르소나
agent-framework-azure-ai-py
microsoft
Microsoft Agent Framework Python SDK(agent-framework-azure-ai)를 사용하여 Azure AI Foundry 에이전트를 구축합니다. AzureAIAgentsProvider로 지속적 에이전트를 만들 때, 호스팅 도구(코드 인터프리터, 파일 검색, 웹 검색)를 사용할 때, MCP 서버를 통합할 때, 대화 스레드를 관리할 때, 또는 스트리밍 응답을 구현할 때 사용합니다. 함수 도구, 구조화된 출력, 다중 도구 에이전트를 다룹니다.
development
airunway-aks-setup
microsoft
AKS에서 AI Runway 설정 — 빈 클러스터에서 실행 중인 모델까지. 클러스터 검증, 컨트롤러 설치, GPU 평가, 공급자 설정, 첫 배포를 다룹니다. 시기: "AI Runway 설정", "AKS 클러스터 온보딩", "AI Runway 설치", "airunway 설정", "AKS에 모델 배포", "AKS에서 GPU 추론", "AKS에서 KAITO 설정", "AKS에서 LLM 실행", "AKS에서 vLLM", "AKS에서 모델 서빙 설정", "AI Runway 컨트롤러".
devops
appinsights-instrumentation
microsoft
Azure Application Insights로 웹앱을 계측하기 위한 지침입니다. 원격 분석 패턴, SDK 설정, 구성 참조를 제공합니다. WHEN: 앱 계측 방법, App Insights SDK, 원격 분석 패턴, App Insights란 무엇인가, Application Insights 지침, 계측 예시, APM 모범 사례.
devops
applicationinsights-web-ts
microsoft
브라우저/웹 앱을 Application Insights JavaScript SDK(@microsoft/applicationinsights-web)로 계측합니다. Real User Monitoring(RUM) — 페이지 뷰, 클릭, AJAX/fetch 종속성, 예외, 사용자 지정 이벤트, 백엔드 OpenTelemetry 트레이스와 상관관계가 있는 브라우저 측 GenAI 에이전트 트레이스에 사용합니다. SDK Loader Script 및 npm 설정, 프레임워크 확장(React, React Native, Angular), Click Analytics, 텔레메트리 이니셜라이저, 브라우저에서 생성된 에이전트/도구/모델 스팬에 대한 OTel GenAI 의미론적 규칙을 다룹니다.
devops
azure-ai-anomalydetector-java
microsoft
Azure AI Anomaly Detector SDK for Java로 이상 탐지 애플리케이션을 구축하세요. 단변량/다변량 이상 탐지, 시계열 분석 또는 AI 기반 모니터링을 구현할 때 사용하세요.
development
azure-ai-language-conversations-py
microsoft
azure-ai-language-conversations Python SDK를 사용하여 대화형 언어 이해(CLU)를 구현합니다. ConversationAnalysisClient로 대화 의도와 엔터티를 분석하거나, NLP 기능을 구축하거나, 애플리케이션에 언어 이해를 통합할 때 사용합니다.
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 for Python. ML 작업 영역, 작업, 모델, 데이터 세트, 컴퓨팅 및 파이프라인에 사용합니다. 트리거: "azure-ai-ml", "MLClient", "workspace", "model registry", "training jobs", "datasets".
development