{"formatVersion":"1","kind":"dock_integration","slug":"gitlab-api","title":"GitLab API","summary":"Import a Harbor-safe GitLab starter set for project discovery, merge request listing, and approval-friendly issue creation.","description":"A Dock-hosted GitLab API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe GitLab action set for listing accessible projects, listing merge requests, and creating issues in a bounded project path. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"gitlab","name":"GitLab","websiteUrl":"https://docs.gitlab.com/api/rest/"},"category":"Developer Tools","tags":["gitlab","developer","merge-requests","issues","repositories"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Project-scoped templates use `input.path` and list filters use typed `input.query` values."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"GitLab API","description":"GitLab REST API connection managed locally through Harbor.","baseUrl":"https://gitlab.com/api/v4/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"list-projects","label":"List Projects","description":"List GitLab projects visible to the authenticated user with typed visibility, ownership, and ordering filters.","method":"GET","path":"/projects","inputs":{"parameters":[{"name":"visibility","in":"query","schema":{"type":"string","enum":["public","internal","private"]},"description":"Limit projects by visibility level."},{"name":"membership","in":"query","schema":{"type":"boolean"},"description":"Limit to projects that the current user is a member of."},{"name":"owned","in":"query","schema":{"type":"boolean"},"description":"Limit to projects explicitly owned by the current user."},{"name":"simple","in":"query","schema":{"type":"boolean"},"description":"Return a limited subset of project fields."},{"name":"order_by","in":"query","schema":{"type":"string","enum":["created_at","updated_at","last_activity_at","name","path","star_count"]},"description":"Field used to order the project list."},{"name":"sort","in":"query","schema":{"type":"string","enum":["asc","desc"]},"description":"Sort direction."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-project","label":"Get Project","description":"Fetch a single GitLab project using an explicit project ID or URL-encoded project path.","method":"GET","path":"/projects/{projectId}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-merge-requests","label":"List Merge Requests","description":"List merge requests visible to the authenticated user with typed scope, state, search, and pagination filters.","method":"GET","path":"/merge_requests","inputs":{"parameters":[{"name":"state","in":"query","schema":{"type":"string","enum":["opened","closed","merged","all"]},"description":"Merge request state filter."},{"name":"scope","in":"query","schema":{"type":"string","enum":["created_by_me","assigned_to_me","reviews_for_me","all"]},"description":"Merge request scope filter."},{"name":"author_username","in":"query","schema":{"type":"string"},"description":"Username of the merge request author."},{"name":"reviewer_username","in":"query","schema":{"type":"string"},"description":"Username of the merge request reviewer."},{"name":"search","in":"query","schema":{"type":"string","minLength":1,"maxLength":200},"description":"Search merge requests by title and description."},{"name":"order_by","in":"query","schema":{"type":"string","enum":["created_at","updated_at","title","merged_at"]},"description":"Field used to order merge request results."},{"name":"sort","in":"query","schema":{"type":"string","enum":["asc","desc"]},"description":"Sort direction."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1},"description":"Page number to fetch."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of merge requests to return."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-merge-request","label":"Get Merge Request","description":"Fetch a specific GitLab merge request using explicit project and merge request identifiers.","method":"GET","path":"/projects/{projectId}/merge_requests/{mergeRequestIid}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"mergeRequestIid","in":"path","required":true,"schema":{"type":"integer","minimum":1},"description":"Internal merge request IID for the project."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-project-issues","label":"List Project Issues","description":"List issues in a specific GitLab project using explicit project identifiers plus typed state, search, and pagination filters.","method":"GET","path":"/projects/{projectId}/issues","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"state","in":"query","schema":{"type":"string","enum":["opened","closed","all"]},"description":"Issue state filter."},{"name":"search","in":"query","schema":{"type":"string","minLength":1,"maxLength":200},"description":"Search issues by title and description."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1},"description":"Page number to fetch."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of issues to return."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-issue","label":"Get Issue","description":"Fetch a specific GitLab issue using explicit project and issue identifiers.","method":"GET","path":"/projects/{projectId}/issues/{issueIid}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"issueIid","in":"path","required":true,"schema":{"type":"integer","minimum":1},"description":"Internal issue IID for the project."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-project-branches","label":"List Project Branches","description":"List repository branches for a specific GitLab project using explicit project identifiers and typed search filters.","method":"GET","path":"/projects/{projectId}/repository/branches","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"search","in":"query","schema":{"type":"string","maxLength":200},"description":"Optional branch name search string."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-branch","label":"Get Branch","description":"Fetch a single GitLab repository branch using explicit project and branch identifiers.","method":"GET","path":"/projects/{projectId}/repository/branches/{branch}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"branch","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"URL-encoded branch name."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-project-commits","label":"List Project Commits","description":"List commits for a specific GitLab project using explicit project identifiers and typed branch and pagination filters.","method":"GET","path":"/projects/{projectId}/repository/commits","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"ref_name","in":"query","schema":{"type":"string","maxLength":200},"description":"Branch or tag name to limit commit results."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1},"description":"Page number to fetch."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of commits to return."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-commit","label":"Get Commit","description":"Fetch a specific GitLab commit using explicit project and commit identifiers.","method":"GET","path":"/projects/{projectId}/repository/commits/{sha}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"sha","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Commit SHA."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-repository-file","label":"Get Repository File","description":"Fetch a repository file from GitLab using explicit project, file path, and ref identifiers.","method":"GET","path":"/projects/{projectId}/repository/files/{filePath}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"filePath","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"URL-encoded repository file path."},{"name":"ref","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Branch, tag, or commit SHA to read from."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-issue","label":"Create Issue","description":"Create an issue in a specific GitLab project using `input.path.projectId` and a bounded JSON input.body payload.","method":"POST","path":"/projects/{projectId}/issues","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-issue","label":"Update Issue","description":"Update a GitLab issue using explicit project and issue identifiers with a bounded JSON request body.","method":"PUT","path":"/projects/{projectId}/issues/{issueIid}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"issueIid","in":"path","required":true,"schema":{"type":"integer","minimum":1},"description":"Internal issue IID for the project."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"create-merge-request","label":"Create Merge Request","description":"Create a merge request in a specific GitLab project using an explicit project identifier and a bounded JSON request body.","method":"POST","path":"/projects/{projectId}/merge_requests","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"create-or-update-repository-file","label":"Create Or Update Repository File","description":"Create or update a GitLab repository file using explicit project and file identifiers with a bounded JSON request body.","method":"PUT","path":"/projects/{projectId}/repository/files/{filePath}","inputs":{"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"GitLab project ID or URL-encoded project path."},{"name":"filePath","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"URL-encoded repository file path."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate and test the read actions before enabling create-issue. Use list-projects to discover project IDs or paths and list-merge-requests to inspect review state. Keep create-issue on approval unless your local policy explicitly allows it.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. For create-issue, pass the target project under `input.path.projectId` and the new issue fields under `input.body`."}