setdevenv 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 +4 -4
- data/.rubocop.yml +6 -0
- data/README.md +4 -4
- data/lib/set_dev_env/generator/base.rb +1 -3
- data/lib/set_dev_env/generator/dockerfile.rb +4 -2
- data/lib/set_dev_env/version.rb +1 -1
- data/lib/set_dev_env/version_fetcher.rb +76 -0
- metadata +21 -5
- /data/{lib/set_dev_env/generator/templates → templates}/Dockerfile.tt +0 -0
- /data/{lib/set_dev_env/generator/templates → templates}/Makefile.tt +0 -0
- /data/{lib/set_dev_env/generator/templates → templates}/docker-compose.tt +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 036d7166efb316e1d0c3da0386416487354eb70e37d7594685695a1f40c86d07
|
4
|
+
data.tar.gz: 8adecb3566409a5da7a7fec22b1d3ab35422c67c0f30a536340a88aa6f06db21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac90cc46fa5723f631af66b633998bb11fc7b0b15292411a5fe19f4fea2b42ff82264f6805561bab2f709800635d21654536cc92f27fb3a8057982d699b49806
|
7
|
+
data.tar.gz: 90ac5d92b13af5f9c34a90d26da6b2c09b85eaef020ef810b9404fd2cd1da51debdc5c8f4ab88519f7711f256ffdae3b11126ac28a0641d2671fbd7ecdffbb13
|
data/.rubocop.yml
ADDED
data/README.md
CHANGED
@@ -20,7 +20,7 @@ This command will generate 3 files (***more to comming eventually***) within a f
|
|
20
20
|
|
21
21
|
## TODO
|
22
22
|
|
23
|
-
- Retrieve ruby/alpine latests version from somewhere (and cache it)
|
24
|
-
- Accept those versions as arguments from cli
|
25
|
-
- Accept an argument in cli to use rails when setuping the new environment
|
26
|
-
- Accept an argument `--service` to create a custom service within docker-compose
|
23
|
+
- [ ] Retrieve ruby/alpine latests version from somewhere (and cache it)
|
24
|
+
- [ ] Accept those versions as arguments from cli
|
25
|
+
- [ ] Accept an argument in cli to use rails when setuping the new environment
|
26
|
+
- [ ] Accept an argument `--service` to create a custom service within docker-compose
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../version_fetcher'
|
4
|
+
|
3
5
|
module SetDevEnv
|
4
6
|
module Setup::Generator
|
5
7
|
class Dockerfile < Base
|
@@ -9,8 +11,8 @@ module SetDevEnv
|
|
9
11
|
|
10
12
|
def copy_dockerfile
|
11
13
|
# TODO: retrieve those values from somewhere to take latest ruby/alpine versions
|
12
|
-
self.alpine_version ||=
|
13
|
-
self.ruby_version ||=
|
14
|
+
self.alpine_version ||= VersionFetcher.call(resource: :alpine)
|
15
|
+
self.ruby_version ||= VersionFetcher.call(resource: :ruby)
|
14
16
|
|
15
17
|
template('Dockerfile.tt', "#{name}/Dockerfile.dev")
|
16
18
|
end
|
data/lib/set_dev_env/version.rb
CHANGED
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'net/http'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'uri'
|
7
|
+
|
8
|
+
module SetDevEnv
|
9
|
+
module VersionFetcher
|
10
|
+
CACHE_FOLDER_PATH = "#{File.dirname(__FILE__, 3)}/.cache".freeze
|
11
|
+
RUBY_LATEST_VERSION = '3.4.2'
|
12
|
+
RUBY_RELEASES_ENDPOINT = 'https://www.ruby-lang.org/en/downloads/releases/'
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def call(resource:)
|
16
|
+
case resource
|
17
|
+
in :alpine then alpine
|
18
|
+
in :ruby then ruby(resource:)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def alpine = '3.21'
|
25
|
+
|
26
|
+
def ruby(resource:)
|
27
|
+
retrieve_version_from_cache(resource) || retrieve_version_from_web
|
28
|
+
end
|
29
|
+
|
30
|
+
def retrieve_version_from_cache(resource)
|
31
|
+
cache_file_path = "#{CACHE_FOLDER_PATH}/cache.json"
|
32
|
+
|
33
|
+
return unless File.readable?(cache_file_path)
|
34
|
+
|
35
|
+
cache = JSON.parse(File.read(cache_file_path), symbolize_names: true)
|
36
|
+
|
37
|
+
cache[resource]&.fetch(:latest_version)
|
38
|
+
end
|
39
|
+
|
40
|
+
def retrieve_version_from_web
|
41
|
+
response = Net::HTTP.get_response(URI(RUBY_RELEASES_ENDPOINT))
|
42
|
+
|
43
|
+
return RUBY_LATEST_VERSION unless response.instance_of?(Net::HTTPOK)
|
44
|
+
|
45
|
+
document = Nokogiri::HTML5(response.body)
|
46
|
+
|
47
|
+
versions = document.css('table.release-list tr td:first-child').map do |td|
|
48
|
+
td.text.gsub(/\D/, '')[0..2].chars * '.'
|
49
|
+
end.uniq
|
50
|
+
|
51
|
+
higher_version = find_higher_version(versions)
|
52
|
+
cache(higher_version)
|
53
|
+
|
54
|
+
higher_version
|
55
|
+
rescue StandardError => _e
|
56
|
+
RUBY_LATEST_VERSION
|
57
|
+
end
|
58
|
+
|
59
|
+
def find_higher_version(versions)
|
60
|
+
versions.map { Gem::Version.new(it) }.max.to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
def cache(version)
|
64
|
+
FileUtils.mkdir_p(CACHE_FOLDER_PATH)
|
65
|
+
|
66
|
+
# TODO: prevent overwrite file if file exists (in case im caching alpine/ruby versions
|
67
|
+
File.write(
|
68
|
+
'../../.cache/cache.json',
|
69
|
+
JSON.pretty_generate({ ruby: { latest_version: version } })
|
70
|
+
)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private_constant :CACHE_FOLDER_PATH, :RUBY_LATEST_VERSION, :RUBY_RELEASES_ENDPOINT
|
75
|
+
end
|
76
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: setdevenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Júnior
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-03-
|
10
|
+
date: 2025-03-05 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: nokogiri
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.18'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '1.18'
|
12
26
|
- !ruby/object:Gem::Dependency
|
13
27
|
name: thor
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +100,7 @@ executables:
|
|
86
100
|
extensions: []
|
87
101
|
extra_rdoc_files: []
|
88
102
|
files:
|
103
|
+
- ".rubocop.yml"
|
89
104
|
- CHANGELOG.md
|
90
105
|
- CODE_OF_CONDUCT.md
|
91
106
|
- LICENSE.txt
|
@@ -100,12 +115,13 @@ files:
|
|
100
115
|
- lib/set_dev_env/generator/folder.rb
|
101
116
|
- lib/set_dev_env/generator/generator.rb
|
102
117
|
- lib/set_dev_env/generator/makefile.rb
|
103
|
-
- lib/set_dev_env/generator/templates/Dockerfile.tt
|
104
|
-
- lib/set_dev_env/generator/templates/Makefile.tt
|
105
|
-
- lib/set_dev_env/generator/templates/docker-compose.tt
|
106
118
|
- lib/set_dev_env/setup.rb
|
107
119
|
- lib/set_dev_env/version.rb
|
120
|
+
- lib/set_dev_env/version_fetcher.rb
|
108
121
|
- sig/set_dev_env.rbs
|
122
|
+
- templates/Dockerfile.tt
|
123
|
+
- templates/Makefile.tt
|
124
|
+
- templates/docker-compose.tt
|
109
125
|
homepage: https://github.com/b-sep/setdevenv
|
110
126
|
licenses:
|
111
127
|
- MIT
|
File without changes
|
File without changes
|
File without changes
|