retag 0.1.3 → 0.1.4
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 +4 -4
- data/Gemfile.lock +1 -1
- data/bin/retag +77 -20
- data/lib/retag/repo.rb +3 -27
- data/lib/retag/service.rb +2 -2
- data/lib/retag/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab2e731e32312b3a61a674ad910c1193b77130f6b7f72a93ec0675580bd5b078
|
4
|
+
data.tar.gz: 97835c0e4826a38949abd6de5882652705594eba0c24b501c8cec96a23f44151
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8bcbd2c1f5d286e9729b93179c6b03905533d2d71a06b07b361a55994a69ad9ccd981c94a37ea925f69caceb390591eee716cd4656a359c9a47e13a911d844c
|
7
|
+
data.tar.gz: 0352ce3e3aab8140a8e65cde805f5ca7846238a9725178a5c42dada297f90ca3c45bdcdc7a143c3ee34b8ce71204cdaaf7b455b29d8a1175fafc8da6b1cfef56
|
data/Gemfile.lock
CHANGED
data/bin/retag
CHANGED
@@ -10,36 +10,51 @@ ENV_PREFIX = 'RETAG'
|
|
10
10
|
$logger = ActiveSupport::TaggedLogging.new(Retag::Logger.new(STDOUT))
|
11
11
|
$logger.level = :info
|
12
12
|
|
13
|
-
class Cli < Thor
|
14
13
|
|
15
|
-
def self.exit_on_failure?
|
16
|
-
true
|
17
|
-
end
|
18
|
-
|
19
|
-
package_name "Retag is cli to manipulate docker images in handy way.
|
20
14
|
|
21
|
-
|
22
|
-
|
15
|
+
class RepoCommand < Thor
|
16
|
+
desc "tag <project> <tag>", "Create tag in Gitlab project"
|
17
|
+
long_desc <<-LONGDESC
|
18
|
+
LONGDESC
|
19
|
+
option :force, default: false,
|
20
|
+
required: false,
|
21
|
+
type: :boolean,
|
22
|
+
desc: "Override Gitlab tag if exists"
|
23
23
|
|
24
|
-
#{
|
24
|
+
option :ref, default: ENV.fetch("#{ENV_PREFIX}_TAG_REF", 'master'),
|
25
|
+
required: true,
|
26
|
+
type: :string,
|
27
|
+
desc: "Gtilab refspec from which create tag"
|
25
28
|
|
26
|
-
|
27
|
-
|
29
|
+
option :message, default: nil,
|
30
|
+
type: :string,
|
31
|
+
desc: "Tag message"
|
28
32
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
33
|
+
def tag(project, tag)
|
34
|
+
$logger.level = :debug if opts['verbose']
|
35
|
+
opts = options.to_h.dup
|
32
36
|
|
33
|
-
|
34
|
-
|
37
|
+
begin
|
38
|
+
Gitlab.client.delete_tag(project, tag).inspect
|
39
|
+
rescue Gitlab::Error::NotFound
|
40
|
+
# Success: there is no such tag
|
41
|
+
end if opts['force']
|
42
|
+
|
43
|
+
puts Gitlab.client.create_tag(project, tag, options['ref'], options['message']).inspect
|
44
|
+
end
|
45
|
+
end
|
35
46
|
|
47
|
+
class DockerCommand < Thor
|
48
|
+
desc "tag", "Tag Docker image without downloading"
|
49
|
+
long_desc <<-LONGDESC
|
50
|
+
LONGDESC
|
36
51
|
option :image, default: ENV.fetch("#{ENV_PREFIX}_TAG_IMAGE", nil),
|
37
52
|
required: true,
|
38
53
|
desc: "Env: #{ENV_PREFIX}_TAG_IMAGE. Full image to be tagged. Ex: docker.rnds.pro/aggredator/service-uprid3:latest"
|
39
54
|
|
40
55
|
option :tag, default: ENV.fetch("#{ENV_PREFIX}_TAG_TAG", nil),
|
41
56
|
required: true,
|
42
|
-
desc: "Env: #{ENV_PREFIX}_TAG_TAG. New tag
|
57
|
+
desc: "Env: #{ENV_PREFIX}_TAG_TAG. New tag"
|
43
58
|
|
44
59
|
option :suffix, default: ENV.fetch("#{ENV_PREFIX}_TAG_SUFFIX", nil),
|
45
60
|
required: false,
|
@@ -50,7 +65,9 @@ class Cli < Thor
|
|
50
65
|
"
|
51
66
|
|
52
67
|
def tag(*_args)
|
68
|
+
$logger.level = :debug if opts['verbose']
|
53
69
|
opts = options.to_h.dup
|
70
|
+
|
54
71
|
img, tag = opts['image'].split(':')
|
55
72
|
tag ||= 'latest'
|
56
73
|
tag = opts['suffix'].present? ? "#{tag}-#{opts['suffix']}" : tag
|
@@ -59,10 +76,14 @@ class Cli < Thor
|
|
59
76
|
image.retag!(opts['tag'])
|
60
77
|
end
|
61
78
|
|
79
|
+
end
|
62
80
|
|
63
|
-
|
64
|
-
|
81
|
+
class ReleaseCommand < Thor
|
82
|
+
default_command :release
|
65
83
|
|
84
|
+
desc "release", "Release projects bundler from release.yml manifest"
|
85
|
+
long_desc <<-LONGDESC
|
86
|
+
LONGDESC
|
66
87
|
option :config, default: ENV.fetch("#{ENV_PREFIX}_RELEASE_CONFIG", './release.yml'),
|
67
88
|
required: true,
|
68
89
|
desc: "Env: #{ENV_PREFIX}_RELEASE_CONFIG. Path to release manifest"
|
@@ -73,14 +94,17 @@ class Cli < Thor
|
|
73
94
|
|
74
95
|
def release(*_args)
|
75
96
|
opts = options.to_h.dup
|
97
|
+
$logger.level = :debug if opts['verbose']
|
98
|
+
|
76
99
|
config = YAML.load_file(File.expand_path(opts['config']))
|
77
100
|
config['release'] = opts['name'] || config['release']
|
78
101
|
|
79
102
|
release = config['release'].to_s
|
80
103
|
suffix = config['suffix']
|
104
|
+
branch = config['branch']
|
81
105
|
|
82
106
|
services = config['services'].map do|(name, cfg)|
|
83
|
-
Retag::Service.new(name, cfg, release, suffix: cfg.fetch('suffix', suffix)) unless name.start_with?('.')
|
107
|
+
Retag::Service.new(name, cfg, release, suffix: cfg.fetch('suffix', suffix), branch: cfg.fetch('branch', branch)) unless name.start_with?('.')
|
84
108
|
end.compact
|
85
109
|
|
86
110
|
tag_message = "Release #{release} at #{DateTime.now.iso8601}"
|
@@ -120,4 +144,37 @@ class Cli < Thor
|
|
120
144
|
|
121
145
|
end
|
122
146
|
|
147
|
+
|
148
|
+
class Cli < Thor
|
149
|
+
|
150
|
+
def self.exit_on_failure?
|
151
|
+
true
|
152
|
+
end
|
153
|
+
|
154
|
+
package_name "Retag is cli to manipulate docker images in handy way.
|
155
|
+
|
156
|
+
# Gitlab authorization
|
157
|
+
Using GITLAB_API_ENDPOINT and GITLAB_API_PRIVATE_TOKEN environment variable used for authorization
|
158
|
+
|
159
|
+
#{File.basename(__FILE__)}"
|
160
|
+
|
161
|
+
class_option :verbose, type: :boolean
|
162
|
+
|
163
|
+
desc 'version', 'Display version'
|
164
|
+
map %w[-v --version] => :version
|
165
|
+
|
166
|
+
def version
|
167
|
+
say Retag::VERSION
|
168
|
+
end
|
169
|
+
|
170
|
+
desc "repo SUBCOMMAND ...ARGS", "Manage git repository stuffs"
|
171
|
+
subcommand "repo", RepoCommand
|
172
|
+
|
173
|
+
desc "docker SUBCOMMAND ...ARGS", "Manage docker stuffs"
|
174
|
+
subcommand "docker", DockerCommand
|
175
|
+
|
176
|
+
desc "release SUBCOMMAND ...ARGS", "Manage releases"
|
177
|
+
subcommand "release", ReleaseCommand
|
178
|
+
end
|
179
|
+
|
123
180
|
::Cli.start
|
data/lib/retag/repo.rb
CHANGED
@@ -31,7 +31,9 @@ module Retag
|
|
31
31
|
|
32
32
|
def revision
|
33
33
|
@revision ||= begin
|
34
|
-
|
34
|
+
rev_name_pair = cmd!("git ls-remote #{repo} #{branch}", capture: true).split("\n").select{|line| line[/\/#{branch}$/] }.first
|
35
|
+
raise "There is no #{branch} revision at #{repo}" if rev_name_pair.nil?
|
36
|
+
rev, _name = rev_name_pair.split
|
35
37
|
rev[0..7]
|
36
38
|
end
|
37
39
|
end
|
@@ -39,29 +41,3 @@ module Retag
|
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
# ==> /var/log/gitlab/gitlab-rails/api_json.log <==
|
46
|
-
# {"time":"2022-01-21T10:48:07.308Z","severity":"INFO",
|
47
|
-
# "duration_s":0.20214,"db_duration_s":0.00607,"view_duration_s":0.19607,"status":201,
|
48
|
-
# "method":"POST","path":"/api/v4/projects/aggredator%2Fservices%2Fuprid3/repository/tags",
|
49
|
-
# "params":[{"key":"tag_name","value":"testtag3"},{"key":"ref","value":"master"}],
|
50
|
-
# "host":"br.rnds.pro","remote_ip":"213.138.65.74, 172.22.20.31, 213.138.65.74","ua":"curl/7.79.1",
|
51
|
-
# "route":"/api/:version/projects/:id/repository/tags","user_id":38,"username":"bot",
|
52
|
-
# "queue_duration_s":0.008366,"gitaly_calls":1,"gitaly_duration_s":0.16823,"redis_calls":6,
|
53
|
-
# "redis_duration_s":0.004274,"redis_read_bytes":113,"redis_write_bytes":521,"redis_cache_calls":6,
|
54
|
-
# "redis_cache_duration_s":0.004274,"redis_cache_read_bytes":113,"redis_cache_write_bytes":521,"db_count":10,
|
55
|
-
# "db_write_count":0,"db_cached_count":0,"cpu_s":0.034309,"mem_objects":15111,"mem_bytes":920832,"mem_mallocs":3159,
|
56
|
-
# "mem_total_bytes":1525272,"correlation_id":"01FSY40ANS3TD0CJJTDCQXGQ1N","meta.user":"bot","meta.project":"aggredator/services/uprid3",
|
57
|
-
# "meta.root_namespace":"aggredator","meta.caller_id":"POST /api/:version/projects/:id/repository/tags",
|
58
|
-
# "meta.remote_ip":"213.138.65.74","meta.feature_category":"source_code_management","meta.client_id":
|
59
|
-
# "user/38","content_length":"0"}
|
60
|
-
|
61
|
-
# ==> /var/log/gitlab/gitlab-rails/api_json.log <==
|
62
|
-
# {"time":"2022-01-21T10:49:36.954Z","severity":"INFO",
|
63
|
-
# "duration_s":0.01892,"db_duration_s":0.0036,"view_duration_s":0.01532,"status":400,
|
64
|
-
# "method":"POST","path":"/api/v4/projects/aggredator%2Fservices%2Fuprid3/repository/tags",
|
65
|
-
# "params":[{"key":"tag_name","value":"44444444"},{"key":"ref","value":"509a3719"},{"key":"message","value":{"message":"hello"}},{"key":"release_description","value":""}],"host":"br.rnds.pro","remote_ip":"213.138.65.74, 172.22.20.31, 213.138.65.74","ua":"Gitlab Ruby Gem 4.18.0","route":"/api/:version/projects/:id/repository/tags","user_id":38,"username":"bot","queue_duration_s":0.007279,"db_count":6,"db_write_count":0,"db_cached_count":0,"cpu_s":0.022143,"mem_objects":11483,"mem_bytes":783064,"mem_mallocs":2634,"mem_total_bytes":1242384,"correlation_id":"01FSY432CZMEFNDJQ88HMNW0E8","meta.user":"bot","meta.project":"aggredator/services/uprid3","meta.root_namespace":"aggredator","meta.caller_id":"POST /api/:version/projects/:id/repository/tags","meta.remote_ip":"213.138.65.74","meta.feature_category":"source_code_management","meta.client_id":"user/38","content_length":"78"}
|
66
|
-
|
67
|
-
|
data/lib/retag/service.rb
CHANGED
@@ -9,10 +9,10 @@ module Retag
|
|
9
9
|
|
10
10
|
delegate :revision, :branch, to: :repo
|
11
11
|
|
12
|
-
def initialize(name, config, release, suffix:
|
12
|
+
def initialize(name, config, release, branch:, suffix:)
|
13
13
|
@name = name
|
14
14
|
@config = config
|
15
|
-
@repo = Retag::Repo.new(config['repo'],
|
15
|
+
@repo = Retag::Repo.new(config['repo'], branch)
|
16
16
|
@release = release
|
17
17
|
@suffix = suffix
|
18
18
|
end
|
data/lib/retag/version.rb
CHANGED