carthage_remote_cache 0.0.8 → 0.0.11
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/.github/workflows/ruby.yml +38 -0
- data/.ruby-version +2 -0
- data/.travis.yml +1 -1
- data/Dockerfile +7 -0
- data/Gemfile.lock +41 -41
- data/Guardfile +2 -2
- data/README.md +38 -5
- data/Rakefile +2 -2
- data/bin/carthagerc +18 -8
- data/carthage_remote_cache.gemspec +4 -4
- data/dev/start_server +1 -1
- data/lib/api.rb +10 -10
- data/lib/carthage_archive.rb +13 -51
- data/lib/carthage_remote_cache.rb +18 -14
- data/lib/commands/download_command.rb +10 -9
- data/lib/commands/server_command.rb +2 -2
- data/lib/commands/upload_command.rb +6 -6
- data/lib/commands/verify_command.rb +1 -1
- data/lib/commands.rb +5 -5
- data/lib/configuration.rb +1 -1
- data/lib/constants.rb +9 -7
- data/lib/crc32.rb +3 -3
- data/lib/errors.rb +12 -1
- data/lib/framework.rb +19 -0
- data/lib/framework_carthage_archive.rb +57 -0
- data/lib/log.rb +1 -1
- data/lib/networking.rb +81 -41
- data/lib/server/config.ru +3 -3
- data/lib/server/server_app.rb +69 -12
- data/lib/shell_wrapper.rb +1 -1
- data/lib/table.rb +4 -4
- data/lib/utils.rb +26 -12
- data/lib/version.rb +1 -1
- data/lib/version_file.rb +66 -20
- data/lib/xcframework.rb +29 -0
- data/lib/xcframework_carthage_archive.rb +17 -0
- metadata +36 -18
data/lib/version_file.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "json"
|
2
|
+
require "fileutils"
|
3
3
|
|
4
4
|
# .version file representation, see Carthage documentation on them:
|
5
5
|
# https://github.com/Carthage/Carthage/blob/master/Documentation/VersionFile.md
|
6
6
|
class VersionFile
|
7
|
-
attr_reader :path, :version, :frameworks_by_platform
|
7
|
+
attr_reader :path, :platforms, :json, :version, :frameworks_by_platform
|
8
8
|
|
9
|
-
def initialize(path)
|
9
|
+
def initialize(path, platforms = PLATFORMS)
|
10
10
|
@path = path
|
11
|
+
@platforms = platforms
|
11
12
|
parse
|
12
13
|
end
|
13
14
|
|
@@ -21,7 +22,7 @@ class VersionFile
|
|
21
22
|
def platforms_by_framework
|
22
23
|
result = Hash.new { |h, k| h[k] = [] }
|
23
24
|
for framework_name in framework_names
|
24
|
-
|
25
|
+
framework_names_by_platform.each do |platform, framework_names_in_platform|
|
25
26
|
if framework_names_in_platform.include?(framework_name)
|
26
27
|
result[framework_name] << platform
|
27
28
|
end
|
@@ -30,14 +31,18 @@ class VersionFile
|
|
30
31
|
result
|
31
32
|
end
|
32
33
|
|
34
|
+
def framework_names_by_platform
|
35
|
+
@frameworks_by_platform.map { |platform, framework| [platform, framework.map { |f| f.name }] }.to_h
|
36
|
+
end
|
37
|
+
|
33
38
|
# Unique array of framework names.
|
34
39
|
def framework_names
|
35
|
-
|
40
|
+
framework_names_by_platform.values.flatten.uniq.sort
|
36
41
|
end
|
37
42
|
|
38
43
|
# Total number of frameworks accross all platforms.
|
39
44
|
def number_of_frameworks
|
40
|
-
|
45
|
+
framework_names_by_platform.values.flatten.count
|
41
46
|
end
|
42
47
|
|
43
48
|
def move_to_build_dir
|
@@ -55,7 +60,7 @@ class VersionFile
|
|
55
60
|
if other_version_file.nil?
|
56
61
|
false
|
57
62
|
else
|
58
|
-
|
63
|
+
@json == other_version_file.json
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
@@ -64,25 +69,66 @@ class VersionFile
|
|
64
69
|
def parse
|
65
70
|
raise VersionFileDoesNotExistError.new, "File #{path} doesn't exist, has carthage been bootstrapped?" unless File.exist?(@path)
|
66
71
|
|
72
|
+
@json = read_json
|
73
|
+
|
74
|
+
@version = @json["commitish"]
|
75
|
+
raise AppError.new, "Version is missing in #{@path}:\n\n#{@json}" if @version.nil? || @version.empty?
|
76
|
+
|
77
|
+
@frameworks_by_platform = PLATFORMS.to_h { |platform| [platform, parse_platform(platform)] }
|
78
|
+
end
|
79
|
+
|
80
|
+
# Reads json from `@path` and cleans up entries, tha are not defined in `@platforms`.
|
81
|
+
def read_json
|
67
82
|
file = File.read(@path)
|
68
83
|
json = JSON.parse(file)
|
84
|
+
stripped_json = strip_platforms(json)
|
85
|
+
stripped_json
|
86
|
+
end
|
69
87
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
:watchOS => parse_platform_array(json['watchOS']),
|
78
|
-
}
|
88
|
+
def strip_platforms(json)
|
89
|
+
for platform in PLATFORMS
|
90
|
+
if !@platforms.include?(platform)
|
91
|
+
json[platform_to_carthage_dir_string(platform)] = []
|
92
|
+
end
|
93
|
+
end
|
94
|
+
json
|
79
95
|
end
|
80
96
|
|
81
|
-
def
|
82
|
-
|
83
|
-
|
97
|
+
def parse_platform(platform)
|
98
|
+
carthage_platform_name = platform_to_carthage_dir_string(platform)
|
99
|
+
array = @json[carthage_platform_name]
|
100
|
+
if array.kind_of?(Array) and array.count > 0
|
101
|
+
if array.first["linking"]
|
102
|
+
parse_frameworks(array)
|
103
|
+
elsif array.first["container"]
|
104
|
+
parse_xcframeworks(array)
|
105
|
+
else
|
106
|
+
raise AppError.new "Failed to parse framework #{json}"
|
107
|
+
end
|
84
108
|
else
|
85
109
|
[]
|
86
110
|
end
|
87
111
|
end
|
112
|
+
|
113
|
+
def parse_frameworks(array)
|
114
|
+
array.map { |json| Framework.parse(json) }
|
115
|
+
end
|
116
|
+
|
117
|
+
def parse_xcframeworks(array)
|
118
|
+
# Parse the array of XCFrameworks
|
119
|
+
xcframeworks = array.map { |json| XCFramework.parse(json) }
|
120
|
+
|
121
|
+
# Merge entries with same name, but different identifiers into one.
|
122
|
+
by_name = xcframeworks.reduce({}) do |hash, xcframework|
|
123
|
+
if found = hash[xcframework.name]
|
124
|
+
hash[found.name] = found.new_xcframework_by_adding_identifiers(xcframework.identifiers)
|
125
|
+
else
|
126
|
+
hash[xcframework.name] = xcframework
|
127
|
+
end
|
128
|
+
hash
|
129
|
+
end
|
130
|
+
|
131
|
+
# Turn back into a simple array
|
132
|
+
by_name.values
|
133
|
+
end
|
88
134
|
end
|
data/lib/xcframework.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Example data:
|
2
|
+
# - "name" : "GoogleSignIn",
|
3
|
+
# - "container" : "GoogleSignIn.xcframework",
|
4
|
+
# - "identifiers" : ["ios-arm64_i386_x86_64-simulator", "ios-arm64_armv7"]
|
5
|
+
class XCFramework
|
6
|
+
attr_reader :name, :container, :identifiers
|
7
|
+
|
8
|
+
def self.parse(json)
|
9
|
+
XCFramework.new(json["name"], json["container"], [json["identifier"]])
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, container, identifiers)
|
13
|
+
@name = name
|
14
|
+
@container = container
|
15
|
+
@identifiers = identifiers
|
16
|
+
end
|
17
|
+
|
18
|
+
def ==(other)
|
19
|
+
@name == other.name && @container == other.container && @identifiers == other.identifiers
|
20
|
+
end
|
21
|
+
|
22
|
+
def make_archive(platform)
|
23
|
+
XCFrameworkCarthageArchive.new(name, platform)
|
24
|
+
end
|
25
|
+
|
26
|
+
def new_xcframework_by_adding_identifiers(identifiers_to_add)
|
27
|
+
XCFramework.new(name, container, identifiers + identifiers_to_add)
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
class XCFrameworkCarthageArchive < CarthageArchive
|
4
|
+
|
5
|
+
# Compresses `Carthage/Build/GoogleSignIn.xcframework``
|
6
|
+
# into `GoogleSignIn-iOS.zip`.`
|
7
|
+
def compress_archive(shell, carthage_build_dir = CARTHAGE_BUILD_DIR)
|
8
|
+
$LOG.debug("Archiving #{@framework_name} for #{@platform}")
|
9
|
+
|
10
|
+
framework_path = File.join(carthage_build_dir, "#{@framework_name}.xcframework")
|
11
|
+
raise MissingFrameworkDirectoryError.new, "Archive can't be created, no xcframework directory at #{framework_path}" unless Dir.exist?(framework_path)
|
12
|
+
|
13
|
+
delete_archive
|
14
|
+
shell.archive([framework_path], @archive_path)
|
15
|
+
$LOG.debug("Created #{@archive_path} archive, file size: #{formatted_archive_size}")
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carthage_remote_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juraj Blahunka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
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: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: guard
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '13.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rerun
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,16 +140,22 @@ dependencies:
|
|
140
140
|
name: rack
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 2.0.
|
145
|
+
version: 2.0.6
|
146
|
+
- - "<"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 2.3.0
|
146
149
|
type: :runtime
|
147
150
|
prerelease: false
|
148
151
|
version_requirements: !ruby/object:Gem::Requirement
|
149
152
|
requirements:
|
150
|
-
- - "
|
153
|
+
- - ">="
|
151
154
|
- !ruby/object:Gem::Version
|
152
|
-
version: 2.0.
|
155
|
+
version: 2.0.6
|
156
|
+
- - "<"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 2.3.0
|
153
159
|
- !ruby/object:Gem::Dependency
|
154
160
|
name: rest-client
|
155
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,16 +174,22 @@ dependencies:
|
|
168
174
|
name: sinatra
|
169
175
|
requirement: !ruby/object:Gem::Requirement
|
170
176
|
requirements:
|
171
|
-
- - "
|
177
|
+
- - ">="
|
172
178
|
- !ruby/object:Gem::Version
|
173
|
-
version: 2.0.
|
179
|
+
version: 2.0.4
|
180
|
+
- - "<"
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 2.3.0
|
174
183
|
type: :runtime
|
175
184
|
prerelease: false
|
176
185
|
version_requirements: !ruby/object:Gem::Requirement
|
177
186
|
requirements:
|
178
|
-
- - "
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 2.0.4
|
190
|
+
- - "<"
|
179
191
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.0
|
192
|
+
version: 2.3.0
|
181
193
|
description: Centralized cache to serve carthage frameworks. Useful for distributed
|
182
194
|
CI setup with several build machines.
|
183
195
|
email:
|
@@ -187,8 +199,11 @@ executables:
|
|
187
199
|
extensions: []
|
188
200
|
extra_rdoc_files: []
|
189
201
|
files:
|
202
|
+
- ".github/workflows/ruby.yml"
|
190
203
|
- ".gitignore"
|
204
|
+
- ".ruby-version"
|
191
205
|
- ".travis.yml"
|
206
|
+
- Dockerfile
|
192
207
|
- Gemfile
|
193
208
|
- Gemfile.lock
|
194
209
|
- Guardfile
|
@@ -214,6 +229,8 @@ files:
|
|
214
229
|
- lib/constants.rb
|
215
230
|
- lib/crc32.rb
|
216
231
|
- lib/errors.rb
|
232
|
+
- lib/framework.rb
|
233
|
+
- lib/framework_carthage_archive.rb
|
217
234
|
- lib/log.rb
|
218
235
|
- lib/networking.rb
|
219
236
|
- lib/server/config.ru
|
@@ -223,6 +240,8 @@ files:
|
|
223
240
|
- lib/utils.rb
|
224
241
|
- lib/version.rb
|
225
242
|
- lib/version_file.rb
|
243
|
+
- lib/xcframework.rb
|
244
|
+
- lib/xcframework_carthage_archive.rb
|
226
245
|
homepage: https://github.com/kayak/carthage_remote_cache
|
227
246
|
licenses:
|
228
247
|
- Apache-2.0
|
@@ -242,8 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
261
|
- !ruby/object:Gem::Version
|
243
262
|
version: '0'
|
244
263
|
requirements: []
|
245
|
-
|
246
|
-
rubygems_version: 2.6.14
|
264
|
+
rubygems_version: 3.3.5
|
247
265
|
signing_key:
|
248
266
|
specification_version: 4
|
249
267
|
summary: Centralized cache to serve carthage frameworks. Useful for distributed CI
|