pyo3-pack 0.7.0-beta.2

Build and publish crates with pyo3, rust-cpython and cffi bindings as well as rust binaries as python packages
Documentation
language: rust
dist: xenial

env:
  global:
    # Change this to the name of your binary
    - BINARY_NAME="pyo3-pack"
    - PKG_CONFIG_ALLOW_CROSS=1 # For openssl-sys
    - secure: xxDBiPcL7jDjbnKJ3R0UzTTjaWdITGBHUB7SmjKAy5WPk8Eyx/BgYwGBv2F4/EfSOoOOF+HSUfegXV70r+UHA8OyZtb+h9RLrcBsnEvnrBo2FylQCzz8JeoTdHJikvhH8H9oEbb4jQpwy85r5xDK3+8dMkD2nDjf5vfctblMyShayNTzyMX9DkG5OqZnJ0CXaPzPrtrMXEw3hPpMpyTYBqnZhNVK5IHzXA8kR+6WKgkrf+X/48Or3TDys9ufdO3mEazgxfLJ6WHESQFONYtjT67++rkBNB0jYXf+bFjW2OaEl9Qa8ZHevbWZcJkb3dlW9ktbPnhBmjw14a6Oqhu1w5x2DGVp9196vRwPzXi5YCFXbw93OurF2cDS4NVCk5vZKKuKZvHa6LdS6zVh31uwdOYa5AUK9mYLpwsW0B8k/YyBjea9pkskyBeLXzKpYXgplbMzyqnJZMoiHimeLlHMNNSUlJqKVinDEEEukazABJvN6xcbUunvKj8nQpNVdVg0NPcmMQ2R7CLOJTkhLYqnq+CsX8nTmH5PSh/XxA7NkTfbbibxpWqHp0QDLCFltK23rGAAhs0WkvXF8lSaUSpl7DksA3CfNUn2eI2k+iWao8OD7gu0pFeVOHxND4fuT8Jy8nILySwsECyB0LECPNr++Ymz6+xMHrlaIpGBkCGQXcY=

addons:
  apt:
    sources:
      - deadsnakes
    packages:
      - libdbus-1-dev
      - musl-tools
      - fakeroot
      - python3.5-dev
      - python3.5-venv
      - python3.6-dev
      - python3.6-venv
      - python3.7-dev
      - python3.7-venv

matrix:
  fast_finish: true
  include:
    # These create deployments; Apparently there is not 32 bit mac os
    - os: linux
      rust: stable
      env: TARGET=x86_64-unknown-linux-musl DEPLOY=1
    - os: osx
      rust: stable
      env: TARGET=x86_64-apple-darwin DEPLOY=1
    - os: linux
      rust: stable
      env: TARGET=i686-unknown-linux-musl DEPLOY=1
      addons:
        apt:
          sources:
            - deadsnakes
          packages:
            - fakeroot

            - python3.5-dev
            - python3.6-dev
            - python3.6-venv
            - python3.7-dev

            - libdbus-1-dev:i386
            - libgmp-dev:i386
            - binutils:i386
            # We actually only need musl-tools:i386 and gcc-multilib, but we need the others to get apt to install them
            - cpp-4.8:i386
            - musl:i386
            - musl-tools:i386
            - gcc-multilib:i386
            - gcc:i386
            - cpp:i386

    # Those are run rust tests
    - os: linux
      rust: nightly-2019-05-04
      env: TARGET=x86_64-unknown-linux-gnu
    - os: osx
      rust: nightly-2019-05-04
      env: TARGET=x86_64-apple-darwin

    # Run clippy and rustfmt
    - name: stylecheck
      os: linux
      rust: stable
      install:
        - rustup component add clippy
        - rustup component add rustfmt
      script:
        - cargo fmt --all -- --check
        - cargo clippy -- -D warnings

    # Test docker
    - os: linux
      install:
        - docker build . -t pyo3-pack
      script:
        - ./test-dockerfile.sh

install:
  # Both pyenv and travis are weird; Mac os can't do virtualenv out of venv, linux needs a venv, so this
  # is the source of this mess
  - |
    if [ "$TRAVIS_OS_NAME" == "osx" ]; then
      brew update
      brew upgrade pyenv
      pyenv install 3.6.6
      pyenv global system 3.6.6
      python3.6 -m pip install cffi virtualenv
    fi
  - |
    if [ "$TRAVIS_OS_NAME" == "linux" ]; then
      python3.6 -m venv venv
      source venv/bin/activate
      pip install cffi virtualenv
    fi

script:
  - if [[ "$TARGET" == *musl ]]; then rustup target add $TARGET; fi
  - |
    if [ "$TRAVIS_RUST_VERSION" == "stable" ]; then
      cargo test --features skip-nightly-tests
    else
      cargo test
    fi

before_deploy: bash ci/before_deploy.sh

deploy:
  - # Add zipped binary to the github release
    provider: releases
    file_glob: true
    file:
      - $TRAVIS_BUILD_DIR/$BINARY_NAME-$TRAVIS_TAG-$TARGET.*
      - $TRAVIS_BUILD_DIR/$BINARY_NAME*.deb
    skip_cleanup: true
    on: # Create downloads only with stable rust and only for stable releases
      condition: $DEPLOY = 1
      tags: true
    # - Create a `public_repo` GitHub token at https://github.com/settings/tokens/new
    # . If you haven't already, install the travis gem: `gem install TRAVIS_TAG`
    # - Encrypt it with `travis encrypt 0123456789012345678901234567890123456789`
    # - Paste the output down here
    api_key:
      secure: "bKY3J8FBwgit9inzp2CMxQC3icBVco+COcRnqM6NhaOWX3KefXYG/yWQ7htBkeTRAfQERlOkZZOPsOto2dAD49/Mo4Uin9wbRPjPDGPJpFcQofX5aKHqK1Xd1k96rtZKZRIEG5k5J2IKAzPso3GnA0FESAZlZbxEShSCBD6aOlVmjFXwB2kKzJDo9zECxCg84GSvR/7wQg4hwMaMBa79y3VJRCohGTMaISL22QJ0haG+gqZgTv/r9K8P9lwSMBIiTXX3wFJU871sqUNTSSwkmHlVLhVUOwluv+KQ2DI/V/gWfx2CuiZ/7OQlz4zkOB/Y56msH0G7vOwqbSHLwkMYC+zgDWvF0oI/Eb/mdY5VliQdsLDOkKwWm3EuoEUvCgyV9UB1POxxogIx1sAU+Vt9QUj5/cRIJc1zrtA3LdNlbg9M9rYG8jJ6JMbeYTFDTL6YNoHc2lPAdmAqQAZQy6vyR515vm76JfS7yDcLRXKKhLE4dEPUEpv0qU8vCA/FdaZaiW+GJZSS5rJoE0vHaMRsWkgFLqCNSDpUZBd2x60E+n6dQ7XX4DrJ1JmzcG+IZ6AfuIWyRD9s3jQBxRjtyM61ZGo3Nb4zwX2ML1PftNURNAo8rPlgIrqPaveic45hP6PAeX+iMIWzTckq8shlYngjBTw/3UmA8Z18udrRyKCbygs="

branches:
  only:
    # Pushes to the master branch
    - master
    # Match release tags with a regex
    - /^v\d+\.\d+\.\d+.*$/

notifications:
  email: false