language: rust # We deliberately do NOT cache with `cache: cargo` because these caches grow to # gigabytes in size at which point downloading, unpacking and repacking takes # way longer than just building things fresh every time. addons: apt: packages: # Install musl for some Linux builds - musl-tools env: global: - ANSI2HTML_VERSION=1.5.2 before_install: # For formatting tests - pip install --user ansi2html==${ANSI2HTML_VERSION} # Default script for test stage script: - cargo build --target $CARGOTARGET $CARGOFLAGS --verbose - cargo test --target $CARGOTARGET $CARGOFLAGS --verbose # Make sure that we can format w/o panic or error - cargo run --target $CARGOTARGET $CARGOFLAGS -- sample/common-mark.md # Check formatting before running tests, and lint afterwards stages: - formatting - test - lint - release jobs: include: # Check formatting on rust stable before anything else - name: check rustfmt stage: formatting os: linux rust: stable before_script: rustup component add rustfmt script: cargo fmt -- --check # Our target Rust version. We test: # # - A standard linux build # - --no-default-features to make sure things build in other configurations # - A static musl build # - macOS # - Windows - name: linux (all features) stage: test os: linux rust: stable env: - CARGOTARGET=x86_64-unknown-linux-gnu - name: linux (musl, only terminology) stage: test os: linux rust: stable env: - CARGOTARGET=x86_64-unknown-linux-musl - CARGOFLAGS='--no-default-features --features terminology' before_script: rustup target add x86_64-unknown-linux-musl - name: macOS (only iterm2) stage: test os: osx rust: stable before_script: # Add local Python scripts to path for ansi2html - export PATH="$HOME/Library/Python/2.7/bin:$PATH" env: - CARGOTARGET=x86_64-apple-darwin - CARGOFLAGS='--no-default-features --features iterm2,remote_resources' - name: windows (no features) stage: test os: windows rust: stable # Don't install ansi2html on Travis CI: Python isn’t readily available on # Windows, so skip these tests before_install: '' env: - CARGOTARGET=x86_64-pc-windows-msvc - CARGOFLAGS='--no-default-features' # Catch regressions in beta and nightly - name: rust beta (all features) stage: test os: linux rust: beta env: - CARGOTARGET=x86_64-unknown-linux-gnu - name: rust nightly (all features) stage: test os: linux rust: nightly env: - CARGOTARGET=x86_64-unknown-linux-gnu # Run clippy after testing, with and without features. - &lint-settings name: clippy (all features) stage: lint os: linux rust: stable before_script: rustup component add clippy script: cargo clippy --all-targets $CARGOFLAGS - <<: *lint-settings name: clippy (no features) env: - CARGOFLAGS=--no-default-features # Deploy binary to GitHub - &deploy-settings name: Linux binary (static with musl, only terminology) stage: release # Our release tags start with "mdcat-", so we only build for such tags if: tag =~ ^mdcat- os: linux rust: stable before_install: rustup target add x86_64-unknown-linux-musl env: - CARGOTARGET=x86_64-unknown-linux-musl # Exclude iterm2 from release artifacts on Linux, and build against Musl - CARGOFLAGS='--no-default-features --features terminology' # Inhibit Travis’ default "cargo build --verbose" install step because we # make an explicit release build in the "script" phase install: "" script: cargo build --target "$CARGOTARGET" $CARGOFLAGS --release --verbose before_deploy: # Strip the binary to reduce its size - strip "target/${CARGOTARGET}/release/mdcat" # Put all the things into a dedicated directory, as usual with TAR files - export ARCHIVE_NAME="${TRAVIS_TAG}-${CARGOTARGET}" - echo "Building ${ARCHIVE_NAME}" - mkdir "/tmp/${ARCHIVE_NAME}" - cp README.md CHANGELOG.md LICENSE "/tmp/${ARCHIVE_NAME}" - cp "target/${CARGOTARGET}/release/mdcat" "/tmp/${ARCHIVE_NAME}" # Pack the tarball - export ARCHIVE_FILE="/tmp/${ARCHIVE_NAME}.tar.gz" - tar -czf "${ARCHIVE_FILE}" -C /tmp/ "${ARCHIVE_NAME}" deploy: skip_cleanup: true provider: releases api_key: secure: "QLjmQJo/ak94aIdyrd6DMiPtAVr06XwjVfm9qZzd0EKbnagBYlVOW+SxpS3juBCifwz1H4eADoAfktWoKiY//BqwUXOTv9uBctQSHDl7xevGdFTOTIpRIuvDtdzk+8j+5tL2fVyPUBWIPOzBu/s+10nyHK8mPsF1Ia+CoTfPfauJPDIAI0x29OBl8vLap/DCh9aua268d8q7R9H32tDGNm9nNF3FXkWS+4yp4F83tkj8/RANOjYJMweCN1fXhziNfe+WdsVZsgnaNVKSXjTACdkXZc3mNRwi9SbtpHur9+R3wPle4m7BeRdcXo38tiWEEZfyEh4h/DpNWe5XaqRIBSR9QUHquWyN8j/KHVJ/UMs1o/yojciH2ylW0K3ak44btkPabkbwszBHvlmFiMOl4tgYsefF9Bo4x5jG8PgO3O040QyJV9ex2UkoUQYOo5xV4OeYtUUdNQRE6F0O3BUY71y0q4b+4F2ClA01gMXW41QfJmPnS8uChLqHw+w3Gzt9v03WR/la5BQixFIfMx4t0aZLGgx63c1u7gdaHc7mAjYRCdiZlWuFQ3r+6/Z4RU7/57QuRM+A0TjwElhjn2hfuFz7hssuwzG9RFYKbsMBinsm+wEWuMhkQ/P7vac3FEmYlKEgfCoUhZmxP9sEV+mxVjXOTzLYkaxNzAS0lLyQDeQ=" file: "${ARCHIVE_FILE}" on: tags: true - <<: *deploy-settings name: macOS binary (only iterm2) os: osx before_install: "" env: - CARGOTARGET=x86_64-apple-darwin # Only include iterm2 when building for macos, and also enable remote # resources for iterm2 - CARGOFLAGS='--no-default-features --features iterm2,remote_resources' - <<: *deploy-settings name: Windows binary (no features) os: windows before_install: "" env: - CARGOTARGET=x86_64-pc-windows-msvc - CARGOFLAGS='--no-default-features' before_deploy: # Windows likes file extensions :) - mv LICENSE LICENSE.txt # and ZIP files - export ARCHIVE_FILE="${TRAVIS_TAG}-${CARGOTARGET}.zip" # The leading dots are important: They make 7z ignore the path part and # add the file directly to the archive root. - 7z a "${ARCHIVE_FILE}" "./target/${CARGOTARGET}/release/mdcat.exe" ./README.md ./CHANGELOG.md ./LICENSE.txt