summaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
authorMicha Gorelick <mynameisfiber@gmail.com>2018-11-03 11:08:30 -0400
committerChristian Duerr <chrisduerr@users.noreply.github.com>2018-11-03 15:08:30 +0000
commit77816797e80d42d5fb626379a15dc94c09cd3694 (patch)
tree445f7b37a73ab108c0503ca59621e3d54de42229 /ci
parentfd8af0df3395a13f7fe670e293ee9584669aa7bd (diff)
downloadalacritty-77816797e80d42d5fb626379a15dc94c09cd3694.tar.gz
alacritty-77816797e80d42d5fb626379a15dc94c09cd3694.zip
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.
Diffstat (limited to 'ci')
-rw-r--r--ci/Dockerfile7
-rwxr-xr-xci/before_deploy.sh59
-rwxr-xr-xci/install.sh6
-rwxr-xr-xci/script.sh29
4 files changed, 101 insertions, 0 deletions
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