kenorb
kenorb

Reputation: 166399

Why Travis CI can't connect to GitHub API?

I'm running the following commands in Travis CI for my build:

before_install:
  - curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

script:
  - sudo composer -nqq update

I'm installing composer manually as I want to use sudo with it, as it's installed only for the user.

The error which I'm having are:

Updating dependencies (including require-dev)
  - Installing jakub-onderka/php-console-color (0.1)
    Downloading: Connecting...    Failed to download jakub-onderka/php-console-color from dist: The "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1" file could not be downloaded (HTTP/1.1 403 Forbidden)
    Now trying to download from source

  - Installing symfony/yaml (v2.7.4)
    Downloading: Connecting...    Failed to download symfony/yaml from dist: The "https://api.github.com/repos/symfony/Yaml/zipball/2dc7b06c065df96cc686c66da2705e5e18aef661" file could not be downloaded (HTTP/1.1 403 Forbidden)
    Now trying to download from source

I've tried these links and they work fine.

Does it mean Travis is blocking GitHub API for some reason? If not, how do I fix it?

By fix, I mean either to know what's going on, or suppress these error messages (e.g. by using some special parameter in composer or changes to JSON file to force downloads from the source).

My composer.json file is:

{
    "config": {
        "vendor-dir": "/var/lib/vendor",
        "bin-dir": "/usr/local/bin"
    },
    "require": {
        "drush/drush": "dev-master"
    }
}

For the reference, the full .travis.yml looks like:

before_install:
  - env
  - curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
  - sudo apt-get -qy update
install:
  - sudo apt-get install vagrant
script:
  - set -e # This makes build to fail on first error.
  - sudo composer -nqq update
  - make
  - make vm
after_failure:
 - sudo apt-get -qy install tree && - tree -d -L 6 # Print directory structure in the form of a tree.
 - env
sudo: true
language: php
python:
  - "5.5"

Upvotes: 3

Views: 550

Answers (2)

zub0r
zub0r

Reputation: 1379

Most probable reason for the error is limited amount of downloads from github. What you need to do is create a token in your github account and add it globally to your composer with

composer config -g github-oauth.github.com <your-token>

Source: https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens

Upvotes: 2

Jens A. Koch
Jens A. Koch

Reputation: 41756

My suggestions are:

Remove:

  • curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
  • sudo composer -nqq update

First line: not needed, because Composer is pre-installed, when you use language: php.

Second line: its better to execute composer install, because update uses the data from composer.lock if your repo contains one. And sudo is not needed here.

(Sidenote on the usage of sudo on Travis-CI: sudo is only available in the non-containainer based infrastructure. I don't know if you really need this, but maybe you could switch to the faster container based infrastrucutre by setting sudo: false in your travis.yml, see http://docs.travis-ci.com/user/workers/container-based-infrastructure/ . Just a hint.)


Add to travis.yml

before_install:
  - composer self-update
  - composer install --no-interaction --optimize-autoloader

First line: update the (possibly) outdated composer of this Travis instance.

Second line: install dependencies described in composer.json with Composer.


The additional parameters to switch between downloading "Dist" or downloading "Source" are --prefer-dist and --prefer-source.

So its either

  • - composer install --prefer-dist --no-interaction --optimize-autoloader

or

  • - composer install --prefer-source --no-interaction --optimize-autoloader

Does it mean Travis is blocking GitHub API for some reason?

If its not a temporary issue, then its seems your Composer is running into the Github API rate-limit. The GitHub API allows only a low number of requests for unauthenticated users. You can raise the API limit by authenticating at Github from Travis.

See FAQ: https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens

Please try it with prefer-source first.

Upvotes: 1

Related Questions