pbmenv 0.1.10 → 0.1.12
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/release.yml +1 -0
- data/.github/workflows/ruby.yml +4 -8
- data/.ruby-version +1 -0
- data/CHANGELOG.md +7 -0
- data/Dockerfile +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +9 -0
- data/lib/pbmenv/cli.rb +7 -1
- data/lib/pbmenv/directory_object.rb +33 -0
- data/lib/pbmenv/pbm.rb +1 -4
- data/lib/pbmenv/services/create_version_service.rb +111 -0
- data/lib/pbmenv/{destroy_version_service.rb → services/destroy_version_service.rb} +1 -1
- data/lib/pbmenv/{download_src_service.rb → services/download_src_service.rb} +5 -3
- data/lib/pbmenv/{use_version_service.rb → services/use_version_service.rb} +1 -1
- data/lib/pbmenv/version.rb +1 -1
- data/lib/pbmenv/version_object.rb +32 -0
- data/lib/pbmenv/version_pathname.rb +39 -9
- data/lib/pbmenv.rb +43 -7
- metadata +9 -7
- data/.circleci/config.yml +0 -44
- data/lib/pbmenv/create_version_service.rb +0 -117
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07327b53425fcdc6569f0cc2de6725f6486c155fc7dad8620651815981036289
|
4
|
+
data.tar.gz: 03c119a0cd846d2a5014ff9888b506c2e2a96d698dd2dd7b2f60d003547443b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 250a607a5dfe95f4268b08aa82a9ae22476b8c46491ab512a2bed6a05701b59b110797ca12b1769dd9bbd42e91408ec5323731bf3a11eb281b6c834545259f60
|
7
|
+
data.tar.gz: 18b2dddb83005547baeadf03a3ff736aca95b675ac5dbff6c7945f72f5224cc54ea8cafaa698dc2f874373c6ce996af45e8446d0e5ea31f1640164fb1f705076
|
data/.github/workflows/ruby.yml
CHANGED
@@ -12,21 +12,17 @@ on:
|
|
12
12
|
|
13
13
|
jobs:
|
14
14
|
test:
|
15
|
-
|
16
15
|
runs-on: ubuntu-latest
|
16
|
+
timeout-minutes: 5
|
17
17
|
strategy:
|
18
18
|
matrix:
|
19
|
-
ruby-version: ['2.5', '
|
20
|
-
|
19
|
+
ruby-version: ['2.5', '3.0', '3.1', '3.2']
|
21
20
|
steps:
|
22
|
-
- uses: actions/checkout@
|
21
|
+
- uses: actions/checkout@v3
|
23
22
|
- name: Set up Ruby
|
24
|
-
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
-
# uses: ruby/setup-ruby@v1
|
27
23
|
uses: ruby/setup-ruby@v1
|
28
24
|
with:
|
29
25
|
ruby-version: ${{ matrix.ruby-version }}
|
30
|
-
bundler-cache: true
|
26
|
+
bundler-cache: true
|
31
27
|
- name: Run tests
|
32
28
|
run: bundle exec rake
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.0.2
|
data/CHANGELOG.md
CHANGED
data/Dockerfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -21,6 +21,7 @@ gem 'pbmenv'
|
|
21
21
|
* そのまま/usr/share/pbm/currentディレクトリへのシンボリックリンクを貼ります
|
22
22
|
* pbmenv use $version
|
23
23
|
* pbmenv uninstall $version
|
24
|
+
* pbmenv clean $version_size_to_keep
|
24
25
|
* API
|
25
26
|
* Pbmenv.available_versions
|
26
27
|
* https://github.com/splaplapla/procon_bypass_man/tags からバージョンのリストを取ってくる
|
@@ -34,6 +35,9 @@ gem 'pbmenv'
|
|
34
35
|
* Pbmenv.uninstall(version)
|
35
36
|
* /usr/share/pbm/current が削除対象だったら例外を投げる
|
36
37
|
* /usr/share/pbm/#{version} を 削除する
|
38
|
+
* Pbmenv.clean(version_size_to_keep)
|
39
|
+
* 古いバージョンをversion_size_to_keepの数だけ削除します
|
40
|
+
* currentと最新のディレクトリは削除対象外です
|
37
41
|
|
38
42
|
## Contributing
|
39
43
|
|
@@ -48,3 +52,8 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
48
52
|
* docker-compose run app bash
|
49
53
|
* bin/rspec
|
50
54
|
* also `DISABLE_DEBUG_LOG=1 bin/rspec`
|
55
|
+
|
56
|
+
### ローカルでgemをインストールして動作確認をする
|
57
|
+
* rake build
|
58
|
+
* gem i --local pkg/pbmenv-x.y.z.gem
|
59
|
+
* pbmenv ...
|
data/lib/pbmenv/cli.rb
CHANGED
@@ -27,12 +27,18 @@ module Pbmenv
|
|
27
27
|
when 'uninstall'
|
28
28
|
sub_command_arg = argv[1]
|
29
29
|
Pbmenv.uninstall(sub_command_arg)
|
30
|
+
when 'clean'
|
31
|
+
version_size_to_keep = argv[1].to_i
|
32
|
+
if version_size_to_keep == 0
|
33
|
+
version_size_to_keep = 10
|
34
|
+
end
|
35
|
+
Pbmenv.clean(version_size_to_keep)
|
30
36
|
when '--version'
|
31
37
|
puts Pbmenv::VERSION
|
32
38
|
else
|
33
39
|
puts <<~EOH
|
34
40
|
Unknown command:
|
35
|
-
available commands: available_versions, versions, install, use, uninstall
|
41
|
+
available commands: available_versions, versions, install, use, uninstall, clean
|
36
42
|
EOH
|
37
43
|
end
|
38
44
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pbmenv
|
2
|
+
class DirectoryObject
|
3
|
+
class NonSymlinkError < StandardError; end
|
4
|
+
|
5
|
+
def initialize(path: )
|
6
|
+
@path = path
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
@path
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [String]
|
14
|
+
def readlink!
|
15
|
+
raise NonSymlinkError if not symlink?
|
16
|
+
File.readlink(path)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String, NilClass]
|
20
|
+
def readlink
|
21
|
+
readlink!
|
22
|
+
rescue NonSymlinkError
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @return [Boolean]
|
29
|
+
def symlink?
|
30
|
+
File.symlink?(path)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/pbmenv/pbm.rb
CHANGED
@@ -5,13 +5,10 @@ require 'json'
|
|
5
5
|
|
6
6
|
module Pbmenv
|
7
7
|
class PBM
|
8
|
+
# @return [Array<String>] githubに問い合わせて、利用可能なバージョンのリストを返す
|
8
9
|
def available_versions
|
9
10
|
response = URI.open 'https://api.github.com/repos/splaplapla/procon_bypass_man/tags'
|
10
11
|
JSON.parse(response.read)
|
11
12
|
end
|
12
|
-
|
13
|
-
def versions
|
14
|
-
Dir.glob("#{Pbmenv::PBM_DIR}/v*")
|
15
|
-
end
|
16
13
|
end
|
17
14
|
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pbmenv
|
4
|
+
class CreateVersionService
|
5
|
+
class AlreadyCreatedError < StandardError; end
|
6
|
+
class NotSupportVersionError < StandardError; end
|
7
|
+
|
8
|
+
attr_accessor :version, :use_option, :enable_pbm_cloud
|
9
|
+
|
10
|
+
def initialize(version: , use_option: , enable_pbm_cloud: )
|
11
|
+
self.version = version
|
12
|
+
self.use_option = use_option
|
13
|
+
self.enable_pbm_cloud = enable_pbm_cloud
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute!
|
17
|
+
pathname = VersionPathname.new(version)
|
18
|
+
if File.exist?(pathname.version_path)
|
19
|
+
raise AlreadyCreatedError
|
20
|
+
end
|
21
|
+
|
22
|
+
begin
|
23
|
+
download_src(version)
|
24
|
+
build_app_file
|
25
|
+
create_if_miss_shared_dir
|
26
|
+
create_if_miss_device_id_file
|
27
|
+
link_device_id_file(version: version)
|
28
|
+
create_if_miss_current_dir(version: version)
|
29
|
+
rescue DownloadSrcService::DownloadError
|
30
|
+
puts "Download failed. Check the version name."
|
31
|
+
raise NotSupportVersionError
|
32
|
+
rescue => e
|
33
|
+
Helper.system_and_puts "rm -rf #{pathname.version_path}"
|
34
|
+
raise
|
35
|
+
ensure
|
36
|
+
if Dir.exist?(pathname.src_pbm_path)
|
37
|
+
Helper.system_and_puts "rm -rf #{pathname.src_pbm_path}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
return true
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# @return [String]
|
47
|
+
def download_src(version)
|
48
|
+
Pbmenv::DownloadSrcService.new(version).execute!
|
49
|
+
end
|
50
|
+
|
51
|
+
def build_app_file
|
52
|
+
pathname = VersionPathname.new(version)
|
53
|
+
Helper.system_and_puts "mkdir -p #{pathname.version_path}"
|
54
|
+
Helper.system_and_puts "cp -r #{pathname.src_project_template_systemd_units} #{pathname.version_path}/"
|
55
|
+
|
56
|
+
if File.exist?(pathname.src_pbm_project_template_app_rb_erb_path)
|
57
|
+
pathname.project_template_file_paths(include_app_erb: true).each do |project_template_file_path|
|
58
|
+
Helper.system_and_puts "cp #{project_template_file_path} #{pathname.version_path}/"
|
59
|
+
end
|
60
|
+
require pathname.lib_app_generator
|
61
|
+
AppGenerator.new(
|
62
|
+
prefix_path: pathname.version_path,
|
63
|
+
enable_integration_with_pbm_cloud: enable_pbm_cloud,
|
64
|
+
).generate
|
65
|
+
Helper.system_and_puts "rm #{pathname.app_rb_erb_path}"
|
66
|
+
else
|
67
|
+
pathname.project_template_file_paths(include_app_erb: false).each do |project_template_file_path|
|
68
|
+
Helper.system_and_puts "cp #{project_template_file_path} #{pathname.version_path}/"
|
69
|
+
end
|
70
|
+
|
71
|
+
# 旧実装バージョン. 0.2.10くらいで削除する
|
72
|
+
if enable_pbm_cloud
|
73
|
+
text = File.read(pathname.app_rb_path)
|
74
|
+
if text =~ /config\.api_servers\s+=\s+\['(https:\/\/.+)'\]/ && (url = $1)
|
75
|
+
text.gsub!(/#\s+config\.api_servers\s+=\s+.+$/, "config.api_servers = '#{url}'")
|
76
|
+
end
|
77
|
+
File.write(pathname.app_rb_path, text)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_if_miss_shared_dir
|
83
|
+
return if File.exist?(VersionPathname.shared)
|
84
|
+
|
85
|
+
Helper.system_and_puts <<~SHELL
|
86
|
+
mkdir -p #{VersionPathname.shared}
|
87
|
+
SHELL
|
88
|
+
end
|
89
|
+
|
90
|
+
def create_if_miss_device_id_file
|
91
|
+
device_id_path_in_shared = VersionPathname.device_id_path_in_shared
|
92
|
+
return if File.exist?(device_id_path_in_shared)
|
93
|
+
|
94
|
+
File.write(device_id_path_in_shared, "d_#{SecureRandom.uuid}")
|
95
|
+
end
|
96
|
+
|
97
|
+
def link_device_id_file(version: )
|
98
|
+
pathname = VersionPathname.new(version)
|
99
|
+
Helper.system_and_puts <<~SHELL
|
100
|
+
ln -s #{pathname.device_id_path_in_shared} #{pathname.device_id_path_in_version}
|
101
|
+
SHELL
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_if_miss_current_dir(version: )
|
105
|
+
# 初回だけinstall時にcurrentを作成する
|
106
|
+
if !File.exist?(VersionPathname.current) || use_option
|
107
|
+
UseVersionService.new(version: version).execute!
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -13,7 +13,7 @@ module Pbmenv
|
|
13
13
|
def execute!
|
14
14
|
version_pathname = VersionPathname.new(version)
|
15
15
|
|
16
|
-
unless File.
|
16
|
+
unless File.exist?(version_pathname.version_path)
|
17
17
|
raise VersionNotFoundError
|
18
18
|
end
|
19
19
|
Helper.system_and_puts "rm -rf #{version_pathname.version_path}"
|
@@ -9,19 +9,21 @@ module Pbmenv
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def execute!
|
12
|
+
pathname = VersionPathname.new(version)
|
13
|
+
pathname.src_pbm_path
|
12
14
|
if ENV["DEBUG_INSTALL"]
|
13
15
|
shell = <<~SHELL
|
14
|
-
|
16
|
+
git clone https://github.com/splaplapla/procon_bypass_man.git #{pathname.src_pbm_path}
|
15
17
|
SHELL
|
16
18
|
else
|
17
19
|
# TODO cache for testing
|
18
20
|
shell = <<~SHELL
|
19
|
-
|
21
|
+
curl -L https://github.com/splaplapla/procon_bypass_man/archive/refs/tags/v#{version}.tar.gz | tar xvz -C /tmp > /dev/null
|
20
22
|
SHELL
|
21
23
|
end
|
22
24
|
|
23
25
|
if Helper.system_and_puts(shell)
|
24
|
-
unless File.
|
26
|
+
unless File.exist?(pathname.src_pbm_project_template_path)
|
25
27
|
raise NotSupportVersionError, "This version is not support by pbmenv"
|
26
28
|
end
|
27
29
|
else
|
@@ -20,7 +20,7 @@ module Pbmenv
|
|
20
20
|
def throw_error_if_has_not_version
|
21
21
|
version_pathname = VersionPathname.new(version)
|
22
22
|
|
23
|
-
if !File.
|
23
|
+
if !File.exist?(version_pathname.version_path_without_v) && !File.exist?(version_pathname.version_path)
|
24
24
|
raise UseVersionService::VersionNotFoundError
|
25
25
|
end
|
26
26
|
end
|
data/lib/pbmenv/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Pbmenv
|
2
|
+
class VersionObject
|
3
|
+
# @param [String] version_name
|
4
|
+
# @param [Boolean] is_latest
|
5
|
+
# @param [Boolean] is_current
|
6
|
+
def initialize(version_name: , is_latest: , is_current: )
|
7
|
+
@version_name = version_name
|
8
|
+
@is_latest = is_latest
|
9
|
+
@is_current = is_current
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
def version_name
|
14
|
+
@version_name
|
15
|
+
end
|
16
|
+
|
17
|
+
# alias
|
18
|
+
def name
|
19
|
+
version_name
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Boolean]
|
23
|
+
def current_version?
|
24
|
+
@is_current
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Boolean]
|
28
|
+
def latest_version?
|
29
|
+
@is_latest
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module Pbmenv
|
2
2
|
class VersionPathname
|
3
|
-
|
3
|
+
attr_accessor :version
|
4
4
|
|
5
5
|
def initialize(version)
|
6
|
-
|
6
|
+
self.version = version
|
7
7
|
end
|
8
8
|
|
9
9
|
def version_path
|
10
|
-
File.join(PBM_DIR, "
|
10
|
+
File.join(PBM_DIR, "v#{version}")
|
11
11
|
end
|
12
12
|
|
13
13
|
def version_path_without_v
|
14
|
-
File.join(PBM_DIR, "
|
14
|
+
File.join(PBM_DIR, "#{version}")
|
15
15
|
end
|
16
16
|
|
17
17
|
def app_rb_path
|
@@ -23,23 +23,53 @@ module Pbmenv
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def device_id_path_in_version
|
26
|
-
File.join(version_path, "
|
26
|
+
File.join(version_path, "device_id")
|
27
|
+
end
|
28
|
+
|
29
|
+
def src_pbm_path
|
30
|
+
File.join("/tmp", "procon_bypass_man-#{version}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def project_template_file_paths(include_app_erb: )
|
34
|
+
paths = ["README.md", "setting.yml"]
|
35
|
+
if include_app_erb
|
36
|
+
paths << "app.rb.erb"
|
37
|
+
else
|
38
|
+
paths << "app.rb"
|
39
|
+
end
|
40
|
+
return paths.map { |path| File.join(src_pbm_project_template_path, path) }
|
27
41
|
end
|
28
42
|
|
29
43
|
def device_id_path_in_shared
|
30
|
-
File.join(self.class.shared, "
|
44
|
+
File.join(self.class.shared, "device_id")
|
45
|
+
end
|
46
|
+
|
47
|
+
def src_pbm_project_template_path
|
48
|
+
File.join(src_pbm_path, "project_template")
|
49
|
+
end
|
50
|
+
|
51
|
+
def src_pbm_project_template_app_rb_erb_path
|
52
|
+
File.join(src_pbm_project_template_path, "app.rb.erb")
|
53
|
+
end
|
54
|
+
|
55
|
+
def lib_app_generator
|
56
|
+
File.join(src_pbm_project_template_path, "lib", "app_generator")
|
57
|
+
end
|
58
|
+
|
59
|
+
def src_project_template_systemd_units
|
60
|
+
File.join(src_pbm_project_template_path, "systemd_units")
|
31
61
|
end
|
32
62
|
|
33
63
|
def self.device_id_path_in_shared
|
34
|
-
File.join(shared, "
|
64
|
+
File.join(shared, "device_id")
|
35
65
|
end
|
36
66
|
|
37
67
|
def self.current
|
38
|
-
File.join(PBM_DIR, "
|
68
|
+
File.join(PBM_DIR, "current")
|
39
69
|
end
|
40
70
|
|
41
71
|
def self.shared
|
42
|
-
File.join(PBM_DIR, "
|
72
|
+
File.join(PBM_DIR, "shared")
|
43
73
|
end
|
44
74
|
end
|
45
75
|
end
|
data/lib/pbmenv.rb
CHANGED
@@ -8,20 +8,42 @@ require_relative "pbmenv/cli"
|
|
8
8
|
require_relative "pbmenv/pbm"
|
9
9
|
require_relative "pbmenv/helper"
|
10
10
|
require_relative "pbmenv/version_pathname"
|
11
|
-
require_relative "pbmenv/
|
12
|
-
require_relative "pbmenv/
|
13
|
-
require_relative "pbmenv/
|
14
|
-
require_relative "pbmenv/
|
11
|
+
require_relative "pbmenv/version_object"
|
12
|
+
require_relative "pbmenv/directory_object"
|
13
|
+
require_relative "pbmenv/services/create_version_service"
|
14
|
+
require_relative "pbmenv/services/destroy_version_service"
|
15
|
+
require_relative "pbmenv/services/use_version_service"
|
16
|
+
require_relative "pbmenv/services/download_src_service"
|
15
17
|
|
16
18
|
module Pbmenv
|
17
19
|
PBM_DIR = "/usr/share/pbm"
|
18
20
|
|
21
|
+
# @return [Pbmenv::DirectoryObject]
|
22
|
+
def self.current_directory
|
23
|
+
Pbmenv::DirectoryObject.new(path: VersionPathname.current)
|
24
|
+
end
|
25
|
+
|
19
26
|
def self.available_versions
|
20
27
|
Pbmenv::PBM.new.available_versions.map { |x| x["name"] =~ /^v([\d.]+)/ && $1 }.compact
|
21
28
|
end
|
22
29
|
|
30
|
+
# @return [Array<Pbmenv::VersionObject>]
|
31
|
+
def self.installed_versions
|
32
|
+
unsorted_dirs = Dir.glob("#{Pbmenv::PBM_DIR}/v*")
|
33
|
+
sorted_version_names = unsorted_dirs.map { |name| Pathname.new(name).basename.to_s =~ /^v([\d.]+)/ && $1 }.compact.sort_by {|x| Gem::Version.new(x) }
|
34
|
+
sorted_version_names.map do |version_name|
|
35
|
+
VersionObject.new(
|
36
|
+
version_name: version_name,
|
37
|
+
is_latest: sorted_version_names.last == version_name,
|
38
|
+
is_current: Pbmenv.current_directory.readlink&.end_with?(version_name) || false,
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# @deprecated
|
23
44
|
def self.versions
|
24
|
-
|
45
|
+
unsorted_dirs = Dir.glob("#{Pbmenv::PBM_DIR}/v*")
|
46
|
+
unsorted_dirs.map { |name| Pathname.new(name).basename.to_s =~ /^v([\d.]+)/ && $1 }.compact.sort_by {|x| Gem::Version.new(x) }.compact
|
25
47
|
end
|
26
48
|
|
27
49
|
def self.install(version, use_option: false, enable_pbm_cloud: false)
|
@@ -42,7 +64,7 @@ module Pbmenv
|
|
42
64
|
end
|
43
65
|
end
|
44
66
|
|
45
|
-
# TODO current
|
67
|
+
# TODO: 引数がcurrentを指しているバージョンはどうする?
|
46
68
|
def self.uninstall(version)
|
47
69
|
raise "Need a version" if version.nil?
|
48
70
|
version = Helper.normalize_version(version) or raise "mismatch version number!"
|
@@ -58,7 +80,7 @@ module Pbmenv
|
|
58
80
|
raise "Need a version" if version.nil?
|
59
81
|
version =
|
60
82
|
if version == 'latest'
|
61
|
-
versions.last
|
83
|
+
self.versions.last
|
62
84
|
else
|
63
85
|
Helper.normalize_version(version) or raise "mismatch version number!"
|
64
86
|
end
|
@@ -69,4 +91,18 @@ module Pbmenv
|
|
69
91
|
return false
|
70
92
|
end
|
71
93
|
end
|
94
|
+
|
95
|
+
# @param [Integer] keep_versions_size
|
96
|
+
# @return [void]
|
97
|
+
def self.clean(keep_versions_size)
|
98
|
+
raise ArgumentError if keep_versions_size.nil?
|
99
|
+
|
100
|
+
clean_targets = self.installed_versions[(keep_versions_size + 1)..-1]
|
101
|
+
return if clean_targets.nil?
|
102
|
+
|
103
|
+
clean_targets.each do |version_object|
|
104
|
+
next if(version_object.latest_version? or version_object.current_version?)
|
105
|
+
self.uninstall(version_object.name)
|
106
|
+
end
|
107
|
+
end
|
72
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pbmenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiikko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A package manager of PBM
|
14
14
|
email:
|
@@ -18,11 +18,11 @@ executables:
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
-
- ".circleci/config.yml"
|
22
21
|
- ".github/workflows/release.yml"
|
23
22
|
- ".github/workflows/ruby.yml"
|
24
23
|
- ".gitignore"
|
25
24
|
- ".rspec"
|
25
|
+
- ".ruby-version"
|
26
26
|
- CHANGELOG.md
|
27
27
|
- CODE_OF_CONDUCT.md
|
28
28
|
- Dockerfile
|
@@ -39,13 +39,15 @@ files:
|
|
39
39
|
- exe/pbmenv
|
40
40
|
- lib/pbmenv.rb
|
41
41
|
- lib/pbmenv/cli.rb
|
42
|
-
- lib/pbmenv/
|
43
|
-
- lib/pbmenv/destroy_version_service.rb
|
44
|
-
- lib/pbmenv/download_src_service.rb
|
42
|
+
- lib/pbmenv/directory_object.rb
|
45
43
|
- lib/pbmenv/helper.rb
|
46
44
|
- lib/pbmenv/pbm.rb
|
47
|
-
- lib/pbmenv/
|
45
|
+
- lib/pbmenv/services/create_version_service.rb
|
46
|
+
- lib/pbmenv/services/destroy_version_service.rb
|
47
|
+
- lib/pbmenv/services/download_src_service.rb
|
48
|
+
- lib/pbmenv/services/use_version_service.rb
|
48
49
|
- lib/pbmenv/version.rb
|
50
|
+
- lib/pbmenv/version_object.rb
|
49
51
|
- lib/pbmenv/version_pathname.rb
|
50
52
|
- pbmenv.gemspec
|
51
53
|
homepage: https://github.com/splaplapla/pbmenv
|
data/.circleci/config.yml
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
version: 2.1
|
2
|
-
|
3
|
-
executors:
|
4
|
-
ruby:
|
5
|
-
parameters:
|
6
|
-
tag:
|
7
|
-
type: string
|
8
|
-
default: "latest"
|
9
|
-
docker:
|
10
|
-
- image: ruby:<< parameters.tag >>
|
11
|
-
environment:
|
12
|
-
BUNDLE_PATH: vendor/bundle
|
13
|
-
BUNDLE_JOBS: 4
|
14
|
-
working_directory: ~/app
|
15
|
-
|
16
|
-
jobs:
|
17
|
-
rspec:
|
18
|
-
parameters:
|
19
|
-
version:
|
20
|
-
type: string
|
21
|
-
executor:
|
22
|
-
name: ruby
|
23
|
-
tag: << parameters.version >>
|
24
|
-
steps:
|
25
|
-
- checkout
|
26
|
-
- run: ruby --version
|
27
|
-
- run: bundle --version
|
28
|
-
- run: gem --version
|
29
|
-
- run: gem install bundler
|
30
|
-
- run: bundle install --jobs 4
|
31
|
-
- run: bundle exec rspec
|
32
|
-
|
33
|
-
build_jobs: &build_jobs
|
34
|
-
- rspec:
|
35
|
-
matrix:
|
36
|
-
parameters:
|
37
|
-
version:
|
38
|
-
- "2.5"
|
39
|
-
- "2.7"
|
40
|
-
- "3.0"
|
41
|
-
workflows:
|
42
|
-
version: 2
|
43
|
-
build:
|
44
|
-
jobs: *build_jobs
|
@@ -1,117 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Pbmenv
|
4
|
-
class CreateVersionService
|
5
|
-
class AlreadyCreatedError < StandardError; end
|
6
|
-
class NotSupportVersionError < StandardError; end
|
7
|
-
|
8
|
-
attr_accessor :version, :use_option, :enable_pbm_cloud
|
9
|
-
|
10
|
-
def initialize(version: , use_option: , enable_pbm_cloud: )
|
11
|
-
self.version = version
|
12
|
-
self.use_option = use_option
|
13
|
-
self.enable_pbm_cloud = enable_pbm_cloud
|
14
|
-
end
|
15
|
-
|
16
|
-
def execute!
|
17
|
-
if File.exists?("/usr/share/pbm/v#{version}")
|
18
|
-
raise AlreadyCreatedError
|
19
|
-
end
|
20
|
-
|
21
|
-
begin
|
22
|
-
source_path = download_src(version)
|
23
|
-
build_app_file(source_path: source_path)
|
24
|
-
create_if_miss_shared_dir
|
25
|
-
create_if_miss_device_id_file
|
26
|
-
link_device_id_file(version: version)
|
27
|
-
create_if_miss_current_dir(version: version)
|
28
|
-
rescue DownloadSrcService::DownloadError
|
29
|
-
puts "Download failed. Check the version name."
|
30
|
-
raise NotSupportVersionError
|
31
|
-
rescue => e
|
32
|
-
Helper.system_and_puts "rm -rf #{VersionPathname.new(version).version_path}"
|
33
|
-
raise
|
34
|
-
ensure
|
35
|
-
if source_path && Dir.exists?(source_path)
|
36
|
-
Helper.system_and_puts "rm -rf #{source_path}"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
return true
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
# @return [String]
|
46
|
-
def download_src(version)
|
47
|
-
Pbmenv::DownloadSrcService.new(version).execute!
|
48
|
-
return "procon_bypass_man-#{version}"
|
49
|
-
end
|
50
|
-
|
51
|
-
def build_app_file(source_path: )
|
52
|
-
pathname = VersionPathname.new(version)
|
53
|
-
|
54
|
-
if File.exists?(File.join(source_path, "project_template/app.rb.erb"))
|
55
|
-
Helper.system_and_puts <<~SHELL
|
56
|
-
mkdir -p #{pathname.version_path} &&
|
57
|
-
cp procon_bypass_man-#{version}/project_template/app.rb.erb #{pathname.version_path}/
|
58
|
-
cp procon_bypass_man-#{version}/project_template/README.md #{pathname.version_path}/
|
59
|
-
cp procon_bypass_man-#{version}/project_template/setting.yml #{pathname.version_path}/
|
60
|
-
cp -r procon_bypass_man-#{version}/project_template/systemd_units #{pathname.version_path}/
|
61
|
-
SHELL
|
62
|
-
require "./procon_bypass_man-#{version}/project_template/lib/app_generator"
|
63
|
-
AppGenerator.new(
|
64
|
-
prefix_path: pathname.version_path,
|
65
|
-
enable_integration_with_pbm_cloud: enable_pbm_cloud,
|
66
|
-
).generate
|
67
|
-
Helper.system_and_puts "rm #{pathname.app_rb_erb_path}"
|
68
|
-
else
|
69
|
-
Helper.system_and_puts <<~SHELL
|
70
|
-
mkdir -p #{pathname.version_path} &&
|
71
|
-
cp procon_bypass_man-#{version}/project_template/app.rb #{pathname.version_path}/
|
72
|
-
cp procon_bypass_man-#{version}/project_template/README.md #{pathname.version_path}/
|
73
|
-
cp procon_bypass_man-#{version}/project_template/setting.yml #{pathname.version_path}/
|
74
|
-
cp -r procon_bypass_man-#{version}/project_template/systemd_units #{pathname.version_path}/
|
75
|
-
SHELL
|
76
|
-
end
|
77
|
-
|
78
|
-
# 旧実装バージョン
|
79
|
-
if enable_pbm_cloud
|
80
|
-
text = File.read(pathname.app_rb_path)
|
81
|
-
if text =~ /config\.api_servers\s+=\s+\['(https:\/\/.+)'\]/ && (url = $1)
|
82
|
-
text.gsub!(/#\s+config\.api_servers\s+=\s+.+$/, "config.api_servers = '#{url}'")
|
83
|
-
end
|
84
|
-
File.write(pathname.app_rb_path, text)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_if_miss_shared_dir
|
89
|
-
unless File.exists?(VersionPathname.shared)
|
90
|
-
Helper.system_and_puts <<~SHELL
|
91
|
-
mkdir -p #{VersionPathname.shared}
|
92
|
-
SHELL
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def create_if_miss_device_id_file
|
97
|
-
device_id_path_in_shared = VersionPathname.device_id_path_in_shared
|
98
|
-
unless File.exists?(device_id_path_in_shared)
|
99
|
-
File.write(device_id_path_in_shared, "d_#{SecureRandom.uuid}")
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def link_device_id_file(version: )
|
104
|
-
pathname = VersionPathname.new(version)
|
105
|
-
Helper.system_and_puts <<~SHELL
|
106
|
-
ln -s #{pathname.device_id_path_in_shared} #{pathname.device_id_path_in_version}
|
107
|
-
SHELL
|
108
|
-
end
|
109
|
-
|
110
|
-
def create_if_miss_current_dir(version: )
|
111
|
-
# 初回だけinstall時にcurrentを作成する
|
112
|
-
if !File.exists?(VersionPathname.current) || use_option
|
113
|
-
UseVersionService.new(version: version).execute!
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|