teamcity 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +3 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +83 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +194 -0
- data/Rakefile +1 -0
- data/lib/faraday/null_response_body.rb +17 -0
- data/lib/teamcity.rb +26 -0
- data/lib/teamcity/api.rb +19 -0
- data/lib/teamcity/client.rb +16 -0
- data/lib/teamcity/client/build_types.rb +305 -0
- data/lib/teamcity/client/builds.rb +92 -0
- data/lib/teamcity/client/common.rb +23 -0
- data/lib/teamcity/client/projects.rb +159 -0
- data/lib/teamcity/client/tests.rb +24 -0
- data/lib/teamcity/client/vcs_roots.rb +70 -0
- data/lib/teamcity/configuration.rb +51 -0
- data/lib/teamcity/connection.rb +28 -0
- data/lib/teamcity/element_builder.rb +27 -0
- data/lib/teamcity/headers.rb +47 -0
- data/lib/teamcity/request.rb +35 -0
- data/lib/teamcity/version.rb +3 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_agent_requirement/should_delete_the_agent_requirement.yml +83 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_buildtype/should_delete_a_buildtype.yml +40 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_buildtype_parameter/should_delete_a_buildtype_parameter.yml +81 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype/should_fetch_the_details_of_a_buildtype_by_id.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype/should_raise_an_error_if_the_buildtype_does_not_exist.yml +52 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_fetch_the_build_configuration_agent_requirements_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_return_nil_if_there_are_no_agent_requirements_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_fetch_the_build_configuration_artifact_dependencies_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_return_nil_if_there_are_no_artifact_dependencies_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_branches/should_fetch_vcs_branches_the_vcs_root_is_configured_to_use.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_fetch_the_build_configuration_features_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_return_nil_if_there_are_no_features_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_investigations/should_get_investigation_details.yml +48 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_investigations/should_return_nil_if_no_one_is_investigating.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_fetch_the_build_configuration_parameters_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_return_nil_if_there_are_no_parameters_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_settings/should_fetch_the_settings_for_a_given_buildtype.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_settings/should_return_an_array.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_fetch_the_build_configuration_snapshot_dependencies_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_return_nil_if_there_are_no_snapshot_dependencies_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_state/should_fetch_the_state_of_the_buildtype.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_fetch_the_build_configuration_steps_for_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_return_nil_if_there_are_no_steps_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_template/should_return_nil_if_the_buildtype_is_not_associated_with_a_template.yml +52 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_template/should_return_the_attributes_of_the_associated_template.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_fetch_the_build_configuration_triggers_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_return_nil_if_there_are_no_triggers_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_fetch_the_build_configuration_vcs_root_entries_for_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_return_an_array.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_return_nil_if_there_are_no_vcs_root_entries_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtypes/should_fetch_all_the_buildtypes.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_attach_vcs_root/should_attach_a_vcs_root_to_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/POST/_create_agent_requirement/should_create_an_agent_requirement_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_build_step/should_create_a_build_step_for_a_given_build_type.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_build_trigger/should_create_a_build_trigger_for_a_given_build_type.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_buildtype/should_create_a_build_type.yml +86 -0
- data/spec/cassettes/BuildTypes/PUT/_set_build_step_field/should_disable_a_build_step.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_build_step_field/should_enable_a_build_step.yml +48 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_pause_a_project.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_set_a_projects_description.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_set_the_buildtype_name.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_parameter/should_set_a_buildtype_parameter.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_if_it_should_perform_clean_builds.yml +46 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_what_is_the_timeout_in_minutes_when_executing_builds.yml +46 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_where_the_checkout_happens_when_building.yml +46 -0
- data/spec/cassettes/Builds/DELETE/_unpin_build/should_unpin_a_build.yml +83 -0
- data/spec/cassettes/Builds/GET/_build/should_fetch_the_build_details.yml +91 -0
- data/spec/cassettes/Builds/GET/_build/should_raise_an_error_if_the_build_does_not_exist.yml +53 -0
- data/spec/cassettes/Builds/GET/_build_artifacts/should_fetch_all_the_artifacts.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_pinned_/should_return_false_when_a_build_is_not_pinned.yml +126 -0
- data/spec/cassettes/Builds/GET/_build_pinned_/should_return_true_when_a_build_is_pinned.yml +126 -0
- data/spec/cassettes/Builds/GET/_build_statistics/should_return_statistics_for_a_build.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_tags/should_fetch_the_build_tags.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_tags/should_return_an_empty_array_if_there_are_no_build_tags_defined_for_a_build.yml +89 -0
- data/spec/cassettes/Builds/GET/_builds/should_allow_you_to_filter_by_multiple_build_locators.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_allow_you_to_filter_results_by_build_locators.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_fetch_all_the_builds.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_return_an_empty_array_if_no_results_are_found.yml +46 -0
- data/spec/cassettes/Builds/PUT/_pin_build/should_pin_a_build.yml +83 -0
- data/spec/cassettes/Projects/DELETE/_delete_project/should_delete_a_project.yml +82 -0
- data/spec/cassettes/Projects/DELETE/_delete_project_parameter/should_delete_a_project_parameter.yml +123 -0
- data/spec/cassettes/Projects/GET/_parent_project/should_fetch_the_parent_project_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_parent_project/should_return_nil_if_there_is_no_parent_project_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project/should_fetch_a_single_project_by_id.yml +47 -0
- data/spec/cassettes/Projects/GET/_project/should_raise_an_error_if_the_project_does_not_exist.yml +52 -0
- data/spec/cassettes/Projects/GET/_project_buildtypes/should_fetch_all_the_buildTypes_for_a_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_buildtypes/should_return_nil_if_the_project_does_not_have_any_build_types.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_parameters/should_fetch_all_the_paramters_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_parameters/should_return_nil_if_there_are_no_parameters_defined_for_a_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_projects/should_fetch_projects.yml +46 -0
- data/spec/cassettes/Projects/POST/_copy_project/should_copy_a_project.yml +135 -0
- data/spec/cassettes/Projects/POST/_create_project/should_create_a_project.yml +45 -0
- data/spec/cassettes/Projects/PUT/_set_parent_project/should_set_a_parent_project_for_a_given_project.yml +134 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_archive_a_project.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_set_a_projects_description.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_set_a_projects_name.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_parameter/should_set_a_project_parameter.yml +86 -0
- data/spec/cassettes/Tests/GET/_tests/should_allow_you_to_filter_by_test_id.yml +49 -0
- data/spec/cassettes/Tests/GET/_tests/should_allow_you_to_filter_results_by_test_count_locator.yml +55 -0
- data/spec/cassettes/Tests/GET/_tests/should_fetch_all_the_tests.yml +60 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_no_build_is_found.yml +51 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_no_test_is_found.yml +51 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_not_build_is_given.yml +51 -0
- data/spec/cassettes/VCSRoots/GET/_vcs_root_details/should_fetch_the_vcs_root_details.yml +91 -0
- data/spec/cassettes/VCSRoots/GET/_vcs_roots/should_fetch_vcs_roots.yml +47 -0
- data/spec/cassettes/VCSRoots/POST/_create_vcs_root/should_create_a_git_vcs_root_that_is_shared_with_the_project_and_sub-projects.yml +89 -0
- data/spec/cassettes/VCSRoots/POST/_create_vcs_root/should_create_a_subversion_vcs_root_that_is_shared_with_the_project_and_sub-projects.yml +89 -0
- data/spec/cassettes/VCSRoots/PUT/_set_vcs_root_field/should_set_a_vcs_modification_check_interval.yml +179 -0
- data/spec/faraday/null_response_body_spec.rb +18 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/vcr_setup.rb +9 -0
- data/spec/teamcity/api_spec.rb +64 -0
- data/spec/teamcity/client/builds_spec.rb +113 -0
- data/spec/teamcity/client/buildtypes_spec.rb +308 -0
- data/spec/teamcity/client/projects_spec.rb +207 -0
- data/spec/teamcity/client/tests_spec.rb +47 -0
- data/spec/teamcity/client/vcs_roots_spec.rb +86 -0
- data/spec/teamcity/client_spec.rb +14 -0
- data/spec/teamcity/element_builder_spec.rb +30 -0
- data/spec/teamcity/headers_spec.rb +43 -0
- data/spec/teamcity/version_spec.rb +7 -0
- data/spec/teamcity_spec.rb +89 -0
- data/teamcity.gemspec +26 -0
- metadata +344 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 3eb6aff20afed3470c00122396362dd62f95df00
|
|
4
|
+
data.tar.gz: b5d2158d34685fb4f82ca754655b83cdfb580f7e
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: a48358a4caea06e7ab6eb82d8e2dddbec89daa79aa3f363a63852e766b84fb616f8990f42cd0ede01e52ba56015412d7918da5d7775c08b4747b196e76c371f2
|
|
7
|
+
data.tar.gz: 126c66120c7a280b5e09746f0b302aac979e48421f3f443591b1fa3acaec56fe4d2dcea62a8146e06737823746c88b1395c862c63eced9b5fcd530eacb9c5730
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--tag rest_api_version:"REST API VERSION"
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
## 1.3.1 (Jun 4, 20014)
|
|
2
|
+
|
|
3
|
+
* Dependencies
|
|
4
|
+
* Loosen up hashie version constraint to >= 2.0
|
|
5
|
+
|
|
6
|
+
## 1.3.0 (Jun 4, 2014)
|
|
7
|
+
|
|
8
|
+
* BuildType: Added ```.buildtype_branches```, provides the ability to
|
|
9
|
+
get a listing of branches the build is configured to build.
|
|
10
|
+
|
|
11
|
+
* Dependencies
|
|
12
|
+
* faraday 0.8.5 -> 0.9.0 (fixed some methods to keep consistent return values)
|
|
13
|
+
* hashie 2.0.0 -> 3.0.0
|
|
14
|
+
|
|
15
|
+
* Development
|
|
16
|
+
* Changed .rvmrc file to universal .ruby-version and .ruby-gemset files
|
|
17
|
+
|
|
18
|
+
## 1.2.0 (Dec 7, 2013)
|
|
19
|
+
|
|
20
|
+
* BuildType: Added ```.set_buildtype_setting```, provides the ability to set build configuration settings [@jeffersongirao]
|
|
21
|
+
* BuildType: Added ```.create_buildtype```, provides the ability to create a new build configuration [@jeffersongirao]
|
|
22
|
+
* BuildType: Added ```.create_build_trigger```, provides the ability to create build configuration trigger [@jeffersongirao], [@nskboy]
|
|
23
|
+
* BuildType: Added ```.set_buildtype_setting```, adds ability to set build configuration settings [@jeffersongirao]
|
|
24
|
+
* BuildType: Added ```.create_build_step```, provides the ability to create a build step in a build configuration [@jeffersongirao]
|
|
25
|
+
* Project: Added ```.set_parent_project``` and ```.parent_project``` for setting and getting parent project. (TeamCity8 only) [@jeffersongirao]
|
|
26
|
+
* Bug: Fix ```.create_vcs_root``` to work for svn [@jeffersongirao]
|
|
27
|
+
* Bug: Fix incompatibility with ruby 1.9.2 [@jeffersongirao]
|
|
28
|
+
* Cleanup: Remove dependency on xmlbuilder and linguistics [@jeffersongirao]
|
|
29
|
+
* Testing: Upgrade to rspec 2.14.1 and added guard-rspec gem
|
|
30
|
+
* Documentation: Added *rest_api_version* tag for specify teamcity api compatibility
|
|
31
|
+
|
|
32
|
+
## 1.1.0 (Nov 1, 2013)
|
|
33
|
+
|
|
34
|
+
* Features:
|
|
35
|
+
* Added ```build_artifacts``` (Provides the ability to fetch the
|
|
36
|
+
contents of an aritfact) [@orikremer]
|
|
37
|
+
|
|
38
|
+
* Gem Updates
|
|
39
|
+
* Upgraded webmock to remove deprecation warning [@akiellor]
|
|
40
|
+
|
|
41
|
+
## 1.0.1 (Nov 1, 2013)
|
|
42
|
+
|
|
43
|
+
* Same as 1.1.0 above
|
|
44
|
+
|
|
45
|
+
## 1.0.0 (Aug 26, 2013)
|
|
46
|
+
|
|
47
|
+
* Features:
|
|
48
|
+
* TeamCity 8 Support
|
|
49
|
+
* Added ```build_pinned?``` (Provides the ability to ask if a build is pinned)
|
|
50
|
+
* If using TeamCity8 any call that is setting a value will now return that value instead of nil
|
|
51
|
+
|
|
52
|
+
* API Changes:
|
|
53
|
+
* ```create_vcs_root``` method signature has been changed from using Ordinal Params to using Hash Params
|
|
54
|
+
* Removed the ability to set the format when configuring the client (Each method will now state what format it is sending and receiving, see the source for more info)
|
|
55
|
+
|
|
56
|
+
* Doc Changes:
|
|
57
|
+
* The API docs were updated to reflect the return values now returned when using TeamCity 8
|
|
58
|
+
|
|
59
|
+
## 0.4.0 (Jun 15, 2013)
|
|
60
|
+
|
|
61
|
+
* Added ```pin_build``` and ```unpin_build``` (Provides the ability to pin and unpin a build respectively)
|
|
62
|
+
* Added ```build_statistics``` (Provides the ability to fetch build [statistics](http://confluence.jetbrains.com/display/TCD8/Custom+Chart#CustomChart-listOfDefaultStatisticValues))
|
|
63
|
+
* Added ```buildtype_investigations``` (Provides the ability to fetch build investigation details)
|
|
64
|
+
|
|
65
|
+
## 0.3.0 (May 23, 2013)
|
|
66
|
+
|
|
67
|
+
* Loosen up dependency requirement on the version of builder (Conflicted with transitive dependencies of rails 3.2.13)
|
|
68
|
+
* Added ```delete_buildtype``` to the API (Provides the ability to delete a build configuration)
|
|
69
|
+
* Added ```set_build_step_field``` to the API (Provides the ability to set a build step field, i.e. enable/disable a build step)
|
|
70
|
+
|
|
71
|
+
## 0.2.0 (May 7, 2013)
|
|
72
|
+
|
|
73
|
+
- added support for httpAuth
|
|
74
|
+
- added several CRUD methods to the api for BuildTypes, Projects, and VCSRoots
|
|
75
|
+
- code cleanup
|
|
76
|
+
|
|
77
|
+
## 0.1.0 (April 28, 2013)
|
|
78
|
+
|
|
79
|
+
Features:
|
|
80
|
+
|
|
81
|
+
- added GET support for projects
|
|
82
|
+
- added GET support for build types (build configurations)
|
|
83
|
+
- added GET support for builds
|
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2013 Jason Perry
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# The TeamCity Ruby Gem [](http://badge.fury.io/rb/teamcity-ruby-client)
|
|
2
|
+
[](https://travis-ci.org/jperry/teamcity-ruby-client.png?branch=master) [](https://codeclimate.com/github/jperry/teamcity-ruby-client) [](https://gemnasium.com/jperry/teamcity-ruby-client)
|
|
3
|
+
|
|
4
|
+
Ruby wrapper for the TeamCity Rest API
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Add this line to your application's Gemfile:
|
|
9
|
+
|
|
10
|
+
gem 'teamcity-ruby-client'
|
|
11
|
+
|
|
12
|
+
And then execute:
|
|
13
|
+
|
|
14
|
+
$ bundle
|
|
15
|
+
|
|
16
|
+
Or install it yourself as:
|
|
17
|
+
|
|
18
|
+
$ gem install teamcity-ruby-client
|
|
19
|
+
|
|
20
|
+
## API Usage Examples
|
|
21
|
+
|
|
22
|
+
* Tested on TeamCity 7.X and 8.0.X
|
|
23
|
+
* Most of the api calls return either an array of Hashie::Mash objects or a single Hashie::Mash object which allows you to send messages to retreive an attribute easily.
|
|
24
|
+
* See [api docs](http://rubydoc.info/gems/teamcity-ruby-client/TeamCity/Client) or [specs](spec/teamcity/client) for additional examples and usage
|
|
25
|
+
|
|
26
|
+
### Configuration
|
|
27
|
+
|
|
28
|
+
* See [configuration](lib/teamcity/configuration.rb) source or api doc for more configuration options
|
|
29
|
+
* You may use v7 of the TeamCity api by adding '7.0' to the endpoint configuration (This would be similar to using latest on a TeamCity 7 server)
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
require 'teamcity'
|
|
33
|
+
|
|
34
|
+
# This only needs to be set once per Ruby execution.
|
|
35
|
+
# You may use guestAuth instead of httpAuth and omit the use of http_user and http_password
|
|
36
|
+
# This is using the latest version of the api
|
|
37
|
+
TeamCity.configure do |config|
|
|
38
|
+
config.endpoint = 'http://my-teamcity-server:8111/httpAuth/app/rest'
|
|
39
|
+
config.http_user = 'teamcity-user'
|
|
40
|
+
config.http_password = 'teamcity-password'
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Projects
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
# Get a list of projects
|
|
48
|
+
puts TeamCity.projects
|
|
49
|
+
|
|
50
|
+
# Get a project by id
|
|
51
|
+
puts TeamCity.project(id: 'project1')
|
|
52
|
+
|
|
53
|
+
# Get a list of buildtypes for a project
|
|
54
|
+
puts TeamCity.project_buildtypes(id: 'project1')
|
|
55
|
+
|
|
56
|
+
# Each item returned is a Hashie::Mash object which allows you to send messages
|
|
57
|
+
# to retreive an attribute easily. For example, get the name of
|
|
58
|
+
# the first buildtype in a project
|
|
59
|
+
puts TeamCity.project_buildtypes(id: 'project1').first.name
|
|
60
|
+
|
|
61
|
+
# Create an empty project
|
|
62
|
+
TeamCity.create_project('my-new-project')
|
|
63
|
+
|
|
64
|
+
# Copy a project
|
|
65
|
+
TeamCity.copy_project('project1', 'copied-project-name')
|
|
66
|
+
|
|
67
|
+
# Delete a project
|
|
68
|
+
TeamCity.delete_project('project1')
|
|
69
|
+
|
|
70
|
+
# Change project name
|
|
71
|
+
TeamCity.set_project_field('project1', 'name', 'new-project-name')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Build Types (Build Configurations)
|
|
75
|
+
|
|
76
|
+
```ruby
|
|
77
|
+
# Get a list of buildtypes (build configurations)
|
|
78
|
+
puts TeamCity.buildtypes
|
|
79
|
+
|
|
80
|
+
# Get buildtype details (build configuration)
|
|
81
|
+
puts TeamCity.buildtype(id: 'bt1')
|
|
82
|
+
|
|
83
|
+
# Get buildtype steps
|
|
84
|
+
puts TeamCity.buildtype_steps(id: 'bt1')
|
|
85
|
+
|
|
86
|
+
# Change buildtype name
|
|
87
|
+
TeamCity.set_buildtype_field('bt1', 'name', 'new-buildtype-name')
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Builds ###
|
|
91
|
+
|
|
92
|
+
```ruby
|
|
93
|
+
# Get build details
|
|
94
|
+
puts TeamCity.build(id: 1)
|
|
95
|
+
|
|
96
|
+
# Get build tags
|
|
97
|
+
puts TeamCity.build_tags(id: 1)
|
|
98
|
+
|
|
99
|
+
# Fetch all the builds (defaults to the last 100 builds, use the 'count' build locator to return more)
|
|
100
|
+
puts TeamCity.builds
|
|
101
|
+
|
|
102
|
+
# Filter builds by multiple criteria's using the build locator
|
|
103
|
+
puts TeamCity.builds(count: 1, status: 'SUCCESS') # This will return the most recent build that passed
|
|
104
|
+
|
|
105
|
+
puts TeamCity.builds(count: 1).first.name
|
|
106
|
+
|
|
107
|
+
puts TeamCity.builds(buildType: 'bt3') # Fetch all builds where buildType=bt4
|
|
108
|
+
|
|
109
|
+
puts TeamCity.builds(status: 'FAILURE') # Fetch all builds that failed
|
|
110
|
+
|
|
111
|
+
# Passing the output to another to fetch additional information
|
|
112
|
+
puts TeamCity.build(id: TeamCity.builds(count: 1).first.id).buildType.name # Fetch the name of the last build to run
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### VCS Roots ###
|
|
117
|
+
|
|
118
|
+
```ruby
|
|
119
|
+
# Get all the vcs roots
|
|
120
|
+
puts Teamcity.vcs_roots
|
|
121
|
+
|
|
122
|
+
# Get vcs root details
|
|
123
|
+
puts TeamCity.vcs_root_details(1)
|
|
124
|
+
|
|
125
|
+
# Create VCS Root for a project
|
|
126
|
+
TeamCity.create_vcs_root(vcs_name: 'my-git-vcs-root', vcs_type: 'git', :project_id => 'project2') do |properties|
|
|
127
|
+
properties['branch'] = 'master'
|
|
128
|
+
properties['url'] = 'git@github.com:jperry/teamcity-ruby-client.git'
|
|
129
|
+
properties['authMethod'] = 'PRIVATE_KEY_DEFAULT'
|
|
130
|
+
properties['ignoreKnownHosts'] = true
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Documentation
|
|
136
|
+
|
|
137
|
+
### API Docs
|
|
138
|
+
|
|
139
|
+
[Latest](http://rubydoc.info/gems/teamcity-ruby-client/)
|
|
140
|
+
|
|
141
|
+
### Generating API Docs
|
|
142
|
+
|
|
143
|
+
1. Pull the source down
|
|
144
|
+
2. ```bundle install```
|
|
145
|
+
3. ```rake yard```
|
|
146
|
+
4. open doc/index.html
|
|
147
|
+
|
|
148
|
+
### TeamCity Rest API Plugin
|
|
149
|
+
|
|
150
|
+
[Link](http://confluence.jetbrains.com/display/TW/REST+API+Plugin)
|
|
151
|
+
|
|
152
|
+
## Contributing
|
|
153
|
+
|
|
154
|
+
Ways to contribute:
|
|
155
|
+
|
|
156
|
+
* report a bug
|
|
157
|
+
* fix an issue that is logged
|
|
158
|
+
* suggest enhancements
|
|
159
|
+
* suggest a new feature
|
|
160
|
+
* cleaning up code
|
|
161
|
+
* refactoring code
|
|
162
|
+
* fix documentation errors
|
|
163
|
+
* test on a new versions of teamcity
|
|
164
|
+
* Use the gem :)
|
|
165
|
+
|
|
166
|
+
## Submitting an issue
|
|
167
|
+
|
|
168
|
+
I use issue tracker to track bugs, features, enhancements, etc. Please check the list of issues to confirm
|
|
169
|
+
it hasn't already been reported. Please tag the the issue with an appropriate tag. If submitting a bug please
|
|
170
|
+
include any output that will help me in diagnosing the issue, link to a gist if you have multiple outputs
|
|
171
|
+
(client output, teamcity server output). Please include the version of teamcity you are using
|
|
172
|
+
the client against as well as the gem and ruby versions.
|
|
173
|
+
|
|
174
|
+
## Submitting a Pull Request
|
|
175
|
+
|
|
176
|
+
1. Fork the project.
|
|
177
|
+
2. Create a topic branch.
|
|
178
|
+
3. Implement your feature or bug fix.
|
|
179
|
+
4. Add documentation for your feature or bug fix.
|
|
180
|
+
* Please use the *@rest_api_version* tag to specify if a method is only compatible with a specific version of the rest api
|
|
181
|
+
5. Run ```rake doc:yard```. If your changes are not 100% documented, go back to step 4.
|
|
182
|
+
6. Add specs for your feature or bug fix.
|
|
183
|
+
7. If the rspec test is making a request use VCR to record the response, see the other examples.
|
|
184
|
+
7. Run ```rake spec```. If your changes are not 100% covered, go back to step 6.
|
|
185
|
+
8. Commit and push your changes.
|
|
186
|
+
9. Submit a pull request.
|
|
187
|
+
|
|
188
|
+
## Debugging Tips
|
|
189
|
+
|
|
190
|
+
* Enable debug-rest in TeamCity to see all the rest api requests come through in the `teamcity-rest.log`, you can find this on the Diagnostics page under Server Administration
|
|
191
|
+
|
|
192
|
+
## Questions/Comments
|
|
193
|
+
|
|
194
|
+
Feel free to contact me directly through github. Enjoy!
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module FaradayMiddleware
|
|
2
|
+
# This middleware handles any responses where the body
|
|
3
|
+
# is 'null' which is the case when asking teamcity for
|
|
4
|
+
# an empty collection. When this is encountered we
|
|
5
|
+
# set the response to an empty json object
|
|
6
|
+
class NullResponseBody < Faraday::Middleware
|
|
7
|
+
# Faraday Middleware
|
|
8
|
+
# @note - should only be called by Faraday
|
|
9
|
+
def call(env)
|
|
10
|
+
@app.call(env).on_complete do |response|
|
|
11
|
+
if response[:body] == "null"
|
|
12
|
+
response[:body] = {}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/teamcity.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require_relative 'teamcity/configuration'
|
|
2
|
+
require_relative 'teamcity/client'
|
|
3
|
+
require_relative 'teamcity/headers'
|
|
4
|
+
require_relative 'teamcity/element_builder'
|
|
5
|
+
|
|
6
|
+
module TeamCity
|
|
7
|
+
extend Configuration
|
|
8
|
+
|
|
9
|
+
# Alias for TeamCity::Client.new
|
|
10
|
+
#
|
|
11
|
+
# @return [TeamCity::Client]
|
|
12
|
+
def self.client(options={})
|
|
13
|
+
TeamCity::Client.new(options)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Delegate to TeamCity::Client
|
|
17
|
+
def self.method_missing(method, *args, &block)
|
|
18
|
+
return super unless client.respond_to?(method)
|
|
19
|
+
client.send(method, *args, &block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Delegate to TeamCity::Client
|
|
23
|
+
def self.respond_to?(method)
|
|
24
|
+
return client.respond_to?(method) || super
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/teamcity/api.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require_relative 'connection'
|
|
2
|
+
require_relative 'request'
|
|
3
|
+
|
|
4
|
+
module TeamCity
|
|
5
|
+
class API
|
|
6
|
+
attr_accessor *Configuration::VALID_OPTIONS_KEYS
|
|
7
|
+
|
|
8
|
+
# Creates a new API
|
|
9
|
+
def initialize(options={})
|
|
10
|
+
options = TeamCity.options.merge(options)
|
|
11
|
+
Configuration::VALID_OPTIONS_KEYS.each do |key|
|
|
12
|
+
send("#{key}=", options[key])
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
include Connection
|
|
17
|
+
include Request
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require_relative 'api'
|
|
2
|
+
|
|
3
|
+
module TeamCity
|
|
4
|
+
# Wrapper for the TeamCity REST API
|
|
5
|
+
#
|
|
6
|
+
class Client < API
|
|
7
|
+
Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
|
|
8
|
+
|
|
9
|
+
include TeamCity::Client::Projects
|
|
10
|
+
include TeamCity::Client::BuildTypes
|
|
11
|
+
include TeamCity::Client::Builds
|
|
12
|
+
include TeamCity::Client::Common
|
|
13
|
+
include TeamCity::Client::VCSRoots
|
|
14
|
+
include TeamCity::Client::Tests
|
|
15
|
+
end
|
|
16
|
+
end
|