travis-yaml 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +14 -0
  5. data/Gemfile +9 -0
  6. data/Gemfile.lock +73 -0
  7. data/LICENSE +22 -0
  8. data/README.md +232 -0
  9. data/Rakefile +3 -0
  10. data/SPEC.md +1018 -0
  11. data/bench/parser_bench.rb +54 -0
  12. data/config.ru +2 -0
  13. data/lib/travis/yaml.rb +43 -0
  14. data/lib/travis/yaml/matrix.rb +65 -0
  15. data/lib/travis/yaml/nodes.rb +40 -0
  16. data/lib/travis/yaml/nodes/branches.rb +12 -0
  17. data/lib/travis/yaml/nodes/bundler_args.rb +6 -0
  18. data/lib/travis/yaml/nodes/cache.rb +29 -0
  19. data/lib/travis/yaml/nodes/compiler.rb +7 -0
  20. data/lib/travis/yaml/nodes/compiler_entry.rb +9 -0
  21. data/lib/travis/yaml/nodes/deploy.rb +7 -0
  22. data/lib/travis/yaml/nodes/deploy_conditions.rb +12 -0
  23. data/lib/travis/yaml/nodes/deploy_entry.rb +10 -0
  24. data/lib/travis/yaml/nodes/env.rb +36 -0
  25. data/lib/travis/yaml/nodes/fixed_value.rb +60 -0
  26. data/lib/travis/yaml/nodes/git.rb +9 -0
  27. data/lib/travis/yaml/nodes/jdk.rb +11 -0
  28. data/lib/travis/yaml/nodes/language.rb +18 -0
  29. data/lib/travis/yaml/nodes/language_specific.rb +45 -0
  30. data/lib/travis/yaml/nodes/mapping.rb +204 -0
  31. data/lib/travis/yaml/nodes/matrix.rb +36 -0
  32. data/lib/travis/yaml/nodes/node.rb +102 -0
  33. data/lib/travis/yaml/nodes/notifications.rb +77 -0
  34. data/lib/travis/yaml/nodes/open_mapping.rb +18 -0
  35. data/lib/travis/yaml/nodes/os.rb +21 -0
  36. data/lib/travis/yaml/nodes/os_entry.rb +19 -0
  37. data/lib/travis/yaml/nodes/root.rb +44 -0
  38. data/lib/travis/yaml/nodes/ruby.rb +11 -0
  39. data/lib/travis/yaml/nodes/scalar.rb +97 -0
  40. data/lib/travis/yaml/nodes/sequence.rb +84 -0
  41. data/lib/travis/yaml/nodes/stage.rb +6 -0
  42. data/lib/travis/yaml/nodes/version.rb +6 -0
  43. data/lib/travis/yaml/nodes/version_list.rb +7 -0
  44. data/lib/travis/yaml/nodes/virtual_env.rb +7 -0
  45. data/lib/travis/yaml/parser.rb +31 -0
  46. data/lib/travis/yaml/parser/dummy.rb +13 -0
  47. data/lib/travis/yaml/parser/psych.rb +217 -0
  48. data/lib/travis/yaml/parser/ruby.rb +77 -0
  49. data/lib/travis/yaml/secure_string.rb +12 -0
  50. data/lib/travis/yaml/version.rb +5 -0
  51. data/play/lint.rb +8 -0
  52. data/play/spec.rb +183 -0
  53. data/play/weblint.rb +296 -0
  54. data/spec/nodes/.rb +0 -0
  55. data/spec/nodes/branches_spec.rb +45 -0
  56. data/spec/nodes/bundler_args_spec.rb +9 -0
  57. data/spec/nodes/cache_spec.rb +55 -0
  58. data/spec/nodes/compiler_spec.rb +14 -0
  59. data/spec/nodes/deploy_spec.rb +83 -0
  60. data/spec/nodes/git_spec.rb +55 -0
  61. data/spec/nodes/jdk_spec.rb +41 -0
  62. data/spec/nodes/language_spec.rb +79 -0
  63. data/spec/nodes/notifications_spec.rb +45 -0
  64. data/spec/nodes/os_spec.rb +28 -0
  65. data/spec/nodes/ruby_spec.rb +69 -0
  66. data/spec/nodes/stage_spec.rb +34 -0
  67. data/spec/nodes/virtual_env_spec.rb +9 -0
  68. data/spec/parser/dummy_spec.rb +7 -0
  69. data/spec/parser/ruby_spec.rb +41 -0
  70. data/spec/support.rb +3 -0
  71. data/spec/support/coverage.rb +11 -0
  72. data/spec/support/environment.rb +1 -0
  73. data/spec/yaml_spec.rb +26 -0
  74. data/travis-yaml.gemspec +24 -0
  75. metadata +207 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 752665752154cdb3b8bc22e2dd0cf9eb6c79e36c
4
+ data.tar.gz: c7449c2793420fe650091f84eb749e037436c453
5
+ SHA512:
6
+ metadata.gz: 751b783a0265500138733893196c3853ec3f8eeee609a921077dad79bd7e8fcbfbef093259657ce9737112f6ea8234f00886663fdc167fe931ac721ca2eb54ef
7
+ data.tar.gz: 161583c79e9e1e820e1a9495d10b103d4f2a715a59d6956a4f1d8112fe07cb0baa328a69986d8613cdf716cca405d9c819e885fd69ad0db69bba5daa8539797e
@@ -0,0 +1 @@
1
+ .coverage
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --tty
3
+ -r support
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ script: bundle exec rspec
6
+ bundler_args: "--without play"
7
+ deploy:
8
+ provider: heroku
9
+ api_key:
10
+ secure: OrCcUz+MNjlxNkReqCvQZq62Y5mdKxjA+Lwo6VdsuoWHIJ8ShKIZUhoWOE6B0VIYSxSBObkXULitqiuZAvJfHSmS6soowPc79VvVeetMkIxRbHG9v3utg5O5pHqjHeW7pOWwrvTR5sria9YPevFN3+0R/C3xsxnQrc8dw+06jEQ=
11
+ app: travis-yaml
12
+ on:
13
+ repo: travis-ci/travis-yaml
14
+ ruby: 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ group :play do
5
+ gem 'sinatra'
6
+ gem 'sass', '~> 3.1'
7
+ gem 'slim', '~> 1.3'
8
+ gem 'gh'
9
+ end
@@ -0,0 +1,73 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ travis-yaml (0.1.0)
5
+ psych (~> 2.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.3.5)
11
+ backports (3.4.0)
12
+ diff-lcs (1.2.5)
13
+ docile (1.1.3)
14
+ faraday (0.9.0)
15
+ multipart-post (>= 1.2, < 3)
16
+ gh (0.13.0)
17
+ addressable
18
+ backports
19
+ faraday (~> 0.8)
20
+ multi_json (~> 1.0)
21
+ net-http-persistent (>= 2.7)
22
+ net-http-pipeline
23
+ multi_json (1.8.4)
24
+ multipart-post (2.0.0)
25
+ net-http-persistent (2.9)
26
+ net-http-pipeline (1.0.1)
27
+ psych (2.0.4)
28
+ rack (1.5.2)
29
+ rack-protection (1.5.2)
30
+ rack
31
+ rake (10.1.1)
32
+ rspec (3.0.0.beta2)
33
+ rspec-core (= 3.0.0.beta2)
34
+ rspec-expectations (= 3.0.0.beta2)
35
+ rspec-mocks (= 3.0.0.beta2)
36
+ rspec-core (3.0.0.beta2)
37
+ rspec-support (= 3.0.0.beta2)
38
+ rspec-expectations (3.0.0.beta2)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (= 3.0.0.beta2)
41
+ rspec-mocks (3.0.0.beta2)
42
+ rspec-support (= 3.0.0.beta2)
43
+ rspec-support (3.0.0.beta2)
44
+ safe_yaml (1.0.1)
45
+ sass (3.3.3)
46
+ simplecov (0.8.2)
47
+ docile (~> 1.1.0)
48
+ multi_json
49
+ simplecov-html (~> 0.8.0)
50
+ simplecov-html (0.8.0)
51
+ sinatra (1.4.4)
52
+ rack (~> 1.4)
53
+ rack-protection (~> 1.4)
54
+ tilt (~> 1.3, >= 1.3.4)
55
+ slim (1.3.9)
56
+ temple (~> 0.6.3)
57
+ tilt (~> 1.3, >= 1.3.3)
58
+ temple (0.6.7)
59
+ tilt (1.4.1)
60
+
61
+ PLATFORMS
62
+ ruby
63
+
64
+ DEPENDENCIES
65
+ gh
66
+ rake
67
+ rspec (~> 3.0.0.beta)
68
+ safe_yaml (~> 1.0.1)
69
+ sass (~> 3.1)
70
+ simplecov
71
+ sinatra
72
+ slim (~> 1.3)
73
+ travis-yaml!
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) 2014 Travis CI GmbH <support@travis-ci.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
@@ -0,0 +1,232 @@
1
+ # Travis Configuration Parser
2
+
3
+ ## What is this?
4
+
5
+ This project is a library for loading Travis CI build configuration.
6
+
7
+ It can create a configuration both from a normal Ruby Hash or a YAML string.
8
+ These config objects generally behave like normal primitives (hashes, arrays, etc).
9
+
10
+ ``` ruby
11
+ require 'travis/yaml'
12
+
13
+ config = Travis::Yaml.parse('language: ruby')
14
+ config = Travis::Yaml.parse(language: 'ruby')
15
+
16
+ config[:language] # ruby
17
+ config.language # ruby
18
+
19
+ # using parse! instead of parse will print out warnings
20
+ Travis::Yaml.parse! deploy: []
21
+ # .travis.yml: missing key "language", defaulting to "ruby"
22
+ # .travis.yml: value for "deploy" section is empty, dropping
23
+
24
+ # have it generate the build matrix for you
25
+ Travis::Yaml.matrix('rvm: [jruby, 2.0.0]').each do |matrix_entry|
26
+ puts matrix_entry.ruby
27
+ end
28
+ ```
29
+
30
+ ## Why use it?
31
+
32
+ * **Prevents code execution.** Instead of deserializing arbitrary Ruby objects, it only deserializes primitive objects. To go even further, in contrast to SafeYAML, it only deserializes primitive objects that are expected for a certain part of the configuration.
33
+ * **Prevents memory leaks.** Internally, only expected values are stored in the data structure, discarding any additional data. No user input is converted to symbols (which would allow a memory based DoS attack).
34
+ * **Normalization is happening in one place.** Travis CI currently does config normalization in many different parts of its infrastructure, making it tedious to determine supported input formats and the resulting internal structure.
35
+ * **Explicit structure.** Due to the explicit configuration structure, exceptions throughout the system can be greatly reduced, since the configuration will not contain unexpected objects.
36
+ * **Forgiving about user input.** The parser knows the expected structure and can therefore automatically map some malformed input onto that structure. For instance, `node: 1.10` does not get converted to `node: 1.1` internally, because travis-yaml knows to expect a string here rather than a float.
37
+ * **Built-in support for encrypted values**, making it easier to support these in different parts of the system and never leak the decrypted form if configuration is being serialized.
38
+ * **Extensive warning and error handling**, making it possible to use this library for linting and also to display such warnings when running a build.
39
+ * **Performance.** Using travis-yaml to load a configuration from a YAML string is slightly faster than using psych directly and significantly faster than using safeyaml.
40
+ * **Compatibility.** This library is written in a way to not only be fully compatible with the current .travis.yml format, but also with the configuration data in the current Travis database and with the code interacting with the configuration data (for instance in travis-build).
41
+ * **Extensibility.** The configuration structure is easily extended.
42
+ * **Pluggable parser.** It is easy to write a new parser. This would be useful for instance for the Travis CI command line client, where one could imagine a parser for the small subset of the YAML format that is commonly in use. This would for instance allow to write a parser and serializer able to preserve comments and indentation when modifying the contents of the .travis.yml.
43
+
44
+ ## What is missing?
45
+
46
+ * Full definition of current .travis.yml format
47
+ * Serialization
48
+
49
+ ## Defining Structure
50
+
51
+ Good starting points for getting into the code are the [root](lib/travis/yaml/nodes/root.rb) node and the [language](lib/travis/yaml/nodes/language.rb) node.
52
+
53
+ A parsed configuration is very similar to a syntax tree. To create a new node type, you should inherit from one of the abstract types. Internal vocabulary is taken from the YAML spec rather than the Ruby names (ie, sequence vs array, mapping vs hash).
54
+
55
+ ### Scalar Values
56
+
57
+ Most of the time, scalar values are just strings. In fact, if you create a new scalar node class and don't specify and other supported type, it will treat everything as string.
58
+
59
+ ``` ruby
60
+ module Travis::Yaml::Nodes
61
+ class Example < Scalar
62
+ end
63
+ end
64
+ ```
65
+
66
+ This will parse `foo` to `"foo"` and `1.10` to `1.10`. This will also generate a warning and discard values like `!float 1.10`.
67
+
68
+ #### Value Types
69
+
70
+ You can also allow other types and change the default type unsupported implicit types are cast to.
71
+
72
+ ``` ruby
73
+ module Travis::Yaml::Nodes
74
+ class Example < Scalar
75
+ cast :str, :binary, :int
76
+ default_type :int
77
+ end
78
+ end
79
+ ```
80
+
81
+ Available types are `str`, `binary`, `bool`, `float`, `int`, `time`, `secure` and `null`.
82
+
83
+ #### Default Value
84
+
85
+ It is also possible to give a scalar a default value.
86
+
87
+ ``` ruby
88
+ module Travis::Yaml::Nodes
89
+ class Example < Scalar
90
+ default_value "example"
91
+ end
92
+ end
93
+ ```
94
+
95
+ This is handy when using it for a required entry in a mapping (for instance, `language` is required, but has a default).
96
+
97
+ #### Fixed Value Set
98
+
99
+ For entries that have a well defined set of values, you can inherit from `FixedValue`:
100
+
101
+ ``` ruby
102
+ module Travis::Yaml::Nodes
103
+ class Example < FixedValue
104
+ ignore_case
105
+
106
+ default_value :example
107
+ value :foo, :bar, baz: :bar
108
+ end
109
+ end
110
+ ```
111
+
112
+ This will, for example, map `FOO` to `"foo"`, `baz` to `"bar"`, and `blah` to `"example"` (and generate a warning about `blah` being not supported).
113
+
114
+ #### Shorthands
115
+
116
+ There are shorthands for creating `Scalar` and `FixedValue` subclasses:
117
+
118
+ ``` ruby
119
+ module Travis::Yaml::Nodes
120
+ class Example < Map
121
+ map :foo, to: Scalar[:int]
122
+ map :bar, to: FixedValue[:foo, :bar]
123
+ end
124
+ end
125
+ ```
126
+
127
+ ### Sequences
128
+
129
+ Sequences correspond to Ruby arrays. If you pass in a scalar or mapping instead of a sequence, it will be treated as if it was a sequence with a single entry of that value.
130
+
131
+ ``` ruby
132
+ module Travis::Yaml::Nodes
133
+ class ExampleList < Sequence
134
+ type ExampleValue # node type, defaults to Scalar
135
+ end
136
+ end
137
+ ```
138
+
139
+ ### Mappings
140
+
141
+ Mappings correspond to hashes in Ruby.
142
+
143
+ ``` ruby
144
+ module Travis::Yaml::Nodes
145
+ class ExampleMapping < Mapping
146
+ # map the value for the "example" key to an Example node
147
+ # map the value for the "other" key to an Other node
148
+ map :example, :other
149
+
150
+ # map the values for "foo" and "bar" to a Scalar
151
+ map :foo, :bar, to: Scalar
152
+
153
+ # map "list" to a Sequence, keep it even if it's empty
154
+ map :list, to: Sequence, drop_empty: false
155
+
156
+ # require "setting" to be present
157
+ map :setting, required: true
158
+
159
+ # make "option" an alias for "setting"
160
+ map :option, to: :setting
161
+
162
+ # if a scalar is passed in instead of a mapping, treat it as
163
+ # the value of "setting" ("foo" becomes { setting: "foo" })
164
+ prefix_scalar :setting
165
+ end
166
+ end
167
+ ```
168
+
169
+ #### Open Mappings
170
+
171
+ Sometimes it is not possible to define all available keys for a mapping. You can solve this by using an open mapping:
172
+
173
+ ``` ruby
174
+ module Travis::Yaml::Nodes
175
+ class ExampleMapping < OpenMapping
176
+ # node type for entries not specified (defaults to Scalar)
177
+ default_type ExampleValue
178
+
179
+ # map "setting" to Setting node, make it a requirement
180
+ map :setting, required: true
181
+ end
182
+ end
183
+ ```
184
+
185
+ You can also limit the possible keys by overriding `accept_key?`.
186
+
187
+ ``` ruby
188
+ module Travis::Yaml::Nodes
189
+ class ExampleMapping < OpenMapping
190
+ default_type ExampleValue
191
+
192
+ def accept_key?(key)
193
+ key.start_with? "example_"
194
+ end
195
+ end
196
+ end
197
+ ```
198
+
199
+ ### Additional Verification
200
+
201
+ Besides the generated warnings, validations and normalizations inherent to the structure, you can define your own checks and normalizations by overriding the `verify` method.
202
+
203
+ ``` ruby
204
+ module Travis::Yaml::Nodes
205
+ class Example < Scalar
206
+ def verify
207
+ if value == "foo"
208
+ warning "foo is deprecated, using bar instead"
209
+ self.value = "bar"
210
+ end
211
+ super
212
+ end
213
+ end
214
+ end
215
+ ```
216
+
217
+ The `warning` method will generate track a warning, so it can be presented to the user later on. The `error` method will lead to the node being removed from its parent node. It will also propagate the error message as a warning in the parent node.
218
+
219
+ ### Nested Warnings
220
+
221
+ When reflecting upon a node, `warnings` and `errors` will only contain the messages for that specific node. To get all the warnings for the entire tree, use `nested_warnings`, which will also give you the path (as array of strings).
222
+
223
+ ``` ruby
224
+ config.nested_warnings.each do |path, message|
225
+ p path # ["my", "example", "key"]
226
+ p message # "this is the warning"
227
+ end
228
+ ```
229
+
230
+ ## Requirements
231
+
232
+ This project requires Ruby 1.9.3 or 2.0.0 and Psych ~> 2.0 (part of the stdlib).
@@ -0,0 +1,3 @@
1
+ task(:spec) { ruby '-S rspec' }
2
+ task(:generate) { ruby 'play/spec.rb' }
3
+ task(default: [:spec, :generate])
data/SPEC.md ADDED
@@ -0,0 +1,1018 @@
1
+ ## The `.travis.yml` Format
2
+ Here is a list of all the options understood by travis-yaml.
3
+
4
+ Note that stricitly speaking Travis CI might not have the same understanding of these as travis-yaml has at the moment, since travis-yaml is not yet being used.
5
+
6
+ ### Available Options
7
+ #### `after_deploy`
8
+ Commands that will be run on the VM.
9
+
10
+ **Expected format:** List of strings; or a single string.
11
+
12
+ #### `after_failure`
13
+ Commands that will be run on the VM.
14
+
15
+ **Expected format:** List of strings; or a single string.
16
+
17
+ #### `after_result`
18
+ Commands that will be run on the VM.
19
+
20
+ **Expected format:** List of strings; or a single string.
21
+
22
+ #### `after_script`
23
+ Commands that will be run on the VM.
24
+
25
+ **Expected format:** List of strings; or a single string.
26
+
27
+ #### `after_success`
28
+ Commands that will be run on the VM.
29
+
30
+ **Expected format:** List of strings; or a single string.
31
+
32
+ #### `before_deploy`
33
+ Commands that will be run on the VM.
34
+
35
+ **Expected format:** List of strings; or a single string.
36
+
37
+ #### `before_install`
38
+ Commands that will be run on the VM.
39
+
40
+ **Expected format:** List of strings; or a single string.
41
+
42
+ #### `before_script`
43
+ Commands that will be run on the VM.
44
+
45
+ **Expected format:** List of strings; or a single string.
46
+
47
+ #### `branches`
48
+ **Expected format:** Key value mapping.
49
+
50
+ #### `branches.except`
51
+ **Expected format:** List of strings or regular expressions; or a single string or regular expression.
52
+
53
+ #### `branches.only`
54
+ **Expected format:** List of strings or regular expressions; or a single string or regular expression.
55
+
56
+ #### `bundler_args`
57
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default).**
58
+
59
+ **Expected format:** String.
60
+
61
+ #### `cache`
62
+ **Expected format:** Key value mapping.
63
+
64
+ #### `cache.apt`
65
+ **Expected format:** Boolean value.
66
+
67
+ #### `cache.bundler`
68
+ **Expected format:** Boolean value.
69
+
70
+ #### `cache.directories`
71
+ **Expected format:** List of strings; or a single string.
72
+
73
+ #### `compiler`
74
+ **This setting is only relevant if [`language`](#language) is set to `c` or `cpp`.**
75
+
76
+ **Expected format:** List of strings; or a single string.
77
+
78
+ #### `compiler[]`
79
+ Value has to be `gcc` (default) or `clang`; or one of the known aliases: `g++` for `gcc` or `clang++` for `clang`. Setting is not case sensitive.
80
+
81
+ **Expected format:** String.
82
+
83
+ #### `composer_args`
84
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
85
+
86
+ **Expected format:** String.
87
+
88
+ #### `deploy`
89
+ **Expected format:** List of key value mappings; or a single key value mapping.
90
+
91
+ #### `deploy[]`
92
+ **Expected format:** Key value mapping.
93
+
94
+ #### `deploy[].*`
95
+ **Expected format:** String.
96
+
97
+ #### `deploy[].edge`
98
+ **This setting is experimental and might be removed!**
99
+
100
+ **Expected format:** Boolean value.
101
+
102
+ #### `deploy[].on`
103
+ **Expected format:** Key value mapping.
104
+
105
+ #### `deploy[].on.all_branches`
106
+ **Expected format:** Boolean value.
107
+
108
+ #### `deploy[].on.branch`
109
+ **Expected format:** String.
110
+
111
+ #### `deploy[].on.condition`
112
+ **Expected format:** String.
113
+
114
+ #### `deploy[].on.jdk`
115
+ **This setting is only relevant if [`language`](#language) is set to `clojure`, `groovy`, `java`, `ruby` (default), `scala` or `android`.**
116
+
117
+ `jdk` version to use.
118
+
119
+ **Expected format:** String.
120
+
121
+ #### `deploy[].on.node`
122
+ `node` version to use.
123
+
124
+ **Expected format:** String.
125
+
126
+ #### `deploy[].on.perl`
127
+ **This setting is only relevant if [`language`](#language) is set to `perl`.**
128
+
129
+ `perl` version to use.
130
+
131
+ **Expected format:** String.
132
+
133
+ #### `deploy[].on.php`
134
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
135
+
136
+ `php` version to use.
137
+
138
+ **Expected format:** String.
139
+
140
+ #### `deploy[].on.python`
141
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
142
+
143
+ `python` version to use.
144
+
145
+ **Expected format:** String.
146
+
147
+ #### `deploy[].on.repo`
148
+ **Expected format:** String.
149
+
150
+ #### `deploy[].on.ruby`
151
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
152
+
153
+ `ruby` version to use.
154
+
155
+ **Expected format:** String.
156
+
157
+ #### `deploy[].on.rvm`
158
+ Alias for [`deploy[].on.ruby`](#deployonruby).
159
+
160
+ #### `deploy[].on.scala`
161
+ `scala` version to use.
162
+
163
+ **Expected format:** String.
164
+
165
+ #### `deploy[].on.tags`
166
+ **Expected format:** Boolean value.
167
+
168
+ #### `deploy[].provider`
169
+ **This setting is required!**
170
+
171
+ **Expected format:** String.
172
+
173
+ #### `env`
174
+ **Expected format:** Key value mapping.
175
+
176
+ #### `env.global`
177
+ **Expected format:** List of strings or encrypted strings; or a single string or encrypted string.
178
+
179
+ #### `env.matrix`
180
+ **Expected format:** List of strings or encrypted strings; or a single string or encrypted string.
181
+
182
+ #### `gemfile`
183
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
184
+
185
+ Gemfile(s) to use.
186
+
187
+ **Expected format:** List of strings; or a single string.
188
+
189
+ #### `ghc`
190
+ **This setting is only relevant if [`language`](#language) is set to `haskell`.**
191
+
192
+ List of `ghc` versions to use.
193
+
194
+ **Expected format:** List of strings; or a single string.
195
+
196
+ #### `git`
197
+ **Expected format:** Key value mapping.
198
+
199
+ #### `git.depth`
200
+ **Expected format:** Integer value.
201
+
202
+ #### `git.strategy`
203
+ Value has to be `clone` or `tarball`. Setting is case sensitive.
204
+
205
+ **Expected format:** String.
206
+
207
+ #### `git.submodules`
208
+ **Expected format:** Boolean value.
209
+
210
+ #### `go`
211
+ **This setting is only relevant if [`language`](#language) is set to `go`.**
212
+
213
+ List of `go` versions to use.
214
+
215
+ **Expected format:** List of strings; or a single string.
216
+
217
+ #### `gobuild_args`
218
+ **This setting is only relevant if [`language`](#language) is set to `go`.**
219
+
220
+ **Expected format:** String.
221
+
222
+ #### `install`
223
+ Commands that will be run on the VM.
224
+
225
+ **Expected format:** List of strings; or a single string.
226
+
227
+ #### `jdk`
228
+ **This setting is only relevant if [`language`](#language) is set to `clojure`, `groovy`, `java`, `ruby` (default), `scala` or `android`.**
229
+
230
+ List of `jdk` versions to use.
231
+
232
+ **Expected format:** List of strings; or a single string.
233
+
234
+ #### `language`
235
+ **This setting is required!**
236
+
237
+ Value has to be `c`, `cpp`, `clojure`, `erlang`, `go`, `groovy`, `haskell`, `java`, `node_js`, `objective-c`, `ruby` (default), `python`, `perl`, `php`, `scala` or `android`; or one of the known aliases: `jvm` for `java`, `javascript` for `node_js`, `node` for `node_js`, `nodejs` for `node_js`, `golang` for `go`, `objective_c` for `objective-c`, `obj_c` for `objective-c`, `objc` for `objective-c`, `c++` for `cpp`, `node.js` for `node_js` or `obj-c` for `objective-c`. Setting is not case sensitive.
238
+
239
+ **Expected format:** String.
240
+
241
+ #### `lein`
242
+ **This setting is only relevant if [`language`](#language) is set to `clojure`.**
243
+
244
+ List of `lein` versions to use.
245
+
246
+ **Expected format:** List of strings; or a single string.
247
+
248
+ #### `matrix`
249
+ **Expected format:** Key value mapping.
250
+
251
+ #### `matrix.allow_failures`
252
+ **Expected format:** List of key value mappings; or a single key value mapping.
253
+
254
+ #### `matrix.allow_failures[]`
255
+ **Expected format:** Key value mapping.
256
+
257
+ #### `matrix.allow_failures[].compiler`
258
+ **This setting is only relevant if [`language`](#language) is set to `c` or `cpp`.**
259
+
260
+ Value has to be `gcc` (default) or `clang`; or one of the known aliases: `g++` for `gcc` or `clang++` for `clang`. Setting is not case sensitive.
261
+
262
+ **Expected format:** String.
263
+
264
+ #### `matrix.allow_failures[].env`
265
+ **Expected format:** String or encrypted string.
266
+
267
+ #### `matrix.allow_failures[].gemfile`
268
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
269
+
270
+ Gemfile to use.
271
+
272
+ **Expected format:** String.
273
+
274
+ #### `matrix.allow_failures[].ghc`
275
+ **This setting is only relevant if [`language`](#language) is set to `haskell`.**
276
+
277
+ `ghc` version to use.
278
+
279
+ **Expected format:** String.
280
+
281
+ #### `matrix.allow_failures[].go`
282
+ **This setting is only relevant if [`language`](#language) is set to `go`.**
283
+
284
+ `go` version to use.
285
+
286
+ **Expected format:** String.
287
+
288
+ #### `matrix.allow_failures[].jdk`
289
+ **This setting is only relevant if [`language`](#language) is set to `clojure`, `groovy`, `java`, `ruby` (default), `scala` or `android`.**
290
+
291
+ `jdk` version to use.
292
+
293
+ **Expected format:** String.
294
+
295
+ #### `matrix.allow_failures[].lein`
296
+ **This setting is only relevant if [`language`](#language) is set to `clojure`.**
297
+
298
+ `lein` version to use.
299
+
300
+ **Expected format:** String.
301
+
302
+ #### `matrix.allow_failures[].node`
303
+ Alias for [`matrix.allow_failures[].node_js`](#matrixallow_failuresnode_js).
304
+
305
+ #### `matrix.allow_failures[].node_js`
306
+ **This setting is only relevant if [`language`](#language) is set to `node_js`.**
307
+
308
+ `node_js` version to use.
309
+
310
+ **Expected format:** String.
311
+
312
+ #### `matrix.allow_failures[].os`
313
+ Value has to be `linux` (default) or `osx`; or one of the known aliases: `ubuntu` for `linux`, `mac` for `osx` or `macos` for `osx`. Setting is not case sensitive.
314
+
315
+ **Expected format:** String.
316
+
317
+ #### `matrix.allow_failures[].otp`
318
+ Alias for [`matrix.allow_failures[].otp_release`](#matrixallow_failuresotp_release).
319
+
320
+ #### `matrix.allow_failures[].otp_release`
321
+ **This setting is only relevant if [`language`](#language) is set to `erlang`.**
322
+
323
+ `otp_release` version to use.
324
+
325
+ **Expected format:** String.
326
+
327
+ #### `matrix.allow_failures[].perl`
328
+ **This setting is only relevant if [`language`](#language) is set to `perl`.**
329
+
330
+ `perl` version to use.
331
+
332
+ **Expected format:** String.
333
+
334
+ #### `matrix.allow_failures[].php`
335
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
336
+
337
+ `php` version to use.
338
+
339
+ **Expected format:** String.
340
+
341
+ #### `matrix.allow_failures[].python`
342
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
343
+
344
+ `python` version to use.
345
+
346
+ **Expected format:** String.
347
+
348
+ #### `matrix.allow_failures[].ruby`
349
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
350
+
351
+ `ruby` version to use.
352
+
353
+ **Expected format:** String.
354
+
355
+ #### `matrix.allow_failures[].rvm`
356
+ Alias for [`matrix.allow_failures[].ruby`](#matrixallow_failuresruby).
357
+
358
+ #### `matrix.allow_failures[].xcode_scheme`
359
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
360
+
361
+ `xcode_scheme` version to use.
362
+
363
+ **Expected format:** String.
364
+
365
+ #### `matrix.allow_failures[].xcode_sdk`
366
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
367
+
368
+ `xcode_sdk` version to use.
369
+
370
+ **Expected format:** String.
371
+
372
+ #### `matrix.exclude`
373
+ **Expected format:** List of key value mappings; or a single key value mapping.
374
+
375
+ #### `matrix.exclude[]`
376
+ **Expected format:** Key value mapping.
377
+
378
+ #### `matrix.exclude[].compiler`
379
+ **This setting is only relevant if [`language`](#language) is set to `c` or `cpp`.**
380
+
381
+ Value has to be `gcc` (default) or `clang`; or one of the known aliases: `g++` for `gcc` or `clang++` for `clang`. Setting is not case sensitive.
382
+
383
+ **Expected format:** String.
384
+
385
+ #### `matrix.exclude[].env`
386
+ **Expected format:** String or encrypted string.
387
+
388
+ #### `matrix.exclude[].gemfile`
389
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
390
+
391
+ Gemfile to use.
392
+
393
+ **Expected format:** String.
394
+
395
+ #### `matrix.exclude[].ghc`
396
+ **This setting is only relevant if [`language`](#language) is set to `haskell`.**
397
+
398
+ `ghc` version to use.
399
+
400
+ **Expected format:** String.
401
+
402
+ #### `matrix.exclude[].go`
403
+ **This setting is only relevant if [`language`](#language) is set to `go`.**
404
+
405
+ `go` version to use.
406
+
407
+ **Expected format:** String.
408
+
409
+ #### `matrix.exclude[].jdk`
410
+ **This setting is only relevant if [`language`](#language) is set to `clojure`, `groovy`, `java`, `ruby` (default), `scala` or `android`.**
411
+
412
+ `jdk` version to use.
413
+
414
+ **Expected format:** String.
415
+
416
+ #### `matrix.exclude[].lein`
417
+ **This setting is only relevant if [`language`](#language) is set to `clojure`.**
418
+
419
+ `lein` version to use.
420
+
421
+ **Expected format:** String.
422
+
423
+ #### `matrix.exclude[].node`
424
+ Alias for [`matrix.exclude[].node_js`](#matrixexcludenode_js).
425
+
426
+ #### `matrix.exclude[].node_js`
427
+ **This setting is only relevant if [`language`](#language) is set to `node_js`.**
428
+
429
+ `node_js` version to use.
430
+
431
+ **Expected format:** String.
432
+
433
+ #### `matrix.exclude[].os`
434
+ Value has to be `linux` (default) or `osx`; or one of the known aliases: `ubuntu` for `linux`, `mac` for `osx` or `macos` for `osx`. Setting is not case sensitive.
435
+
436
+ **Expected format:** String.
437
+
438
+ #### `matrix.exclude[].otp`
439
+ Alias for [`matrix.exclude[].otp_release`](#matrixexcludeotp_release).
440
+
441
+ #### `matrix.exclude[].otp_release`
442
+ **This setting is only relevant if [`language`](#language) is set to `erlang`.**
443
+
444
+ `otp_release` version to use.
445
+
446
+ **Expected format:** String.
447
+
448
+ #### `matrix.exclude[].perl`
449
+ **This setting is only relevant if [`language`](#language) is set to `perl`.**
450
+
451
+ `perl` version to use.
452
+
453
+ **Expected format:** String.
454
+
455
+ #### `matrix.exclude[].php`
456
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
457
+
458
+ `php` version to use.
459
+
460
+ **Expected format:** String.
461
+
462
+ #### `matrix.exclude[].python`
463
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
464
+
465
+ `python` version to use.
466
+
467
+ **Expected format:** String.
468
+
469
+ #### `matrix.exclude[].ruby`
470
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
471
+
472
+ `ruby` version to use.
473
+
474
+ **Expected format:** String.
475
+
476
+ #### `matrix.exclude[].rvm`
477
+ Alias for [`matrix.exclude[].ruby`](#matrixexcluderuby).
478
+
479
+ #### `matrix.exclude[].xcode_scheme`
480
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
481
+
482
+ `xcode_scheme` version to use.
483
+
484
+ **Expected format:** String.
485
+
486
+ #### `matrix.exclude[].xcode_sdk`
487
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
488
+
489
+ `xcode_sdk` version to use.
490
+
491
+ **Expected format:** String.
492
+
493
+ #### `matrix.fast_finish`
494
+ **Expected format:** Boolean value.
495
+
496
+ #### `matrix.include`
497
+ **Expected format:** List of key value mappings; or a single key value mapping.
498
+
499
+ #### `matrix.include[]`
500
+ **Expected format:** Key value mapping.
501
+
502
+ #### `matrix.include[].compiler`
503
+ **This setting is only relevant if [`language`](#language) is set to `c` or `cpp`.**
504
+
505
+ Value has to be `gcc` (default) or `clang`; or one of the known aliases: `g++` for `gcc` or `clang++` for `clang`. Setting is not case sensitive.
506
+
507
+ **Expected format:** String.
508
+
509
+ #### `matrix.include[].env`
510
+ **Expected format:** String or encrypted string.
511
+
512
+ #### `matrix.include[].gemfile`
513
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
514
+
515
+ Gemfile to use.
516
+
517
+ **Expected format:** String.
518
+
519
+ #### `matrix.include[].ghc`
520
+ **This setting is only relevant if [`language`](#language) is set to `haskell`.**
521
+
522
+ `ghc` version to use.
523
+
524
+ **Expected format:** String.
525
+
526
+ #### `matrix.include[].go`
527
+ **This setting is only relevant if [`language`](#language) is set to `go`.**
528
+
529
+ `go` version to use.
530
+
531
+ **Expected format:** String.
532
+
533
+ #### `matrix.include[].jdk`
534
+ **This setting is only relevant if [`language`](#language) is set to `clojure`, `groovy`, `java`, `ruby` (default), `scala` or `android`.**
535
+
536
+ `jdk` version to use.
537
+
538
+ **Expected format:** String.
539
+
540
+ #### `matrix.include[].lein`
541
+ **This setting is only relevant if [`language`](#language) is set to `clojure`.**
542
+
543
+ `lein` version to use.
544
+
545
+ **Expected format:** String.
546
+
547
+ #### `matrix.include[].node`
548
+ Alias for [`matrix.include[].node_js`](#matrixincludenode_js).
549
+
550
+ #### `matrix.include[].node_js`
551
+ **This setting is only relevant if [`language`](#language) is set to `node_js`.**
552
+
553
+ `node_js` version to use.
554
+
555
+ **Expected format:** String.
556
+
557
+ #### `matrix.include[].os`
558
+ Value has to be `linux` (default) or `osx`; or one of the known aliases: `ubuntu` for `linux`, `mac` for `osx` or `macos` for `osx`. Setting is not case sensitive.
559
+
560
+ **Expected format:** String.
561
+
562
+ #### `matrix.include[].otp`
563
+ Alias for [`matrix.include[].otp_release`](#matrixincludeotp_release).
564
+
565
+ #### `matrix.include[].otp_release`
566
+ **This setting is only relevant if [`language`](#language) is set to `erlang`.**
567
+
568
+ `otp_release` version to use.
569
+
570
+ **Expected format:** String.
571
+
572
+ #### `matrix.include[].perl`
573
+ **This setting is only relevant if [`language`](#language) is set to `perl`.**
574
+
575
+ `perl` version to use.
576
+
577
+ **Expected format:** String.
578
+
579
+ #### `matrix.include[].php`
580
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
581
+
582
+ `php` version to use.
583
+
584
+ **Expected format:** String.
585
+
586
+ #### `matrix.include[].python`
587
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
588
+
589
+ `python` version to use.
590
+
591
+ **Expected format:** String.
592
+
593
+ #### `matrix.include[].ruby`
594
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
595
+
596
+ `ruby` version to use.
597
+
598
+ **Expected format:** String.
599
+
600
+ #### `matrix.include[].rvm`
601
+ Alias for [`matrix.include[].ruby`](#matrixincluderuby).
602
+
603
+ #### `matrix.include[].xcode_scheme`
604
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
605
+
606
+ `xcode_scheme` version to use.
607
+
608
+ **Expected format:** String.
609
+
610
+ #### `matrix.include[].xcode_sdk`
611
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
612
+
613
+ `xcode_sdk` version to use.
614
+
615
+ **Expected format:** String.
616
+
617
+ #### `node`
618
+ Alias for [`node_js`](#node_js).
619
+
620
+ #### `node_js`
621
+ **This setting is only relevant if [`language`](#language) is set to `node_js`.**
622
+
623
+ List of `node_js` versions to use.
624
+
625
+ **Expected format:** List of strings; or a single string.
626
+
627
+ #### `notifications`
628
+ **Expected format:** Key value mapping.
629
+
630
+ #### `notifications.campfire`
631
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
632
+
633
+ #### `notifications.campfire.disabled`
634
+ **Expected format:** Boolean value.
635
+
636
+ #### `notifications.campfire.enabled`
637
+ **Expected format:** Boolean value.
638
+
639
+ #### `notifications.campfire.on_failure`
640
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
641
+
642
+ **Expected format:** String.
643
+
644
+ #### `notifications.campfire.on_start`
645
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
646
+
647
+ **Expected format:** String.
648
+
649
+ #### `notifications.campfire.on_success`
650
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
651
+
652
+ **Expected format:** String.
653
+
654
+ #### `notifications.campfire.rooms`
655
+ **Expected format:** List of strings; or a single string.
656
+
657
+ #### `notifications.campfire.template`
658
+ Strings will be interpolated. Available variables: `%{repository_slug}`, `%{repository_name}`, `%{repository}`, `%{build_number}`, `%{branch}`, `%{commit}`, `%{author}`, `%{message}`, `%{duration}`, `%{compare_url}`, `%{build_url}`.
659
+
660
+ **Expected format:** List of strings; or a single string.
661
+
662
+ #### `notifications.email`
663
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
664
+
665
+ #### `notifications.email.disabled`
666
+ **Expected format:** Boolean value.
667
+
668
+ #### `notifications.email.enabled`
669
+ **Expected format:** Boolean value.
670
+
671
+ #### `notifications.email.on_failure`
672
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
673
+
674
+ **Expected format:** String.
675
+
676
+ #### `notifications.email.on_start`
677
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
678
+
679
+ **Expected format:** String.
680
+
681
+ #### `notifications.email.on_success`
682
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
683
+
684
+ **Expected format:** String.
685
+
686
+ #### `notifications.email.recipients`
687
+ **Expected format:** List of strings; or a single string.
688
+
689
+ #### `notifications.flowdoc`
690
+ **Expected format:** Key value mapping, or string, encrypted string, or boolean value.
691
+
692
+ #### `notifications.flowdoc.api_token`
693
+ **Expected format:** String or encrypted string.
694
+
695
+ #### `notifications.flowdoc.disabled`
696
+ **Expected format:** Boolean value.
697
+
698
+ #### `notifications.flowdoc.enabled`
699
+ **Expected format:** Boolean value.
700
+
701
+ #### `notifications.flowdoc.on_failure`
702
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
703
+
704
+ **Expected format:** String.
705
+
706
+ #### `notifications.flowdoc.on_start`
707
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
708
+
709
+ **Expected format:** String.
710
+
711
+ #### `notifications.flowdoc.on_success`
712
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
713
+
714
+ **Expected format:** String.
715
+
716
+ #### `notifications.hipchat`
717
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
718
+
719
+ #### `notifications.hipchat.disabled`
720
+ **Expected format:** Boolean value.
721
+
722
+ #### `notifications.hipchat.enabled`
723
+ **Expected format:** Boolean value.
724
+
725
+ #### `notifications.hipchat.format`
726
+ Value has to be `html` or `text`. Setting is case sensitive.
727
+
728
+ **Expected format:** String.
729
+
730
+ #### `notifications.hipchat.on_failure`
731
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
732
+
733
+ **Expected format:** String.
734
+
735
+ #### `notifications.hipchat.on_start`
736
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
737
+
738
+ **Expected format:** String.
739
+
740
+ #### `notifications.hipchat.on_success`
741
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
742
+
743
+ **Expected format:** String.
744
+
745
+ #### `notifications.hipchat.rooms`
746
+ **Expected format:** List of strings; or a single string.
747
+
748
+ #### `notifications.hipchat.template`
749
+ Strings will be interpolated. Available variables: `%{repository_slug}`, `%{repository_name}`, `%{repository}`, `%{build_number}`, `%{branch}`, `%{commit}`, `%{author}`, `%{message}`, `%{duration}`, `%{compare_url}`, `%{build_url}`.
750
+
751
+ **Expected format:** List of strings; or a single string.
752
+
753
+ #### `notifications.irc`
754
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
755
+
756
+ #### `notifications.irc.channel_key`
757
+ **Expected format:** String or encrypted string.
758
+
759
+ #### `notifications.irc.channels`
760
+ **Expected format:** List of strings; or a single string.
761
+
762
+ #### `notifications.irc.disabled`
763
+ **Expected format:** Boolean value.
764
+
765
+ #### `notifications.irc.enabled`
766
+ **Expected format:** Boolean value.
767
+
768
+ #### `notifications.irc.nick`
769
+ **Expected format:** String or encrypted string.
770
+
771
+ #### `notifications.irc.nickserv_password`
772
+ **Expected format:** String or encrypted string.
773
+
774
+ #### `notifications.irc.on_failure`
775
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
776
+
777
+ **Expected format:** String.
778
+
779
+ #### `notifications.irc.on_start`
780
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
781
+
782
+ **Expected format:** String.
783
+
784
+ #### `notifications.irc.on_success`
785
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
786
+
787
+ **Expected format:** String.
788
+
789
+ #### `notifications.irc.password`
790
+ **Expected format:** String or encrypted string.
791
+
792
+ #### `notifications.irc.skip_join`
793
+ **Expected format:** Boolean value.
794
+
795
+ #### `notifications.irc.template`
796
+ Strings will be interpolated. Available variables: `%{repository_slug}`, `%{repository_name}`, `%{repository}`, `%{build_number}`, `%{branch}`, `%{commit}`, `%{author}`, `%{message}`, `%{duration}`, `%{compare_url}`, `%{build_url}`.
797
+
798
+ **Expected format:** List of strings; or a single string.
799
+
800
+ #### `notifications.irc.use_notice`
801
+ **Expected format:** Boolean value.
802
+
803
+ #### `notifications.slack`
804
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
805
+
806
+ #### `notifications.slack.disabled`
807
+ **Expected format:** Boolean value.
808
+
809
+ #### `notifications.slack.enabled`
810
+ **Expected format:** Boolean value.
811
+
812
+ #### `notifications.slack.on_failure`
813
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
814
+
815
+ **Expected format:** String.
816
+
817
+ #### `notifications.slack.on_start`
818
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
819
+
820
+ **Expected format:** String.
821
+
822
+ #### `notifications.slack.on_success`
823
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
824
+
825
+ **Expected format:** String.
826
+
827
+ #### `notifications.slack.rooms`
828
+ **Expected format:** List of strings; or a single string.
829
+
830
+ #### `notifications.slack.template`
831
+ Strings will be interpolated. Available variables: `%{repository_slug}`, `%{repository_name}`, `%{repository}`, `%{build_number}`, `%{branch}`, `%{commit}`, `%{author}`, `%{message}`, `%{duration}`, `%{compare_url}`, `%{build_url}`.
832
+
833
+ **Expected format:** List of strings; or a single string.
834
+
835
+ #### `notifications.sqwiggle`
836
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
837
+
838
+ #### `notifications.sqwiggle.disabled`
839
+ **Expected format:** Boolean value.
840
+
841
+ #### `notifications.sqwiggle.enabled`
842
+ **Expected format:** Boolean value.
843
+
844
+ #### `notifications.sqwiggle.on_failure`
845
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
846
+
847
+ **Expected format:** String.
848
+
849
+ #### `notifications.sqwiggle.on_start`
850
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
851
+
852
+ **Expected format:** String.
853
+
854
+ #### `notifications.sqwiggle.on_success`
855
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
856
+
857
+ **Expected format:** String.
858
+
859
+ #### `notifications.sqwiggle.rooms`
860
+ **Expected format:** List of strings; or a single string.
861
+
862
+ #### `notifications.sqwiggle.template`
863
+ Strings will be interpolated. Available variables: `%{repository_slug}`, `%{repository_name}`, `%{repository}`, `%{build_number}`, `%{branch}`, `%{commit}`, `%{author}`, `%{message}`, `%{duration}`, `%{compare_url}`, `%{build_url}`.
864
+
865
+ **Expected format:** List of strings; or a single string.
866
+
867
+ #### `notifications.webhook`
868
+ Alias for [`notifications.webhooks`](#notificationswebhooks).
869
+
870
+ #### `notifications.webhooks`
871
+ **Expected format:** Key value mapping, or list of strings or encrypted strings, or boolean value.
872
+
873
+ #### `notifications.webhooks.disabled`
874
+ **Expected format:** Boolean value.
875
+
876
+ #### `notifications.webhooks.enabled`
877
+ **Expected format:** Boolean value.
878
+
879
+ #### `notifications.webhooks.on_failure`
880
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
881
+
882
+ **Expected format:** String.
883
+
884
+ #### `notifications.webhooks.on_start`
885
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
886
+
887
+ **Expected format:** String.
888
+
889
+ #### `notifications.webhooks.on_success`
890
+ Value has to be `always`, `never` or `change`. Setting is case sensitive.
891
+
892
+ **Expected format:** String.
893
+
894
+ #### `notifications.webhooks.urls`
895
+ **Expected format:** List of strings; or a single string.
896
+
897
+ #### `npm_args`
898
+ **This setting is only relevant if [`language`](#language) is set to `node_js`.**
899
+
900
+ **Expected format:** String.
901
+
902
+ #### `os`
903
+ **Expected format:** List of strings; or a single string.
904
+
905
+ #### `os[]`
906
+ Value has to be `linux` (default) or `osx`; or one of the known aliases: `ubuntu` for `linux`, `mac` for `osx` or `macos` for `osx`. Setting is not case sensitive.
907
+
908
+ **Expected format:** String.
909
+
910
+ #### `osx_image`
911
+ **This setting is experimental and might be removed!**
912
+
913
+ `osx_image` version to use.
914
+
915
+ **Expected format:** String.
916
+
917
+ #### `otp`
918
+ Alias for [`otp_release`](#otp_release).
919
+
920
+ #### `otp_release`
921
+ **This setting is only relevant if [`language`](#language) is set to `erlang`.**
922
+
923
+ List of `otp_release` versions to use.
924
+
925
+ **Expected format:** List of strings; or a single string.
926
+
927
+ #### `perl`
928
+ **This setting is only relevant if [`language`](#language) is set to `perl`.**
929
+
930
+ List of `perl` versions to use.
931
+
932
+ **Expected format:** List of strings; or a single string.
933
+
934
+ #### `php`
935
+ **This setting is only relevant if [`language`](#language) is set to `php`.**
936
+
937
+ List of `php` versions to use.
938
+
939
+ **Expected format:** List of strings; or a single string.
940
+
941
+ #### `python`
942
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
943
+
944
+ List of `python` versions to use.
945
+
946
+ **Expected format:** List of strings; or a single string.
947
+
948
+ #### `ruby`
949
+ **This setting is only relevant if [`language`](#language) is set to `ruby` (default) or `objective-c`.**
950
+
951
+ List of `ruby` versions to use.
952
+
953
+ **Expected format:** List of strings; or a single string.
954
+
955
+ #### `rvm`
956
+ Alias for [`ruby`](#ruby).
957
+
958
+ #### `script`
959
+ Commands that will be run on the VM.
960
+
961
+ **Expected format:** List of strings; or a single string.
962
+
963
+ #### `sdk_components`
964
+ **This setting is only relevant if [`language`](#language) is set to `android`.**
965
+
966
+ **Expected format:** List of strings; or a single string.
967
+
968
+ #### `services`
969
+ List of `services` versions to use.
970
+
971
+ **Expected format:** List of strings; or a single string.
972
+
973
+ #### `source_key`
974
+ **Expected format:** String or encrypted string.
975
+
976
+ #### `virtual_env`
977
+ Alias for [`virtualenv`](#virtualenv).
978
+
979
+ #### `virtualenv`
980
+ **This setting is only relevant if [`language`](#language) is set to `python`.**
981
+
982
+ **Expected format:** Key value mapping.
983
+
984
+ #### `virtualenv.system_site_packages`
985
+ **Expected format:** Boolean value.
986
+
987
+ #### `xcode_project`
988
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
989
+
990
+ **Expected format:** String.
991
+
992
+ #### `xcode_scheme`
993
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
994
+
995
+ List of `xcode_scheme` versions to use.
996
+
997
+ **Expected format:** List of strings; or a single string.
998
+
999
+ #### `xcode_sdk`
1000
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
1001
+
1002
+ List of `xcode_sdk` versions to use.
1003
+
1004
+ **Expected format:** List of strings; or a single string.
1005
+
1006
+ #### `xcode_workspace`
1007
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
1008
+
1009
+ **Expected format:** String.
1010
+
1011
+ #### `xctool_args`
1012
+ **This setting is only relevant if [`language`](#language) is set to `objective-c`.**
1013
+
1014
+ **Expected format:** String.
1015
+
1016
+ ## Generating the Specification
1017
+
1018
+ This file is generated. You currently update it by running `play/spec.rb`.