rails-saas-builder 0.9.1 → 0.9.2
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/README.md +5 -0
- data/Rakefile +14 -4
- data/lib/rsb/version.rb +1 -1
- data/lib/tasks/release.rake +103 -0
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3de2ac589ebfd2ff73aa36197c29470c5026a3b9ed7f3f628ca8a94497df1940
|
|
4
|
+
data.tar.gz: ebe2bd20c9b49d557427deb9c202ca680837e13e4377f1bd0d6345bdd386c0b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5ed10f420dc87fb4176b4c10c5e1b0ffc16e67f9ddace3c8c6e739f6af803f514788fcbc4f7ee23cd46c23f0b8a12688b57dc33d85362e2881fa57f83c954c2b
|
|
7
|
+
data.tar.gz: 75381ff463a7290a7ddba904fb2aca481fad4815861945ddc14578cfcf6a3bcc389410cc22e2e8cb56289bef49a37c6eb3ce922fed499c6e9a888960babef721
|
data/README.md
CHANGED
|
@@ -84,6 +84,11 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, coding standards,
|
|
|
84
84
|
|
|
85
85
|
To report a security vulnerability, please see [SECURITY.md](SECURITY.md). Do not open public issues for security concerns.
|
|
86
86
|
|
|
87
|
+
## Related Projects
|
|
88
|
+
|
|
89
|
+
- [Rails SaaS Builder Pro](../rails-saas-builder-pro/) — Premium features gem extending the OSS core
|
|
90
|
+
- [RSB Website](../website/) — Project marketing & documentation site
|
|
91
|
+
|
|
87
92
|
## License
|
|
88
93
|
|
|
89
94
|
Rails SaaS Builder is licensed under the [GNU Lesser General Public License v3.0](LICENSE).
|
data/Rakefile
CHANGED
|
@@ -26,22 +26,32 @@ Rake::TestTask.new(:test_integration) do |t|
|
|
|
26
26
|
t.verbose = false
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Rake::TestTask.new(:test_security) do |t|
|
|
30
|
+
t.libs << 'test'
|
|
31
|
+
t.pattern = 'test/security/**/*_test.rb'
|
|
32
|
+
t.verbose = false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc 'Run tests for a single sub-gem: rake test_gem GEM=rsb-admin [TEST=path] [SEED=1234]'
|
|
30
36
|
task :test_gem do
|
|
31
37
|
gem_name = ENV['GEM'] || abort('Usage: rake test_gem GEM=rsb-admin')
|
|
32
38
|
abort("Unknown gem: #{gem_name}") unless SUB_GEMS.include?(gem_name)
|
|
33
39
|
Dir.chdir(gem_name) do
|
|
34
40
|
sh 'bundle install --quiet'
|
|
35
41
|
test_file = ENV['TEST']
|
|
42
|
+
seed = ENV['SEED']
|
|
36
43
|
if test_file
|
|
37
|
-
|
|
44
|
+
cmd = "bundle exec ruby -Itest #{test_file}"
|
|
45
|
+
cmd += " -- --seed #{seed}" if seed
|
|
38
46
|
else
|
|
39
|
-
|
|
47
|
+
cmd = 'bundle exec rake test'
|
|
48
|
+
cmd += " TESTOPTS=\"--seed=#{seed}\"" if seed
|
|
40
49
|
end
|
|
50
|
+
sh cmd
|
|
41
51
|
end
|
|
42
52
|
end
|
|
43
53
|
|
|
44
54
|
desc 'Run all tests (sub-gems + integration)'
|
|
45
|
-
task test: %i[test_subgems test_integration]
|
|
55
|
+
task test: %i[test_subgems test_integration test_security]
|
|
46
56
|
|
|
47
57
|
task default: :test
|
data/lib/rsb/version.rb
CHANGED
data/lib/tasks/release.rake
CHANGED
|
@@ -94,6 +94,48 @@ module ReleaseHelper
|
|
|
94
94
|
puts "\nPushing gems to RubyGems.org..."
|
|
95
95
|
gem_paths.each { |path| push_gem(path) }
|
|
96
96
|
end
|
|
97
|
+
|
|
98
|
+
# --- Extension gem helpers ---
|
|
99
|
+
|
|
100
|
+
def resolve_extension(gem_name)
|
|
101
|
+
gem_dir = File.join(root, gem_name)
|
|
102
|
+
unless File.directory?(gem_dir)
|
|
103
|
+
abort "Unknown extension gem: #{gem_name}. Directory '#{gem_dir}' not found."
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
gemspec = "#{gem_name}.gemspec"
|
|
107
|
+
unless File.exist?(File.join(gem_dir, gemspec))
|
|
108
|
+
abort "Cannot find gemspec: #{File.join(gem_dir, gemspec)}"
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
version_files = Dir.glob(File.join(gem_dir, 'lib', '**', 'version.rb'))
|
|
112
|
+
if version_files.empty?
|
|
113
|
+
abort "Cannot find version.rb for #{gem_name} in #{gem_dir}/lib/"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
{ dir: gem_dir, gemspec: gemspec, version_file: version_files.first }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def read_version(version_file)
|
|
120
|
+
content = File.read(version_file)
|
|
121
|
+
match = content.match(/VERSION\s*=\s*['"]([^'"]+)['"]/)
|
|
122
|
+
abort "Cannot extract VERSION from #{version_file}" unless match
|
|
123
|
+
match[1]
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def update_version(version_file, new_version)
|
|
127
|
+
content = File.read(version_file)
|
|
128
|
+
updated = content.gsub(/VERSION\s*=\s*['"][^'"]+['"]/, "VERSION = '#{new_version}'")
|
|
129
|
+
File.write(version_file, updated)
|
|
130
|
+
puts " Updated #{version_file} → #{new_version}"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def ensure_gem_tests_pass!(gem_dir)
|
|
134
|
+
puts "Running tests for #{File.basename(gem_dir)}..."
|
|
135
|
+
return if system('bundle exec rake test', chdir: gem_dir)
|
|
136
|
+
|
|
137
|
+
abort 'Aborting: tests failed.'
|
|
138
|
+
end
|
|
97
139
|
end
|
|
98
140
|
|
|
99
141
|
desc 'Build and push all gems to RubyGems.org (no version bump)'
|
|
@@ -146,3 +188,64 @@ task :release, [:bump] do |_t, args|
|
|
|
146
188
|
puts " - Tagged v#{new_version} and pushed to origin"
|
|
147
189
|
puts '=' * 60
|
|
148
190
|
end
|
|
191
|
+
|
|
192
|
+
desc 'Build and push an extension gem (no version bump): rake publish_ext[rsb-entitlements-stripe]'
|
|
193
|
+
task :publish_ext, [:gem_name] do |_t, args|
|
|
194
|
+
gem_name = args[:gem_name] || abort('Usage: rake publish_ext[gem_name]')
|
|
195
|
+
ext = ReleaseHelper.resolve_extension(gem_name)
|
|
196
|
+
version = ReleaseHelper.read_version(ext[:version_file])
|
|
197
|
+
|
|
198
|
+
puts "Publishing #{gem_name} v#{version}..."
|
|
199
|
+
|
|
200
|
+
gem_info = { name: gem_name, dir: gem_name, gemspec: ext[:gemspec] }
|
|
201
|
+
gem_path = ReleaseHelper.build_gem(gem_info)
|
|
202
|
+
ReleaseHelper.push_gem(gem_path)
|
|
203
|
+
|
|
204
|
+
puts "\nPublished #{gem_name} v#{version} successfully!"
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
desc 'Bump, build, push, tag extension gem: rake release_ext[rsb-entitlements-stripe,patch]'
|
|
208
|
+
task :release_ext, [:gem_name, :bump] do |_t, args|
|
|
209
|
+
gem_name = args[:gem_name] || abort('Usage: rake release_ext[gem_name,bump]')
|
|
210
|
+
bump = args[:bump] || 'patch'
|
|
211
|
+
ext = ReleaseHelper.resolve_extension(gem_name)
|
|
212
|
+
current = ReleaseHelper.read_version(ext[:version_file])
|
|
213
|
+
new_version = ReleaseHelper.next_version(current, bump)
|
|
214
|
+
|
|
215
|
+
puts "Release: #{gem_name} #{current} → #{new_version} (#{bump} bump)\n\n"
|
|
216
|
+
|
|
217
|
+
# Safety checks
|
|
218
|
+
ReleaseHelper.ensure_clean_git!
|
|
219
|
+
ReleaseHelper.ensure_on_master!
|
|
220
|
+
ReleaseHelper.ensure_gem_tests_pass!(ext[:dir])
|
|
221
|
+
|
|
222
|
+
# Bump version
|
|
223
|
+
puts "\nBumping version..."
|
|
224
|
+
ReleaseHelper.update_version(ext[:version_file], new_version)
|
|
225
|
+
|
|
226
|
+
# Git commit and tag
|
|
227
|
+
root = ReleaseHelper.root
|
|
228
|
+
relative_version_file = Pathname.new(ext[:version_file]).relative_path_from(Pathname.new(root)).to_s
|
|
229
|
+
tag = "#{gem_name}-v#{new_version}"
|
|
230
|
+
|
|
231
|
+
puts "\nCommitting version bump..."
|
|
232
|
+
system("git -C #{root} add #{relative_version_file}")
|
|
233
|
+
system("git -C #{root} commit -m 'Release #{gem_name} v#{new_version}'")
|
|
234
|
+
system("git -C #{root} tag -a #{tag} -m 'Release #{gem_name} v#{new_version}'")
|
|
235
|
+
|
|
236
|
+
# Build and push gem
|
|
237
|
+
gem_info = { name: gem_name, dir: gem_name, gemspec: ext[:gemspec] }
|
|
238
|
+
gem_path = ReleaseHelper.build_gem(gem_info)
|
|
239
|
+
ReleaseHelper.push_gem(gem_path)
|
|
240
|
+
|
|
241
|
+
# Push git
|
|
242
|
+
puts "\nPushing to origin..."
|
|
243
|
+
system("git -C #{root} push origin master")
|
|
244
|
+
system("git -C #{root} push origin #{tag}")
|
|
245
|
+
|
|
246
|
+
puts "\n#{'=' * 60}"
|
|
247
|
+
puts "Released #{gem_name} v#{new_version} successfully!"
|
|
248
|
+
puts " - Gem pushed to RubyGems.org"
|
|
249
|
+
puts " - Tagged #{tag} and pushed to origin"
|
|
250
|
+
puts '=' * 60
|
|
251
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails-saas-builder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aleksandr Marchenko
|
|
@@ -15,56 +15,56 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.9.
|
|
18
|
+
version: 0.9.2
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.9.
|
|
25
|
+
version: 0.9.2
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rsb-auth
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - '='
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0.9.
|
|
32
|
+
version: 0.9.2
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - '='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 0.9.
|
|
39
|
+
version: 0.9.2
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: rsb-entitlements
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.9.
|
|
46
|
+
version: 0.9.2
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 0.9.
|
|
53
|
+
version: 0.9.2
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: rsb-settings
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - '='
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 0.9.
|
|
60
|
+
version: 0.9.2
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - '='
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 0.9.
|
|
67
|
+
version: 0.9.2
|
|
68
68
|
description: 'Wrapper gem that includes all RSB sub-gems: settings, auth, entitlements,
|
|
69
69
|
admin. Like how the rails gem wraps activerecord, actionpack, etc.'
|
|
70
70
|
email:
|