samus 1.4.4 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21da3590ab5fd3b3ed8a08f62d31d79f27d7be8b
4
- data.tar.gz: 3f601ad43e65b65ae9bbcbe59f668e861d92911c
3
+ metadata.gz: ec8b4850b480f49ce49ab6c437a0feb1e50de811
4
+ data.tar.gz: 07f12c2e09ade8dde71f5b92e4bd34e37cc78bfd
5
5
  SHA512:
6
- metadata.gz: 1c93fba8ec90631c8b00e182432ef0cabee78120a248a47256706671e461ec84fe36e6b7fc75b8b1d2b412ac554a32808ee9d4f1ce2400ff34308b101a5f7e52
7
- data.tar.gz: 77e70209f5c2abbb794e6862d1f4923b8f5825ad5a206abcc11280e9493e83af62e62e26c3fea684ea20bf9aa2242c2810a502834e83d082dba581823d57f62e
6
+ metadata.gz: 21705267ac960018b61b4de530f334c3231d533f324dd0caec788bb96df259754a1a02b3dc7c5514183bf5e5719fc73d3388879e13f21ae3854a0e2f369cde64
7
+ data.tar.gz: 67de29e4727253e87a1c90b4d7b890ec716c76e888751784c2deab377fb5c5e21305afecc6ab60888d7d156ffe1fa2afd10a3df297233d2868102e46e1303f9e
@@ -0,0 +1,8 @@
1
+ FROM python:3.7-alpine
2
+
3
+ RUN apk add openssh ruby ruby-json nodejs git curl
4
+ RUN pip install awscli
5
+ RUN gem install rake --no-rdoc --no-ri
6
+
7
+ COPY . /samus
8
+ ENV PATH=$PATH:/samus/bin
@@ -0,0 +1,43 @@
1
+ task default: :build
2
+
3
+ task :build do
4
+ home = Dir.home
5
+ id = `docker build -q .`.chomp
6
+ dirs = [
7
+ "#{home}/.ssh:/root/.sshkeys",
8
+ "#{home}/.samus:/root/.samus",
9
+ "#{home}/.gitconfig:/root/.gitconfig",
10
+ "#{Dir.pwd}:/app"
11
+ ]
12
+ cmd = "rake build_from_docker VERSION=#{ENV['VERSION']}"
13
+ alldirs = dirs.map { |d| "-v \"#{d}\"" }.join(' ')
14
+ sh "docker run --rm #{alldirs} -w /app -t #{id} #{cmd}"
15
+ end
16
+
17
+ task :build_from_docker do
18
+ version = ENV['VERSION']
19
+ sh 'mkdir -p ~/.ssh && cp -R ~/.sshkeys/* ~/.ssh'
20
+ sh 'chmod 700 ~/.ssh && chmod 400 ~/.ssh/*'
21
+ sh "samus build #{version}"
22
+ end
23
+
24
+ task :publish do
25
+ home = Dir.home
26
+ id = `docker build -q .`.chomp
27
+ dirs = [
28
+ "#{home}/.ssh:/root/.sshkeys",
29
+ "#{home}/.samus:/root/.samus",
30
+ "#{home}/.gitconfig:/root/.gitconfig",
31
+ "#{Dir.pwd}:/app"
32
+ ]
33
+ cmd = "rake publish_from_docker FILE=#{ENV['FILE']}"
34
+ alldirs = dirs.map { |d| "-v \"#{d}\"" }.join(' ')
35
+ sh "docker run --rm #{alldirs} -w /app -t #{id} #{cmd}"
36
+ end
37
+
38
+ task :publish_from_docker do
39
+ file = ENV['FILE']
40
+ sh 'mkdir -p ~/.ssh && cp -R ~/.sshkeys/* ~/.ssh'
41
+ sh 'chmod 700 ~/.ssh && chmod 400 ~/.ssh/*'
42
+ sh "samus publish #{file}"
43
+ end
data/bin/samus CHANGED
@@ -4,67 +4,70 @@ require_relative '../lib/samus'
4
4
  require 'optparse'
5
5
  require 'tmpdir'
6
6
 
7
- command = case ARGV.shift
8
- when 'install'
9
- Dir.mkdir(Samus::CONFIG_PATH) unless File.directory?(Samus::CONFIG_PATH)
10
- Dir.chdir(Samus::CONFIG_PATH) { system "git clone #{ARGV.shift}" }
11
- exit
12
- when 'update'
13
- Samus.config_paths.each do |path|
14
- Dir.chdir(path) do
15
- if File.directory?('.git')
16
- puts "[I] Updating #{path}"
17
- system "git pull"
18
- else
19
- puts "[S] Skipping non-Git directory #{path}"
7
+ command =
8
+ case ARGV.shift
9
+ when 'install'
10
+ Dir.mkdir(Samus::CONFIG_PATH) unless File.directory?(Samus::CONFIG_PATH)
11
+ Dir.chdir(Samus::CONFIG_PATH) { system "git clone #{ARGV.shift}" }
12
+ exit
13
+ when 'update'
14
+ Samus.config_paths.each do |path|
15
+ Dir.chdir(path) do
16
+ if File.directory?('.git')
17
+ puts "[I] Updating #{path}"
18
+ system 'git pull'
19
+ else
20
+ puts "[S] Skipping non-Git directory #{path}"
21
+ end
20
22
  end
21
23
  end
22
- end
23
- exit
24
- when 'show-cmd'
25
- stage = ARGV.shift
26
- if stage
27
- name = ARGV.shift
28
- if name
29
- Samus::Command.new(stage, name).show_help
24
+ exit
25
+ when 'show-cmd'
26
+ stage = ARGV.shift
27
+ if stage
28
+ name = ARGV.shift
29
+ if name
30
+ Samus::Command.new(stage, name).show_help
31
+ else
32
+ Samus::Command.list_commands(stage)
33
+ end
30
34
  else
31
- Samus::Command.list_commands(stage)
35
+ Samus::Command.list_commands
32
36
  end
33
- else
34
- Samus::Command.list_commands
37
+ exit
38
+ when 'publish', 'push'
39
+ Samus::Publisher
40
+ when 'build'
41
+ Samus::Builder
35
42
  end
36
- exit
37
- when 'publish', 'push'; Samus::Publisher
38
- when 'build'; Samus::Builder
39
- end
40
43
 
41
44
  dry_run = false
42
45
  zip_release = true
43
46
  outfile = nil
44
- opts = OptionParser.new do |opts|
47
+ options = OptionParser.new do |opts|
45
48
  opts.banner = "Usage: samus publish [options] <directory> [directory ...]\n"
46
49
  opts.banner += " samus build [options] <version> [build.json]\n"
47
50
  opts.banner += " samus show-cmd [stage] [name]\n"
48
51
 
49
- opts.separator ""
50
- opts.separator "Options:"
51
- opts.on("--dry-run", "Print commands, don't run them") do |v|
52
+ opts.separator ''
53
+ opts.separator 'Options:'
54
+ opts.on('--dry-run', "Print commands, don't run them") do |_v|
52
55
  dry_run = true
53
56
  end
54
57
  if command == Samus::Builder
55
- opts.on("--[no-]zip", "Zip release directory") do |zip|
58
+ opts.on('--[no-]zip', 'Zip release directory') do |zip|
56
59
  zip_release = zip
57
60
  end
58
- opts.on("-o FILE", "--output", "The file (no extension) to generate") do |file|
61
+ opts.on('-o FILE', '--output', 'The file (no extension) to generate') do |file|
59
62
  outfile = file
60
63
  end
61
64
  end
62
65
  end
63
- opts.parse!
66
+ options.parse!
64
67
 
65
68
  if command == Samus::Publisher
66
69
  ARGV.each do |dir|
67
- fail "Aborting due to missing path #{dir}" unless File.exist?(dir)
70
+ raise "Aborting due to missing path #{dir}" unless File.exist?(dir)
68
71
  end
69
72
 
70
73
  ARGV.each do |dir|
@@ -78,9 +81,9 @@ if command == Samus::Publisher
78
81
  end
79
82
  end
80
83
  elsif command == Samus::Builder
81
- $VERSION = ARGV.shift
82
- fail "Missing version" if $VERSION.nil?
83
- $VERSION = $VERSION.sub(/^v/, '')
84
+ ver = ARGV.shift
85
+ raise 'Missing version' if ver.nil?
86
+ Samus::Builder.build_version = ver.sub(/^v/, '')
84
87
 
85
88
  (ARGV.empty? ? ['samus.json'] : ARGV).each do |file|
86
89
  command.new(file).build(dry_run, zip_release, outfile)
@@ -3,7 +3,7 @@
3
3
  def parse_changelog(changelog)
4
4
  out, collect_started = [], false
5
5
  File.read(changelog).split(/\r?\n/).each do |line|
6
- if line =~ /^(#+\s+)?\d+/
6
+ if line =~ /^(#+\s+)?\S/
7
7
  break if collect_started
8
8
  collect_started = true
9
9
  next
@@ -12,7 +12,9 @@ module Samus
12
12
  @arguments = opts[:arguments] || {}
13
13
  end
14
14
 
15
- def stage; raise NotImplementedError, 'action must define stage' end
15
+ def stage
16
+ raise NotImplementedError, 'action must define stage'
17
+ end
16
18
 
17
19
  def load(opts = {})
18
20
  opts.each do |key, value|
@@ -32,10 +34,10 @@ module Samus
32
34
 
33
35
  def command_options
34
36
  {
35
- :arguments => @creds ? @arguments.merge(@creds.load) : @arguments,
36
- :files => @files,
37
- :dry_run => @dry_run,
38
- :allow_fail => @allow_fail
37
+ arguments: @creds ? @arguments.merge(@creds.load) : @arguments,
38
+ files: @files,
39
+ dry_run: @dry_run,
40
+ allow_fail: @allow_fail
39
41
  }
40
42
  end
41
43
 
@@ -54,7 +56,7 @@ module Samus
54
56
  attr_writer :files
55
57
 
56
58
  def arguments=(args)
57
- args.each {|k, v| @arguments[k] = v }
59
+ args.each { |k, v| @arguments[k] = v }
58
60
  end
59
61
  end
60
62
  end
@@ -10,15 +10,15 @@ module Samus
10
10
 
11
11
  attr_reader :publish
12
12
 
13
- def stage; 'build' end
13
+ def stage
14
+ 'build'
15
+ end
14
16
 
15
17
  def command_options
16
- super.merge(:pwd => @pwd)
18
+ super.merge(pwd: @pwd)
17
19
  end
18
20
 
19
- def pwd=(pwd)
20
- @pwd = pwd
21
- end
21
+ attr_writer :pwd
22
22
 
23
23
  def run
24
24
  return if @skip
@@ -26,21 +26,18 @@ module Samus
26
26
  end
27
27
 
28
28
  def publish=(publish)
29
- @publish = Array === publish ? publish : [publish]
29
+ @publish = publish.is_a?(Array) ? publish : [publish]
30
30
  @publish.each do |publish_action|
31
31
  publish_action['files'] ||= @files if @files
32
32
  end
33
- @publish
34
33
  end
35
34
 
36
35
  attr_reader :skip
37
36
  def condition=(condition)
38
- begin
39
- @skip = !eval(condition)
40
- rescue => e
41
- puts "[E] Condition failed on #{@raw_options['action']}"
42
- raise e
43
- end
37
+ @skip = !eval(condition)
38
+ rescue StandardError => e
39
+ puts "[E] Condition failed on #{@raw_options['action']}"
40
+ raise e
44
41
  end
45
42
  end
46
43
  end
@@ -5,25 +5,30 @@ require_relative './build_action'
5
5
 
6
6
  module Samus
7
7
  class Builder
8
- RESTORE_FILE = ".git/samus-restore"
8
+ RESTORE_FILE = '.git/samus-restore'.freeze
9
+
10
+ class << self
11
+ attr_accessor :build_version
12
+ end
9
13
 
10
14
  attr_reader :build_manifest
11
15
 
12
16
  def initialize(build_manifest_file)
17
+ fdata = File.read(build_manifest_file).gsub('$version', version)
13
18
  @stage = 'build'
14
19
  @build_manifest_file = build_manifest_file
15
- @build_manifest = JSON.parse(File.read(build_manifest_file).gsub('$version', $VERSION))
20
+ @build_manifest = JSON.parse(fdata)
16
21
  @manifest = {}
17
22
  end
18
23
 
19
24
  def build(dry_run = false, zip_release = true, outfile = nil)
20
25
  orig_pwd = Dir.pwd
21
- manifest = {'version' => $VERSION, 'actions' => []}
22
- build_branch = "samus-release/v#{$VERSION}"
26
+ manifest = { 'version' => version, 'actions' => [] }
27
+ build_branch = "samus-release/v#{version}"
23
28
  orig_branch = `git symbolic-ref -q --short HEAD`.chomp
24
29
 
25
- if `git diff --shortstat 2> /dev/null | tail -n1` != ""
26
- Samus.error "Repository is dirty, it is too dangerous to continue."
30
+ if `git diff --shortstat 2> /dev/null | tail -n1` != ''
31
+ Samus.error 'Repository is dirty, it is too dangerous to continue.'
27
32
  end
28
33
 
29
34
  system "git checkout -qb #{build_branch} 2>/dev/null"
@@ -31,24 +36,25 @@ module Samus
31
36
 
32
37
  Dir.mktmpdir do |build_dir|
33
38
  actions.map do |action|
34
- BuildAction.new(:dry_run => dry_run, :arguments => {
35
- "_restore_file" => RESTORE_FILE,
36
- "_build_dir" => build_dir,
37
- "_build_branch" => build_branch,
38
- "version" => $VERSION
39
- }).load(action)
39
+ BuildAction.new(dry_run: dry_run, arguments: {
40
+ '_restore_file' => RESTORE_FILE,
41
+ '_build_dir' => build_dir,
42
+ '_build_branch' => build_branch,
43
+ 'version' => version
44
+ }).load(action)
40
45
  end.each do |action|
41
46
  next if action.skip
42
47
  action.run
43
48
  manifest['actions'] += action.publish if action.publish
44
49
  end
45
50
 
46
- Dir.chdir(build_dir) do
47
- generate_manifest(manifest)
48
- generate_release(orig_pwd, zip_release, outfile)
49
- end unless dry_run
51
+ unless dry_run
52
+ Dir.chdir(build_dir) do
53
+ generate_manifest(manifest)
54
+ generate_release(orig_pwd, zip_release, outfile)
55
+ end
56
+ end
50
57
  end
51
-
52
58
  ensure
53
59
  restore_git_repo
54
60
  system "git checkout -q #{orig_branch} 2>/dev/null"
@@ -64,7 +70,7 @@ module Samus
64
70
  end
65
71
 
66
72
  def generate_release(orig_pwd, zip_release = true, outfile = nil)
67
- file = outfile || build_manifest['output'] || "release-v#{$VERSION}"
73
+ file = outfile || build_manifest['output'] || "release-v#{version}"
68
74
  file = File.join(orig_pwd, file) unless file[0] == '/'
69
75
  file_is_zipped = file =~ /\.(tar\.gz|tgz)$/
70
76
  if zip_release || file_is_zipped
@@ -86,10 +92,10 @@ module Samus
86
92
  File.readlines(RESTORE_FILE).each do |line|
87
93
  type, branch, commit = *line.split(/\s+/)
88
94
  case type
89
- when "tag"
95
+ when 'tag'
90
96
  puts "[D] Removing tag #{branch}" if $DEBUG
91
97
  system "git tag -d #{branch} >/dev/null"
92
- when "branch"
98
+ when 'branch'
93
99
  puts "[D] Restoring #{branch} to #{commit}" if $DEBUG
94
100
  system "git checkout -q #{branch}"
95
101
  system "git reset -q --hard #{commit}"
@@ -102,5 +108,9 @@ module Samus
102
108
  def remove_restore_file
103
109
  File.unlink(RESTORE_FILE) if File.file?(RESTORE_FILE)
104
110
  end
111
+
112
+ def version
113
+ self.class.build_version
114
+ end
105
115
  end
106
116
  end
@@ -1,7 +1,7 @@
1
1
  module Samus
2
2
  class Command
3
3
  class << self
4
- def command_paths; @@command_paths end
4
+ attr_reader :command_paths
5
5
 
6
6
  def list_commands(stage = nil)
7
7
  display_commands(collect_commands(stage))
@@ -10,15 +10,17 @@ module Samus
10
10
  private
11
11
 
12
12
  def display_commands(stages)
13
- puts "Commands:"
14
- puts ""
13
+ puts 'Commands:'
14
+ puts ''
15
15
  stages.each do |type, commands|
16
16
  puts "#{type}:"
17
- puts ""
17
+ puts ''
18
18
  commands.sort.each do |command|
19
- puts(" * %-20s%s" % [command.name, command.help_text.split(/\r?\n/)[0]])
19
+ puts(format(' * %<name>-20s%<desc>s',
20
+ name: command.name,
21
+ desc: command.help_text.split(/\r?\n/)[0]))
20
22
  end
21
- puts ""
23
+ puts ''
22
24
  end
23
25
  end
24
26
 
@@ -26,7 +28,7 @@ module Samus
26
28
  stages = {}
27
29
  command_paths.each do |path|
28
30
  Dir.glob(File.join(path, '*', '*')).each do |dir|
29
- type, name = *dir.split(File::SEPARATOR)[-2,2]
31
+ type, name = *dir.split(File::SEPARATOR)[-2, 2]
30
32
  next if name =~ /\.md$/
31
33
  next if stage && stage != type
32
34
  (stages[type] ||= []).push(new(type, name))
@@ -36,7 +38,9 @@ module Samus
36
38
  end
37
39
  end
38
40
 
39
- @@command_paths = [File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'commands'))]
41
+ @command_paths = [File.expand_path(
42
+ File.join(File.dirname(__FILE__), '..', '..', 'commands')
43
+ )]
40
44
 
41
45
  attr_reader :stage, :name
42
46
 
@@ -48,35 +52,34 @@ module Samus
48
52
 
49
53
  def show_help
50
54
  puts "#{stage.capitalize} Command: #{name}"
51
- puts ""
55
+ puts ''
52
56
  puts help_text
53
57
  end
54
58
 
55
59
  def help_text
56
- @help_text ||= File.exist?(help_path) ? File.read(help_path) : ""
60
+ @help_text ||= File.exist?(help_path) ? File.read(help_path) : ''
57
61
  end
58
62
 
59
63
  def log_command(env = {}, arguments = [])
60
- e = env.map {|k,v| k =~ /^(AWS|__)/ ? nil : "#{k}=#{v.inspect}" }.compact.join(" ")
61
- e = e + " " if e.size > 0
62
- puts("[C] " + e + name + (arguments ? " " + arguments.join(" ") : ""))
64
+ e = env.map { |k, v| k =~ /^(AWS|__)/ ? nil : "#{k}=#{v.inspect}" }.compact.join(' ')
65
+ e += ' ' unless e.empty?
66
+ puts('[C] ' + e + name + (arguments ? ' ' + arguments.join(' ') : ''))
63
67
  end
64
68
 
65
69
  def run(opts = {})
66
- env = (opts[:arguments] || {}).inject({}) {|h, (k, v)| h["_#{k}"] = v; h }
70
+ env = (opts[:arguments] || {}).each_with_object({}) { |(k, v), h| h["_#{k}"] = v; }
67
71
  arguments = opts[:files] || []
68
72
  dry_run = opts[:dry_run] || false
69
73
  allow_fail = opts[:allow_fail] || false
70
74
  pwd = opts[:pwd]
71
- old_pwd = Dir.pwd
72
75
 
73
76
  log_command(env, arguments)
74
- if !dry_run
75
- exec_in_dir(pwd) do
76
- system(env, @full_path + " " + (arguments ? arguments.join(" ") : ""))
77
- end
78
- report_error($?, allow_fail)
77
+
78
+ return if dry_run
79
+ exec_in_dir(pwd) do
80
+ system(env, @full_path + ' ' + (arguments ? arguments.join(' ') : ''))
79
81
  end
82
+ report_error($CHILD_STATUS, allow_fail)
80
83
  end
81
84
 
82
85
  def <=>(other)
@@ -86,7 +89,7 @@ module Samus
86
89
  private
87
90
 
88
91
  def report_error(exit_code, allow_fail)
89
- return if exit_code.to_i == 0
92
+ return if exit_code.to_i.zero?
90
93
  puts "[E] Last command failed with #{exit_code}#{allow_fail ? ' but allowFail=true' : ', exiting'}."
91
94
  exit(exit_code.to_i) unless allow_fail
92
95
  end
@@ -96,11 +99,15 @@ module Samus
96
99
  end
97
100
 
98
101
  def load_full_path
99
- if path = self.class.command_paths.find {|path| File.exist?(File.join(path, stage, name)) }
102
+ path = self.class.command_paths.find do |ipath|
103
+ File.exist?(File.join(ipath, stage, name))
104
+ end
105
+
106
+ if path
100
107
  @full_path = File.join(path, stage, name)
101
108
  else
102
- Samus.error "Could not find command: #{name} " +
103
- "(cmd_paths=#{self.class.command_paths.join(':')})"
109
+ Samus.error "Could not find command: #{name} " \
110
+ "(cmd_paths=#{self.class.command_paths.join(':')})"
104
111
  end
105
112
  end
106
113
 
@@ -2,7 +2,11 @@ module Samus
2
2
  class Credentials
3
3
  attr_reader :name
4
4
 
5
- @@credentials = {}
5
+ class << self
6
+ attr_accessor :credentials
7
+ end
8
+
9
+ @credentials = {}
6
10
 
7
11
  def initialize(name)
8
12
  @name = name
@@ -10,7 +14,7 @@ module Samus
10
14
  end
11
15
 
12
16
  def load
13
- return @@credentials[name] if @@credentials[name]
17
+ return self.class.credentials[name] if self.class.credentials[name]
14
18
 
15
19
  hsh = {}
16
20
  data = nil
@@ -28,7 +32,7 @@ module Samus
28
32
  hsh["_creds_#{name.strip.downcase}"] = value.strip
29
33
  end
30
34
 
31
- @@credentials[name] = hsh
35
+ self.class.credentials[name] = hsh
32
36
  end
33
37
 
34
38
  private
@@ -41,8 +45,8 @@ module Samus
41
45
  return
42
46
  end
43
47
  end
44
- Samus.error "Could not find credential: #{name} " +
45
- "(SAMUS_CONFIG_PATH=#{Samus.config_paths.join(':')})"
48
+ Samus.error "Could not find credential: #{name} " \
49
+ "(SAMUS_CONFIG_PATH=#{Samus.config_paths.join(':')})"
46
50
  end
47
51
  end
48
- end
52
+ end
@@ -2,6 +2,8 @@ require_relative './action'
2
2
 
3
3
  module Samus
4
4
  class PublishAction < Action
5
- def stage; 'publish' end
5
+ def stage
6
+ 'publish'
7
+ end
6
8
  end
7
9
  end
@@ -12,12 +12,11 @@ module Samus
12
12
  def publish(dry_run = false)
13
13
  Dir.chdir(@dir) do
14
14
  actions.map do |action|
15
- PublishAction.new(:dry_run => dry_run, :arguments => {
16
- 'version' => manifest['version']
17
- }).load(action)
18
- end.each do |action|
19
- action.run
20
- end
15
+ PublishAction.new(
16
+ dry_run: dry_run,
17
+ arguments: { 'version' => manifest['version'] }
18
+ ).load(action)
19
+ end.each(&:run)
21
20
  end
22
21
  end
23
22
 
@@ -1,3 +1,3 @@
1
1
  module Samus
2
- VERSION = '1.4.4'
2
+ VERSION = '1.5.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loren Segal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2018-07-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: lsegal@soen.ca
@@ -18,8 +18,10 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - CHANGELOG.md
21
+ - Dockerfile
21
22
  - LICENSE
22
23
  - README.md
24
+ - Rakefile
23
25
  - bin/samus
24
26
  - commands/build/archive-git-full
25
27
  - commands/build/archive-git-full.help.md
@@ -105,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
107
  version: '0'
106
108
  requirements: []
107
109
  rubyforge_project:
108
- rubygems_version: 2.5.1
110
+ rubygems_version: 2.6.14.1
109
111
  signing_key:
110
112
  specification_version: 4
111
113
  summary: Samus helps you release Open Source Software.