souyuz 0.7.2 → 0.8.1
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 +5 -5
- data/README.md +3 -1
- data/bin/souyuz +1 -1
- data/lib/souyuz.rb +0 -1
- data/lib/souyuz/commands_generator.rb +0 -1
- data/lib/souyuz/detect_values.rb +23 -26
- data/lib/souyuz/generators/android_zipalign_command_generator.rb +3 -7
- data/lib/souyuz/generators/build_command_generator.rb +3 -3
- data/lib/souyuz/generators/java_sign_command_generator.rb +1 -2
- data/lib/souyuz/generators/zip_dsym_command_generator.rb +1 -2
- data/lib/souyuz/manager.rb +0 -1
- data/lib/souyuz/msbuild/project.rb +5 -6
- data/lib/souyuz/msbuild/solution.rb +0 -1
- data/lib/souyuz/msbuild/solution_parser.rb +3 -4
- data/lib/souyuz/options.rb +6 -3
- data/lib/souyuz/platform.rb +0 -1
- data/lib/souyuz/runner.rb +5 -6
- data/lib/souyuz/version.rb +2 -2
- metadata +18 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: df17b3536e569b94853ca253515178b8237baa39bb4b8caecee89ec309beb068
|
4
|
+
data.tar.gz: 1a49c072ced2b71497e51dd5b2393cf73632f0e122a171ee2de78e65e8a43018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b7f8653ffab635f9a967cc88e7973af62081249a9a3c5f07d83d810ac91122ae2cd45fffca0f8fcc830902f6009968f339d035ab287395678080c94d65732b0
|
7
|
+
data.tar.gz: a1cb04c106f24ed6178b55bd3272d8516c9bba4af0e0903e52cc95c3fc32f47be8a5959dbc7dcab3b0057f8427a61917d8ce5b36232e0361cbaa9a299d8d8058
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Souyuz
|
2
2
|
|
3
|
+
[](https://travis-ci.org/voydz/souyuz)
|
4
|
+
|
3
5
|
A fastlane component to make Xamarin builds a breeze. Souyuz is now avaialbe as an **Fastlane plugin** see [fastlane-plugin-souyuz](fastlane-plugin-souyuz) for details.
|
4
6
|
|
5
7
|
*NOTE: While souyuz should continue working with your existing configuration just fine, consider using the Fastlane plugin.*
|
@@ -25,4 +27,4 @@ souyuz(
|
|
25
27
|
|
26
28
|
## Licensing
|
27
29
|
|
28
|
-
Souyuz is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.
|
30
|
+
Souyuz is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.
|
data/bin/souyuz
CHANGED
data/lib/souyuz.rb
CHANGED
data/lib/souyuz/detect_values.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require 'nokogiri'
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -9,7 +8,7 @@ module Souyuz
|
|
9
8
|
def self.set_additional_default_values
|
10
9
|
config = Souyuz.config
|
11
10
|
|
12
|
-
# TODO detect_platform automatically for :platform config
|
11
|
+
# TODO: detect_platform automatically for :platform config
|
13
12
|
|
14
13
|
# set correct implicit build platform for android
|
15
14
|
if config[:platform] == Platform::ANDROID
|
@@ -35,16 +34,8 @@ module Souyuz
|
|
35
34
|
|
36
35
|
def self.detect_solution
|
37
36
|
return if Souyuz.config[:solution_path]
|
38
|
-
itr = 0
|
39
|
-
query = '*.sln'
|
40
|
-
|
41
|
-
begin
|
42
|
-
files = Dir.glob(query)
|
43
|
-
query = "../#{query}"
|
44
|
-
itr += 1
|
45
|
-
end until files.any? or itr > 3
|
46
37
|
|
47
|
-
sln =
|
38
|
+
sln = find_file('*.sln', 3) # search for solution
|
48
39
|
UI.user_error! 'Not able to find solution file automatically, try to specify it via `solution_path` parameter.' unless sln
|
49
40
|
|
50
41
|
Souyuz.config[:solution_path] = abs_path sln
|
@@ -55,7 +46,7 @@ module Souyuz
|
|
55
46
|
|
56
47
|
path = Souyuz.config[:solution_path]
|
57
48
|
projects = Msbuild::SolutionParser.parse(path)
|
58
|
-
|
49
|
+
.get_platform Souyuz.config[:platform]
|
59
50
|
|
60
51
|
UI.user_error! "Not able to find any project in solution, that matches the platform `#{Souyuz.config[:platform]}`." unless projects.any?
|
61
52
|
|
@@ -89,16 +80,8 @@ module Souyuz
|
|
89
80
|
|
90
81
|
def self.detect_info_plist
|
91
82
|
return if Souyuz.config[:plist_path] or Souyuz.config[:platform] != Platform::IOS
|
92
|
-
itr = 0
|
93
|
-
query = '../Info.plist'
|
94
83
|
|
95
|
-
|
96
|
-
files = Dir.glob(query)
|
97
|
-
query = "*/#{query}"
|
98
|
-
itr += 1
|
99
|
-
end until files.any? or itr > 1
|
100
|
-
|
101
|
-
plist_path = files.first # pick first file as solution
|
84
|
+
plist_path = find_file('Info.plist', 1) # search for plist
|
102
85
|
UI.user_error! 'Not able to find Info.plist automatically, try to specify it via `plist_path` parameter.' unless plist_path
|
103
86
|
|
104
87
|
Souyuz.config[:plist_path] = abs_project_path plist_path
|
@@ -107,7 +90,7 @@ module Souyuz
|
|
107
90
|
def self.detect_assembly_name(doc_csproj)
|
108
91
|
return if Souyuz.config[:assembly_name]
|
109
92
|
|
110
|
-
if [
|
93
|
+
if [Platform::IOS, Platform::OSX].include? Souyuz.config[:platform]
|
111
94
|
Souyuz.config[:assembly_name] = doc_csproj.css('PropertyGroup > AssemblyName').text
|
112
95
|
elsif Souyuz.config[:platform] == Platform::ANDROID
|
113
96
|
doc = get_parser_handle Souyuz.config[:manifest_path] # explicitly for this call, no cache needed
|
@@ -115,11 +98,25 @@ module Souyuz
|
|
115
98
|
end
|
116
99
|
end
|
117
100
|
|
118
|
-
|
101
|
+
private_class_method
|
102
|
+
|
103
|
+
def self.find_file(query, depth)
|
104
|
+
itr = 0
|
105
|
+
files = []
|
106
|
+
|
107
|
+
loop do
|
108
|
+
files = Dir.glob(query)
|
109
|
+
query = "../#{query}"
|
110
|
+
itr += 1
|
111
|
+
break if files.any? or itr > depth
|
112
|
+
end
|
113
|
+
|
114
|
+
return files.first # pick first file
|
115
|
+
end
|
119
116
|
|
120
117
|
def self.get_parser_handle(filename)
|
121
|
-
f = File
|
122
|
-
doc = Nokogiri::XML(f)
|
118
|
+
f = File.open(filename)
|
119
|
+
doc = Nokogiri::XML(f)
|
123
120
|
f.close
|
124
121
|
|
125
122
|
return doc
|
@@ -143,5 +140,5 @@ module Souyuz
|
|
143
140
|
path = File.expand_path(path) # absolute dir
|
144
141
|
path
|
145
142
|
end
|
146
|
-
end
|
143
|
+
end
|
147
144
|
end
|
@@ -1,12 +1,8 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the zipalign command
|
4
3
|
class AndroidZipalignCommandGenerator
|
5
4
|
class << self
|
6
5
|
def generate
|
7
|
-
build_apk_path = Souyuz.cache[:build_apk_path]
|
8
|
-
aligned_apk = "#{build_apk_path}-signed"
|
9
|
-
|
10
6
|
parts = prefix
|
11
7
|
parts << zipalign_apk
|
12
8
|
parts += options
|
@@ -18,6 +14,8 @@ module Souyuz
|
|
18
14
|
end
|
19
15
|
|
20
16
|
def detect_build_tools
|
17
|
+
UI.user_error! "Please ensure that the Android SDK is installed and the ANDROID_HOME variable is set correctly" unless ENV['ANDROID_HOME']
|
18
|
+
|
21
19
|
# determine latest buildtool version
|
22
20
|
buildtools = File.join(ENV['ANDROID_HOME'], 'build-tools')
|
23
21
|
version = Dir.entries(buildtools).sort.last
|
@@ -35,8 +33,6 @@ module Souyuz
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def options
|
38
|
-
config = Souyuz.config
|
39
|
-
|
40
36
|
options = []
|
41
37
|
options << "-v" if $verbose
|
42
38
|
options << "-f"
|
@@ -46,7 +42,7 @@ module Souyuz
|
|
46
42
|
end
|
47
43
|
|
48
44
|
def prefix
|
49
|
-
["
|
45
|
+
[""]
|
50
46
|
end
|
51
47
|
|
52
48
|
def pipe
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the fully working build command
|
4
3
|
class BuildCommandGenerator
|
@@ -15,7 +14,7 @@ module Souyuz
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def prefix
|
18
|
-
["
|
17
|
+
[""]
|
19
18
|
end
|
20
19
|
|
21
20
|
def compiler_bin
|
@@ -27,9 +26,10 @@ module Souyuz
|
|
27
26
|
|
28
27
|
options = []
|
29
28
|
options << "/p:Configuration=#{config[:build_configuration]}" if config[:build_configuration]
|
29
|
+
options << config[:extra_build_options] if config[:extra_build_options]
|
30
30
|
options << "/p:Platform=#{config[:build_platform]}" if Souyuz.project.ios? and config[:build_platform]
|
31
31
|
options << "/p:BuildIpa=true" if Souyuz.project.ios?
|
32
|
-
if
|
32
|
+
if config[:solution_path]
|
33
33
|
solution_dir = File.dirname(config[:solution_path])
|
34
34
|
options << "/p:SolutionDir=#{solution_dir}/"
|
35
35
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the jarsigner command
|
4
3
|
class JavaSignCommandGenerator
|
@@ -18,7 +17,7 @@ module Souyuz
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def prefix
|
21
|
-
["
|
20
|
+
[""]
|
22
21
|
end
|
23
22
|
|
24
23
|
def detect_jarsigner_executable
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
# Responsible for building the zip dsym command
|
4
3
|
class ZipDsymCommandGenerator
|
@@ -13,7 +12,7 @@ module Souyuz
|
|
13
12
|
end
|
14
13
|
|
15
14
|
def prefix
|
16
|
-
["
|
15
|
+
[""]
|
17
16
|
end
|
18
17
|
|
19
18
|
def detect_zip_executable
|
data/lib/souyuz/manager.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
module Msbuild
|
4
3
|
class Project
|
@@ -30,14 +29,14 @@ module Souyuz
|
|
30
29
|
|
31
30
|
def is_platform?(platform)
|
32
31
|
return case platform
|
33
|
-
|
32
|
+
when Souyuz::Platform::IOS
|
34
33
|
then self.project_name.downcase.include? 'ios'
|
35
|
-
|
34
|
+
when Souyuz::Platform::OSX
|
36
35
|
then self.project_name.downcase.include? 'mac'
|
37
|
-
|
36
|
+
when Souyuz::Platform::ANDROID
|
38
37
|
then self.project_name.downcase.include? 'droid'
|
39
|
-
|
40
|
-
|
38
|
+
else false
|
39
|
+
end
|
41
40
|
end
|
42
41
|
end
|
43
42
|
end
|
@@ -1,15 +1,14 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
module Souyuz
|
3
2
|
module Msbuild
|
4
3
|
class SolutionParser
|
5
4
|
def self.parse(filename)
|
6
5
|
solution = Solution.new
|
7
6
|
|
8
|
-
File
|
7
|
+
File.open(filename) do |f|
|
9
8
|
f.read.split("\n").each do |line|
|
10
|
-
if line.start_with? "Project"
|
9
|
+
if line.start_with? "Project"
|
11
10
|
options = parse_line line
|
12
|
-
solution.add_project Project.new(options) #maybe we should not use the project class for this
|
11
|
+
solution.add_project Project.new(options) # maybe we should not use the project class for this
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
data/lib/souyuz/options.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require "fastlane"
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -25,8 +24,12 @@ module Souyuz
|
|
25
24
|
FastlaneCore::ConfigItem.new(key: :build_target,
|
26
25
|
env_name: "SOUYUZ_BUILD_TARGET",
|
27
26
|
description: "Build targets to build",
|
28
|
-
default_value: [
|
27
|
+
default_value: ['Build'],
|
29
28
|
type: Array),
|
29
|
+
FastlaneCore::ConfigItem.new(key: :extra_build_options,
|
30
|
+
env_name: "SOUYUZ_EXTRA_BUILD_OPTIONS",
|
31
|
+
description: "Extra options to pass to `msbuild`. Example: `/p:MYOPTION=true`",
|
32
|
+
optional: true),
|
30
33
|
FastlaneCore::ConfigItem.new(key: :output_path,
|
31
34
|
env_name: "SOUYUZ_BUILD_OUTPUT_PATH",
|
32
35
|
description: "Build output path",
|
@@ -75,7 +78,7 @@ module Souyuz
|
|
75
78
|
default_value: 'http://timestamp.digicert.com',
|
76
79
|
env_name: "SOUYUZ_ANDROID_KEYSTORE_TSA",
|
77
80
|
description: "TSA for jarsigner",
|
78
|
-
optional: true)
|
81
|
+
optional: true)
|
79
82
|
]
|
80
83
|
end
|
81
84
|
end
|
data/lib/souyuz/platform.rb
CHANGED
data/lib/souyuz/runner.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
1
|
require 'fastlane'
|
3
2
|
|
4
3
|
module Souyuz
|
@@ -15,7 +14,7 @@ module Souyuz
|
|
15
14
|
path
|
16
15
|
elsif Souyuz.project.android?
|
17
16
|
path = apk_file
|
18
|
-
if
|
17
|
+
if config[:keystore_path] && config[:keystore_alias]
|
19
18
|
UI.success "Jar it, sign it, zip it..."
|
20
19
|
|
21
20
|
jarsign_and_zipalign
|
@@ -70,7 +69,7 @@ module Souyuz
|
|
70
69
|
# in the upcomming switch we determin the output path of iOS ipa files
|
71
70
|
# those change in the Xamarin.iOS Cycle 9 release
|
72
71
|
# see https://developer.xamarin.com/releases/ios/xamarin.ios_10/xamarin.ios_10.4/
|
73
|
-
if File.
|
72
|
+
if File.exist? "#{build_path}/#{assembly_name}.ipa"
|
74
73
|
# after Xamarin.iOS Cycle 9
|
75
74
|
package_path = build_path
|
76
75
|
else
|
@@ -92,13 +91,13 @@ module Souyuz
|
|
92
91
|
assembly_name = Souyuz.project.options[:assembly_name]
|
93
92
|
|
94
93
|
build_dsym_path = "#{build_path}/#{assembly_name}.app.dSYM"
|
95
|
-
|
94
|
+
unless File.exist? build_dsym_path
|
96
95
|
UI.success "Did not found dSYM at #{build_dsym_path}, skipping..."
|
97
96
|
return
|
98
97
|
end
|
99
98
|
|
100
99
|
Souyuz.cache[:build_dsym_path] = build_dsym_path
|
101
|
-
|
100
|
+
|
102
101
|
command = ZipDsymCommandGenerator.generate
|
103
102
|
FastlaneCore::CommandExecutor.execute(command: command,
|
104
103
|
print_all: true,
|
@@ -106,7 +105,7 @@ module Souyuz
|
|
106
105
|
|
107
106
|
# move dsym aside ipa
|
108
107
|
dsym_path = "#{dsym_path}.zip"
|
109
|
-
if File.
|
108
|
+
if File.exist? dsym_path
|
110
109
|
FileUtils.mv(dsym_path, "#{package_path}/#{File.basename dsym_path}")
|
111
110
|
end
|
112
111
|
end
|
data/lib/souyuz/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souyuz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Rudat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: fastlane
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.29.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.29.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: '1.7'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: '1.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,30 +84,16 @@ dependencies:
|
|
84
84
|
name: rubocop
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: magic_encoding
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
89
|
+
version: 0.49.1
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - '='
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 0.49.1
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: bundler
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
159
|
requirements:
|
174
160
|
- - ">="
|
175
161
|
- !ruby/object:Gem::Version
|
176
|
-
version: 2.
|
162
|
+
version: 2.2.0
|
177
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
164
|
requirements:
|
179
165
|
- - ">="
|
@@ -181,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
167
|
version: '0'
|
182
168
|
requirements: []
|
183
169
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
170
|
+
rubygems_version: 2.7.6
|
185
171
|
signing_key:
|
186
172
|
specification_version: 4
|
187
173
|
summary: A fastlane component to make Xamarin builds a breeze
|