carthage_remote_cache 0.0.9 → 0.0.10
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/Dockerfile +7 -0
- data/Gemfile.lock +34 -34
- data/Guardfile +2 -2
- data/README.md +37 -4
- data/Rakefile +2 -2
- data/bin/carthagerc +18 -8
- data/carthage_remote_cache.gemspec +3 -3
- data/dev/start_server +1 -1
- data/lib/api.rb +3 -3
- data/lib/carthage_archive.rb +1 -1
- data/lib/carthage_remote_cache.rb +14 -14
- data/lib/commands.rb +5 -5
- data/lib/commands/download_command.rb +7 -6
- data/lib/commands/server_command.rb +2 -2
- data/lib/commands/upload_command.rb +3 -3
- data/lib/commands/verify_command.rb +1 -1
- 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/log.rb +1 -1
- data/lib/networking.rb +79 -39
- data/lib/server/config.ru +3 -3
- data/lib/server/server_app.rb +23 -10
- data/lib/shell_wrapper.rb +1 -1
- data/lib/table.rb +4 -4
- data/lib/utils.rb +20 -10
- data/lib/version.rb +1 -1
- data/lib/version_file.rb +30 -16
- metadata +21 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: db51bc926af285ff03bc266988ab005c5f7ab4e7131aec89d12a99b1d14ea0f1
|
|
4
|
+
data.tar.gz: 6d41c8d5b3c6b08369fe595169f53ca8c8cfbc22614726227687625efae341b4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2fc9aa022853786a525dc61f4bbb23f1c53ff5458b05466bdf0041ac664703118391fa1cf82671c32e39012eefa1f01f664a903b35a85142e8b18ff6ae450a1f
|
|
7
|
+
data.tar.gz: ce992ab16d4281d7d348e3b04ef405de51a66fb1036282ae6a17055c7a0ab958aa1c7bb6b3e24a7adad2f04c6fc727938624e493fe31b3bdd4c2474cbd1b1540
|
data/Dockerfile
ADDED
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
carthage_remote_cache (0.0.
|
|
4
|
+
carthage_remote_cache (0.0.10)
|
|
5
5
|
concurrent-ruby (~> 1.0.5)
|
|
6
|
-
rack (
|
|
6
|
+
rack (>= 2.0.6, < 2.3.0)
|
|
7
7
|
rest-client (~> 2.0.2)
|
|
8
8
|
sinatra (~> 2.0.4)
|
|
9
9
|
|
|
10
10
|
GEM
|
|
11
11
|
remote: https://rubygems.org/
|
|
12
12
|
specs:
|
|
13
|
-
coderay (1.1.
|
|
13
|
+
coderay (1.1.3)
|
|
14
14
|
concurrent-ruby (1.0.5)
|
|
15
15
|
domain_name (0.5.20190701)
|
|
16
16
|
unf (>= 0.0.5, < 1.0.0)
|
|
17
|
-
ffi (1.
|
|
17
|
+
ffi (1.15.0)
|
|
18
18
|
formatador (0.2.5)
|
|
19
19
|
guard (2.14.2)
|
|
20
20
|
formatador (>= 0.2.4)
|
|
@@ -31,70 +31,70 @@ GEM
|
|
|
31
31
|
test-unit (~> 3.0)
|
|
32
32
|
http-cookie (1.0.3)
|
|
33
33
|
domain_name (~> 0.5)
|
|
34
|
-
listen (3.1
|
|
35
|
-
rb-fsevent (~> 0.
|
|
36
|
-
rb-inotify (~> 0.9, >= 0.9.
|
|
37
|
-
|
|
38
|
-
lumberjack (1.0.13)
|
|
34
|
+
listen (3.5.1)
|
|
35
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
36
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
|
37
|
+
lumberjack (1.2.8)
|
|
39
38
|
metaclass (0.0.4)
|
|
40
|
-
method_source (0.
|
|
41
|
-
mime-types (3.
|
|
39
|
+
method_source (1.0.0)
|
|
40
|
+
mime-types (3.3.1)
|
|
42
41
|
mime-types-data (~> 3.2015)
|
|
43
|
-
mime-types-data (3.
|
|
42
|
+
mime-types-data (3.2021.0225)
|
|
44
43
|
mocha (1.3.0)
|
|
45
44
|
metaclass (~> 0.0.1)
|
|
46
|
-
mustermann (1.
|
|
45
|
+
mustermann (1.1.1)
|
|
46
|
+
ruby2_keywords (~> 0.0.1)
|
|
47
47
|
nenv (0.3.0)
|
|
48
48
|
netrc (0.11.0)
|
|
49
|
-
notiffany (0.1.
|
|
49
|
+
notiffany (0.1.3)
|
|
50
50
|
nenv (~> 0.1)
|
|
51
51
|
shellany (~> 0.0)
|
|
52
|
-
power_assert (
|
|
53
|
-
pry (0.
|
|
54
|
-
coderay (~> 1.1
|
|
55
|
-
method_source (~>
|
|
56
|
-
rack (2.
|
|
57
|
-
rack-protection (2.0.
|
|
52
|
+
power_assert (2.0.0)
|
|
53
|
+
pry (0.14.1)
|
|
54
|
+
coderay (~> 1.1)
|
|
55
|
+
method_source (~> 1.0)
|
|
56
|
+
rack (2.2.3)
|
|
57
|
+
rack-protection (2.0.8.1)
|
|
58
58
|
rack
|
|
59
|
-
rake (
|
|
60
|
-
rb-fsevent (0.
|
|
61
|
-
rb-inotify (0.10.
|
|
59
|
+
rake (13.0.3)
|
|
60
|
+
rb-fsevent (0.11.0)
|
|
61
|
+
rb-inotify (0.10.1)
|
|
62
62
|
ffi (~> 1.0)
|
|
63
|
-
rerun (0.13.
|
|
63
|
+
rerun (0.13.1)
|
|
64
64
|
listen (~> 3.0)
|
|
65
65
|
rest-client (2.0.2)
|
|
66
66
|
http-cookie (>= 1.0.2, < 2.0)
|
|
67
67
|
mime-types (>= 1.16, < 4.0)
|
|
68
68
|
netrc (~> 0.8)
|
|
69
|
-
|
|
70
|
-
rufo (0.
|
|
69
|
+
ruby2_keywords (0.0.4)
|
|
70
|
+
rufo (0.13.0)
|
|
71
71
|
shellany (0.0.1)
|
|
72
|
-
sinatra (2.0.
|
|
72
|
+
sinatra (2.0.8.1)
|
|
73
73
|
mustermann (~> 1.0)
|
|
74
74
|
rack (~> 2.0)
|
|
75
|
-
rack-protection (= 2.0.
|
|
75
|
+
rack-protection (= 2.0.8.1)
|
|
76
76
|
tilt (~> 2.0)
|
|
77
77
|
test-unit (3.2.9)
|
|
78
78
|
power_assert
|
|
79
|
-
thor (
|
|
80
|
-
tilt (2.0.
|
|
79
|
+
thor (1.1.0)
|
|
80
|
+
tilt (2.0.10)
|
|
81
81
|
unf (0.1.4)
|
|
82
82
|
unf_ext
|
|
83
|
-
unf_ext (0.0.7.
|
|
83
|
+
unf_ext (0.0.7.7)
|
|
84
84
|
|
|
85
85
|
PLATFORMS
|
|
86
86
|
ruby
|
|
87
87
|
|
|
88
88
|
DEPENDENCIES
|
|
89
|
-
bundler
|
|
89
|
+
bundler
|
|
90
90
|
carthage_remote_cache!
|
|
91
91
|
guard (~> 2.14.2)
|
|
92
92
|
guard-test (~> 2.0.8)
|
|
93
93
|
mocha (~> 1.3.0)
|
|
94
|
-
rake (~>
|
|
94
|
+
rake (~> 13.0)
|
|
95
95
|
rerun
|
|
96
96
|
rufo
|
|
97
97
|
test-unit (~> 3.2.7)
|
|
98
98
|
|
|
99
99
|
BUNDLED WITH
|
|
100
|
-
|
|
100
|
+
2.2.11
|
data/Guardfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
guard :test do
|
|
2
2
|
watch(%r{^test/.+_tests\.rb$})
|
|
3
|
-
watch(
|
|
4
|
-
watch(
|
|
3
|
+
watch("test/test_helper.rb") { "test" }
|
|
4
|
+
watch("test/fixtures.rb") { "test" }
|
|
5
5
|
watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_tests.rb" }
|
|
6
6
|
end
|
data/README.md
CHANGED
|
@@ -68,22 +68,29 @@ It is recommended to always perform the upload workflow after upgrading Xcode an
|
|
|
68
68
|
|
|
69
69
|
### Download Workflow
|
|
70
70
|
|
|
71
|
-
Once cache server has been populated with framework binaries, it's time to fetch frameworks from a different machine. Make sure to pull in `Cartrcfile` from
|
|
71
|
+
Once the cache server has been populated with framework binaries, it's time to fetch frameworks from a different machine. Make sure to pull in `Cartrcfile` from the repository before executing:
|
|
72
72
|
|
|
73
73
|
$ carthagerc download
|
|
74
74
|
|
|
75
|
-
You should expect to see following output on a machine with empty `Carthage` folder:
|
|
75
|
+
You should expect to see the following output on a machine with empty `Carthage` folder:
|
|
76
76
|
|
|
77
77
|
Downloaded and extracted 53 archives (97.2 MB), skipped 0 archives.
|
|
78
78
|
|
|
79
79
|
Your project should be ready for building.
|
|
80
80
|
|
|
81
|
-
####
|
|
81
|
+
#### Overwrite Local Carthage Folder
|
|
82
82
|
|
|
83
83
|
In case you happen to change a file in `Carthage/Build` by accident, it's possible to force download all frameworks again with:
|
|
84
84
|
|
|
85
85
|
$ carthagerc download --force
|
|
86
86
|
|
|
87
|
+
#### Download Only Some Platforms
|
|
88
|
+
|
|
89
|
+
The example above downloaded all frameworks for all platforms (iOS, macOS, tvOS, watchOS). If large dependencies or network speed are an issue, you can download only a subset of the platforms by using the `--platform` argument:
|
|
90
|
+
|
|
91
|
+
$ carthagerc download --platform iOS,macOS,tvOS,watchOS
|
|
92
|
+
|
|
93
|
+
Please note, that invoking the `download` command multiple times with different platform arguments is not supported. The `.version` file will "forget" that `carthagerc` already downloaded the platform specified before the last download. If you need multiple platforms, specify them in a single `download` command once, delimited with a comma.
|
|
87
94
|
|
|
88
95
|
### Config
|
|
89
96
|
|
|
@@ -205,6 +212,30 @@ If you want to stop the agent, run:
|
|
|
205
212
|
|
|
206
213
|
Check out official documentation on [Launch Agents](https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html) for more info.
|
|
207
214
|
|
|
215
|
+
#### Docker
|
|
216
|
+
|
|
217
|
+
To build an image based on the latest released gem, run
|
|
218
|
+
|
|
219
|
+
$ docker build -t carthagerc .
|
|
220
|
+
|
|
221
|
+
Afterwards you can run the image in a container using
|
|
222
|
+
|
|
223
|
+
$ docker run -d --publish 9292:9292 --name carthagerc carthagerc:latest
|
|
224
|
+
|
|
225
|
+
The server will now be available on port 9292 on `localhost`. Note that the command above will cause any data added to `~/.carthagerc_server` to be written into the container layer. While this works, it's generally discouraged due to decreased performance and portability. To avoid this, you can use a volume.
|
|
226
|
+
|
|
227
|
+
$ docker run -d --publish 9292:9292 --mount "source=carthagerc,target=/root/.carthagerc_server" --name carthagerc carthagerc:latest
|
|
228
|
+
|
|
229
|
+
We also recommend adding the `--log-opt` option to limit the size of logs, e.g. `--log-opt max-size=50m`.
|
|
230
|
+
|
|
231
|
+
To inspect the logs after running, use
|
|
232
|
+
|
|
233
|
+
$ docker logs carthagerc
|
|
234
|
+
|
|
235
|
+
To stop the container, run
|
|
236
|
+
|
|
237
|
+
$ docker container stop carthagerc
|
|
238
|
+
|
|
208
239
|
### Version
|
|
209
240
|
|
|
210
241
|
$ carthagerc version
|
|
@@ -221,7 +252,7 @@ Documentation is also available when running `carthagerc` or `carthagerc --help`
|
|
|
221
252
|
config
|
|
222
253
|
print environment information and Cartrcfile configuration
|
|
223
254
|
|
|
224
|
-
download [-f|--force] [-v|--verbose]
|
|
255
|
+
download [-f|--force] [-v|--verbose] [-mPLATFORM|--platform=PLATFORM]
|
|
225
256
|
fetch missing frameworks into Carthage/Build
|
|
226
257
|
|
|
227
258
|
init
|
|
@@ -242,6 +273,8 @@ Documentation is also available when running `carthagerc` or `carthagerc --help`
|
|
|
242
273
|
OPTIONS
|
|
243
274
|
-f, --force Force upload/download of framework archives even if local and server .version files match
|
|
244
275
|
-h, --help Show help
|
|
276
|
+
-m, --platform=PLATFORM Comma delimited list of platforms which should be downloaded from the server; e.g. `--platform iOS,macOS`; Supported values: iOS, macOS, tvOS, watchOS
|
|
277
|
+
-n, --no-retry Don't retry download or upload on network failures
|
|
245
278
|
-p, --port=PORT Server application port used when starting server, default port is 9292
|
|
246
279
|
-v, --verbose Show extra runtime information
|
|
247
280
|
|
data/Rakefile
CHANGED
|
@@ -5,10 +5,10 @@ task :default => :spec
|
|
|
5
5
|
|
|
6
6
|
Rake::TestTask.new do |t|
|
|
7
7
|
t.libs << "test"
|
|
8
|
-
t.test_files = FileList[
|
|
8
|
+
t.test_files = FileList["test/*_tests.rb"]
|
|
9
9
|
t.verbose = true
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
task :format do
|
|
13
|
-
system(
|
|
13
|
+
system("bundle exec rufo bin/carthagerc lib test Gemfile Guardfile Rakefile carthage_remote_cache.gemspec")
|
|
14
14
|
end
|
data/bin/carthagerc
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
$LOAD_PATH.push File.expand_path("../../lib", __FILE__)
|
|
4
4
|
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
5
|
+
require "optparse"
|
|
6
|
+
require "carthage_remote_cache"
|
|
7
|
+
require "commands"
|
|
8
8
|
|
|
9
|
-
ARGV <<
|
|
9
|
+
ARGV << "-h" if ARGV.empty?
|
|
10
|
+
command = ARGV[0]
|
|
10
11
|
options = {
|
|
11
12
|
:force => false,
|
|
13
|
+
:is_retry_enabled => true,
|
|
12
14
|
:server_port => SERVER_DEFAULT_PORT,
|
|
13
15
|
:verbose => false,
|
|
14
16
|
}
|
|
@@ -30,7 +32,7 @@ opt_parser = OptionParser.new do |opt|
|
|
|
30
32
|
opt.separator " config"
|
|
31
33
|
opt.separator " print environment information and #{CARTRCFILE} configuration"
|
|
32
34
|
opt.separator ""
|
|
33
|
-
opt.separator " download [-f|--force] [-v|--verbose]"
|
|
35
|
+
opt.separator " download [-f|--force] [-v|--verbose] [-mPLATFORM|--platform=PLATFORM]"
|
|
34
36
|
opt.separator " fetch missing frameworks into Carthage/Build"
|
|
35
37
|
opt.separator ""
|
|
36
38
|
opt.separator " init"
|
|
@@ -59,6 +61,15 @@ opt_parser = OptionParser.new do |opt|
|
|
|
59
61
|
exit
|
|
60
62
|
end
|
|
61
63
|
|
|
64
|
+
opt.on("-m", "--platform=PLATFORM", "Comma delimited list of platforms which should be downloaded from the server; e.g. `--platform iOS,macOS`; Supported values: #{PLATFORMS.map(&:to_s).join(", ")}") do |platform|
|
|
65
|
+
raise AppError.new("[-p|--platform] is only supported for the 'download' command") if command != "download"
|
|
66
|
+
options[:platforms] = platform_to_symbols(platform)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
opt.on("-n", "--no-retry", "Don't retry download or upload on network failures") do
|
|
70
|
+
options[:is_retry_enabled] = false
|
|
71
|
+
end
|
|
72
|
+
|
|
62
73
|
opt.on("-pPORT", "--port=PORT", "Server application port used when starting server, default port is #{SERVER_DEFAULT_PORT}") do |port|
|
|
63
74
|
options[:server_port] = port
|
|
64
75
|
end
|
|
@@ -68,10 +79,9 @@ opt_parser = OptionParser.new do |opt|
|
|
|
68
79
|
end
|
|
69
80
|
end
|
|
70
81
|
|
|
71
|
-
opt_parser.parse!
|
|
72
|
-
|
|
73
82
|
begin
|
|
74
|
-
|
|
83
|
+
opt_parser.parse!
|
|
84
|
+
|
|
75
85
|
case command
|
|
76
86
|
when "config"
|
|
77
87
|
puts Configuration.new_with_defaults
|
|
@@ -20,17 +20,17 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
21
21
|
spec.require_paths = ["lib"]
|
|
22
22
|
|
|
23
|
-
spec.add_development_dependency "bundler"
|
|
23
|
+
spec.add_development_dependency "bundler"
|
|
24
24
|
spec.add_development_dependency "guard", "~> 2.14.2"
|
|
25
25
|
spec.add_development_dependency "guard-test", "~> 2.0.8"
|
|
26
26
|
spec.add_development_dependency "mocha", "~> 1.3.0"
|
|
27
|
-
spec.add_development_dependency "rake", "~>
|
|
27
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
28
28
|
spec.add_development_dependency "rerun"
|
|
29
29
|
spec.add_development_dependency "rufo"
|
|
30
30
|
spec.add_development_dependency "test-unit", "~> 3.2.7"
|
|
31
31
|
|
|
32
32
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0.5"
|
|
33
|
-
spec.add_runtime_dependency "rack", "
|
|
33
|
+
spec.add_runtime_dependency "rack", ">= 2.0.6", "< 2.3.0"
|
|
34
34
|
spec.add_runtime_dependency "rest-client", "~> 2.0.2"
|
|
35
35
|
spec.add_runtime_dependency "sinatra", "~> 2.0.4"
|
|
36
36
|
end
|
data/dev/start_server
CHANGED
data/lib/api.rb
CHANGED
|
@@ -23,7 +23,7 @@ class API
|
|
|
23
23
|
rescue VersionFileDoesNotExistError => e
|
|
24
24
|
errors << OutdatedFrameworkBuildError.new(
|
|
25
25
|
carthage_dependency.guessed_framework_basename,
|
|
26
|
-
|
|
26
|
+
"-",
|
|
27
27
|
carthage_dependency.version
|
|
28
28
|
)
|
|
29
29
|
rescue OutdatedFrameworkBuildError => e
|
|
@@ -35,11 +35,11 @@ class API
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def version_file_matches_server?(carthage_dependency, version_file)
|
|
38
|
+
def version_file_matches_server?(carthage_dependency, version_file, platforms)
|
|
39
39
|
if @options[:force]
|
|
40
40
|
false
|
|
41
41
|
else
|
|
42
|
-
server_version_file = @networking.download_version_file(carthage_dependency)
|
|
42
|
+
server_version_file = @networking.download_version_file(carthage_dependency, platforms)
|
|
43
43
|
result = version_file.same_content?(server_version_file)
|
|
44
44
|
server_version_file.remove unless server_version_file.nil?
|
|
45
45
|
result
|
data/lib/carthage_archive.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
lib = File.expand_path("..", __FILE__)
|
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
14
|
-
require
|
|
15
|
-
require
|
|
16
|
-
require
|
|
17
|
-
require
|
|
4
|
+
require "api"
|
|
5
|
+
require "carthage_archive"
|
|
6
|
+
require "carthage_dependency"
|
|
7
|
+
require "constants"
|
|
8
|
+
require "configuration"
|
|
9
|
+
require "crc32"
|
|
10
|
+
require "errors"
|
|
11
|
+
require "log"
|
|
12
|
+
require "networking"
|
|
13
|
+
require "shell_wrapper"
|
|
14
|
+
require "table"
|
|
15
|
+
require "utils"
|
|
16
|
+
require "version"
|
|
17
|
+
require "version_file"
|
data/lib/commands.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
lib = File.expand_path("..", __FILE__)
|
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
4
|
+
require "commands/download_command"
|
|
5
|
+
require "commands/init_command"
|
|
6
|
+
require "commands/server_command"
|
|
7
|
+
require "commands/upload_command"
|
|
8
|
+
require "commands/verify_command"
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "concurrent"
|
|
2
2
|
|
|
3
3
|
class DownloadCommand
|
|
4
4
|
def self.new_with_defaults(options)
|
|
5
5
|
shell = ShellWrapper.new
|
|
6
6
|
config = Configuration.new(shell)
|
|
7
|
-
networking = Networking.new(config)
|
|
7
|
+
networking = Networking.new(config, options[:is_retry_enabled])
|
|
8
8
|
api = API.new(shell, config, networking, options)
|
|
9
9
|
|
|
10
10
|
DownloadCommand.new(
|
|
11
11
|
config: config,
|
|
12
12
|
networking: networking,
|
|
13
13
|
api: api,
|
|
14
|
+
platforms: options[:platforms],
|
|
14
15
|
)
|
|
15
16
|
end
|
|
16
17
|
|
|
@@ -18,6 +19,7 @@ class DownloadCommand
|
|
|
18
19
|
@config = args[:config]
|
|
19
20
|
@networking = args[:networking]
|
|
20
21
|
@api = args[:api]
|
|
22
|
+
@platforms = args[:platforms]
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def run
|
|
@@ -57,14 +59,13 @@ class DownloadCommand
|
|
|
57
59
|
private
|
|
58
60
|
|
|
59
61
|
def download(carthage_dependency)
|
|
60
|
-
local_version_file =
|
|
61
|
-
if File.exist?(carthage_dependency.version_filepath)
|
|
62
|
+
local_version_file = if File.exist?(carthage_dependency.version_filepath)
|
|
62
63
|
carthage_dependency.new_version_file
|
|
63
64
|
else
|
|
64
65
|
nil
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
if !local_version_file.nil? && @api.version_file_matches_server?(carthage_dependency, local_version_file)
|
|
68
|
+
if !local_version_file.nil? && @api.version_file_matches_server?(carthage_dependency, local_version_file, @platforms)
|
|
68
69
|
$LOG.debug("Version file #{local_version_file.path} matches server version, skipping download")
|
|
69
70
|
@mutex.synchronize do
|
|
70
71
|
@number_of_skipped_archives += local_version_file.number_of_frameworks
|
|
@@ -72,7 +73,7 @@ class DownloadCommand
|
|
|
72
73
|
return
|
|
73
74
|
end
|
|
74
75
|
|
|
75
|
-
version_file = @networking.download_version_file(carthage_dependency)
|
|
76
|
+
version_file = @networking.download_version_file(carthage_dependency, @platforms)
|
|
76
77
|
raise AppError.new, "Version file #{carthage_dependency.version_filename} is not present on the server, please run `carthagerc upload` first" if version_file.nil?
|
|
77
78
|
|
|
78
79
|
version_file.frameworks_by_platform.each do |platform, framework_names|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "concurrent"
|
|
2
2
|
|
|
3
3
|
class UploadCommand
|
|
4
4
|
def self.new_with_defaults(options)
|
|
5
5
|
shell = ShellWrapper.new
|
|
6
6
|
config = Configuration.new(shell)
|
|
7
|
-
networking = Networking.new(config)
|
|
7
|
+
networking = Networking.new(config, options[:is_retry_enabled])
|
|
8
8
|
api = API.new(shell, config, networking, options)
|
|
9
9
|
|
|
10
10
|
UploadCommand.new(
|
|
@@ -62,7 +62,7 @@ class UploadCommand
|
|
|
62
62
|
def upload(carthage_dependency)
|
|
63
63
|
version_file = carthage_dependency.new_version_file
|
|
64
64
|
|
|
65
|
-
if @api.version_file_matches_server?(carthage_dependency, version_file)
|
|
65
|
+
if @api.version_file_matches_server?(carthage_dependency, version_file, nil)
|
|
66
66
|
$LOG.debug("Version file #{version_file.path} matches server version, skipping upload")
|
|
67
67
|
@mutex.synchronize do
|
|
68
68
|
@number_of_skipped_archives += version_file.number_of_frameworks
|
|
@@ -2,7 +2,7 @@ class VerifyCommand
|
|
|
2
2
|
def self.new_with_defaults(options)
|
|
3
3
|
shell = ShellWrapper.new
|
|
4
4
|
config = Configuration.new(shell)
|
|
5
|
-
networking = Networking.new(config)
|
|
5
|
+
networking = Networking.new(config, options[:is_retry_enabled])
|
|
6
6
|
api = API.new(shell, config, networking, options)
|
|
7
7
|
|
|
8
8
|
VerifyCommand.new(api: api)
|
data/lib/configuration.rb
CHANGED
data/lib/constants.rb
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
CARTHAGE_DIR =
|
|
2
|
-
CARTHAGE_BUILD_DIR = File.join(CARTHAGE_DIR,
|
|
3
|
-
CARTFILE_RESOLVED =
|
|
4
|
-
CARTRCFILE =
|
|
1
|
+
CARTHAGE_DIR = "Carthage"
|
|
2
|
+
CARTHAGE_BUILD_DIR = File.join(CARTHAGE_DIR, "Build")
|
|
3
|
+
CARTFILE_RESOLVED = "Cartfile.resolved"
|
|
4
|
+
CARTRCFILE = "Cartrcfile"
|
|
5
5
|
THREAD_POOL_SIZE = 8
|
|
6
6
|
|
|
7
7
|
SERVER_DEFAULT_PORT = 9292
|
|
8
|
-
SERVER_CACHE_DIR = File.join(Dir.home,
|
|
8
|
+
SERVER_CACHE_DIR = File.join(Dir.home, ".carthagerc_server")
|
|
9
9
|
|
|
10
10
|
ARCHIVE_CHECKSUM_HEADER_REST_CLIENT = :archive_checksum
|
|
11
|
-
ARCHIVE_CHECKSUM_HEADER_SINATRA_IN =
|
|
12
|
-
ARCHIVE_CHECKSUM_HEADER_SINATRA_OUT =
|
|
11
|
+
ARCHIVE_CHECKSUM_HEADER_SINATRA_IN = "HTTP_ARCHIVE_CHECKSUM"
|
|
12
|
+
ARCHIVE_CHECKSUM_HEADER_SINATRA_OUT = "Archive-Checksum"
|
|
13
|
+
|
|
14
|
+
PLATFORMS = [:iOS, :macOS, :tvOS, :watchOS]
|
data/lib/crc32.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require "digest"
|
|
2
|
+
require "zlib"
|
|
3
3
|
|
|
4
4
|
class Digest::CRC32 < Digest::Class
|
|
5
5
|
include Digest::Instance
|
|
@@ -17,6 +17,6 @@ class Digest::CRC32 < Digest::Class
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def finish
|
|
20
|
-
[@crc32].pack(
|
|
20
|
+
[@crc32].pack("N")
|
|
21
21
|
end
|
|
22
22
|
end
|
data/lib/errors.rb
CHANGED
|
@@ -51,7 +51,7 @@ class FrameworkValidationError < AppError
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def to_s
|
|
54
|
-
header = [
|
|
54
|
+
header = ["Framework", CARTHAGE_BUILD_DIR, CARTFILE_RESOLVED]
|
|
55
55
|
rows = @errors.map { |e| [e.framework_name, e.build_version, e.cartfile_resolved_version] }
|
|
56
56
|
table = Table.new(header, rows)
|
|
57
57
|
<<~EOS
|
|
@@ -69,3 +69,14 @@ end
|
|
|
69
69
|
class MissingFrameworkDirectoryError < AppError; end
|
|
70
70
|
|
|
71
71
|
class ServerVersionMismatchError < AppError; end
|
|
72
|
+
|
|
73
|
+
class PlatformMismatchError < AppError
|
|
74
|
+
def initialize(platform)
|
|
75
|
+
@platform = platform
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def to_s
|
|
79
|
+
platforms = PLATFORMS.map(&:to_s).join(", ")
|
|
80
|
+
"Platform '#{@platform}' doesn't match any of: #{platforms}"
|
|
81
|
+
end
|
|
82
|
+
end
|
data/lib/log.rb
CHANGED
data/lib/networking.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require "rest-client"
|
|
2
|
+
require "uri"
|
|
3
3
|
|
|
4
4
|
class Networking
|
|
5
|
-
def initialize(config)
|
|
5
|
+
def initialize(config, is_retry_enabled)
|
|
6
6
|
@config = config
|
|
7
|
+
@is_retry_enabled = is_retry_enabled
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
# Version
|
|
@@ -11,11 +12,13 @@ class Networking
|
|
|
11
12
|
def get_server_version
|
|
12
13
|
url = new_version_url
|
|
13
14
|
$LOG.debug("Fetching server version from #{url}")
|
|
14
|
-
server_version =
|
|
15
|
-
|
|
16
|
-
response.
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
server_version = perform_network_request do
|
|
16
|
+
RestClient.get(url) do |response, request, result|
|
|
17
|
+
if response.code == 200
|
|
18
|
+
response.strip
|
|
19
|
+
else
|
|
20
|
+
raise AppError.new, "Failed to read server version from #{url}, response:\n #{response[0...300]}"
|
|
21
|
+
end
|
|
19
22
|
end
|
|
20
23
|
end
|
|
21
24
|
server_version
|
|
@@ -24,15 +27,22 @@ class Networking
|
|
|
24
27
|
# Version Files
|
|
25
28
|
|
|
26
29
|
# @return VersionFile or nil
|
|
27
|
-
def download_version_file(carthage_dependency)
|
|
30
|
+
def download_version_file(carthage_dependency, platforms)
|
|
28
31
|
url = new_version_file_url(carthage_dependency)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
params = {}
|
|
33
|
+
unless platforms.nil?
|
|
34
|
+
params[:platform] = platforms.map(&:to_s).join(",")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
version_file = perform_network_request do
|
|
38
|
+
$LOG.debug("Downloading version file from #{url}, params: #{params}")
|
|
39
|
+
RestClient.get(url, { params: params }) do |response, request, result|
|
|
40
|
+
if response.code == 200
|
|
41
|
+
File.write(carthage_dependency.version_filename, response.to_s)
|
|
42
|
+
VersionFile.new(carthage_dependency.version_filename)
|
|
43
|
+
else
|
|
44
|
+
nil
|
|
45
|
+
end
|
|
36
46
|
end
|
|
37
47
|
end
|
|
38
48
|
version_file
|
|
@@ -41,10 +51,12 @@ class Networking
|
|
|
41
51
|
# @raise AppError on upload failure
|
|
42
52
|
def upload_version_file(carthage_dependency)
|
|
43
53
|
url = new_version_file_url(carthage_dependency)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
perform_network_request do
|
|
55
|
+
$LOG.debug("Uploading #{carthage_dependency.version_filename}")
|
|
56
|
+
RestClient.post(url, :version_file => File.new(carthage_dependency.version_filepath)) do |response, request, result|
|
|
57
|
+
unless response.code == 200
|
|
58
|
+
raise AppError.new, "Version file upload #{carthage_dependency.version_filename} failed, response:\n #{response[0..300]}"
|
|
59
|
+
end
|
|
48
60
|
end
|
|
49
61
|
end
|
|
50
62
|
end
|
|
@@ -54,14 +66,16 @@ class Networking
|
|
|
54
66
|
# @return Hash with CarthageArchive and checksum or nil
|
|
55
67
|
def download_framework_archive(carthage_dependency, framework_name, platform)
|
|
56
68
|
url = new_framework_url(carthage_dependency, framework_name, platform)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
archive = perform_network_request do
|
|
70
|
+
$LOG.debug("Downloading framework from #{url}")
|
|
71
|
+
RestClient.get(url) do |response, request, result|
|
|
72
|
+
if response.code == 200
|
|
73
|
+
archive = CarthageArchive.new(framework_name, platform)
|
|
74
|
+
File.write(archive.archive_path, response.to_s)
|
|
75
|
+
{ :archive => archive, :checksum => response.headers[ARCHIVE_CHECKSUM_HEADER_REST_CLIENT] }
|
|
76
|
+
else
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
65
79
|
end
|
|
66
80
|
end
|
|
67
81
|
archive
|
|
@@ -70,12 +84,14 @@ class Networking
|
|
|
70
84
|
# @raise AppError when upload fails
|
|
71
85
|
def upload_framework_archive(zipfile_name, carthage_dependency, framework_name, platform, checksum)
|
|
72
86
|
url = new_framework_url(carthage_dependency, framework_name, platform)
|
|
73
|
-
params = {:framework_file => File.new(zipfile_name)}
|
|
74
|
-
headers = {ARCHIVE_CHECKSUM_HEADER_REST_CLIENT => checksum}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
params = { :framework_file => File.new(zipfile_name) }
|
|
88
|
+
headers = { ARCHIVE_CHECKSUM_HEADER_REST_CLIENT => checksum }
|
|
89
|
+
perform_network_request do
|
|
90
|
+
$LOG.debug("Uploading framework to #{url}, headers: #{headers}")
|
|
91
|
+
RestClient.post(url, params, headers) do |response, request, result|
|
|
92
|
+
unless response.code == 200
|
|
93
|
+
raise AppError.new, "Framework upload #{zipfile_name} failed, response:\n #{response[0..300]}"
|
|
94
|
+
end
|
|
79
95
|
end
|
|
80
96
|
end
|
|
81
97
|
end
|
|
@@ -83,12 +99,12 @@ class Networking
|
|
|
83
99
|
private
|
|
84
100
|
|
|
85
101
|
def new_version_url
|
|
86
|
-
new_server_url([
|
|
102
|
+
new_server_url(["version"])
|
|
87
103
|
end
|
|
88
104
|
|
|
89
105
|
def new_version_file_url(carthage_dependency)
|
|
90
106
|
new_server_url([
|
|
91
|
-
|
|
107
|
+
"versions",
|
|
92
108
|
@config.xcodebuild_version,
|
|
93
109
|
@config.swift_version,
|
|
94
110
|
carthage_dependency.guessed_framework_basename,
|
|
@@ -99,7 +115,7 @@ class Networking
|
|
|
99
115
|
|
|
100
116
|
def new_framework_url(carthage_dependency, framework_name, platform)
|
|
101
117
|
new_server_url([
|
|
102
|
-
|
|
118
|
+
"frameworks",
|
|
103
119
|
@config.xcodebuild_version,
|
|
104
120
|
@config.swift_version,
|
|
105
121
|
carthage_dependency.guessed_framework_basename,
|
|
@@ -115,13 +131,37 @@ class Networking
|
|
|
115
131
|
:scheme => @config.server_uri.scheme,
|
|
116
132
|
:host => @config.server_uri.host,
|
|
117
133
|
:port => @config.server_uri.port,
|
|
118
|
-
:path =>
|
|
134
|
+
:path => "/" + sanitized_path_slices.join("/"),
|
|
119
135
|
)
|
|
120
136
|
uri.to_s
|
|
121
137
|
end
|
|
122
138
|
|
|
123
139
|
# Mangle identifiers for URL paths.
|
|
124
140
|
def sanitized(input)
|
|
125
|
-
input.gsub(/\//,
|
|
141
|
+
input.gsub(/\//, "_")
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def perform_network_request
|
|
145
|
+
if @is_retry_enabled
|
|
146
|
+
retries_remaining = 3
|
|
147
|
+
sleep_time_seconds = 5
|
|
148
|
+
begin
|
|
149
|
+
result = yield
|
|
150
|
+
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
|
151
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
|
152
|
+
if retries_remaining > 0
|
|
153
|
+
$LOG.warn("Network request failed - remaining retries: #{retries_remaining}, sleeping for: #{sleep_time_seconds}s, error: #{e.message}")
|
|
154
|
+
sleep(sleep_time_seconds)
|
|
155
|
+
retries_remaining -= 1
|
|
156
|
+
sleep_time_seconds *= 3
|
|
157
|
+
retry
|
|
158
|
+
else
|
|
159
|
+
raise e
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
result
|
|
163
|
+
else
|
|
164
|
+
yield
|
|
165
|
+
end
|
|
126
166
|
end
|
|
127
167
|
end
|
data/lib/server/config.ru
CHANGED
data/lib/server/server_app.rb
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
1
|
+
require "json"
|
|
2
|
+
require "sinatra"
|
|
3
|
+
require "fileutils"
|
|
4
|
+
require "carthage_remote_cache"
|
|
4
5
|
|
|
5
|
-
get
|
|
6
|
+
get "/" do
|
|
6
7
|
"Welcome to carthage_remote_cache"
|
|
7
8
|
end
|
|
8
9
|
|
|
9
|
-
version_path =
|
|
10
|
-
versions_path =
|
|
11
|
-
frameworks_path =
|
|
10
|
+
version_path = "/version"
|
|
11
|
+
versions_path = "/versions/:xcodebuild_version/:swift_version/:dependency_name/:version/:version_filename"
|
|
12
|
+
frameworks_path = "/frameworks/:xcodebuild_version/:swift_version/:dependency_name/:version/:framework_name/:platform"
|
|
12
13
|
|
|
13
14
|
get version_path do
|
|
14
15
|
status(200)
|
|
@@ -16,13 +17,25 @@ get version_path do
|
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
get versions_path do
|
|
20
|
+
if params.key?(:platform)
|
|
21
|
+
begin
|
|
22
|
+
platforms = platform_to_symbols(params[:platform])
|
|
23
|
+
rescue AppError => e
|
|
24
|
+
status(400)
|
|
25
|
+
return JSON.pretty_generate({ "error" => e.message })
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
platforms = PLATFORMS
|
|
29
|
+
end
|
|
30
|
+
|
|
19
31
|
dirname = params_to_framework_dir(params)
|
|
20
32
|
filename = params[:version_filename]
|
|
21
33
|
filepath = File.join(dirname, filename)
|
|
22
34
|
|
|
23
35
|
if File.exist?(filepath)
|
|
24
36
|
status(200)
|
|
25
|
-
|
|
37
|
+
version_file = VersionFile.new(filepath, platforms)
|
|
38
|
+
JSON.pretty_generate(version_file.json)
|
|
26
39
|
else
|
|
27
40
|
status(404)
|
|
28
41
|
end
|
|
@@ -39,7 +52,7 @@ post versions_path do
|
|
|
39
52
|
File.delete(target_filename) if File.exist?(target_filename)
|
|
40
53
|
|
|
41
54
|
$LOG.info("Writing: #{target_filename}")
|
|
42
|
-
File.open(target_filename,
|
|
55
|
+
File.open(target_filename, "wb") do |target_file|
|
|
43
56
|
target_file.write(source_file.read)
|
|
44
57
|
end
|
|
45
58
|
|
|
@@ -75,7 +88,7 @@ post frameworks_path do
|
|
|
75
88
|
File.delete(target_filename) if File.exist?(target_filename)
|
|
76
89
|
|
|
77
90
|
$LOG.info("Writing: #{target_filename}")
|
|
78
|
-
File.open(target_filename,
|
|
91
|
+
File.open(target_filename, "wb") do |target_file|
|
|
79
92
|
target_file.write(source_file.read)
|
|
80
93
|
end
|
|
81
94
|
|
data/lib/shell_wrapper.rb
CHANGED
data/lib/table.rb
CHANGED
|
@@ -32,8 +32,8 @@ class Table
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def separator_line
|
|
35
|
-
dashes = @column_sizes.map { |size|
|
|
36
|
-
|
|
35
|
+
dashes = @column_sizes.map { |size| "-" * size }
|
|
36
|
+
"+" + dashes.join("+") + "+"
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def header_line
|
|
@@ -41,7 +41,7 @@ class Table
|
|
|
41
41
|
column_size = @column_sizes[index] - 1
|
|
42
42
|
" %-#{column_size}.#{column_size}s" % column
|
|
43
43
|
end
|
|
44
|
-
|
|
44
|
+
"|" + columns.join("|") + "|"
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def row_line(row)
|
|
@@ -53,6 +53,6 @@ class Table
|
|
|
53
53
|
"%#{column_size}.#{column_size}s " % column
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
|
-
|
|
56
|
+
"|" + columns.join("|") + "|"
|
|
57
57
|
end
|
|
58
58
|
end
|
data/lib/utils.rb
CHANGED
|
@@ -15,7 +15,7 @@ end
|
|
|
15
15
|
def quote(input)
|
|
16
16
|
if input.is_a? String
|
|
17
17
|
if input.empty?
|
|
18
|
-
|
|
18
|
+
""
|
|
19
19
|
else
|
|
20
20
|
'"' + input + '"'
|
|
21
21
|
end
|
|
@@ -23,7 +23,7 @@ def quote(input)
|
|
|
23
23
|
input
|
|
24
24
|
.map { |e| quote(e) }
|
|
25
25
|
.select { |e| !e.empty? }
|
|
26
|
-
.join(
|
|
26
|
+
.join(" ")
|
|
27
27
|
else
|
|
28
28
|
raise AppError.new, "Unsupported type #{input}"
|
|
29
29
|
end
|
|
@@ -32,13 +32,13 @@ end
|
|
|
32
32
|
def platform_to_api_string(platform)
|
|
33
33
|
case platform
|
|
34
34
|
when :iOS
|
|
35
|
-
|
|
35
|
+
"iOS"
|
|
36
36
|
when :macOS
|
|
37
|
-
|
|
37
|
+
"macOS"
|
|
38
38
|
when :tvOS
|
|
39
|
-
|
|
39
|
+
"tvOS"
|
|
40
40
|
when :watchOS
|
|
41
|
-
|
|
41
|
+
"watchOS"
|
|
42
42
|
else
|
|
43
43
|
raise AppError.new, "Unrecognized platform #{platform.inspect}"
|
|
44
44
|
end
|
|
@@ -47,18 +47,28 @@ end
|
|
|
47
47
|
def platform_to_carthage_dir_string(platform)
|
|
48
48
|
case platform
|
|
49
49
|
when :iOS
|
|
50
|
-
|
|
50
|
+
"iOS"
|
|
51
51
|
when :macOS
|
|
52
|
-
|
|
52
|
+
"Mac"
|
|
53
53
|
when :tvOS
|
|
54
|
-
|
|
54
|
+
"tvOS"
|
|
55
55
|
when :watchOS
|
|
56
|
-
|
|
56
|
+
"watchOS"
|
|
57
57
|
else
|
|
58
58
|
raise AppError.new, "Unrecognized platform #{platform.inspect}"
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
+
def platform_to_symbols(string)
|
|
63
|
+
platforms = string.split(",").map(&:to_sym)
|
|
64
|
+
for platform in platforms
|
|
65
|
+
if !PLATFORMS.include?(platform)
|
|
66
|
+
raise PlatformMismatchError.new(platform)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
platforms
|
|
70
|
+
end
|
|
71
|
+
|
|
62
72
|
# @return string in "x.y MB" format
|
|
63
73
|
def format_file_size(bytes)
|
|
64
74
|
megabytes = bytes / 1000.0 / 1000.0
|
data/lib/version.rb
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
VERSION =
|
|
1
|
+
VERSION = "0.0.10"
|
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
|
|
|
@@ -55,7 +56,7 @@ class VersionFile
|
|
|
55
56
|
if other_version_file.nil?
|
|
56
57
|
false
|
|
57
58
|
else
|
|
58
|
-
|
|
59
|
+
@json == other_version_file.json
|
|
59
60
|
end
|
|
60
61
|
end
|
|
61
62
|
|
|
@@ -64,23 +65,36 @@ class VersionFile
|
|
|
64
65
|
def parse
|
|
65
66
|
raise VersionFileDoesNotExistError.new, "File #{path} doesn't exist, has carthage been bootstrapped?" unless File.exist?(@path)
|
|
66
67
|
|
|
68
|
+
@json = read_json
|
|
69
|
+
|
|
70
|
+
@version = @json["commitish"]
|
|
71
|
+
raise AppError.new, "Version is missing in #{@path}:\n\n#{@json}" if @version.nil? || @version.empty?
|
|
72
|
+
|
|
73
|
+
@frameworks_by_platform = PLATFORMS.to_h { |platform| [platform, parse_platform(platform)] }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Reads json from `@path` and cleans up entries, tha are not defined in `@platforms`.
|
|
77
|
+
def read_json
|
|
67
78
|
file = File.read(@path)
|
|
68
79
|
json = JSON.parse(file)
|
|
80
|
+
stripped_json = strip_platforms(json)
|
|
81
|
+
stripped_json
|
|
82
|
+
end
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
:watchOS => parse_platform_array(json['watchOS']),
|
|
78
|
-
}
|
|
84
|
+
def strip_platforms(json)
|
|
85
|
+
for platform in PLATFORMS
|
|
86
|
+
if !@platforms.include?(platform)
|
|
87
|
+
json[platform_to_carthage_dir_string(platform)] = []
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
json
|
|
79
91
|
end
|
|
80
92
|
|
|
81
|
-
def
|
|
93
|
+
def parse_platform(platform)
|
|
94
|
+
carthage_platform_name = platform_to_carthage_dir_string(platform)
|
|
95
|
+
array = @json[carthage_platform_name]
|
|
82
96
|
if array.kind_of?(Array)
|
|
83
|
-
array.map { |entry| entry[
|
|
97
|
+
array.map { |entry| entry["name"] }
|
|
84
98
|
else
|
|
85
99
|
[]
|
|
86
100
|
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.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Juraj Blahunka
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-05-20 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
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
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
|
|
@@ -189,6 +195,7 @@ extra_rdoc_files: []
|
|
|
189
195
|
files:
|
|
190
196
|
- ".gitignore"
|
|
191
197
|
- ".travis.yml"
|
|
198
|
+
- Dockerfile
|
|
192
199
|
- Gemfile
|
|
193
200
|
- Gemfile.lock
|
|
194
201
|
- Guardfile
|
|
@@ -227,7 +234,7 @@ homepage: https://github.com/kayak/carthage_remote_cache
|
|
|
227
234
|
licenses:
|
|
228
235
|
- Apache-2.0
|
|
229
236
|
metadata: {}
|
|
230
|
-
post_install_message:
|
|
237
|
+
post_install_message:
|
|
231
238
|
rdoc_options: []
|
|
232
239
|
require_paths:
|
|
233
240
|
- lib
|
|
@@ -242,9 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
242
249
|
- !ruby/object:Gem::Version
|
|
243
250
|
version: '0'
|
|
244
251
|
requirements: []
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
signing_key:
|
|
252
|
+
rubygems_version: 3.2.4
|
|
253
|
+
signing_key:
|
|
248
254
|
specification_version: 4
|
|
249
255
|
summary: Centralized cache to serve carthage frameworks. Useful for distributed CI
|
|
250
256
|
setup with several build machines.
|