diff --git a/.travis.yml b/.travis.yml index 0e78d82b..53b754ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,12 @@ language: rust -sudo: false + +sudo: required +services: + - docker git: depth: 1 -cache: cargo - os: - linux - osx @@ -15,28 +16,25 @@ rust: - stable - nightly -env: - - CLIPPY="true" - - CLIPPY="" - -install: - - if [ -n "$CLIPPY" ]; then rustup component add clippy-preview; fi - matrix: fast_finish: true - exclude: - - rust: stable - env: CLIPPY="true" - - rust: nightly - env: CLIPPY="" allow_failures: - rust: nightly - os: windows -script: - - if [ "$TRAVIS_OS_NAME" == "windows" ]; then choco install llvm --norestart --nosilent; fi +install: ci/install.sh +script: ci/script.sh +before_deploy: ci/before_deploy.sh - - if [ -n "$CLIPPY" ]; then cargo clippy --all-features --all-targets; fi - - if [ -z "$CLIPPY" ]; then cargo test; fi - - if [ -z "$CLIPPY" ]; then cargo test -p font; fi - - if [ "$TRAVIS_OS_NAME" == "windows" ]; then cp target/debug/winpty-agent.exe target/debug/deps && cargo test -p winpty; fi +deploy: + provider: releases + api_key: + secure: G6JZgC5qKZyxEmuu2eMscDO45iOhBjiCSKuO8gxywqm+4DbMZm7y2OSbQCEmnIFqEgi+DLkrH/A7e8LDngQj3lBvRnWkIcszG5ubDm8jsqckXXxjI0cy5q8jJ7s5zZXH2IdXifY59KN9V4iHPwCJlyEE7Aj9JrJLFaVhvaowlSYib9DuDibDX/2u8qZ+gP2D/TntiBlFi8SgiDPd7GrZWmNsxJR9edyYbKx9izROp+4q7KAa0Xqak/Zvg72JZnARiKPmBxESEoYYXFcRgRZD9VvjmQ/il6WcHlGSqqn1TRBtIVl8L/1I5/xBJ6KMegP9Jlh7ybm1JPfX108V5d9a9CyqvRYHrhbkHkf5oktizsgw2WyANwiBhEngliMFuUyT0826BEPtkA4TiD7lQXyvO749INdJsqUlMLLuQNpU9/7ShBcRapbGp6AjWH8yxV9ciNMpNexAaxkupYc2NaU6EAC/C34HAtTdfN+gyvrtnF1ISrPmmGj8YQRiBUsa4TxghsNPbPHWAgMfR5lFp3dONz0oIydhW/AFgpn+7BVvoIW2z8hXiRttseZHv6akeSjFC5vYObR3UdL/NiuvCjZRiYryL0Be/rI83ug8xELVFBBcv4PxcHEsXWT7EMd3QTiPoCwNKoSoBLk8hPFPAGRXULiSDFENKoJAc4A7zJyMiYY= + skip_cleanup: true + file_glob: true + file: "./target/deploy/*" + on: + tags: true + rust: stable + repo: jwilm/alacritty + branch: master diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e9cb5f2..327b4a9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allow using scancodes in the key_bindings section - When `mouse.url.launcher` is set, clicking on URLs will now open them with the specified program - New `mouse.url.modifiers` option to specify keyboard modifiers for opening URLs on click +- Binaries for macOS, Windows and Debian-based Systems are now published with Github releases ### Changed diff --git a/Cargo.toml b/Cargo.toml index e985de85..eef025ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,7 +92,7 @@ Alacritty is the fastest terminal emulator in existence. Using the GPU for \ rendering enables optimizations that simply aren't possible in other emulators. \ Alacritty currently supports FreeBSD, Linux, macOS, and OpenBSD. Windows \ support is planned before the 1.0 release. """ -depends = "$auto, cmake, libfreetype6-dev, libfontconfig1-dev, xclip" +depends = "$auto" section = "rust" priority = "optional" assets = [ diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 00000000..573de9a3 --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,7 @@ +FROM ubuntu:latest + +ENV USER root + +RUN apt-get update && apt-get install -y cmake libfreetype6-dev libfontconfig1-dev curl + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh new file mode 100755 index 00000000..e89a5590 --- /dev/null +++ b/ci/before_deploy.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# All files which should be added only if they changed +aux_files=("alacritty-completions.bash" + "alacritty-completions.fish" + "alacritty-completions.zsh" + "alacritty.desktop" + "alacritty.info" + "alacritty.yml" + "alacritty_macos.yml" + "alacritty_windows.yml") + +# Get previous tag to check for changes +git fetch --tags +git fetch --unshallow +prev_tag=$(git describe --tags --abbrev=0 $TRAVIS_TAG^) + +# Everything in this directory will be offered as download for the release +mkdir "./target/deploy" + +# Output binary name +name="Alacritty-${TRAVIS_TAG}" + +# Create macOS binary +if [ "$TRAVIS_OS_NAME" == "osx" ]; then + make dmg + mv "./target/release/osx/Alacritty.dmg" "./target/deploy/${name}.dmg" +fi + +# Create Linux binaries +if [ "$TRAVIS_OS_NAME" == "linux" ]; then + docker pull undeadleech/alacritty-ubuntu + docker run -v "$(pwd):/source" undeadleech/alacritty-ubuntu \ + /root/.cargo/bin/cargo build --release --manifest-path /source/Cargo.toml + sudo chown -R $USER:$USER "./target" + tar -cvzf "./target/deploy/${name}-$(uname -m).tar.gz" -C "./target/release/" "alacritty" + + cargo install cargo-deb + DEB=$(cargo deb --no-build) + mv "$DEB" "./target/deploy/${name}_amd64.deb" +fi + +# Create windows binary +if [ "$TRAVIS_OS_NAME" == "windows" ]; then + mv "./target/release/alacritty.exe" "./target/deploy/${name}.exe" + mv "./target/release/winpty-agent.exe" "./target/deploy/winpty-agent.exe" +fi + +# Convert and add manpage if it changed +if [ -n "$(git diff $prev_tag HEAD alacritty.man)" ]; then + gzip -z "./alacritty.man" > "./target/deploy/alacritty.1.gz" +fi + +# Offer extra files if they changed +for file in "${aux_files[@]}"; do + if [ -n "$(git diff $prev_tag HEAD $file)" ]; then + cp $file "./target/deploy/" + fi +done diff --git a/ci/install.sh b/ci/install.sh new file mode 100755 index 00000000..9e8c2e6d --- /dev/null +++ b/ci/install.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Add clippy for linting with nightly builds +if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then + rustup component add clippy-preview +fi diff --git a/ci/script.sh b/ci/script.sh new file mode 100755 index 00000000..6ab9e11c --- /dev/null +++ b/ci/script.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Check if any command failed +error=false + +# Run clippy on nightly builds +if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then + cargo clippy --all-features --all-targets || error=true +fi + +# Run test in release mode if a tag is present, to produce an optimized binary +if [ -n "$TRAVIS_TAG" ]; then + cargo test --release || error=true +else + cargo test || error=true +fi + +# Test the font subcrate +cargo test -p font || error=true + +# Test the winpty subcrate +if [ "$TRAVIS_OS_NAME" == "windows" ]; then + cp ./target/debug/winpty-agent.exe ./target/debug/deps && \ + cargo test -p winpty || error=true +fi + +if [ $error == "true" ]; then + exit 1 +fi