sunzi 2.0.0 → 3.0.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: 7c118fcfb05d687e587068fea6079f6e365ffbf637ef0a4f73dbd1920dc8f138
4
- data.tar.gz: 251b57a131bd76db42637bdcd0dad5b373b1a37e964680f5fde2531ff995b768
3
+ metadata.gz: 3e3eb16169a27b2c4732e2f94b02c613620a4edd6c0b68b1f9a1f77384a3a76b
4
+ data.tar.gz: f8ee2e0f7277d0db5d654358ebbab93320586b66c02eb61b43844a42db67624f
5
5
  SHA512:
6
- metadata.gz: 19c134eda8a7b0b53570ad335e79b019daa553ae46cb5f554bc80f2157ac11e10e04e51f0c6444d249d6b97f14aa806a85a7c78a11e555eddccb849fd320666b
7
- data.tar.gz: be46e99817efb6b0a8e85c5b562297b1b755c3a552ff4977039e70bf672aea636b6fc9cc4e81520120c82f5267e3ff2ba249aed0f061dae9fa4b9adcc48ee1c4
6
+ metadata.gz: 80c422355f103e3ceb6152c3a43889a15d76fef27c2088de5d0cede253311317712294b8ed19bf380c77dafba53017fb009cc0b0aa3317067c6938da53c0dd0f
7
+ data.tar.gz: b449eba750487ffdf7a2864a5b96b89aba2266b729fe7d0f76ab85f17438577091d3c17d7befa039c0669443c0baa7ef37bb436406313383e40ff3599eef96b1
@@ -0,0 +1,15 @@
1
+ name: Tests
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ runs-on: ubuntu-latest
6
+ strategy:
7
+ matrix:
8
+ ruby: ['3.1', '3.2', '3.3', '3.4', '4.0']
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ - uses: ruby/setup-ruby@v1
12
+ with:
13
+ ruby-version: ${{ matrix.ruby }}
14
+ bundler-cache: true
15
+ - run: bundle exec rake test
data/.gitignore CHANGED
@@ -1,5 +1,4 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- sandbox
1
+ /.bundle/
2
+ /pkg/
3
+ /tmp/
4
+ /Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
- ## 2.0, release 2018-01
1
+ ## 3.0.0, release 2026-01-14
2
+ * Update dependencies (thor, net-ssh, minitest).
3
+ * Replace Travis CI with GitHub Actions.
4
+
5
+ ## 2.1, release 2018-01-15
6
+ * Dotfiles (files that start with '.') in recipes, roles and files are now included.
7
+ * `sunzi.yml` is now evaluated as ERB to access environment variables. (e.g. `<%= ENV['MY_PASSWORD'] %>`)
8
+
9
+ ## 2.0, release 2018-01-14
2
10
  * Plug-in support for commands.
3
- * Separate "setup" and "teardown" commands for VPS into the "sunzi-vps" gem as a plugin.
11
+ * Separate `setup` and `teardown` commands for VPS into the `sunzi-vps` gem as a plugin.
4
12
  * "attributes" are now "vars" in sunzi.yml and shell scripts.
5
13
  * ERB templating (e.g. <%= @vars.environment %>) is always enabled.
6
14
  * Individual attribute files compiled/attributes/* are no longer supported. Use ERB template methods instead.
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -1,20 +1,30 @@
1
1
  Sunzi
2
2
  =====
3
3
 
4
+ [![Tests](https://github.com/kenn/sunzi/actions/workflows/test.yml/badge.svg)](https://github.com/kenn/sunzi/actions/workflows/test.yml)
5
+
4
6
  ```
5
7
  "The supreme art of war is to subdue the enemy without fighting." - Sunzi
6
8
  ```
7
9
 
8
- Sunzi is the easiest [server provisioning](http://en.wikipedia.org/wiki/Provisioning#Server_provisioning) utility designed for mere mortals. If Chef or Puppet is driving you nuts, try Sunzi!
10
+ Sunzi is the easiest configuration automation and [infrastructure as code](https://en.wikipedia.org/wiki/Infrastructure_as_Code) utility designed for mere mortals.
11
+
12
+ If Chef, Puppet, Ansible or SaltStack is driving you nuts, try Sunzi!
9
13
 
10
14
  Sunzi assumes that modern Linux distributions have (mostly) sane defaults and great package managers.
11
15
 
12
16
  Its design goals are:
13
17
 
14
18
  * **It's just shell script.** No clunky Ruby DSL involved. Most of the information about server configuration on the web is written in shell commands. Just copy-paste them, rather than translate it into an arbitrary DSL. Also, Bash is the greatest common denominator on minimum Linux installs.
15
- * **Focus on diff from default.** No big-bang overwriting. Append or replace the smallest possible piece of data in a config file. Loads of custom configurations make it difficult to understand what you are really doing.
16
- * **Always use the root user.** Think twice before blindly assuming you need a regular user - it doesn't add any security benefit for server provisioning, it just adds extra verbosity for nothing. However, it doesn't mean that you shouldn't create regular users with Sunzi - feel free to write your own recipes.
17
- * **Minimum dependencies.** No configuration server required. You don't even need a Ruby runtime on the remote server.
19
+
20
+ * **Minimal diff from default.** No big-bang overwriting. Append or replace the smallest possible piece of data in a config file. Loads of custom configurations make it difficult to reason what you are really doing.
21
+
22
+ * **Minimum dependencies.** No configuration server required. You don't even need a Ruby runtime on the remote server, sunzi runs a combined shell script over SSH.
23
+
24
+ See also:
25
+
26
+ * [sunzi-vps](https://github.com/kenn/sunzi-vps) - Interactive server provisioning plugin for Linode and DigitalOcean.
27
+ * [sunzi-recipes](https://github.com/kenn/sunzi-recipes) - Sample repository for remote recipes.
18
28
 
19
29
  ### What's new:
20
30
 
@@ -26,7 +36,7 @@ Quickstart
26
36
  Install:
27
37
 
28
38
  ```bash
29
- $ [sudo] gem install sunzi
39
+ $ gem install sunzi
30
40
  ```
31
41
 
32
42
  Go into your project directory (if it's a Rails project, `config` would be a good place to start with), then:
@@ -85,6 +95,9 @@ sunzi/
85
95
  # remote server (do not edit directly)
86
96
  ```
87
97
 
98
+ Security note: `sunzi.yml` is evaluated with ERB and loaded via `YAML.load`.
99
+ Only use configs you fully trust.
100
+
88
101
  How do you pass dynamic values?
89
102
  -------------------------------
90
103
 
@@ -119,7 +132,7 @@ For instance, if you have the following line in `sunzi.yml`,
119
132
 
120
133
  ```yaml
121
134
  recipes:
122
- rvm: https://raw.github.com/kenn/sunzi-recipes/master/ruby/rvm.sh
135
+ rvm: https://raw.githubusercontent.com/kenn/sunzi-recipes/master/ruby/rvm.sh
123
136
  ```
124
137
 
125
138
  `rvm.sh` will be available and you can refer to that recipe by `source recipes/rvm.sh`.
@@ -154,7 +167,6 @@ An easy way is to edit `Vagrantfile`:
154
167
  Vagrant.configure("2") do |config|
155
168
  config.vm.provision "shell",
156
169
  inline: "sudo echo 'root:vagrant' | /usr/sbin/chpasswd"
157
- end
158
170
  end
159
171
  ```
160
172
 
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
- Rake::TestTask.new do |t|
4
+ Rake::TestTask.new(:test) do |t|
5
5
  t.libs << 'test'
6
- t.test_files = FileList['test/test*.rb']
7
- t.verbose = true
6
+ t.test_files = FileList['test/**/*_test.rb']
8
7
  end
8
+
9
9
  task :default => :test
data/lib/sunzi/cli.rb CHANGED
@@ -10,8 +10,8 @@ module Sunzi
10
10
 
11
11
  desc 'deploy [user@host:port] [role] [--sudo]', 'Deploy sunzi project'
12
12
  method_options sudo: false
13
- def deploy(first, *args)
14
- Sunzi::Command.new.deploy(first, *args)
13
+ def deploy(target, role = nil)
14
+ Sunzi::Command.new.deploy(target, role, options)
15
15
  end
16
16
 
17
17
  desc 'compile', 'Compile sunzi project'
data/lib/sunzi/command.rb CHANGED
@@ -5,7 +5,7 @@ module Sunzi
5
5
  class Command
6
6
  include Sunzi::Actions::Delegate
7
7
 
8
- delegate_to_thor :copy_file, :template, :get, :append_to_file, :options
8
+ delegate_to_thor :copy_file, :template, :get, :append_to_file
9
9
 
10
10
  def create(project)
11
11
  copy_file 'templates/create/.gitignore', "#{project}/.gitignore"
@@ -17,15 +17,13 @@ module Sunzi
17
17
  copy_file 'templates/create/files/.gitkeep', "#{project}/files/.gitkeep"
18
18
  end
19
19
 
20
- def deploy(first, *args)
21
- role = args[0]
22
-
23
- sudo = 'sudo ' if options.sudo?
24
- endpoint = Endpoint.new(first)
25
-
20
+ def deploy(target, role, options)
26
21
  # compile vars and recipes
27
22
  compile(role)
28
23
 
24
+ sudo = 'sudo ' if options.sudo?
25
+ endpoint = Endpoint.new(target)
26
+
29
27
  # The host key might change when we instantiate a new VM, so
30
28
  # we remove (-R) the old host key from known_hosts.
31
29
  `ssh-keygen -R #{endpoint.host} 2> /dev/null`
@@ -60,6 +58,7 @@ module Sunzi
60
58
  end
61
59
 
62
60
  def compile(role = nil)
61
+ abort_with 'You must be in a sunzi folder' unless File.exist?('sunzi.yml')
63
62
  abort_with "#{role} doesn't exist!" if role && !File.exist?("roles/#{role}.sh")
64
63
  abort_with 'As of v2, "attributes" are now "vars" in sunzi.yml and shell scripts.' if config.attributes
65
64
 
@@ -73,7 +72,7 @@ module Sunzi
73
72
  @vars = config.vars # Used within ERB templates
74
73
 
75
74
  # Copy local files to compiled folder
76
- files = Dir['{recipes,roles,files}/**/*'].select { |file| File.file?(file) }
75
+ files = glob('{recipes,roles,files}/**/*').select { |file| File.file?(file) }
77
76
 
78
77
  files.each do |file|
79
78
  render file, "compiled/#{file}"
@@ -96,11 +95,7 @@ module Sunzi
96
95
  private
97
96
 
98
97
  def config
99
- @config ||= begin
100
- abort_with 'You must be in a sunzi folder' unless File.exist?('sunzi.yml')
101
-
102
- YAML.load(File.read('sunzi.yml')).to_hashugar
103
- end
98
+ @config ||= YAML.load(ERB.new(File.read('sunzi.yml')).result).to_hashugar
104
99
  end
105
100
 
106
101
  # template method requires absolute path to work with current directory
@@ -109,5 +104,9 @@ module Sunzi
109
104
  template File.expand_path(source), target, context: binding
110
105
  end
111
106
 
107
+ def glob(pattern)
108
+ Dir.glob(pattern, File::FNM_DOTMATCH) - ['.', '..']
109
+ end
110
+
112
111
  end
113
112
  end
@@ -28,7 +28,7 @@ module Sunzi
28
28
  else
29
29
  'install'
30
30
  end
31
- text = ERB.new(base.join("#{which}.erb").read, nil, '-').result(binding)
31
+ text = ERB.new(base.join("#{which}.erb").read).result(binding)
32
32
  abort_with text
33
33
  end
34
34
  end
data/lib/sunzi/plugin.rb CHANGED
@@ -2,7 +2,6 @@ module Sunzi
2
2
  module Plugin
3
3
  class << self
4
4
  # Find gems that start with "sunzi-*" and require them automatically.
5
- # If that gem is a plugin, it will call the register method on load.
6
5
 
7
6
  def load
8
7
  plugins = Gem::Specification.find_all.select{|plugin| plugin.name =~ /sunzi-.+/ }
data/lib/sunzi.rb CHANGED
@@ -10,7 +10,7 @@ require 'thor'
10
10
 
11
11
  # Sunzi
12
12
  module Sunzi
13
- GemRoot = Pathname.new(Gem.loaded_specs['sunzi'].gem_dir)
13
+ GemRoot = Pathname.new(__dir__).parent
14
14
  end
15
15
 
16
16
  require 'sunzi/core_ext'
data/plan.md ADDED
@@ -0,0 +1,94 @@
1
+ # Sunzi Modernization Plan
2
+
3
+ ## Overview
4
+ Update Sunzi (server provisioning tool) from 2018-era dependencies to modern Ruby ecosystem.
5
+
6
+ ## Changes
7
+
8
+ ### 1. Confirm minimum Ruby versions
9
+ Verified minimum Ruby version for `net-ssh ~> 7` and `thor ~> 1.3` is 2.6.
10
+ Set `spec.required_ruby_version` accordingly.
11
+
12
+ ### 2. Update gemspec dependencies
13
+ **File:** [sunzi.gemspec](sunzi.gemspec)
14
+
15
+ | Dependency | Current | New |
16
+ |------------|---------|-----|
17
+ | `thor` | unrestricted | `~> 1.3` |
18
+ | `net-ssh` | `< 5` | `~> 7.0` |
19
+ | `rainbow` | `~> 3.0` | (keep) |
20
+ | `hashugar` | unrestricted | (keep) |
21
+ | `minitest` | unrestricted | `~> 6.0` |
22
+
23
+ Also add:
24
+ - `spec.required_ruby_version = '>= 2.6'`
25
+
26
+ ### 3. Keep YAML.load for compatibility (document trust boundary)
27
+ **File:** [README.md](README.md)
28
+
29
+ Leave `YAML.load(ERB.new(File.read('sunzi.yml')).result)` as-is for maximum compatibility.
30
+ Add a short README note that `sunzi.yml` must be fully trusted because ERB executes Ruby
31
+ and YAML.load can instantiate arbitrary objects.
32
+
33
+ ### 4. Replace Travis CI with GitHub Actions
34
+ **Delete:** `.travis.yml`
35
+ **Create:** `.github/workflows/test.yml`
36
+
37
+ ```yaml
38
+ name: Tests
39
+ on: [push, pull_request]
40
+ jobs:
41
+ test:
42
+ runs-on: ubuntu-latest
43
+ strategy:
44
+ matrix:
45
+ ruby: ['3.1', '3.2', '3.3']
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ - uses: ruby/setup-ruby@v1
49
+ with:
50
+ ruby-version: ${{ matrix.ruby }}
51
+ bundler-cache: true
52
+ - run: bundle exec rake test
53
+ ```
54
+
55
+ ### 5. Update README badge + requirements
56
+ **File:** [README.md](README.md)
57
+
58
+ - Replace Travis badge with GitHub Actions badge (ensure workflow name/branch match the badge URL).
59
+ - Add a short Requirements note for the minimum supported Ruby (from step 1).
60
+
61
+ ### 6. Add .ruby-version
62
+ **Create:** `.ruby-version` with content `3.2`
63
+
64
+ ### 7. Update template default Ruby version
65
+ **File:** [templates/create/sunzi.yml](templates/create/sunzi.yml)
66
+
67
+ Update `ruby_version: 2.5` to match the modern baseline (e.g., `3.2`).
68
+
69
+ ### 8. Update CHANGELOG
70
+ **File:** [CHANGELOG.md](CHANGELOG.md)
71
+
72
+ Add a `3.0.0` entry with the breaking changes (Ruby requirement, dependency bumps, CI migration).
73
+
74
+ ### 9. Bump version
75
+ **File:** [sunzi.gemspec:5](sunzi.gemspec#L5)
76
+
77
+ Update version from `2.1.0` to `3.0.0` (major bump due to Ruby version requirement change).
78
+ If a version constant exists (e.g., `lib/sunzi/version.rb`), update it too.
79
+
80
+ ## File Summary
81
+ | Action | File |
82
+ |--------|------|
83
+ | Edit | `sunzi.gemspec` |
84
+ | Edit | `README.md` |
85
+ | Edit | `templates/create/sunzi.yml` |
86
+ | Edit | `CHANGELOG.md` |
87
+ | Delete | `.travis.yml` |
88
+ | Create | `.github/workflows/test.yml` |
89
+ | Create | `.ruby-version` |
90
+
91
+ ## Verification
92
+ 1. Run `bundle install` to update Gemfile.lock
93
+ 2. Run `bundle exec rake test` to verify tests pass
94
+ 3. Run `bundle exec sunzi version` and `bundle exec sunzi create test_project` to verify CLI works
data/sunzi.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'sunzi'
5
- spec.version = '2.0.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
5
+ spec.version = '3.0.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
6
6
  spec.authors = ['Kenn Ejima']
7
7
  spec.email = ['kenn.ejima@gmail.com']
8
8
  spec.summary = %q{Server provisioning utility for minimalists}
@@ -14,10 +14,11 @@ Gem::Specification.new do |spec|
14
14
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
15
15
  spec.require_paths = ['lib']
16
16
 
17
- spec.add_dependency 'thor', '~> 0.20'
18
- spec.add_dependency 'rainbow', '~> 2.2'
19
- spec.add_dependency 'net-ssh', '< 5' # 4.x only supports ruby-2.0
17
+ spec.add_dependency 'thor', '~> 1.3'
18
+ spec.add_dependency 'rainbow', '~> 3.0'
19
+ spec.add_dependency 'net-ssh', '~> 7.0'
20
+ spec.add_dependency 'logger'
20
21
  spec.add_dependency 'hashugar'
21
22
  spec.add_development_dependency 'rake'
22
- spec.add_development_dependency 'minitest'
23
+ spec.add_development_dependency 'minitest', '~> 6.0'
23
24
  end
@@ -3,7 +3,7 @@
3
3
  vars:
4
4
  github_username: kenn
5
5
  environment: production
6
- ruby_version: 2.5
6
+ ruby_version: 3.3
7
7
 
8
8
  # Remote recipes here will be downloaded to compiled/recipes.
9
9
  recipes:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunzi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenn Ejima
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-14 00:00:00.000000000 Z
11
+ date: 2026-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -16,44 +16,44 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.20'
19
+ version: '1.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.20'
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rainbow
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.2'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.2'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: net-ssh
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "<"
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5'
47
+ version: '7.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "<"
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5'
54
+ version: '7.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: hashugar
56
+ name: logger
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,13 +67,13 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: hashugar
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :development
76
+ type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: minitest
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '6.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '6.0'
97
111
  description: Server provisioning utility for minimalists
98
112
  email:
99
113
  - kenn.ejima@gmail.com
@@ -102,8 +116,8 @@ executables:
102
116
  extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
119
+ - ".github/workflows/test.yml"
105
120
  - ".gitignore"
106
- - ".travis.yml"
107
121
  - CHANGELOG.md
108
122
  - Gemfile
109
123
  - README.md
@@ -119,6 +133,7 @@ files:
119
133
  - lib/sunzi/dependency.rb
120
134
  - lib/sunzi/endpoint.rb
121
135
  - lib/sunzi/plugin.rb
136
+ - plan.md
122
137
  - sunzi.gemspec
123
138
  - templates/create/.gitignore
124
139
  - templates/create/files/.gitkeep
@@ -133,7 +148,7 @@ homepage: https://github.com/kenn/sunzi
133
148
  licenses:
134
149
  - MIT
135
150
  metadata: {}
136
- post_install_message:
151
+ post_install_message:
137
152
  rdoc_options: []
138
153
  require_paths:
139
154
  - lib
@@ -148,9 +163,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
163
  - !ruby/object:Gem::Version
149
164
  version: '0'
150
165
  requirements: []
151
- rubyforge_project:
152
- rubygems_version: 2.7.3
153
- signing_key:
166
+ rubygems_version: 3.5.16
167
+ signing_key:
154
168
  specification_version: 4
155
169
  summary: Server provisioning utility for minimalists
156
170
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - ruby-head