travisci_logo Travis CI

You can use Travis CI cloud service to automatically build and test your project in Linux/macOS environments in the cloud. It is free for OSS projects, and offers an easy integration with GitHub, so builds can be automatically fired in Travis-CI after a git push to GitHub.

You can use Travis-CI both for:

  • Building and testing your project, which manages dependencies with Conan, and probably a conanfile.txt file.

  • Building and testing Conan binary packages for a given Conan package recipe (with a conanfile.py).

Installing dependencies and building your project

A very common use case is to build your project after Conan takes care of installing your dependencies. Doing this process in Travis CI is quite convenient as you can do it with conan install.

To enable Travis CI support, you need to create a .travis.yml file and paste this code in it:

sudo: false
language: cpp
compiler:
  - gcc
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-6
install:
  - "[ $CXX = g++ ] && export CXX=g++-6 || true"
# Install conan
  - pip install conan
# Automatic detection of your arch, compiler, etc.
  - conan user
script:
# Download dependencies and build project
  - conan install .
# Call your build system
  - cmake . -G "Unix makefiles"
  - cmake --build .
# Run your tests
  - ctest

Travis will install the gcc compiler and the conan client and will execute the conan install command using the requirements and generators indicated in your conanfile.py or conanfile.txt. Then, the script section install the requirements and then you can use your build system to compile the project (using make in this example).

Creating, testing and uploading Conan binary packages

You can also use Travis CI to automate the building new Conan binary packages with every change you push to GitHub. You can probably setup your own way, but Conan has some utilities to help in the process.

The command conan new has arguments to create a default working .travis.yml file. Other setups might be possible, but for this example we are assuming that you are using GitHub and also uploading your final packages to Bintray.

You could follow these steps:

  1. First, create an empty GitHub repository, let’s call it “hello”, for creating a “hello world” package. GitHub allows to create it with a Readme and .gitignore.

  2. Get the credentials User and API Key (remember, Bintray uses the API key as “password”, not your main Bintray account password)

  3. Create a Conan repository in Bintray under your user or organization, and get its URL (“Set me up”). We will call it UPLOAD_URL

  4. Activate the repo in your Travis account, so it is built when we push changes to it.

  5. Under Travis More Options -> Settings->Environment Variables, add the CONAN_PASSWORD environment variable with the Bintray API Key. If your Bintray user is different from the package user, you can define your Bintray username too, defining the environment variable CONAN_LOGIN_USERNAME.

  6. Clone the repo: git clone <your_repo/hello> && cd hello.

  7. Create the package: conan new Hello/0.1@<user>/testing -t -s -cilg -cis -ciu=UPLOAD_URL where user is your Bintray username.

  8. You can inspect the created files: both .travis.yml, .travis/run.sh, and .travis/install.sh and the build.py script, that is used by conan-package-tools utility to split different builds with different configurations in different Travis CI jobs.

  9. You can test locally, before pushing, with conan test.

  10. Add the changes, commit and push: git add . && git commit -m "first commit" && git push.

  11. Go to Travis and see the build, with the different jobs.

  12. When it finish, go to your Bintray repository, you should see there the uploaded packages for different configurations.

  13. Check locally, searching in Bintray: conan search Hello/0.1@<user>/testing -r=mybintray.

If something fails, please report an issue in the conan-package-tools GitHub repository: https://github.com/conan-io/conan-package-tools