samus 1.4.4 → 1.5.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
  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.