Add tooling for gem releases
This commit is contained in:
parent
d0494a559c
commit
18fcafa1fd
9 changed files with 203 additions and 2 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,5 +1,5 @@
|
|||
*.gem
|
||||
.localgems/
|
||||
.gems/
|
||||
.bundle
|
||||
Gemfile.lock
|
||||
.yardoc/
|
||||
|
@ -7,3 +7,5 @@ Gemfile.lock
|
|||
.doc/
|
||||
pkg/
|
||||
.gems/
|
||||
stage/
|
||||
packages/
|
||||
|
|
19
Rakefile.rb
Normal file
19
Rakefile.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
require_relative "rakelib/builders"
|
||||
namespace :gem do
|
||||
task :gemspec, [:version] do |t, args|
|
||||
GemSpec.call(args[:version])
|
||||
end
|
||||
|
||||
task :copy, [:version] => [:gemspec] do |t, args|
|
||||
Copy.call(args[:version])
|
||||
end
|
||||
|
||||
task :build, [:version] => [:copy] do |t, args|
|
||||
Build.call(args[:version])
|
||||
end
|
||||
|
||||
task :deploy, [:version] => [:build] do |t, args|
|
||||
Deploy.call(args[:version])
|
||||
end
|
||||
end
|
||||
|
73
rakelib/builders.rb
Normal file
73
rakelib/builders.rb
Normal file
|
@ -0,0 +1,73 @@
|
|||
class Builder
|
||||
ROOTDIR = Dir.getwd
|
||||
STAGEDIR = File.join(ROOTDIR, "stage")
|
||||
PKGDIR = File.join(ROOTDIR, "pkgs")
|
||||
PARENT = "twenty.rb"
|
||||
CHILDREN = %w[twenty-cli twenty-backend twenty-frontend]
|
||||
include FileUtils
|
||||
|
||||
def self.call(...)
|
||||
new.call(...)
|
||||
end
|
||||
end
|
||||
|
||||
class GemSpec < Builder
|
||||
require "erb"
|
||||
def call(version)
|
||||
[PARENT, *CHILDREN].each do |node|
|
||||
path = find_path(node)
|
||||
spec = ERB.new(File.binread(path)).result_with_hash({version:})
|
||||
File.binwrite File.join(File.dirname(path), "#{node}.gemspec"), spec
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_path(node)
|
||||
if node == PARENT
|
||||
File.join(Dir.getwd, "#{node}.gemspec.erb")
|
||||
else
|
||||
File.join(Dir.getwd,node, "#{node}.gemspec.erb")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Copy < Builder
|
||||
def call(version)
|
||||
[PARENT, *CHILDREN].each do
|
||||
dest = File.join(STAGEDIR, version, _1)
|
||||
mkdir_p(dest)
|
||||
if _1 == PARENT
|
||||
sh "cp -fv *.gemspec #{dest}"
|
||||
sh "cp -Rfv lib/ #{dest}"
|
||||
else
|
||||
sh "cp -Rfv #{_1}/* #{dest}"
|
||||
end
|
||||
sh "find #{dest} -type d -exec chmod u=rwx,g=rx,o=rx {} +"
|
||||
sh "find #{dest} -type f -exec chmod u=rw,g=r,o=r {} +"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Build < Builder
|
||||
def call(version)
|
||||
dest = File.join(PKGDIR, version)
|
||||
mkdir_p(dest)
|
||||
[*CHILDREN, PARENT].each do |gem|
|
||||
Dir.chdir(File.join(STAGEDIR, version, gem)) do
|
||||
sh "gem build #{gem}.gemspec"
|
||||
sh "mv #{gem}-#{version}.gem #{dest}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Deploy < Builder
|
||||
def call(version)
|
||||
Dir.chdir File.join(PKGDIR, version) do
|
||||
[*CHILDREN, PARENT].each do |gem|
|
||||
sh "gem push #{gem}-#{version}.gem"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
21
twenty-backend/twenty-backend.gemspec.erb
Normal file
21
twenty-backend/twenty-backend.gemspec.erb
Normal file
|
@ -0,0 +1,21 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.name = "twenty-backend"
|
||||
gem.authors = ["0x1eef"]
|
||||
gem.email = ["0x1eef@protonmail.com"]
|
||||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "<%= version %>"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = `git ls-files`.split($/)
|
||||
gem.require_paths = ["lib"]
|
||||
gem.summary = "twenty: backend"
|
||||
gem.description = gem.summary
|
||||
gem.add_runtime_dependency "activerecord", "~> 7.1"
|
||||
gem.add_runtime_dependency "sqlite3", "~> 1.6"
|
||||
gem.add_runtime_dependency "webrick", "~> 1.8"
|
||||
gem.add_runtime_dependency "graphql", "~> 2.2"
|
||||
gem.add_development_dependency "test-unit", "~> 3.5.7"
|
||||
gem.add_development_dependency "standard", "~> 1.13"
|
||||
gem.add_development_dependency "rake", "~> 13.1"
|
||||
end
|
|
@ -7,7 +7,12 @@ Gem::Specification.new do |gem|
|
|||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "0.1.0"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = `git ls-files`.split($/)
|
||||
gem.files = [
|
||||
*Dir.glob(File.join(__dir__, "lib", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "lib", "**", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "libexec", "**", "*")),
|
||||
*Dir.glob(File.join(__dir__, "bin", "*"))
|
||||
]
|
||||
gem.require_paths = ["lib"]
|
||||
gem.summary = "twenty: command-line interface"
|
||||
gem.description = gem.summary
|
||||
|
|
26
twenty-cli/twenty-cli.gemspec.erb
Normal file
26
twenty-cli/twenty-cli.gemspec.erb
Normal file
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.name = "twenty-cli"
|
||||
gem.authors = ["0x1eef"]
|
||||
gem.email = ["0x1eef@protonmail.com"]
|
||||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "<%= version %>"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = [
|
||||
*Dir.glob(File.join(__dir__, "lib", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "lib", "**", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "libexec", "**", "*")),
|
||||
*Dir.glob(File.join(__dir__, "bin", "*"))
|
||||
]
|
||||
gem.require_paths = ["lib"]
|
||||
gem.summary = "twenty: command-line interface"
|
||||
gem.description = gem.summary
|
||||
gem.executables = "twenty"
|
||||
gem.add_runtime_dependency "cmd.rb", "~> 0.2"
|
||||
gem.add_development_dependency "test-unit", "~> 3.5.7"
|
||||
gem.add_development_dependency "yard", "~> 0.9"
|
||||
gem.add_development_dependency "redcarpet", "~> 3.5"
|
||||
gem.add_development_dependency "standard", "~> 1.13"
|
||||
gem.add_development_dependency "rake", "~> 13.1"
|
||||
end
|
17
twenty-frontend/twenty-frontend.gemspec.erb
Normal file
17
twenty-frontend/twenty-frontend.gemspec.erb
Normal file
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.name = "twenty-frontend"
|
||||
gem.authors = ["0x1eef"]
|
||||
gem.email = ["0x1eef@protonmail.com"]
|
||||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "<%= version %>"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = File.binread(File.join(__dir__, "MANIFEST"))
|
||||
.each_line
|
||||
.flat_map { Dir.glob(_1.chomp) }
|
||||
gem.require_paths = ["lib"]
|
||||
gem.summary = "twenty: frontend"
|
||||
gem.description = gem.summary
|
||||
gem.add_development_dependency "rake", "~> 13.0"
|
||||
end
|
19
twenty.rb.gemspec
Normal file
19
twenty.rb.gemspec
Normal file
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.name = "twenty.rb"
|
||||
gem.authors = ["0x1eef"]
|
||||
gem.email = ["0x1eef@protonmail.com"]
|
||||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "0.1.0"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = [
|
||||
*Dir.glob(File.join(__dir__, "lib", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "lib", "**", "*.rb"))
|
||||
]
|
||||
gem.summary = "Minimal project management that runs on your computer"
|
||||
gem.description = gem.summary
|
||||
gem.add_runtime_dependency "twenty-backend", "~> 0.1"
|
||||
gem.add_runtime_dependency "twenty-frontend", "~> 0.1"
|
||||
gem.add_runtime_dependency "twenty-cli", "~> 0.1"
|
||||
end
|
19
twenty.rb.gemspec.erb
Normal file
19
twenty.rb.gemspec.erb
Normal file
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.name = "twenty.rb"
|
||||
gem.authors = ["0x1eef"]
|
||||
gem.email = ["0x1eef@protonmail.com"]
|
||||
gem.homepage = "https://github.com/0x1eef/twenty#readme"
|
||||
gem.version = "<%= version %>"
|
||||
gem.licenses = ["0BSD"]
|
||||
gem.files = [
|
||||
*Dir.glob(File.join(__dir__, "lib", "*.rb")),
|
||||
*Dir.glob(File.join(__dir__, "lib", "**", "*.rb"))
|
||||
]
|
||||
gem.summary = "Minimal project management that runs on your computer"
|
||||
gem.description = gem.summary
|
||||
gem.add_runtime_dependency "twenty-backend", "~> 0.1"
|
||||
gem.add_runtime_dependency "twenty-frontend", "~> 0.1"
|
||||
gem.add_runtime_dependency "twenty-cli", "~> 0.1"
|
||||
end
|
Loading…
Reference in a new issue