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 +4 -4
- data/.github/workflows/test.yml +15 -0
- data/.gitignore +4 -5
- data/CHANGELOG.md +10 -2
- data/Gemfile +1 -1
- data/README.md +19 -7
- data/Rakefile +3 -3
- data/lib/sunzi/cli.rb +2 -2
- data/lib/sunzi/command.rb +12 -13
- data/lib/sunzi/dependency.rb +1 -1
- data/lib/sunzi/plugin.rb +0 -1
- data/lib/sunzi.rb +1 -1
- data/plan.md +94 -0
- data/sunzi.gemspec +6 -5
- data/templates/create/sunzi.yml +1 -1
- metadata +34 -20
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3e3eb16169a27b2c4732e2f94b02c613620a4edd6c0b68b1f9a1f77384a3a76b
|
|
4
|
+
data.tar.gz: f8ee2e0f7277d0db5d654358ebbab93320586b66c02eb61b43844a42db67624f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
sandbox
|
|
1
|
+
/.bundle/
|
|
2
|
+
/pkg/
|
|
3
|
+
/tmp/
|
|
4
|
+
/Gemfile.lock
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
##
|
|
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
|
|
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
data/README.md
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
Sunzi
|
|
2
2
|
=====
|
|
3
3
|
|
|
4
|
+
[](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 [
|
|
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
|
-
|
|
16
|
-
* **
|
|
17
|
-
|
|
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
|
-
$
|
|
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.
|
|
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
|
|
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(
|
|
14
|
-
Sunzi::Command.new.deploy(
|
|
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
|
|
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(
|
|
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 =
|
|
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 ||=
|
|
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
|
data/lib/sunzi/dependency.rb
CHANGED
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
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 = '
|
|
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', '~>
|
|
18
|
-
spec.add_dependency 'rainbow', '~>
|
|
19
|
-
spec.add_dependency 'net-ssh', '
|
|
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
|
data/templates/create/sunzi.yml
CHANGED
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:
|
|
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:
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
54
|
+
version: '7.0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
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:
|
|
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: :
|
|
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:
|
|
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
|
-
|
|
152
|
-
|
|
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: []
|