Gitlab Lint Client :: A Ruby CLI And Pre-Commit Hook For Validating GitLab CI YAML Files
The author has some repositories at GitLab.
Occasionaly .gitlab-ci.yml files containing syntax errors would be committed accidentally,
breaking the CI build.
GitLab provide a web form interface, available per project for linting. However, this started
to be cumbersome and became a candidate for automation via the GitLab API and git hooks.
Unfortunately, the free plan for gitlab.com does not feature pre-receive git server hooks which
could prevent pushes containing invalid .gitlab-ci.yml files.
Git provides, a pre-commit hook that runs for staged files on the local development environment.
While use of local git hooks are not easily enforced, it is better than the alternative in this case.
The pre-commit project faciliates deployment and installation of
client side git hooks.
🔎 What Does This Repository Offer?
The author developed a Ruby CLI and library to lint GitLab yaml files containing CI
Pipeline specifications. Linting is performed using the GitLab API.
The gem is served on rubygems.org as gitlab-lint-client and the
source code, with accompanying unit and functional tests, are held within this repository.
It can be installed by issuing the following command:
gem install gitlab-lint-client
.
Usage details are provided with the help option of the CLI, glab-lint --help
Examples are:
glab-lint --yaml=.gitlab-ci.yml --base-url=https://gitlab.com
glab-lint -f .gitlab-ci.yml -u https://gitlab.com
glab-lint --yaml=.gitlab-ci.yml --base-url=https://gitlab.com --timeout=10
glab-lint -f .gitlab-ci.yml -u https://gitlab.com -t 10
glab-lint --version
glab-lint -v
The author is using the gem within a client side pre-commit hook to automate GitLab CI linting.
🔐 Usage As A Pre-Commit Hook
This repository specifies a pre-commit hook in the .pre-commit-hooks.yml file. Developers can
configure their GitLab repositories to use this hook by creating a .pre-commit-config.yml file
in the root of their repository.
repos:
- repo: https://github.com/dcs3spp/validate-gitlab-ci
rev: v0.0.1
hooks:
- id: validate-gitlab-ci
args: [--yaml=.gitlab-ci.yml, --base-url=https://gitlab.com]
pass_filenames: false
types: [yaml]
files: .gitlab-ci.yml
stages: [commit]
Subsequently, install the pre-commit tool by issuing
the following command:
pip install pre-commit
Instruct pre-commit to download and configure the hooks defined in the .pre-commit-config.yml file:
pre-commit install
This will create a Ruby environment and automatically download and install the gem held within this
repository. The environment is setup on first time use only.
Subsequently, whenever an attempt is made to commit the GitLab CI yaml file, the pre-commit hook
will automatically send it for linting to the GitLab API. If a failed response is received from the API,
then the commit is declined.
🔧 Quick Start For Development
Perform a git clone:
git clone --depth 1 https://github.com/dcs3spp/validate-gitlab-ci.git
-
This will download the source to local machine.
-
Ruby >=2.3.6 is required with the following development dependencies:
- bundler
- pry
- rake
- rspec
- webmock
-
The gemspec file lists specific dependencies for development.
-
This gem is available publically as gitlab-lint-client
🏭 Building And Installing The Gem Locally
gem build gitlab-lint-client.gemspec
gem install gitlab-lint-client-0.0.1.gem
⛑ Running Tests Locally
bundle exec rspec
📁 Environment Variables
Name | Description |
---|
GITLAB_API_TOKEN | GitLab API Token for use with private GitLab servers (other than https://gitlab.com) that may require an authorization header |
📦 Using Rake For Performing A Release
rake build
rake install
rake spec
rake release
📋 Versioning
🔑 License
The gem is available as open source under the terms of the MIT License.