gitlab-lint-client 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 45ab9cc8b2f31dad25d707bf6e3f71f70ed239d711f7eb130830a33803030e59
4
+ data.tar.gz: cbfe0c7d6555635835a991f254d46faba558f782ffe64af82af3f7c23b1039f0
5
+ SHA512:
6
+ metadata.gz: c51ad05e4a44138f44e345130b004c2f227d52db91f5d0f2e0bbb76485d4a3ccaff05ed55555cb45c35f0e4c9b4bbe0633c78e5a39d9fcb20db7bdab62c3f94d
7
+ data.tar.gz: 6dd59d0029349c0761df3434405446324a33ba19bd44fa1a9a1eaf877a98ec9ee70f936a15dc779827d8e37ad6a9d3bfeed50e11239614c920d5b633d174a26a
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /vendor/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+ *.gem
14
+
15
+ *.DS_Store
@@ -0,0 +1,7 @@
1
+ - id: validate-gitlab-ci
2
+ name: Validate GitLab CI
3
+ description: This hook validates the Gitlab CI yaml file
4
+ entry: glab-lint
5
+ language: ruby
6
+ language_version: 2.6.3
7
+ verbose: true
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.3.6
6
+ before_install: gem install bundler -v 2.1.4
@@ -0,0 +1,21 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.0.1-alpha - Core Project - [08-07-2020]
4
+
5
+ ### Added
6
+ * Create a CLI to get values from bash.
7
+ * Create client request to post JSON escaped yaml content to Gitlab API for linting.
8
+ * Evaluate response and display summary.
9
+ * Pre-commit hook for linting Gitlab yml file staged for changes.
10
+
11
+ ## 0.0.1 - Refactored Project Structure - [13-07-2020]
12
+
13
+ ### Added
14
+ * Entrypoint:
15
+ * Gitlab::Lint::Client.entry
16
+ * Class:
17
+ * Gitlab::Lint::Client::Api
18
+ * Gitlab::Lint::Client::Args
19
+ * Gitlab::Lint::Client::SummaryReport.
20
+ * GitLab::CI::Lint::YamlFile.
21
+ * Added unit and integration tests
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gitlab-lint-client (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ addressable (2.7.0)
10
+ public_suffix (>= 2.0.2, < 5.0)
11
+ coderay (1.1.3)
12
+ crack (0.4.3)
13
+ safe_yaml (~> 1.0.0)
14
+ diff-lcs (1.4.4)
15
+ hashdiff (1.0.1)
16
+ method_source (1.0.0)
17
+ pry (0.13.1)
18
+ coderay (~> 1.1)
19
+ method_source (~> 1.0)
20
+ public_suffix (4.0.5)
21
+ rake (12.3.3)
22
+ rspec (3.9.0)
23
+ rspec-core (~> 3.9.0)
24
+ rspec-expectations (~> 3.9.0)
25
+ rspec-mocks (~> 3.9.0)
26
+ rspec-core (3.9.2)
27
+ rspec-support (~> 3.9.3)
28
+ rspec-expectations (3.9.2)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-mocks (3.9.1)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.9.0)
34
+ rspec-support (3.9.3)
35
+ safe_yaml (1.0.5)
36
+ webmock (3.8.3)
37
+ addressable (>= 2.3.6)
38
+ crack (>= 0.3.2)
39
+ hashdiff (>= 0.4.0, < 2.0.0)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ bundler (~> 2.1.4)
46
+ gitlab-lint-client!
47
+ pry (~> 0.13.1)
48
+ rake (~> 12.0)
49
+ rspec (~> 3.9)
50
+ webmock (~> 3.8.3)
51
+
52
+ BUNDLED WITH
53
+ 2.1.4
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 spears
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,151 @@
1
+ # Gitlab Lint Client :: A Ruby CLI And Pre-Commit Hook For Validating GitLab CI YAML Files
2
+
3
+ The author has some [repositories](https://gitlab.com/groups/sppears_grp/-/shared) at GitLab.
4
+ Occasionaly *.gitlab-ci.yml* files containing syntax errors would be committed accidentally,
5
+ breaking the CI build.
6
+
7
+ GitLab provide a web form interface, available per project for linting. However, this started
8
+ to be cumbersome and became a candidate for automation via the GitLab API and git hooks.
9
+ Unfortunately, the free plan for gitlab.com does not feature *pre-receive* git server hooks which
10
+ could prevent pushes containing invalid *.gitlab-ci.yml* files.
11
+
12
+ Git provides, a *pre-commit* hook that runs for staged files on the local development environment.
13
+ While use of local git hooks are not easily enforced, it is better than the alternative in this case.
14
+ The [pre-commit](https://pre-commit.com/) project faciliates deployment and installation of
15
+ client side git hooks.
16
+
17
+
18
+ ## 🔎 What Does This Repository Offer?
19
+
20
+ The author developed a Ruby CLI and library to lint GitLab yaml files containing CI
21
+ Pipeline specifications. Linting is performed using the GitLab API.
22
+
23
+ The gem is served on [rubygems.org](https://rubygems.org) as *gitlab-lint-client* and the
24
+ source code, with accompanying unit and functional tests, are held within this repository.
25
+ It can be installed by issuing the following command:
26
+ ```gem install gitlab-lint-client```.
27
+
28
+ Usage details are provided with the *help* option of the CLI, <kbd>glab-lint --help</kbd>
29
+ Examples are:
30
+
31
+ ``` bash
32
+ # mandatory options
33
+ glab-lint --yaml=.gitlab-ci.yml --base-url=https://gitlab.com
34
+ glab-lint -f .gitlab-ci.yml -u https://gitlab.com
35
+
36
+ # configure timeout in seconds, for API request
37
+ glab-lint --yaml=.gitlab-ci.yml --base-url=https://gitlab.com --timeout=10
38
+ glab-lint -f .gitlab-ci.yml -u https://gitlab.com -t 10
39
+
40
+ # display program version number and exit
41
+ glab-lint --version
42
+ glab-lint -v
43
+ ```
44
+
45
+ The author is using the gem within a client side pre-commit hook to automate GitLab CI linting.
46
+
47
+
48
+ ## 🔐 Usage As A Pre-Commit Hook
49
+
50
+ This repository specifies a pre-commit hook in the *.pre-commit-hooks.yml* file. Developers can
51
+ configure their GitLab repositories to use this hook by creating a *.pre-commit-config.yml* file
52
+ in the root of their repository.
53
+
54
+ ``` yaml
55
+ repos:
56
+ - repo: https://github.com/dcs3spp/validate-gitlab-ci
57
+ rev: v0.0.1
58
+ hooks:
59
+ - id: validate-gitlab-ci
60
+ args: [--yaml=.gitlab-ci.yml, --base-url=https://gitlab.com]
61
+ pass_filenames: false
62
+ types: [yaml]
63
+ files: .gitlab-ci.yml
64
+ stages: [commit]
65
+ ```
66
+
67
+ Subsequently, [install](https://pre-commit.com/#installation) the pre-commit tool by issuing
68
+ the following command:
69
+
70
+ ``` bash
71
+ pip install pre-commit
72
+ ```
73
+
74
+ Instruct pre-commit to download and configure the hooks defined in the *.pre-commit-config.yml* file:
75
+
76
+ ``` bash
77
+ pre-commit install
78
+ ```
79
+
80
+ This will create a Ruby environment and automatically download and install the gem held within this
81
+ repository. The environment is setup on first time use only.
82
+
83
+ Subsequently, whenever an attempt is made to commit the GitLab CI yaml file, the pre-commit hook
84
+ will automatically send it for linting to the GitLab API. If a failed response is received from the API,
85
+ then the commit is declined.
86
+
87
+
88
+ ## 🔧 Quick Start For Development
89
+
90
+ Perform a *git clone*:
91
+ ``` bash
92
+ git clone --depth 1 https://github.com/dcs3spp/validate-gitlab-ci.git
93
+ ```
94
+
95
+ * This will download the source to local machine.
96
+ * Ruby >=2.3.6 is required with the following development dependencies:
97
+ * bundler
98
+ * pry
99
+ * rake
100
+ * rspec
101
+ * webmock
102
+
103
+ * The gemspec file lists specific dependencies for development.
104
+ * This gem is available publically as *gitlab-lint-client*
105
+
106
+
107
+ ## 🏭 Building And Installing The Gem Locally
108
+
109
+ ``` bash
110
+ gem build gitlab-lint-client.gemspec
111
+ gem install gitlab-lint-client-0.0.1.gem
112
+ ```
113
+
114
+ ## ⛑ Running Tests Locally
115
+
116
+ ``` bash
117
+ bundle exec rspec
118
+ ```
119
+
120
+ ## 📁 Environment Variables
121
+
122
+ **Name** | **Description**
123
+ :---: | :---:
124
+ **GITLAB_API_TOKEN** | GitLab API Token for use with private GitLab servers (other than https://gitlab.com) that may require an authorization header
125
+
126
+
127
+ ## 📦 Using Rake For Performing A Release
128
+
129
+ ``` bash
130
+ # build the gem
131
+ rake build
132
+
133
+ # install the gem
134
+ rake install
135
+
136
+ # run the tests
137
+ rake spec
138
+
139
+ # release the gem
140
+ rake release
141
+ ```
142
+
143
+
144
+ ## 📋 Versioning
145
+
146
+ - [CHANGELOG](CHANGELOG.md)
147
+
148
+
149
+ ## 🔑 License
150
+
151
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "gitlab/lint/client"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gitlab/lint/client'
4
+
5
+ Gitlab::Lint::Client.entry(ARGV)
@@ -0,0 +1,36 @@
1
+ require_relative 'lib/gitlab/lint/client/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "gitlab-lint-client"
5
+ spec.version = Gitlab::Lint::Client::VERSION
6
+ spec.authors = ["spears"]
7
+
8
+ spec.description = %q{A CLI and library to validate GitLab CI pipeline yaml files via the GitLab API}
9
+ spec.summary = %q{Use as a standalone CLI, from within a git pre-commit hook. The repository provides a pre-commit.com hook with identifier 'validate-gitlab-ci'}
10
+ spec.homepage = "https://github.com/dcs3spp/validate-gitlab-ci"
11
+ spec.license = "MIT"
12
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.6.3")
13
+
14
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
15
+
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = "https://github.com/dcs3spp/validate-gitlab-ci"
18
+ spec.metadata["changelog_uri"] = "https://github.com/dcs3spp/validate-gitlab-ci/blob/master/CHANGELOG.md"
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ end
25
+
26
+ spec.bindir = "exe"
27
+ spec.executables << 'glab-lint'
28
+ spec.extra_rdoc_files = ["README.md"]
29
+ spec.require_paths = ["lib"]
30
+
31
+ spec.add_development_dependency "bundler", "~> 2.1.4"
32
+ spec.add_development_dependency "pry", "~> 0.13.1"
33
+ spec.add_development_dependency "rake", "~> 12.0"
34
+ spec.add_development_dependency "rspec", "~> 3.9"
35
+ spec.add_development_dependency "webmock", "~> 3.8.3"
36
+ end
@@ -0,0 +1,37 @@
1
+ require "gitlab/lint/client/api"
2
+ require "gitlab/lint/client/args"
3
+ require "gitlab/lint/client/version"
4
+ require "gitlab/lint/client/summaryreport"
5
+
6
+ module Gitlab
7
+ module Lint
8
+ module Client
9
+ def self.entry(cliArgs)
10
+
11
+ args = Gitlab::Lint::Client::Args.new
12
+ args.get(cliArgs)
13
+
14
+ api = Gitlab::Lint::Client::Api.new
15
+
16
+ headers = ENV.has_key?('GITLAB_API_TOKEN') ? {
17
+ "Accept" => "application/json",
18
+ "Content-Type" => "application/json",
19
+ "Private-Token" => ENV['GITLAB_API_TOKEN']
20
+ } : {
21
+ "Accept" => "application/json",
22
+ "Content-Type" => "application/json"
23
+ }
24
+
25
+ puts "The arguments have been initialised as follows::"
26
+ puts "Base url => #{args.baseUrl}"
27
+ puts "Yaml file => #{args.pathToYamlFile}"
28
+
29
+ response = api.lint(args.url, args.pathToYamlFile, headers, args.timeout)
30
+
31
+ puts "reponse from server is :: #{response}"
32
+ report = Gitlab::Lint::Client::SummaryReport.new(response['status'], response['errors'])
33
+ report.summary()
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ require "gitlab/lint/client/yml"
2
+
3
+ require 'json'
4
+ require 'net/http'
5
+
6
+ module Gitlab
7
+ module Lint
8
+ module Client
9
+
10
+ class Api
11
+
12
+ def lint (url, path, headers={ "Content-Type" => "application/json" }, timeout=10)
13
+ puts "Making lint request to GitLab with path => #{path} and url => #{url}"
14
+ if yamlContent = Gitlab::Lint::Client::YamlFile.new(path).get_json_content()
15
+
16
+ uri = URI.parse(url)
17
+
18
+ req = Net::HTTP::Post.new(uri, headers)
19
+ req.body = { content: yamlContent }.to_json
20
+
21
+ https = Net::HTTP.new(uri.host, uri.port)
22
+ https.open_timeout = timeout
23
+ https.read_timeout = timeout
24
+ https.use_ssl = true
25
+ https.verify_mode = OpenSSL::SSL::VERIFY_PEER
26
+
27
+ response = https.request(req)
28
+
29
+ case response
30
+ when Net::HTTPSuccess
31
+ return JSON.parse(response.body)
32
+ when Net::HTTPUnauthorized
33
+ abort("#{response.message}: invalid token in api request?")
34
+ when Net::HTTPServerError
35
+ abort("#{response.message}: server error, try again later?")
36
+ when Net::HTTPBadRequest
37
+ puts "Bad request..." + req.body
38
+ abort("#{response.message}: bad api request?")
39
+ when Net::HTTPNotFound
40
+ abort("#{response.message}: api request not found?")
41
+ else
42
+ abort("#{response.message}: failed api request?")
43
+ end
44
+ else
45
+ abort("\nLint request failed, problem encountered reading yaml file")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
@@ -0,0 +1,85 @@
1
+ require 'optparse'
2
+ require 'uri'
3
+
4
+ require 'gitlab/lint/client/version'
5
+
6
+ module Gitlab
7
+ module Lint
8
+ module Client
9
+
10
+ class Args
11
+ API_PATH="/api/v4/ci/lint"
12
+
13
+ attr_reader :baseUrl
14
+ attr_reader :pathToYamlFile
15
+ attr_reader :timeout
16
+ attr_reader :url
17
+
18
+ def initialize()
19
+ @version = Gitlab::Lint::Client::VERSION
20
+ end
21
+
22
+ def get(args)
23
+ options = {}
24
+ optparse = OptionParser.new do|opt|
25
+ opt.banner = 'Usage: validate-gitlab-ci [options]'
26
+
27
+ opt.on('-f', '--yaml=YAML-PATH', 'Path to .gitlab-ci.yml') { |o| options[:yamlFile] = o }
28
+ opt.on('-u', '--base-url=BASE_URL', 'GitLab API url') { |o| options[:baseUrl] = o }
29
+
30
+ options[:timeout] = 10
31
+ opt.on('-t', '--timeout[=TIMEOUT]', Integer, 'Api timeout in seconds') { |o| options[:timeout] = o }
32
+
33
+ opt.on('-v', '--version', 'Program version') { |o| options[:version] = version() }
34
+ end
35
+
36
+ begin
37
+ optparse.parse!(args)
38
+
39
+ if options[:version].nil?
40
+ mandatory = [:yamlFile, :baseUrl]
41
+ missing = mandatory.select{ |param| options[param].nil? }
42
+ if not missing.empty?
43
+ STDERR.puts "Required options #{missing[0]} are missing: #{missing.join(", ")}"
44
+ puts optparse.help
45
+ abort("Exiting due to error encountered while parsing arguments")
46
+ end
47
+ end
48
+
49
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument => error
50
+ STDERR.puts error
51
+ puts optparse
52
+ abort("Exiting due to error encountered while parsing arguments...")
53
+ end
54
+
55
+ self.validateUrl!(options[:baseUrl])
56
+ self.validateYamlFile!(options[:yamlFile])
57
+
58
+ @baseUrl = options[:baseUrl]
59
+ @url = options[:baseUrl] + API_PATH
60
+ @pathToYamlFile = options[:yamlFile]
61
+ @timeout = options[:timeout]
62
+ end
63
+
64
+ def validateUrl!(url)
65
+ uri = URI.parse(url)
66
+ valid = uri.is_a?(URI::HTTPS) && !uri.host.nil?
67
+
68
+ raise URI::InvalidURIError unless valid
69
+ end
70
+
71
+ def validateYamlFile!(path)
72
+ raise ArgumentError unless path.chars.last(4).join == ".yml" or path.chars.last(5).join == ".yaml"
73
+ raise IOError unless ::File.exist?(path)
74
+ raise RuntimeError unless ::File.readable?(path)
75
+ end
76
+
77
+ def version()
78
+ string = "GitLab Lint Client Version: #{@version}"
79
+ puts string
80
+ exit 0
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,40 @@
1
+
2
+
3
+ module Gitlab
4
+ module Lint
5
+ module Client
6
+
7
+ class SummaryReport
8
+
9
+ def initialize(status, errors)
10
+ @status = status
11
+ @errors = errors
12
+ end
13
+
14
+ def summary()
15
+ case @status
16
+ when "valid"
17
+ success()
18
+ when "invalid"
19
+ failure()
20
+ else
21
+ abort("A problem was encountered parsing status : " + @status)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def failure()
28
+ abort("Gitlab yaml file is invalid with errors:\n\n" + @errors.join("\n"))
29
+ end
30
+
31
+ def success()
32
+ puts "GitLab yaml file passed linting"
33
+ exit(0)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+
@@ -0,0 +1,7 @@
1
+ module Gitlab
2
+ module Lint
3
+ module Client
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,50 @@
1
+ require "yaml"
2
+ require "json"
3
+
4
+ module Gitlab
5
+ module Lint
6
+ module Client
7
+
8
+ class YamlFile
9
+ attr_reader :file
10
+
11
+ def initialize(file)
12
+ @file = file
13
+ validate!
14
+ end
15
+
16
+ def validate!
17
+ raise NameError unless @file
18
+ raise ArgumentError unless @file.chars.last(4).join == ".yml" or @file.chars.last(5).join == ".yaml"
19
+ raise IOError unless ::File.exist?(@file)
20
+ raise RuntimeError unless ::File.readable?(@file)
21
+ end
22
+
23
+ def get_content
24
+ begin
25
+ return YAML.load_file(@file)
26
+ rescue Psych::SyntaxError => error
27
+ puts "Failed to parse the YAML File: #{error.message}"
28
+ end
29
+ end
30
+
31
+ def get_json_content
32
+ content = JSON.generate(get_content())
33
+ return json_ok?(content) ? content : nil
34
+ end
35
+
36
+ private
37
+
38
+ def json_ok? json
39
+ begin
40
+ JSON.parse(json)
41
+ return true
42
+ rescue
43
+ return false
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitlab-lint-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - spears
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-07-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.4
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.13.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.13.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.8.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.8.3
83
+ description: A CLI and library to validate GitLab CI pipeline yaml files via the GitLab
84
+ API
85
+ email:
86
+ executables:
87
+ - glab-lint
88
+ extensions: []
89
+ extra_rdoc_files:
90
+ - README.md
91
+ files:
92
+ - ".gitignore"
93
+ - ".pre-commit-hooks.yaml"
94
+ - ".rspec"
95
+ - ".travis.yml"
96
+ - CHANGELOG.md
97
+ - Gemfile
98
+ - Gemfile.lock
99
+ - LICENSE.txt
100
+ - README.md
101
+ - Rakefile
102
+ - bin/console
103
+ - bin/setup
104
+ - exe/glab-lint
105
+ - gitlab-lint-client.gemspec
106
+ - lib/gitlab/lint/client.rb
107
+ - lib/gitlab/lint/client/api.rb
108
+ - lib/gitlab/lint/client/args.rb
109
+ - lib/gitlab/lint/client/summaryreport.rb
110
+ - lib/gitlab/lint/client/version.rb
111
+ - lib/gitlab/lint/client/yml.rb
112
+ homepage: https://github.com/dcs3spp/validate-gitlab-ci
113
+ licenses:
114
+ - MIT
115
+ metadata:
116
+ allowed_push_host: https://rubygems.org
117
+ homepage_uri: https://github.com/dcs3spp/validate-gitlab-ci
118
+ source_code_uri: https://github.com/dcs3spp/validate-gitlab-ci
119
+ changelog_uri: https://github.com/dcs3spp/validate-gitlab-ci/blob/master/CHANGELOG.md
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: 2.6.3
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubygems_version: 3.0.8
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Use as a standalone CLI, from within a git pre-commit hook. The repository
139
+ provides a pre-commit.com hook with identifier 'validate-gitlab-ci'
140
+ test_files: []