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: # 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