retag 0.1.1 → 0.1.2

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: 91558c109a6f2bf1cc988a0bf375404ca035c229d0abd031fd52cbe084cc1d23
4
- data.tar.gz: be5c10c2e9d85588f412b81c92fb22dfcac5117360e47c9bd20eb02d8219f992
3
+ metadata.gz: 0cbe24b954c5ae0cc55386882c55d0d056239c20df8780ed732346e6fc577656
4
+ data.tar.gz: e71492bf16f2deb5ca71ca252a8324511c9469c20a5502cd00a703968c0782ae
5
5
  SHA512:
6
- metadata.gz: 3093e65db866569cc3a28ffc09ce9b97241d6fb7c3e4793ff880e24a521b83bc4861ee172a27ef8d7e99d71c639da30fbbff7614574712bc5804525f48d5bd68
7
- data.tar.gz: 7381e35cc1934e8a78e9a4514a8f6dd3863e3744c5f516c083ccd88255dbe2b25b4eba111f69430fc1b91d8d80e98923d19c3cb298379404f7f268555efd3419
6
+ metadata.gz: bfb8cc1fa4fed581f33e96c53a0258ed9b9532d163a532a554d492e988202411eb70f23a8542f5b68acd7b79f1440d2f9429b0b454ed2f1d1a6873a2427caf1c
7
+ data.tar.gz: 7e764cecb0bfd5015a7c7b0f91b2cefbc72008421ede60e40c21d72ca8bb3806812120f7e35faa57c3c41c7da673ed2d7b9a483737e7bb46288dcdbbc1255bcc
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in retag.gemspec
6
+ gemspec
7
+
8
+ # gem "rake", "~> 13.0"
9
+
10
+ # gem "rspec", "~> 3.0"
11
+
12
+ # gem "rubocop", "~> 1.21"
13
+
data/Gemfile.lock ADDED
@@ -0,0 +1,110 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ retag (0.1.2)
5
+ activesupport (~> 6.0)
6
+ colorize
7
+ json
8
+ thor
9
+ uri
10
+ yaml
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ activesupport (6.1.4.4)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 1.6, < 2)
18
+ minitest (>= 5.1)
19
+ tzinfo (~> 2.0)
20
+ zeitwerk (~> 2.3)
21
+ addressable (2.8.0)
22
+ public_suffix (>= 2.0.2, < 5.0)
23
+ ansi (1.5.0)
24
+ ast (2.4.2)
25
+ colorize (0.8.1)
26
+ concurrent-ruby (1.1.9)
27
+ crack (0.4.5)
28
+ rexml
29
+ diff-lcs (1.5.0)
30
+ docile (1.4.0)
31
+ hashdiff (1.0.1)
32
+ i18n (1.8.11)
33
+ concurrent-ruby (~> 1.0)
34
+ json (2.6.1)
35
+ minitest (5.15.0)
36
+ parallel (1.21.0)
37
+ parser (3.1.0.0)
38
+ ast (~> 2.4.1)
39
+ public_suffix (4.0.6)
40
+ rainbow (3.1.1)
41
+ rake (13.0.6)
42
+ regexp_parser (2.2.0)
43
+ rexml (3.2.5)
44
+ rspec (3.10.0)
45
+ rspec-core (~> 3.10.0)
46
+ rspec-expectations (~> 3.10.0)
47
+ rspec-mocks (~> 3.10.0)
48
+ rspec-core (3.10.1)
49
+ rspec-support (~> 3.10.0)
50
+ rspec-expectations (3.10.2)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.10.0)
53
+ rspec-mocks (3.10.2)
54
+ diff-lcs (>= 1.2.0, < 2.0)
55
+ rspec-support (~> 3.10.0)
56
+ rspec-support (3.10.3)
57
+ rspec_junit_formatter (0.5.1)
58
+ rspec-core (>= 2, < 4, != 2.12.0)
59
+ rubocop (1.25.0)
60
+ parallel (~> 1.10)
61
+ parser (>= 3.1.0.0)
62
+ rainbow (>= 2.2.2, < 4.0)
63
+ regexp_parser (>= 1.8, < 3.0)
64
+ rexml
65
+ rubocop-ast (>= 1.15.1, < 2.0)
66
+ ruby-progressbar (~> 1.7)
67
+ unicode-display_width (>= 1.4.0, < 3.0)
68
+ rubocop-ast (1.15.1)
69
+ parser (>= 3.0.1.1)
70
+ ruby-progressbar (1.11.0)
71
+ simplecov (0.21.2)
72
+ docile (~> 1.1)
73
+ simplecov-html (~> 0.11)
74
+ simplecov_json_formatter (~> 0.1)
75
+ simplecov-console (0.9.1)
76
+ ansi
77
+ simplecov
78
+ terminal-table
79
+ simplecov-html (0.12.3)
80
+ simplecov_json_formatter (0.1.3)
81
+ terminal-table (3.0.2)
82
+ unicode-display_width (>= 1.1.1, < 3)
83
+ thor (1.2.1)
84
+ tzinfo (2.0.4)
85
+ concurrent-ruby (~> 1.0)
86
+ unicode-display_width (2.1.0)
87
+ uri (0.11.0)
88
+ webmock (3.14.0)
89
+ addressable (>= 2.8.0)
90
+ crack (>= 0.3.2)
91
+ hashdiff (>= 0.4.0, < 2.0.0)
92
+ yaml (0.2.0)
93
+ zeitwerk (2.5.3)
94
+
95
+ PLATFORMS
96
+ x86_64-linux
97
+
98
+ DEPENDENCIES
99
+ bundler (~> 2.2, >= 2.2.1)
100
+ rake
101
+ retag!
102
+ rspec
103
+ rspec_junit_formatter
104
+ rubocop
105
+ simplecov
106
+ simplecov-console
107
+ webmock
108
+
109
+ BUNDLED WITH
110
+ 2.2.33
data/bin/console ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'retag'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
16
+
data/bin/retag ADDED
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'yaml'
4
+ require 'thor'
5
+ require 'colorize'
6
+ require 'retag'
7
+
8
+ UTIL = File.basename(__FILE__)
9
+ ENV_PREFIX = 'RETAG'
10
+
11
+ $logger = ActiveSupport::TaggedLogging.new(Retag::Logger.new(STDOUT))
12
+ $logger.level = :debug
13
+
14
+ # config = YAML.load_file('release.yml')
15
+ # release = config['release']
16
+ # services = config['services'].map{|(name, cfg)| Service.new(name, cfg, release)}
17
+
18
+ # services.each do |srv|
19
+ # $logger.tagged(srv.name, srv.revision) do
20
+ # $logger.info "==> Releasing service #{srv.name} from #{srv.repo} at #{srv.branch}:"
21
+ # $logger.shift do
22
+ # #$logger.info "* Pulling service..."
23
+ # #srv.pull
24
+ # $logger.info "* Tagging service..."
25
+ # srv.release!
26
+ # #$logger.info "* Pushing service..."
27
+ # #srv.push
28
+ # #$logger.info "* Cleaning service..."
29
+ # #srv.rm
30
+ # end
31
+ # end
32
+ # end
33
+
34
+ # $logger.info "==> #{services.count} relesed as #{release}"
35
+
36
+ class Cli < Thor
37
+
38
+ def self.exit_on_failure?
39
+ true
40
+ end
41
+
42
+ # class_option :plugin_gemname, default: ENV.fetch('PLUGIN_GEMNAME', 'unknown'),
43
+ # desc: 'Name of the current gem'
44
+ # class_option :service_image, default: ENV.fetch('SERVICE_IMAGE', 'tmpimage'),
45
+ # desc: 'Docker image name to build. Taken from SERVICE_IMAGE enviroment variable'
46
+ # class_option :service_tag, default: ENV.fetch('SERVICE_TAG', 'latest'),
47
+ # desc: 'Docker image tag to build. Taken from SERVICE_TAG enviroment variable'
48
+
49
+ desc 'version', 'Display version'
50
+ map %w[-v --version] => :version
51
+
52
+ def version
53
+ say Retag::VERSION
54
+ end
55
+
56
+ desc 'tag', 'Tag Docker image without downloading'
57
+ map %w[--tag] => :tag
58
+
59
+ option :image, default: ENV.fetch("#{ENV_PREFIX}_TAG_IMAGE", nil),
60
+ required: true,
61
+ desc: "Env: #{ENV_PREFIX}_TAG_IMAGE. Full image to be tagged. Ex: docker.rnds.pro/aggredator/service-uprid3:latest"
62
+
63
+ option :tag, default: ENV.fetch("#{ENV_PREFIX}_TAG_TAG", nil),
64
+ required: true,
65
+ desc: "Env: #{ENV_PREFIX}_TAG_TAG. New tag."
66
+
67
+ option :suffix, default: ENV.fetch("#{ENV_PREFIX}_TAG_SUFFIX", nil),
68
+ required: false,
69
+ desc: "Env: #{ENV_PREFIX}_TAG_SUFFIX. Optional suffix added to image tag: <image>:<tag>[-<suffix>].
70
+ Example:
71
+ # retag tag --image=registry/image:0a4bfc5 --tag v1.2.3 --suffix stable is equivalent to
72
+ docker tag registry/image:0a4bfc5-stable registry/image:v1.2.3
73
+ "
74
+
75
+ def tag(*_args)
76
+ opts = options.to_h.dup
77
+ img, tag = opts['image'].split(':')
78
+ tag ||= 'latest'
79
+ tag = opts['suffix'].present? ? "#{tag}-#{opts['suffix']}" : tag
80
+
81
+ image = ::Retag::Image.new(img, tag)
82
+ image.retag!(opts['tag'])
83
+ end
84
+
85
+ desc 'release', 'Release projects bundler from release.yml manifest'
86
+ map %w[--release] => :release
87
+
88
+ option :config, default: ENV.fetch("#{ENV_PREFIX}_RELEASE_CONFIG", './release.yml'),
89
+ required: true,
90
+ desc: "Env: #{ENV_PREFIX}_RELEASE_CONFIG. Path to release manifest"
91
+
92
+ option :name, default: ENV.fetch("#{ENV_PREFIX}_RELEASE_NAME", nil),
93
+ required: false,
94
+ desc: "Env: #{ENV_PREFIX}_RELEASE_NAME. Name of the current release"
95
+
96
+ def release(*_args)
97
+ opts = options.to_h.dup
98
+ config = YAML.load_file(File.expand_path(opts['config']))
99
+ config['release'] = opts['name'] || config['release']
100
+
101
+ release = config['release']
102
+ suffix = config['suffix']
103
+
104
+ services = config['services'].map do|(name, cfg)|
105
+ Retag::Service.new(name, cfg, release, suffix: cfg.fetch('suffix', suffix)) unless name.start_with?('.')
106
+ end.compact
107
+
108
+ services.each do |srv|
109
+ $logger.tagged(srv.name.colorize(:yellow), "#{srv.revision.colorize(mode: :bold)}@#{srv.branch}") do
110
+ $logger.info "#{'==>'.colorize(mode: :bold, color: :white)} Releasing service #{srv.name.colorize(:yellow)} from #{srv.repo} at #{srv.branch}:"
111
+ $logger.shift do
112
+ srv.images.each do |img|
113
+ $logger.info "Source image: #{img.full}"
114
+ newimg = img.retag!(release)
115
+ $logger.info "Release image: #{newimg.full}"
116
+ end
117
+
118
+ #$logger.info "* Pulling service..."
119
+ #srv.pull
120
+ #$logger.info "* Tagging service..."
121
+ #srv.release!
122
+ #$logger.info "* Pushing service..."
123
+ #srv.push
124
+ #$logger.info "* Cleaning service..."
125
+ #srv.rm
126
+ end
127
+ end
128
+ end
129
+
130
+ end
131
+
132
+ private
133
+
134
+ def cache_image(opts)
135
+ "#{opts['service_image']}_cache:latest"
136
+ end
137
+
138
+ end
139
+
140
+ ::Cli.start
141
+
142
+ # puts ARGV.inspect
143
+
144
+ # parser.parse!
145
+
146
+ # puts ARGV.inspect
147
+
148
+ # warn parser.help
149
+ # exit 1
150
+
151
+ # config = {
152
+ # services: [
153
+ # {core: {images: []}}
154
+ # ]
155
+ # }
156
+
157
+ # release=$(cat .release | head -n 1)
158
+
159
+ # for line in "${services[@]}"; do
160
+ # module=$(echo $line | cut -f1 -d '|')
161
+ # repo=$(echo $line | cut -f2 -d '|')
162
+ # branch=$(echo $line | cut -f3 -d '|')
163
+
164
+ # echo "Tagging ${module} from ${branch} of ${repo}"
165
+ # git subtree push --prefix="src/${module}" "${repo}" "feature/otr"
166
+ # done
167
+
data/bin/setup ADDED
@@ -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
data/lib/retag/version.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Retag
4
4
 
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
 
7
7
  end
8
8
 
data/retag.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/retag/version'
4
+
5
+ Gem::Specification.new 'retag' do |spec|
6
+ spec.version = ENV['BUILDVERSION'].to_i > 0 ? "#{Retag::VERSION}.#{ENV['BUILDVERSION'].to_i}" : Retag::VERSION
7
+ spec.authors = ['Samoilenko Yuri']
8
+ spec.email = ['kinnalru@gmail.com']
9
+ spec.description = spec.summary = 'Retag is cli to manipulate docker images in handy way'
10
+ spec.homepage = 'https://github.com/RnD-Soft/retag'
11
+ spec.license = 'MIT'
12
+
13
+ spec.required_ruby_version = '>= 2.5.0'
14
+ spec.metadata['homepage_uri'] = spec.homepage
15
+ spec.metadata['source_code_uri'] = 'https://github.com/RnD-Soft/retag'
16
+
17
+ spec.files = Dir['bin/**/*', 'lib/**/*', 'sig/**/*', 'Gemfile*', 'LICENSE', 'README.md', '*.gemspec']
18
+
19
+ spec.bindir = 'bin'
20
+ spec.executables = spec.files.grep(%r{^bin/retag}) {|f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.1'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'rspec_junit_formatter'
27
+ spec.add_development_dependency 'rubocop'
28
+ spec.add_development_dependency 'simplecov'
29
+ spec.add_development_dependency 'simplecov-console'
30
+ spec.add_development_dependency 'webmock'
31
+
32
+ spec.add_runtime_dependency 'activesupport', '~> 6.0'
33
+ spec.add_runtime_dependency 'colorize'
34
+ spec.add_runtime_dependency 'json'
35
+ spec.add_runtime_dependency 'thor'
36
+ spec.add_runtime_dependency 'uri'
37
+ spec.add_runtime_dependency 'yaml'
38
+ end
39
+
data/sig/retag.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Retag
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samoilenko Yuri
@@ -215,18 +215,26 @@ dependencies:
215
215
  description: Retag is cli to manipulate docker images in handy way
216
216
  email:
217
217
  - kinnalru@gmail.com
218
- executables: []
218
+ executables:
219
+ - retag
219
220
  extensions: []
220
221
  extra_rdoc_files: []
221
222
  files:
223
+ - Gemfile
224
+ - Gemfile.lock
222
225
  - LICENSE
223
226
  - README.md
227
+ - bin/console
228
+ - bin/retag
229
+ - bin/setup
224
230
  - lib/retag.rb
225
231
  - lib/retag/image.rb
226
232
  - lib/retag/logger.rb
227
233
  - lib/retag/service.rb
228
234
  - lib/retag/utils.rb
229
235
  - lib/retag/version.rb
236
+ - retag.gemspec
237
+ - sig/retag.rbs
230
238
  homepage: https://github.com/RnD-Soft/retag
231
239
  licenses:
232
240
  - MIT