bake-modernize 0.1.0 → 0.2.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: aa6740ccbd94a52cf7576969bc029688cea94874a0452d916a32567b8a6ecae4
4
- data.tar.gz: 335912cb4686761acd60aa98690ab172d541df80c07c172d2487cf7ac60b4ac5
3
+ metadata.gz: 75271407b97ab96706e68b107d007bbfa046806ceae4e724a212da77eed2441e
4
+ data.tar.gz: e8df139fdcda5491b67644d3fe4e5cf3304f49336eec48387813d7a90558edd0
5
5
  SHA512:
6
- metadata.gz: d7cf13bf723774322f6b9a111d231b071e29d755a9ddf4838b9d77424dc56bc84cfae7a8fb5e0399a6ad2b141878d37c97a93fe5acc988c4d43f4b296cc14b5e
7
- data.tar.gz: e982f49c80e8f6b919914e7474de76062fc6346cb7dcb0b704087d661d62e9a52690361c044edebbf20ebd0a6a429355bde879da892109ce33662cb5391443ba
6
+ metadata.gz: 4a6abd81f19428b1528550cf0a6ece16dc320607055c8eb3415d6e3ed15c388b9bd3716d48509eac55198deeb6aa34806df68e85e91ef07b15995fa41b15f7da
7
+ data.tar.gz: b6b5b87f2be7f43a8a7c53e58f6324c20cdc18c364c92908772cdd33e391b15513806f7b79a16be16ca54abcdc86c9e48e4aa84234432b8e891f471c188e023c
@@ -0,0 +1,4 @@
1
+
2
+ def modernize
3
+ call('modernize:actions', 'modernize:gemfile', 'modernize:gemspec')
4
+ end
@@ -0,0 +1,17 @@
1
+
2
+ require 'bake/modernize'
3
+
4
+ def actions
5
+ update(root: Dir.pwd)
6
+ end
7
+
8
+ def update(root:)
9
+ travis_path = File.expand_path(".travis.yml", root)
10
+
11
+ if File.exist?(travis_path)
12
+ FileUtils.rm_rf(travis_path)
13
+ end
14
+
15
+ template_root = Bake::Modernize.template_path_for('actions')
16
+ Bake::Modernize.copy_template(template_root, root)
17
+ end
@@ -0,0 +1,39 @@
1
+
2
+ require 'bake/modernize'
3
+
4
+ def gemfile
5
+ update(root: Dir.pwd)
6
+ end
7
+
8
+ def update(root:)
9
+ gemfile_path = File.expand_path("Gemfile", root)
10
+ gems_path = File.expand_path("gems.rb", root)
11
+
12
+ if File.exist?(gemfile_path)
13
+ FileUtils::Verbose.mv gemfile_path, gems_path
14
+ end
15
+
16
+ gemfile_lock_path = File.expand_path("Gemfile.lock", root)
17
+ gems_locked_path = File.expand_path("gems.locked", root)
18
+
19
+ if File.exist?(gemfile_lock_path)
20
+ FileUtils::Verbose.mv gemfile_lock_path, gems_locked_path
21
+ end
22
+
23
+ gitignore_path = File.expand_path(".gitignore", root)
24
+
25
+ if File.exist?(gitignore_path)
26
+ lines = File.readlines(gitignore_path)
27
+
28
+ if index = lines.index{|pattern| pattern =~ /Gemfile\.lock/}
29
+ lines[index] = "/gems.locked"
30
+ elsif !lines.index{|pattern| pattern =~ /gems\.locked/}
31
+ lines << ""
32
+ lines << "/gems.locked"
33
+ end
34
+
35
+ File.open(gitignore_path, "w") do |file|
36
+ file.puts(lines)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,180 @@
1
+
2
+ # Rewrite the current gemspec.
3
+ def gemspec
4
+ path = self.default_gemspec_path
5
+ buffer = StringIO.new
6
+
7
+ update(path: path, output: buffer)
8
+
9
+ File.write(path, buffer.string)
10
+ end
11
+
12
+ # Rewrite the specified gemspec.
13
+ # @param
14
+ def update(path: self.default_gemspec_path, output: $stdout)
15
+ spec = Gem::Specification.load(path)
16
+
17
+ root = File.dirname(path)
18
+ version_path = self.version_path(root)
19
+
20
+ constant = File.read(version_path)
21
+ .scan(/module\s+(.*?)$/)
22
+ .flatten
23
+ .join("::")
24
+
25
+ spec.metadata["funding_uri"] ||= detect_funding_uri(spec)
26
+ spec.metadata["documentation_uri"] ||= detect_documentation_uri(spec)
27
+
28
+ spec.metadata.delete_if{|_, value| value.nil?}
29
+
30
+ output.puts
31
+ output.puts "require_relative #{version_path.sub(/\.rb$/, '').inspect}"
32
+ output.puts
33
+ output.puts "Gem::Specification.new do |spec|"
34
+ output.puts "\tspec.name = #{spec.name.dump}"
35
+ output.puts "\tspec.version = #{constant}::VERSION"
36
+ output.puts "\t"
37
+ output.puts "\tspec.summary = #{spec.summary.inspect}"
38
+ output.puts "\tspec.authors = #{spec.authors.inspect}"
39
+ output.puts "\tspec.license = #{spec.license.inspect}"
40
+
41
+ if spec.homepage and !spec.homepage.empty?
42
+ output.puts "\t"
43
+ output.puts "\tspec.homepage = #{spec.homepage.inspect}"
44
+ end
45
+
46
+ if spec.metadata.any?
47
+ output.puts "\t"
48
+ output.puts "\tspec.metadata = {"
49
+ spec.metadata.sort.each do |key, value|
50
+ output.puts "\t\t#{key.inspect} => #{value.inspect},"
51
+ end
52
+ output.puts "\t}"
53
+ end
54
+
55
+ output.puts "\t"
56
+ output.puts "\tspec.files = #{directory_glob_for(spec)}"
57
+
58
+ if spec.require_paths != ['lib']
59
+ output.puts "\tspec.require_paths = ['lib']"
60
+ end
61
+
62
+ if executables = spec.executables and executables.any?
63
+ output.puts "\t"
64
+ output.puts "\tspec.executables = #{executables.inspect}"
65
+ end
66
+
67
+ if extensions = spec.extensions and extensions.any?
68
+ output.puts "\t"
69
+ output.puts "\tspec.extensions = #{extensions.inspect}"
70
+ end
71
+
72
+ if required_ruby_version = spec.required_ruby_version
73
+ output.puts
74
+ output.puts "\tspec.required_ruby_version = #{required_ruby_version.to_s.inspect}"
75
+ end
76
+
77
+ if spec.dependencies.any?
78
+ output.puts "\t"
79
+ spec.dependencies.sort.each do |dependency|
80
+ next unless dependency.type == :runtime
81
+ output.puts "\tspec.add_dependency #{format_dependency(dependency)}"
82
+ end
83
+ end
84
+
85
+ if spec.development_dependencies.any?
86
+ output.puts "\t"
87
+ spec.development_dependencies.sort.each do |dependency|
88
+ output.puts "\tspec.add_development_dependency #{format_dependency(dependency)}"
89
+ end
90
+ end
91
+
92
+ output.puts "end"
93
+ end
94
+
95
+ private
96
+
97
+ def directory_glob_for(spec, paths = spec.files)
98
+ directories = {}
99
+ root = File.dirname(spec.loaded_from)
100
+
101
+ paths.each do |path|
102
+ directory, _ = path.split(File::SEPARATOR, 2)
103
+
104
+ full_path = File.expand_path(directory, root)
105
+ if File.directory?(full_path)
106
+ directories[directory] = true
107
+ end
108
+ end
109
+
110
+ return "Dir.glob('{#{directories.keys.join(',')}}/**/*', File::FNM_DOTMATCH, base: __dir__)"
111
+ end
112
+
113
+ def format_dependency(dependency)
114
+ requirements = dependency.requirements_list
115
+
116
+ if requirements.size == 1
117
+ requirements = requirements.first
118
+ end
119
+
120
+ if requirements == ">= 0"
121
+ requirements = nil
122
+ end
123
+
124
+ if dependency.name == "bundler"
125
+ requirements = nil
126
+ end
127
+
128
+ if requirements
129
+ "#{dependency.name.inspect}, #{requirements.inspect}"
130
+ else
131
+ "#{dependency.name.inspect}"
132
+ end
133
+ end
134
+
135
+ def default_gemspec_path
136
+ Dir["*.gemspec"].first
137
+ end
138
+
139
+ def version_path(root)
140
+ Dir["lib/**/version.rb", base: root].first
141
+ end
142
+
143
+ require 'async'
144
+ require 'async/http/internet'
145
+
146
+ def valid_uri?(uri)
147
+ Sync do
148
+ internet = Async::HTTP::Internet.new
149
+ response = internet.head(uri)
150
+
151
+ next response.success?
152
+ end
153
+ end
154
+
155
+ GITHUB_PROJECT = /github.com\/(?<account>.*?)\/(?<project>.*?)\/?/
156
+
157
+ def detect_funding_uri(spec)
158
+ if match = spec.homepage.match(GITHUB_PROJECT)
159
+ account = match[:account]
160
+
161
+ funding_uri = "https://github.com/sponsors/#{account}/"
162
+
163
+ if valid_uri?(funding_uri)
164
+ return funding_uri
165
+ end
166
+ end
167
+ end
168
+
169
+ def detect_documentation_uri(spec)
170
+ if match = spec.homepage.match(GITHUB_PROJECT)
171
+ account = match[:account]
172
+ project = match[:project]
173
+
174
+ documentation_uri = "https://#{account}.github.io/#{project}/"
175
+
176
+ if valid_uri?(documentation_uri)
177
+ return documentation_uri
178
+ end
179
+ end
180
+ end
@@ -33,7 +33,7 @@ module Bake
33
33
  end
34
34
 
35
35
  def self.copy_template(source_path, destination_path)
36
- glob = Build::Files::Glob.new(source_path, '**/{.[^\.]*,*}')
36
+ glob = Build::Files::Glob.new(source_path, '**/*')
37
37
 
38
38
  glob.each do |path|
39
39
  full_path = File.join(destination_path, path.relative_path)
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Bake
22
22
  module Modernize
23
- VERSION = "0.1.0"
23
+ VERSION = "0.2.0"
24
24
  end
25
25
  end
@@ -0,0 +1,46 @@
1
+ name: Development
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ${{matrix.os}}-latest
8
+ continue-on-error: ${{matrix.experimental}}
9
+
10
+ strategy:
11
+ matrix:
12
+ os:
13
+ - ubuntu
14
+ - macos
15
+
16
+ ruby:
17
+ - 2.5
18
+ - 2.6
19
+ - 2.7
20
+
21
+ experimental: [false]
22
+ env: [""]
23
+
24
+ include:
25
+ - os: ubuntu
26
+ ruby: truffleruby
27
+ experimental: true
28
+ - os: ubuntu
29
+ ruby: jruby
30
+ experimental: true
31
+ - os: ubuntu
32
+ ruby: head
33
+ experimental: true
34
+
35
+ steps:
36
+ - uses: actions/checkout@v2
37
+ - uses: ruby/setup-ruby@v1
38
+ with:
39
+ ruby-version: ${{matrix.ruby}}
40
+
41
+ - name: Install dependencies
42
+ run: ${{matrix.env}} bundle install
43
+
44
+ - name: Run tests
45
+ timeout-minutes: 5
46
+ run: ${{matrix.env}} bundle exec rspec
@@ -0,0 +1,6 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = tab
5
+ indent_size = 2
6
+
@@ -0,0 +1,47 @@
1
+ # #{title}
2
+
3
+ #{description}
4
+
5
+ [![Development](https://github.com/#{account}/#{project}/workflows/Development/badge.svg)](https://github.com/#{account}/#{project}/actions?workflow=Development)
6
+
7
+ ## Motivation
8
+
9
+ #{motivation}
10
+
11
+ ## Usage
12
+
13
+ Please see the [project documentation](https://#{account}.github.io/#{project}/) or run it locally using `bake utopia:project:serve`.
14
+
15
+ ## Contributing
16
+
17
+ We welcome contributions to this project.
18
+
19
+ 1. Fork it
20
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
21
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
22
+ 4. Push to the branch (`git push origin my-new-feature`)
23
+ 5. Create new Pull Request
24
+
25
+ ## License
26
+
27
+ Released under the MIT license.
28
+
29
+ Copyright, 2020, by [Samuel G. D. Williams](http://www.codeotaku.com).
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining a copy
32
+ of this software and associated documentation files (the "Software"), to deal
33
+ in the Software without restriction, including without limitation the rights
34
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
35
+ copies of the Software, and to permit persons to whom the Software is
36
+ furnished to do so, subject to the following conditions:
37
+
38
+ The above copyright notice and this permission notice shall be included in
39
+ all copies or substantial portions of the Software.
40
+
41
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
45
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
46
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
47
+ THE SOFTWARE.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bake-modernize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-12 00:00:00.000000000 Z
11
+ date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-http
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: build-files
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.6'
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: '0'
54
+ version: '1.6'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bake-bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,8 +72,15 @@ executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
+ - bake/modernize.rb
76
+ - bake/modernize/actions.rb
77
+ - bake/modernize/gemfile.rb
78
+ - bake/modernize/gemspec.rb
75
79
  - lib/bake/modernize.rb
76
80
  - lib/bake/modernize/version.rb
81
+ - template/actions/.github/workflows/development.yml
82
+ - template/editorconfig/.editorconfig
83
+ - template/readme/README.md
77
84
  homepage: https://github.com/ioquatix/bake-modernize
78
85
  licenses:
79
86
  - MIT