captive-release 0.4.3 → 0.4.4
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/lib/captive_release/build_command.rb +52 -0
- data/lib/captive_release/build_config.rb +20 -0
- data/lib/captive_release/build_config_prompt.rb +31 -0
- data/lib/captive_release/build_dispatch_run.rb +35 -0
- data/lib/captive_release/cli.rb +27 -382
- data/lib/captive_release/config.rb +2 -44
- data/lib/captive_release/config_file.rb +30 -0
- data/lib/captive_release/config_loader.rb +34 -0
- data/lib/captive_release/config_writer.rb +45 -0
- data/lib/captive_release/framework_detector.rb +30 -0
- data/lib/captive_release/git_commands.rb +18 -27
- data/lib/captive_release/git_release.rb +24 -0
- data/lib/captive_release/github_api.rb +45 -0
- data/lib/captive_release/github_dispatch.rb +12 -27
- data/lib/captive_release/github_http.rb +34 -25
- data/lib/captive_release/github_release.rb +16 -32
- data/lib/captive_release/github_repo.rb +29 -0
- data/lib/captive_release/github_token.rb +18 -0
- data/lib/captive_release/help.rb +50 -0
- data/lib/captive_release/init_command.rb +44 -0
- data/lib/captive_release/menu.rb +33 -0
- data/lib/captive_release/options.rb +27 -0
- data/lib/captive_release/release_command.rb +42 -0
- data/lib/captive_release/release_preconditions.rb +24 -0
- data/lib/captive_release/release_publication.rb +30 -0
- data/lib/captive_release/repo_files.rb +35 -0
- data/lib/captive_release/shell.rb +20 -0
- data/lib/captive_release/terminal.rb +37 -0
- data/lib/captive_release/version.rb +1 -1
- data/lib/captive_release/version_choice.rb +56 -0
- data/lib/captive_release/version_detector.rb +26 -57
- data/lib/captive_release/version_file.rb +14 -79
- data/lib/captive_release/version_file_bootstrap.rb +25 -0
- data/lib/captive_release/version_file_selection.rb +53 -0
- data/lib/captive_release/version_files_argument.rb +21 -0
- data/lib/captive_release/version_files_writing.rb +22 -0
- data/lib/captive_release/version_format.rb +86 -0
- data/lib/captive_release.rb +29 -0
- metadata +29 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
module CaptiveRelease
|
|
6
|
+
# Comment une version s'exprime dans un texte, format par format.
|
|
7
|
+
#
|
|
8
|
+
# Cette unité ne touche jamais au disque : elle lit et réécrit une chaîne. VersionFile se
|
|
9
|
+
# charge du fichier, de son existence et du message d'erreur qui nomme le chemin. Elle
|
|
10
|
+
# change quand un format gagne une forme, VersionFile quand les garde-fous changent.
|
|
11
|
+
class VersionFormat
|
|
12
|
+
attr_reader :expected
|
|
13
|
+
|
|
14
|
+
def initialize(read:, write:, expected:)
|
|
15
|
+
@read = read
|
|
16
|
+
@write = write
|
|
17
|
+
@expected = expected
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Rend nil plutôt que de lever : seul l'appelant connaît le chemin du fichier, donc lui
|
|
21
|
+
# seul peut composer un message qui dise où chercher.
|
|
22
|
+
def read(content) = @read.call(content)
|
|
23
|
+
|
|
24
|
+
def write(content, old_version, new_version) = @write.call(content, old_version, new_version)
|
|
25
|
+
|
|
26
|
+
# Quatre des six formats ne diffèrent que par le motif qui capture la version et par la
|
|
27
|
+
# forme du remplacement. Les décrire un par un faisait apparier leurs lambdas par Flay.
|
|
28
|
+
#
|
|
29
|
+
# Le motif qui retrouve la version à remplacer est dérivé de celui qui la capture : le
|
|
30
|
+
# réécrire à la main dupliquait chaque expression, et les deux pouvaient diverger sans
|
|
31
|
+
# que rien ne le signale.
|
|
32
|
+
def self.by_pattern(capture, expected, &replace)
|
|
33
|
+
new(read: ->(content) { content[capture, 1] },
|
|
34
|
+
write: lambda { |content, old, nouvelle|
|
|
35
|
+
content.gsub(locate(capture, old)) { |occurrence| replace.call(occurrence, nouvelle) }
|
|
36
|
+
},
|
|
37
|
+
expected: expected)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
CAPTURE_GROUP = "(.+?)"
|
|
41
|
+
|
|
42
|
+
def self.locate(capture, old)
|
|
43
|
+
Regexp.new(capture.source.sub(CAPTURE_GROUP) { Regexp.escape(old) })
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# app_config_js et android_gradle ne diffèrent que par l'étiquette qui précède la version
|
|
47
|
+
# et par ce qui l'en sépare.
|
|
48
|
+
def self.by_label(amorce, rendu)
|
|
49
|
+
by_pattern(/#{amorce}['"]#{CAPTURE_GROUP}['"]/, "#{rendu}'x.y.z'") \
|
|
50
|
+
{ |_, nouvelle| "#{rendu}'#{nouvelle}'" }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
PLIST_VALUE = %r{(?<=<string>).+?(?=</string>)}
|
|
54
|
+
|
|
55
|
+
FORMATS = {
|
|
56
|
+
"plain" => new(read: ->(content) { content.strip },
|
|
57
|
+
write: ->(_content, _old, nouvelle) { "#{nouvelle}\n" },
|
|
58
|
+
expected: "x.y.z"),
|
|
59
|
+
"package_json" => new(read: ->(content) { JSON.parse(content)["version"] },
|
|
60
|
+
write: lambda { |content, old, nouvelle|
|
|
61
|
+
content.gsub(/"version": "#{Regexp.escape(old)}"/,
|
|
62
|
+
%("version": "#{nouvelle}"))
|
|
63
|
+
},
|
|
64
|
+
expected: %("version": "x.y.z")),
|
|
65
|
+
|
|
66
|
+
# Le style de guillemets du fichier est conservé : réécrire en double quand le fichier
|
|
67
|
+
# écrit en simple produirait un diff plus large que le changement de version.
|
|
68
|
+
"ruby_version" => by_pattern(/VERSION\s*=\s*["'](.+?)["']/, %(VERSION = "x.y.z")) \
|
|
69
|
+
{ |occurrence, nouvelle|
|
|
70
|
+
occurrence.include?('"') ? %(VERSION = "#{nouvelle}") : %(VERSION = '#{nouvelle}')
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
"app_config_js" => by_label(/version:\s*/, "version: "),
|
|
74
|
+
"android_gradle" => by_label(/versionName\s+/, "versionName "),
|
|
75
|
+
|
|
76
|
+
"ios_plist" => by_pattern(
|
|
77
|
+
%r{<key>CFBundleShortVersionString</key>\s*<string>(.+?)</string>},
|
|
78
|
+
"CFBundleShortVersionString key",
|
|
79
|
+
) { |occurrence, nouvelle| occurrence.sub(PLIST_VALUE, nouvelle) },
|
|
80
|
+
}.freeze
|
|
81
|
+
|
|
82
|
+
def self.for(type) = FORMATS[type]
|
|
83
|
+
|
|
84
|
+
def self.types = FORMATS.keys
|
|
85
|
+
end
|
|
86
|
+
end
|
data/lib/captive_release.rb
CHANGED
|
@@ -2,12 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative "captive_release/version"
|
|
4
4
|
require_relative "captive_release/version_bumper"
|
|
5
|
+
require_relative "captive_release/version_format"
|
|
5
6
|
require_relative "captive_release/version_file"
|
|
7
|
+
require_relative "captive_release/build_config"
|
|
6
8
|
require_relative "captive_release/config"
|
|
9
|
+
require_relative "captive_release/config_file"
|
|
10
|
+
require_relative "captive_release/repo_files"
|
|
11
|
+
require_relative "captive_release/framework_detector"
|
|
7
12
|
require_relative "captive_release/version_detector"
|
|
13
|
+
require_relative "captive_release/shell"
|
|
8
14
|
require_relative "captive_release/git_commands"
|
|
15
|
+
require_relative "captive_release/github_repo"
|
|
16
|
+
require_relative "captive_release/github_http"
|
|
17
|
+
require_relative "captive_release/github_api"
|
|
9
18
|
require_relative "captive_release/github_release"
|
|
10
19
|
require_relative "captive_release/github_dispatch"
|
|
20
|
+
require_relative "captive_release/terminal"
|
|
21
|
+
require_relative "captive_release/options"
|
|
22
|
+
require_relative "captive_release/config_loader"
|
|
23
|
+
require_relative "captive_release/github_token"
|
|
24
|
+
require_relative "captive_release/version_file_selection"
|
|
25
|
+
require_relative "captive_release/build_config_prompt"
|
|
26
|
+
require_relative "captive_release/config_writer"
|
|
27
|
+
require_relative "captive_release/version_files_argument"
|
|
28
|
+
require_relative "captive_release/version_file_bootstrap"
|
|
29
|
+
require_relative "captive_release/init_command"
|
|
30
|
+
require_relative "captive_release/build_dispatch_run"
|
|
31
|
+
require_relative "captive_release/build_command"
|
|
32
|
+
require_relative "captive_release/menu"
|
|
33
|
+
require_relative "captive_release/version_choice"
|
|
34
|
+
require_relative "captive_release/git_release"
|
|
35
|
+
require_relative "captive_release/release_publication"
|
|
36
|
+
require_relative "captive_release/version_files_writing"
|
|
37
|
+
require_relative "captive_release/release_preconditions"
|
|
38
|
+
require_relative "captive_release/release_command"
|
|
39
|
+
require_relative "captive_release/help"
|
|
11
40
|
require_relative "captive_release/cli"
|
|
12
41
|
|
|
13
42
|
module CaptiveRelease
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: captive-release
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Captive Studio
|
|
@@ -20,16 +20,44 @@ extra_rdoc_files: []
|
|
|
20
20
|
files:
|
|
21
21
|
- bin/captive-release
|
|
22
22
|
- lib/captive_release.rb
|
|
23
|
+
- lib/captive_release/build_command.rb
|
|
24
|
+
- lib/captive_release/build_config.rb
|
|
25
|
+
- lib/captive_release/build_config_prompt.rb
|
|
26
|
+
- lib/captive_release/build_dispatch_run.rb
|
|
23
27
|
- lib/captive_release/cli.rb
|
|
24
28
|
- lib/captive_release/config.rb
|
|
29
|
+
- lib/captive_release/config_file.rb
|
|
30
|
+
- lib/captive_release/config_loader.rb
|
|
31
|
+
- lib/captive_release/config_writer.rb
|
|
32
|
+
- lib/captive_release/framework_detector.rb
|
|
25
33
|
- lib/captive_release/git_commands.rb
|
|
34
|
+
- lib/captive_release/git_release.rb
|
|
35
|
+
- lib/captive_release/github_api.rb
|
|
26
36
|
- lib/captive_release/github_dispatch.rb
|
|
27
37
|
- lib/captive_release/github_http.rb
|
|
28
38
|
- lib/captive_release/github_release.rb
|
|
39
|
+
- lib/captive_release/github_repo.rb
|
|
40
|
+
- lib/captive_release/github_token.rb
|
|
41
|
+
- lib/captive_release/help.rb
|
|
42
|
+
- lib/captive_release/init_command.rb
|
|
43
|
+
- lib/captive_release/menu.rb
|
|
44
|
+
- lib/captive_release/options.rb
|
|
45
|
+
- lib/captive_release/release_command.rb
|
|
46
|
+
- lib/captive_release/release_preconditions.rb
|
|
47
|
+
- lib/captive_release/release_publication.rb
|
|
48
|
+
- lib/captive_release/repo_files.rb
|
|
49
|
+
- lib/captive_release/shell.rb
|
|
50
|
+
- lib/captive_release/terminal.rb
|
|
29
51
|
- lib/captive_release/version.rb
|
|
30
52
|
- lib/captive_release/version_bumper.rb
|
|
53
|
+
- lib/captive_release/version_choice.rb
|
|
31
54
|
- lib/captive_release/version_detector.rb
|
|
32
55
|
- lib/captive_release/version_file.rb
|
|
56
|
+
- lib/captive_release/version_file_bootstrap.rb
|
|
57
|
+
- lib/captive_release/version_file_selection.rb
|
|
58
|
+
- lib/captive_release/version_files_argument.rb
|
|
59
|
+
- lib/captive_release/version_files_writing.rb
|
|
60
|
+
- lib/captive_release/version_format.rb
|
|
33
61
|
homepage: https://github.com/captive-studio/captive-release
|
|
34
62
|
licenses:
|
|
35
63
|
- MIT
|