Publish Github releases from Travis

This release introduces some config to automatically build deploy a
binaries on the github release page using travis. The build only happens
when a commit is tagged and it uses the stable version of rust.

The main travis sections (install/script/before_deploy) have been
moved out of the .travis.yml to make it easier to read, maintain and
extend the different steps of the CI process.

Since checking for the Rust version in CI is enough to know if clippy
should be used or not, the environment variable `CLIPPY` has also been
removed, which further allowed simplifying the CI process.

Besides the executables, some auxillary files are now also published as
part of a release when they have changed since the last tagged Alacritty
release. This should make it clear for returning users when a new
version of a specific auxillary file is required.

Instead of using the 14.04 image which travis provides by default, an
18.04 docker image is used to build the output binaries for Linux.
This affects both the .deb and the .tar.gz binary.

The advantage of this is that while binaries compiled on 14.04, do not
work on 18.04, it does work the other way around. The generated .tar.gz
binary has been tested on 18.04, Debian, Fedora and Archlinux and all
systems were able to run it without any warnings or errors.
This commit is contained in:
Micha Gorelick 2018-11-03 11:08:30 -04:00 committed by Christian Duerr
parent fd8af0df33
commit 77816797e8
7 changed files with 122 additions and 22 deletions

View File

@ -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

View File

@ -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

View File

@ -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 = [

7
ci/Dockerfile Normal file
View File

@ -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

59
ci/before_deploy.sh Executable file
View File

@ -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

6
ci/install.sh Executable file
View File

@ -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

29
ci/script.sh Executable file
View File

@ -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