xcode_server 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.markdown +1 -0
- data/lib/xcode_server.rb +9 -1
- data/lib/xcode_server/server.rb +88 -0
- data/lib/xcode_server/server/networking.rb +18 -8
- data/lib/xcode_server/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f074ce05fa24df7dc274627ead59782a92fabd6
|
4
|
+
data.tar.gz: ea3a9f00c206f051e607286b08e8e19d4fd9f96b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9feaa2b1ce689fdcff9d431f59283e418ac63dcc80f456e3517d47d14c4275b921f5c38c74ce9c0f12539e5298d35b2d85fb25dd08e05fd09ac025ad5978f219
|
7
|
+
data.tar.gz: 7947205d9b1279a79b3680aa6d572fba213a6d41010fa1e70192b8710a4c1379207ce3ffb5c76cad5d34d31667a9965f0a47b66f698c5996ae2bfc1c3775780f
|
data/Readme.markdown
CHANGED
data/lib/xcode_server.rb
CHANGED
@@ -3,7 +3,15 @@ require 'xcode_server/server'
|
|
3
3
|
require 'xcode_server/bot'
|
4
4
|
|
5
5
|
module XcodeServer
|
6
|
-
def self.new(host)
|
6
|
+
def self.new(host=@default_host)
|
7
7
|
Server.new(host)
|
8
8
|
end
|
9
|
+
|
10
|
+
def self.default_host=(host)
|
11
|
+
@default_host = host
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.default_host
|
15
|
+
@default_host
|
16
|
+
end
|
9
17
|
end
|
data/lib/xcode_server/server.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'xcode_server/server/networking'
|
2
|
+
require 'SecureRandom'
|
2
3
|
|
3
4
|
module XcodeServer
|
4
5
|
class Server
|
5
6
|
include Networking
|
6
7
|
|
8
|
+
module TestingSchedule
|
9
|
+
ON_COMMIT = 2
|
10
|
+
PERIODIC = 1 # TODO: Verify this value
|
11
|
+
end
|
12
|
+
|
7
13
|
attr_reader :scheme
|
8
14
|
attr_reader :host
|
9
15
|
|
@@ -12,13 +18,95 @@ module XcodeServer
|
|
12
18
|
@scheme = scheme
|
13
19
|
end
|
14
20
|
|
21
|
+
##
|
22
|
+
# Retrieve a list of all bots on the server
|
15
23
|
def bots
|
16
24
|
get_json('bots')['results'].map { |result| Bot.new(self, result) }
|
17
25
|
end
|
18
26
|
|
27
|
+
##
|
28
|
+
# Delete an existing bot based on the bot id
|
29
|
+
# @param id [String] The bot's id as returned by Bot#id
|
19
30
|
def destroy_bot(id, rev = nil)
|
20
31
|
rev ||= get_json("bots/#{id}")['_rev']
|
21
32
|
delete("bots/#{id}/#{rev}").code.to_i == 204
|
22
33
|
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Create a new bot on the server
|
37
|
+
#
|
38
|
+
# @param bot_name [String] The human name of the bot (e.g. "venmo/venmo-iphone#99 (feature/ci)")
|
39
|
+
# @param branch_name [String] The name of the branch to integrate
|
40
|
+
# @param performs_analyze_action [Boolean] Whether or not to analyze during integration
|
41
|
+
# @param performs_archive_action [Boolean] Whether or not to archive during integration
|
42
|
+
# @param performs_test_action [Boolean] Whether or not to test during integration
|
43
|
+
# @param project_path [String] The path to the project or workspace within the working directory
|
44
|
+
# @param repo_url [String] The git URL for a repo containing the project to integrate
|
45
|
+
# @param scheme_name [String] The name of the Xcode scheme to integrate
|
46
|
+
# @param testing_schedule [Integer] See TestingSchedule
|
47
|
+
# @param working_copy_path [String] The name of the working copy directory, usually the name of the repo (e.g. venmo/venmo-iphone)
|
48
|
+
def create_bot(bot_name:,
|
49
|
+
branch_name: "master",
|
50
|
+
performs_analyze_action: true,
|
51
|
+
performs_archive_action: false,
|
52
|
+
performs_test_action: true,
|
53
|
+
project_path:,
|
54
|
+
repo_url:,
|
55
|
+
scheme_name:,
|
56
|
+
testing_schedule: TestingSchedule::ON_COMMIT,
|
57
|
+
working_copy_path:)
|
58
|
+
repo_identifier = SecureRandom.uuid
|
59
|
+
res = post('bots',
|
60
|
+
group: {
|
61
|
+
name: SecureRandom.uuid
|
62
|
+
},
|
63
|
+
configuration: {
|
64
|
+
builtFromClean: 1, # Always
|
65
|
+
periodicScheduleInterval: 0, # Run manually
|
66
|
+
performs_test_action: performs_test_action,
|
67
|
+
performs_analyze_action: performs_analyze_action,
|
68
|
+
scheme_name: scheme_name,
|
69
|
+
sourceControlBlueprint: {
|
70
|
+
DVTSourceControlWorkspaceBlueprintLocationsKey: {
|
71
|
+
repo_identifier => {
|
72
|
+
DVTSourceControlBranchIdentifierKey: branch_name,
|
73
|
+
DVTSourceControlBranchOptionsKey: 156, # Mystery meat
|
74
|
+
DVTSourceControlWorkspaceBlueprintLocationTypeKey: "DVTSourceControlBranch" # "Pull a git branch"
|
75
|
+
}
|
76
|
+
},
|
77
|
+
DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey: repo_identifier,
|
78
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationStrategiesKey: {
|
79
|
+
repo_identifier => {
|
80
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationTypeKey: "DVTSourceControlAuthenticationStrategy"
|
81
|
+
}
|
82
|
+
},
|
83
|
+
DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey: {
|
84
|
+
repo_identifier => 0
|
85
|
+
},
|
86
|
+
DVTSourceControlWorkspaceBlueprintIdentifierKey: repo_identifier,
|
87
|
+
DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey: {
|
88
|
+
repo_identifier => working_copy_path
|
89
|
+
},
|
90
|
+
DVTSourceControlWorkspaceBlueprintNameKey: project_path,
|
91
|
+
DVTSourceControlWorkspaceBlueprintVersion: 203, # Mystery meat
|
92
|
+
DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey: project_path,
|
93
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey: [{
|
94
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey: project_url,
|
95
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey: "com.apple.dt.Xcode.sourcecontrol.Git",
|
96
|
+
DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey: repo_identifier
|
97
|
+
}]
|
98
|
+
},
|
99
|
+
hourOfIntegration: 0,
|
100
|
+
scheduleType: testing_schedule,
|
101
|
+
performs_archive_action: performs_archive_action,
|
102
|
+
testingDestinationType: 0 # "iOS All Devices and All Simulators"
|
103
|
+
},
|
104
|
+
requiresUpgrade: false, # Mystery meat
|
105
|
+
name: bot_name,
|
106
|
+
type: 1 # Mystery meat
|
107
|
+
)
|
108
|
+
|
109
|
+
Bot.new(self, JSON.load(res.body))
|
110
|
+
end
|
23
111
|
end
|
24
112
|
end
|
@@ -1,26 +1,36 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'json'
|
3
|
+
require 'openssl'
|
3
4
|
|
4
5
|
module XcodeServer
|
5
6
|
class Server
|
6
7
|
module Networking
|
7
8
|
|
8
|
-
def get(
|
9
|
-
|
10
|
-
http.request(Net::HTTP::Get.new(path))
|
9
|
+
def get(endpoint)
|
10
|
+
http.request(Net::HTTP::Get.new(path_to(endpoint)))
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
|
13
|
+
def post(endpoint, params)
|
14
|
+
puts params.to_json
|
15
|
+
req = Net::HTTP::Post.new(path_to(endpoint))
|
16
|
+
req['Content-Type'] = 'application/json'
|
17
|
+
http.request(req, params.to_json)
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
+
def get_json(endpoint)
|
21
|
+
JSON.load(get(endpoint).body)
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete(endpoint)
|
25
|
+
http.request(Net::HTTP::Delete.new(path_to(endpoint)))
|
20
26
|
end
|
21
27
|
|
22
28
|
private
|
23
29
|
|
30
|
+
def path_to(endpoint)
|
31
|
+
"/xcode/api/#{endpoint}"
|
32
|
+
end
|
33
|
+
|
24
34
|
def http
|
25
35
|
@_http ||= begin
|
26
36
|
http = Net::HTTP.new(host, 443)
|
data/lib/xcode_server/version.rb
CHANGED