Ensures a Gitlab group exists
Input Schema
| Property | Type | Description | Required |
|---|---|---|---|
| path | array | A path of group names or objects (name and slug) that is ensured to exist | |
| token | string | The token to use for authorization to GitLab | |
| repoUrl | string | - |
Output Schema
| Property | Type | Description | Required |
|---|---|---|---|
| groupId | number | The id of the innermost sub-group |
Usage Examples
Ensure a parent and sub-group on a self-hosted GitLab instance
Ensures the group path platform/demo-services exists on a self-hosted GitLab. Use this when publishing projects into that namespace with token-based auth.
steps:
- id: fetch-base
action: fetch:template
input:
url: ./skeleton
targetPath: .
- id: ensure-groups
action: gitlab:group:ensureExists
input:
repoUrl: gitlab.internal.example.com?owner=platform%2Fdemo-services&repo=${{ parameters.repoName }}
token: ${{ secrets.gitlabToken }}
path:
- platform
- demo-services
- id: publish
action: publish:gitlab
input:
repoUrl: gitlab.internal.example.com?owner=platform%2Fdemo-services&repo=${{ parameters.repoName }}
description: ${{
parameters.description
}}Parameterized org and team groups on GitLab.com
Creates an organization and team group path derived from template parameters. Use this when teams are supplied as inputs during scaffolding.
steps:
- id: fetch-base
action: fetch:template
input:
url: ./skeleton
targetPath: .
- id: ensure-org-team
action: gitlab:group:ensureExists
input:
repoUrl: gitlab.com?owner=${{ parameters.orgSlug }}%2F${{ parameters.teamSlug }}&repo=${{ parameters.repoName }}
path:
- ${{ parameters.orgSlug }}
- ${{ parameters.teamSlug }}
- id: publish
action: publish:gitlab
input:
repoUrl: gitlab.com?owner=${{ parameters.orgSlug }}%2F${{ parameters.teamSlug }}&repo=${{ parameters.repoName }}
defaultBranch: mainEnsure only a top-level group before creating repos
Ensures a single top-level group exists. Use this when all projects for a domain are created directly under the top-level namespace.
steps:
- id: ensure-root-group
action: gitlab:group:ensureExists
input:
repoUrl: gitlab.com?owner=data-platform&repo=${{ parameters.repoName }}
path:
- data-platform
- id: publish
action: publish:gitlab
input:
repoUrl: gitlab.com?owner=data-platform&repo=${{ parameters.repoName }}
repoVisibility: internalEnsure a deep nested path for environment-specific namespaces
Ensures the multi-level path acme/payments/settlement/dev exists. Use this when separating projects by product and environment.
steps:
- id: fetch-base
action: fetch:template
input:
url: ./skeleton
targetPath: .
- id: ensure-env-path
action: gitlab:group:ensureExists
input:
repoUrl: gitlab.com?owner=acme%2Fpayments%2Fsettlement%2Fdev&repo=${{ parameters.repoName }}
token: ${{ secrets.gitlabToken }}
path:
- acme
- payments
- settlement
- dev
- id: publish
action: publish:gitlab
input:
repoUrl: gitlab.com?owner=acme%2Fpayments%2Fsettlement%2Fdev&repo=${{ parameters.repoName }}
contributors:
- ${{
user.entity.metadata.name
}}Target different GitLab hosts based on environment
Ensures a consistent platform/tools group path on the GitLab host chosen by a template parameter. Use this for multi-instance or multi-region setups.
steps:
- id: fetch-base
action: fetch:template
input:
url: ./skeleton
targetPath: .
- id: ensure-multi-host-group
action: gitlab:group:ensureExists
input:
repoUrl: ${{ parameters.gitlabHost }}?owner=platform%2Ftools&repo=${{ parameters.repoName }}
path:
- platform
- tools
- id: publish
action: publish:gitlab
input:
repoUrl: ${{ parameters.gitlabHost }}?owner=platform%2Ftools&repo=${{ parameters.repoName }}
protectDefaultBranch: true