pipedawg 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9167728fbd620f0098099ff53a90fb1d85336a8a771b24cc3059b8dc03144285
4
- data.tar.gz: 6f1d59f9fb1ca2de1a49d04520f6a9cd7f171f569c72a372899f9f28749ead34
3
+ metadata.gz: b54013025d872389b0b01408fb78b39c63fcfc9b0d7b06d87559ae3c88e0f538
4
+ data.tar.gz: 1d0242a83a9dc068accbe107369950d8bdc4d040e0706bd00cd9b1f40e6112de
5
5
  SHA512:
6
- metadata.gz: f53e89a60305aaa04c14443c404e3bcfa0fa24274503751c927ff6ace5f9cabbeb87f3bc2e87ca81d04a9c14aa280ca2942b381eeecbbae23db4bfd4c4c2165e
7
- data.tar.gz: a3f7acd6b467e21fee88fa2e2b22ef55e60030311355fb3074ae0f4eac0a52674c0027c0b4ebb0b21dfb1317ee5d1e3a753ece8f96c098183699c53d04a703ae
6
+ metadata.gz: b5fb6c7365461b7d70ffdcc96cf18c7fafb686433683f236748735be10916e9f21e7635e3b1b7744d9d4010c2c57497423a0bca645f519f9b2bd968dbdaf6394
7
+ data.tar.gz: 338a5bb1a1fa767fc5610ee92a534eb37e41289e39c18106c8ae3b549011e09f198fc936cf2dded73fe96c50c4dbdaf84f4d96e02b5020aaab5f84bba3b87856
data/README.md CHANGED
@@ -42,25 +42,13 @@ gem_job = Pipedawg::Job.new(
42
42
  script: ['bundle install', 'gem build *.gemspec']
43
43
  )
44
44
 
45
- docker_job = Pipedawg::Job.new(
46
- 'build:docker',
47
- image: 'docker',
48
- needs: ['build:gem'],
49
- retry: 2,
50
- script: [
51
- 'docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY',
52
- 'docker pull $CI_REGISTRY_IMAGE || true',
53
- 'docker build --pull --cache-from $CI_REGISTRY_IMAGE -t $CI_REGISTRY_IMAGE .',
54
- 'docker push $CI_REGISTRY_IMAGE'
55
- ],
56
- services: ['docker:dind']
45
+ kaniko_job = Pipedawg::KanikoJob.new(
46
+ 'build:kaniko',
47
+ {needs: ['build:gem'], retry: 2},
48
+ {context:'${CI_PROJECT_DIR}/docker',external_files: {'*.gem':'gems'}}
57
49
  )
58
50
 
59
- pipeline = Pipedawg::Pipeline.new 'build:image', jobs: [gem_job, docker_job]
60
-
61
- # Automatically calculates stages of jobs based on 'needs'
62
- pipeline.update_stages
63
-
51
+ pipeline = Pipedawg::Pipeline.new 'build:image', jobs: [gem_job, kaniko_job]
64
52
  puts pipeline.to_yaml
65
53
  ```
66
54
 
@@ -84,23 +72,21 @@ build:gem:
84
72
  - gem build *.gemspec
85
73
  stage: '1'
86
74
  tags: []
87
- build:docker:
75
+ build:kaniko:
88
76
  artifacts: {}
89
77
  cache: {}
90
- image: docker
91
78
  needs:
92
79
  - build:gem
93
80
  retry: 2
94
81
  rules: []
95
82
  script:
96
- - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
97
- - docker pull $CI_REGISTRY_IMAGE || true
98
- - docker build --pull --cache-from $CI_REGISTRY_IMAGE -t $CI_REGISTRY_IMAGE .
99
- - docker push $CI_REGISTRY_IMAGE
83
+ - echo "{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}"
84
+ > "/kaniko/.docker/config.json"
85
+ - cp "*.gem" "${CI_PROJECT_DIR}/docker/gems"
86
+ - '"/kaniko/executor" --context "${CI_PROJECT_DIR}/docker" --dockerfile "Dockerfile"
87
+ --no-push'
100
88
  stage: '2'
101
89
  tags: []
102
- services:
103
- - docker:dind
104
90
  ```
105
91
 
106
92
  ## Development
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pipedawg
4
+ # kaniko_job class
5
+ class KanikoJob < Job
6
+ attr_accessor :kaniko_opts
7
+
8
+ def initialize(name = 'build', opts = {}, kaniko_opts = {}) # rubocop:disable Metrics/MethodLength
9
+ @kaniko_opts = {
10
+ build_args: {},
11
+ config: {
12
+ '$CI_REGISTRY': {
13
+ username: '$CI_REGISTRY_USER',
14
+ password: '$CI_REGISTRY_PASSWORD'
15
+ }
16
+ },
17
+ config_file: '/kaniko/.docker/config.json',
18
+ context: '${CI_PROJECT_DIR}',
19
+ destinations: [],
20
+ dockerfile: 'Dockerfile',
21
+ executor: '/kaniko/executor',
22
+ external_files: {},
23
+ flags: [],
24
+ ignore_paths: [],
25
+ insecure_registries: [],
26
+ kaniko_image: {
27
+ entrypoint: [''],
28
+ name: 'gcr.io/kaniko-project/executor:debug'
29
+ },
30
+ options: {},
31
+ registry_certificates: {},
32
+ registry_mirrors: [],
33
+ skip_tls_verify_registry: [],
34
+ trusted_ca_cert_source_files: [],
35
+ trusted_ca_cert_target_file: '/kaniko/ssl/certs/ca-certificates.crt'
36
+ }.merge(kaniko_opts)
37
+ super name, opts
38
+ update
39
+ end
40
+
41
+ def update # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
42
+ require 'json'
43
+ opts[:image] = kaniko_opts[:image]
44
+ script = ["echo #{kaniko_opts[:config].to_json.inspect} > \"#{kaniko_opts[:config_file]}\""]
45
+ cert_copies = Array(kaniko_opts[:trusted_ca_cert_source_files]).map do |cert|
46
+ "cat \"#{cert}\" >> \"#{kaniko_opts[:trusted_ca_cert_target_file]}\""
47
+ end
48
+ script.concat cert_copies
49
+ file_copies = kaniko_opts[:external_files].map do |source, dest|
50
+ "cp \"#{source}\" \"#{kaniko_opts[:context]}/#{dest}\""
51
+ end
52
+ script.concat file_copies
53
+ flags = kaniko_opts[:flags].clone
54
+ flags << 'no-push' if kaniko_opts[:destinations].empty?
55
+ flags_cli = flags.uniq.map { |f| "--#{f}" }.join(' ')
56
+ options_cli = kaniko_opts[:options].map { |k, v| "--#{k}=\"#{v}\"" }.join(' ')
57
+ build_args_cli = kaniko_opts[:build_args].map { |k, v| "--build-arg #{k}=\"#{v}\"" }.join(' ')
58
+ ignore_paths_cli = Array(kaniko_opts[:ignore_paths]).map { |p| "--ignore-path #{p}" }.join(' ')
59
+ insecure_registries_cli = Array(kaniko_opts[:insecure_registries]).map do |r|
60
+ "--insecure-registry #{r}"
61
+ end.join(' ')
62
+ registry_certificates_cli = kaniko_opts[:registry_certificates].map do |k, v|
63
+ "----registry-certificate #{k}=\"#{v}\""
64
+ end.join(' ')
65
+ registry_mirrors_cli = Array(kaniko_opts[:registry_mirrors]).map { |r| "--registry-mirror #{r}" }.join(' ')
66
+ skip_tls_verify_registrys_cli = Array(kaniko_opts[:skip_tls_verify_registry]).map do |r|
67
+ "--skip-tls-verify-registry #{r}"
68
+ end.join(' ')
69
+ destinations_cli = kaniko_opts[:destinations].map { |d| "--destination #{d}" }.join(' ')
70
+ kaniko_cmds = [
71
+ "\"#{kaniko_opts[:executor]}\"",
72
+ '--context',
73
+ "\"#{kaniko_opts[:context]}\"",
74
+ '--dockerfile',
75
+ "\"#{kaniko_opts[:dockerfile]}\"",
76
+ flags_cli,
77
+ options_cli,
78
+ build_args_cli,
79
+ ignore_paths_cli,
80
+ insecure_registries_cli,
81
+ registry_certificates_cli,
82
+ registry_mirrors_cli,
83
+ destinations_cli,
84
+ skip_tls_verify_registrys_cli
85
+ ].reject(&:empty?)
86
+ script << kaniko_cmds.join(' ')
87
+ opts[:script] = script
88
+ end
89
+ end
90
+ end
@@ -12,6 +12,7 @@ module Pipedawg
12
12
  stages: ['build'],
13
13
  workflow: {}
14
14
  }.merge(opts)
15
+ update
15
16
  end
16
17
 
17
18
  def to_yaml
@@ -28,7 +29,7 @@ module Pipedawg
28
29
  File.write(file, to_yaml)
29
30
  end
30
31
 
31
- def update_stages
32
+ def update
32
33
  stages = []
33
34
  opts[:jobs].each do |job|
34
35
  stage = stage_from_needs(opts[:jobs], job.name)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pipedawg
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/pipedawg.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'pipedawg/job'
4
+ require 'pipedawg/kaniko_job'
4
5
  require 'pipedawg/pipeline'
5
6
  require 'pipedawg/version'
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipedawg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - harbottle
@@ -21,6 +21,7 @@ files:
21
21
  - README.md
22
22
  - lib/pipedawg.rb
23
23
  - lib/pipedawg/job.rb
24
+ - lib/pipedawg/kaniko_job.rb
24
25
  - lib/pipedawg/pipeline.rb
25
26
  - lib/pipedawg/version.rb
26
27
  homepage: https://github.com/liger1978/pipedawg