require 'travis/api/app' class Travis::Api::App class Endpoint class Repos < Endpoint # Endpoint for getting all repositories. # # You can filter the repositories by adding parameters to the request. For example, you can get all repositories # owned by johndoe by adding `owner_name=johndoe`, or all repositories that johndoe has access to by adding # `member=johndoe`. The parameter names correspond to the keys of the response hash. # # ### Response # # json(:repositories) get '/' do prefer_follower do respond_with service(:find_repos, params) end end # Retrieves repositories for a given owner. get '/:owner_name' do pass if params[:owner_name] =~ /^\d+$/ # so we don't capture '/:id' prefer_follower do respond_with service(:find_repos, params) end end # Gets the repository with the given id. # # ### Response # # json(:repository) get '/:id' do prefer_follower do respond_with service(:find_repo, params) end end get '/:id/cc' do respond_with service(:find_repo, params.merge(schema: 'cc')) end get '/:id/settings/ssh_keys' do settings = service(:find_repo_settings, params).run if settings respond_with({ settings: settings.obfuscated }, version: :v2) else status 404 end end # Get settings for a given repository # get '/:id/settings' do settings = service(:find_repo_settings, params).run if settings respond_with({ settings: settings.obfuscated }, version: :v2) else status 404 end end patch '/:id/settings' do payload = JSON.parse request.body.read if payload['settings'].blank? || !payload['settings'].is_a?(Hash) halt 422, { "error" => "Settings must be passed with a request" } end settings = service(:find_repo_settings, params).run if settings settings.merge(payload['settings']) # TODO: I would like to have better API here, but leaving this # for testing to not waste too much time before I can play with it settings.repository.save respond_with({ settings: settings.obfuscated }, version: :v2) else status 404 end end # Get the public key for the repository with the given id. # # This can be used to encrypt secure variables in the build configuration. See # [the encryption keys](http://docs.travis-ci.com/user/encryption-keys/) documentation page for more # information. # # ### Response # # json(:repository_key) get '/:id/key' do respond_with service(:find_repo_key, params), version: :v2 end post '/:id/key' do respond_with service(:regenerate_repo_key, params), version: :v2 end # Gets list of branches get '/:repository_id/branches' do respond_with service(:find_branches, params), type: :branches, version: :v2 end # Gets lastest build on a branch branches get '/:repository_id/branches/:branch' do respond_with service(:find_branch, params), type: :branch, version: :v2 end # List caches for a given repo. Can be filtered with `branch` and `match` query parameter. get '/:repository_id/caches', scope: :private do respond_with service(:find_caches, params), type: :caches, version: :v2 end # Delete caches for a given repo. Can be filtered with `branch` and `match` query parameter. delete '/:repository_id/caches', scope: :private do respond_with service(:delete_caches, params), type: :caches, version: :v2 end # Gets the repository with the given name. # # ### Response # # json(:repository) get '/:owner_name/:name' do prefer_follower do respond_with service(:find_repo, params) end end # Gets the builds for the repository with the given name. # # ### Response # # json(:builds) get '/:owner_name/:name/builds' do name = params[:branches] ? :find_branches : :find_builds params['ids'] = params['ids'].split(',') if params['ids'].respond_to?(:split) respond_with service(:find_builds, params) end # Get a build with the given id in the repository with the given name. # # ### Response # # json(:build) get '/:owner_name/:name/builds/:id' do respond_with service(:find_build, params) end get '/:owner_name/:name/cc' do respond_with service(:find_repo, params.merge(schema: 'cc')) end # Get the public key for a given repository. # # This can be used to encrypt secure variables in the build configuration. See # [the encryption keys](http://docs.travis-ci.com/user/encryption-keys/) documentation page for more # information. # # ### Response # # json(:repository_key) get '/:owner_name/:name/key' do respond_with service(:find_repo_key, params), version: :v2 end post '/:owner_name/:name/key' do respond_with service(:regenerate_repo_key, params), version: :v2 end # Gets list of branches get '/:owner_name/:name/branches' do respond_with service(:find_branches, params), type: :branches, version: :v2 end # Gets lastest build on a branch branches get '/:owner_name/:name/branches/:branch' do respond_with service(:find_branch, params), type: :branch, version: :v2 end # List caches for a given repo. Can be filtered with `branch` and `match` query parameter. get '/:owner_name/:name/caches', scope: :private do respond_with service(:find_caches, params), type: :caches, version: :v2 end # Delete caches for a given repo. Can be filtered with `branch` and `match` query parameter. delete '/:owner_name/:name/caches', scope: :private do respond_with service(:delete_caches, params), type: :caches, version: :v2 end end end end