Migrate from Travis CI to GitHub Actions

This removes all CI builds from travis-ci, due to their recent changes
in policy and harsh limitations on builds. With build times over 2
hours, it was a significant hindrance to development.

Instead of Travis CI, the CI is now split on Sourcehut and GitHub. Since
Sourcehut only supports Linux/BSD, all builds on those operating systems
are executed there. The GitHub Actions CI is used to build for
Windows/macOS, which are not available on Sourcehut.

Since asset deployment for releases requires builds on all platforms,
this is also done on GitHub actions. Though the new `upload_asset.sh`
script makes sure that migration in the future is fairly simple and we
do not tie ourselves to the overly complicated GitHub Actions ecosystem.
This commit is contained in:
Christian Duerr 2020-11-06 23:52:56 +00:00 committed by GitHub
parent 3957a2555d
commit 43d1afbeeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 277 additions and 185 deletions

View File

@ -1,4 +1,5 @@
image: freebsd/latest
packages:
- devel/cmake
- devel/pkgconf
@ -7,21 +8,30 @@ packages:
- x11-fonts/fontconfig
- x11-fonts/dejavu
- x11/libxcb
sources:
- https://github.com/alacritty/alacritty
environment:
PATH: /home/build/.cargo/bin:/bin:/usr/bin:/usr/local/bin
tasks:
- rustup: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable --profile minimal
$HOME/.cargo/bin/rustup toolchain install --profile minimal 1.43.1
- 1-43-1: |
- test: |
cd alacritty
$HOME/.cargo/bin/cargo +1.43.1 test
- 1-43-1-wayland: |
cd alacritty/alacritty
$HOME/.cargo/bin/cargo +1.43.1 test --no-default-features --features=wayland
- 1-43-1-x11: |
cd alacritty/alacritty
$HOME/.cargo/bin/cargo +1.43.1 test --no-default-features --features=x11
- stable: |
cargo test
- clippy: |
cd alacritty
$HOME/.cargo/bin/cargo +stable test
rustup component add clippy
cargo clippy --all-targets
- oldstable: |
cd alacritty
rustup toolchain install --profile minimal 1.43.1
cargo +1.43.1 test
- feature-wayland: |
cd alacritty/alacritty
cargo test --no-default-features --features=wayland
- feature-x11: |
cd alacritty/alacritty
cargo test --no-default-features --features=x11

40
.builds/linux.yml Normal file
View File

@ -0,0 +1,40 @@
image: archlinux
packages:
- pkg-config
- cmake
- make
- freetype2
- fontconfig
- libxcb
sources:
- https://github.com/alacritty/alacritty
environment:
PATH: /home/build/.cargo/bin:/usr/bin/
tasks:
- rustup: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable --profile minimal
- test: |
cd alacritty
cargo test
- rustfmt: |
cd alacritty
rustup toolchain install nightly -c rustfmt
cargo +nightly fmt -- --check
- clippy: |
cd alacritty
rustup component add clippy
cargo clippy --all-targets
- oldstable: |
cd alacritty
rustup toolchain install --profile minimal 1.43.1
cargo +1.43.1 test
- feature-wayland: |
cd alacritty/alacritty
cargo +1.43.1 test --no-default-features --features=wayland
- feature-x11: |
cd alacritty/alacritty
cargo +1.43.1 test --no-default-features --features=x11

View File

@ -1,10 +0,0 @@
image: archlinux
sources:
- https://github.com/alacritty/alacritty
tasks:
- rustup: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --default-toolchain none
$HOME/.cargo/bin/rustup toolchain install nightly -c rustfmt
- rustfmt: |
cd alacritty
$HOME/.cargo/bin/cargo fmt -- --check

38
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: CI
on: [push, pull_request]
env:
CARGO_TERM_COLOR: always
jobs:
build:
strategy:
matrix:
rust_version: [stable, 1.43.1]
os: [windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Rustup
run: rustup default ${{ matrix.rust_version }}
- name: Test
run: cargo test
clippy:
strategy:
matrix:
os: [windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Rustup
run: rustup default ${{ matrix.rust_version }}
- name: Install Clippy
run: rustup component add clippy
- name: Lint
run: cargo clippy --all-targets --manifest-path ./alacritty/Cargo.toml --no-default-features --features "x11 wayland"

81
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,81 @@
name: Release
on:
push:
tags: ["v[0-9]+.[0-9]+.[0-9]+"]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_TERM_COLOR: always
jobs:
macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Test
run: cargo test --release
- name: Make App
run: make dmg
- name: Upload Application
run: |
mv ./target/release/osx/Alacritty.dmg ./Alacritty-${GITHUB_REF##*/}.dmg
./.github/workflows/upload_asset.sh ./Alacritty-${GITHUB_REF##*/}.dmg $GITHUB_TOKEN
windows:
runs-on: windows-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v2
- name: Test
run: cargo test --release
- name: Build
run: cargo build --release
- name: Upload portable executable
run: |
cp ./target/release/alacritty.exe ./Alacritty-${GITHUB_REF##*/}-portable.exe
./.github/workflows/upload_asset.sh \
./Alacritty-${GITHUB_REF##*/}-portable.exe $GITHUB_TOKEN
- name: Install WiX
run: nuget install WiX
- name: Crate msi installer
run: |
./WiX.*/tools/candle.exe -nologo -arch "x64" -ext WixUIExtension -ext WixUtilExtension \
-out "./alacritty.wixobj" "extra/windows/wix/alacritty.wxs"
./WiX.*/tools/light.exe -nologo -ext WixUIExtension -ext WixUtilExtension \
-out "./Alacritty-${GITHUB_REF##*/}-installer.msi" -sice:ICE61 -sice:ICE91 \
"./alacritty.wixobj"
- name: Upload msi installer
run: |
./.github/workflows/upload_asset.sh \
./Alacritty-${GITHUB_REF##*/}-installer.msi $GITHUB_TOKEN
linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
sudo apt-get install cmake pkg-config libfreetype6-dev libfontconfig1-dev \
libxcb-xfixes0-dev python3
- name: Test
run: cargo test --release
- name: Gzip manpage
run: gzip -c "./extra/alacritty.man" > "./alacritty.1.gz"
- name: Upload Assets
run: |
mv ./extra/logo/alacritty-term.svg ./Alacritty.svg
./.github/workflows/upload_asset.sh ./Alacritty.svg $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./alacritty.1.gz $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./extra/completions/alacritty.bash $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./extra/completions/alacritty.fish $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./extra/completions/_alacritty $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./extra/linux/Alacritty.desktop $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./extra/alacritty.info $GITHUB_TOKEN
./.github/workflows/upload_asset.sh ./alacritty.yml $GITHUB_TOKEN

93
.github/workflows/upload_asset.sh vendored Executable file
View File

@ -0,0 +1,93 @@
#!/bin/bash
# Assure parameters are correct.
if [ $# -lt 2 ]; then
echo "Usage: upload_asset.sh <FILE> <TOKEN>"
exit 1
fi
repo="alacritty/alacritty"
file_path=$1
bearer=$2
echo "Starting asset upload from $file_path to $repo."
# Get the release for this tag.
tag="$(git describe --tags --abbrev=0)"
# Make sure the git tag could be determined.
if [ -z "$tag" ]; then
printf "\e[31mError: Unable to find git tag\e[0m\n"
exit 1
fi
echo "Git tag: $tag"
# Get the upload URL for the current tag.
#
# Since this might be a draft release, we can't just use the /releases/tags/:tag
# endpoint which only shows published releases.
echo "Checking for existing release..."
upload_url=$(\
curl \
-H "Authorization: Bearer $bearer" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null \
| grep -E "(upload_url|tag_name)" \
| paste - - \
| grep -e "tag_name\": \"$tag" \
| head -n 1 \
| sed 's/.*\(https.*assets\).*/\1/' \
)
# Create a new release if we didn't find one for this tag.
if [ -z "$upload_url" ]; then
echo "No release found."
echo "Creating new release..."
# Create new release.
response=$(
curl -f \
-X POST \
-H "Authorization: Bearer $bearer" \
-d "{\"tag_name\":\"$tag\",\"draft\":true}" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null\
)
# Abort if the release could not be created.
if [ $? -ne 0 ]; then
printf "\e[31mError: Unable to create new release.\e[0m\n"
exit 1;
fi
# Extract upload URL from new release.
upload_url=$(\
echo "$response" \
| grep "upload_url" \
| sed 's/.*: "\(.*\){.*/\1/' \
)
fi
# Propagate error if no URL for asset upload could be found.
if [ -z "$upload_url" ]; then
printf "\e[31mError: Unable to find release upload url.\e[0m\n"
exit 2
fi
# Upload the file to the tag's release.
file_name=${file_path##*/}
echo "Uploading asset $file_name to $upload_url..."
curl -f \
-X POST \
-H "Authorization: Bearer $bearer" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file_path" \
"$upload_url?name=$file_name" \
&> /dev/null \
|| { \
printf "\e[31mError: Unable to upload asset.\e[0m\n" \
&& exit 3; \
}
printf "\e[32mSuccess\e[0m\n"

View File

@ -1,75 +0,0 @@
language: rust
addons:
apt:
packages:
- libxcb-xfixes0-dev
git:
depth: 1
os:
- linux
- osx
rust:
- 1.43.1
- stable
matrix:
fast_finish: true
include:
- if: tag IS present
os: linux
rust: stable
env: ARCH=i386
- name: "Clippy Linux"
os: linux
env: CLIPPY=true
rust: 1.43.1
- name: "Clippy OSX"
os: osx
env: CLIPPY=true
rust: 1.43.1
- name: "Clippy Windows"
os: windows
env: CLIPPY=true
rust: 1.43.1-x86_64-pc-windows-msvc
- name: "Windows 1.43.1"
os: windows
rust: 1.43.1-x86_64-pc-windows-msvc
- name: "Windows Stable"
os: windows
rust: stable-x86_64-pc-windows-msvc
install: ci/install.sh
script: ci/script.sh
before_deploy: ci/before_deploy.sh
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
condition:
- $CLIPPY != true
- $TRAVIS_TAG =~ ^v[0-9]+\.[0-9]+\.[0-9]+$
repo: alacritty/alacritty
- 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-x86_64-pc-windows-msvc
condition:
- $CLIPPY != true
- $TRAVIS_TAG =~ ^v[0-9]+\.[0-9]+\.[0-9]+$
repo: alacritty/alacritty

View File

@ -1,54 +0,0 @@
#!/bin/bash
# All files which should be added only if they changed
aux_files=("extra/completions/alacritty.bash"
"extra/completions/alacritty.fish"
"extra/completions/_alacritty"
"extra/linux/Alacritty.desktop"
"extra/alacritty.info"
"alacritty.yml")
# Output binary name
name="Alacritty-${TRAVIS_TAG}"
# Everything in this directory will be offered as download for the release
mkdir "./target/deploy"
function windows {
choco install 7zip nuget.commandline
nuget install WiX
# Create zip archive
7z a -tzip "./target/deploy/${name}-windows-portable.zip" "./target/release/alacritty.exe" \
"./target/release/winpty-agent.exe"
# Create msi installer
./WiX.*/tools/candle.exe -nologo -arch "x64" -ext WixUIExtension -ext WixUtilExtension -out \
"target/alacritty.wixobj" "extra/windows/wix/alacritty.wxs"
./WiX.*/tools/light.exe -nologo -ext WixUIExtension -ext WixUtilExtension -out \
"target/installer.msi" -sice:ICE61 -sice:ICE91 "target/alacritty.wixobj"
mv "target/installer.msi" "target/deploy/${name}-windows-installer.msi"
}
function osx {
rm -rf "./target/release" \
&& make dmg \
&& mv "./target/release/osx/Alacritty.dmg" "./target/deploy/${name}.dmg"
}
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
osx || exit
elif [ "$TRAVIS_OS_NAME" == "windows" ]; then
windows
fi
# Convert and add manpage if it changed
gzip -c "./extra/alacritty.man" > "./target/deploy/alacritty.1.gz" || exit
# Rename Alacritty logo to match .desktop file
cp "./extra/logo/alacritty-term.svg" "./target/deploy/Alacritty.svg" || exit
# Offer various other files
for file in "${aux_files[@]}"; do
cp $file "./target/deploy/" || exit
done

View File

@ -1,6 +0,0 @@
#!/bin/bash
# Add clippy for lint validation
if [ "$CLIPPY" == "true" ]; then
rustup component add clippy
fi

View File

@ -1,16 +0,0 @@
#!/bin/bash
# Run clippy checks
if [ "$CLIPPY" == "true" ]; then
cargo clippy --all-targets
exit
fi
# Run test in release mode if a tag is present, to produce an optimized binary
if [ -n "$TRAVIS_TAG" ]; then
# Build separately so we generate an 'alacritty' binary without -HASH appended
cargo build --release
cargo test --release
else
cargo test
fi

View File

@ -1,19 +1,16 @@
<?xml version="1.0" encoding="windows-1252"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Name="Alacritty" Id="*" UpgradeCode="87c21c74-dbd5-4584-89d5-46d9cd0c40a7" Language="1033" Codepage="1252" Version="0.6.0-dev" Manufacturer="Alacritty">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
<Icon Id="AlacrittyIco" SourceFile="..\extra\windows\alacritty.ico"/>
<WixVariable Id="WixUILicenseRtf" Value="..\extra\windows\wix\license.rtf"/>
<Icon Id="AlacrittyIco" SourceFile=".\extra\windows\alacritty.ico"/>
<WixVariable Id="WixUILicenseRtf" Value=".\extra\windows\wix\license.rtf"/>
<Property Id="ARPPRODUCTICON" Value="AlacrittyIco"/>
<MediaTemplate EmbedCab="yes"/>
<UIRef Id="WixUI_Minimal"/>
<Feature Id="ProductFeature" Title="ConsoleApp" Level="1">
<ComponentRef Id="AlacrittyExe"/>
<ComponentRef Id="WinPtyAgentExe"/>
<ComponentRef Id="AlacrittyShortcut"/>
<ComponentRef Id="ModifyPathEnv"/>
<ComponentRef Id="ContextMenu"/>
@ -32,10 +29,7 @@
<!-- Application binaries -->
<DirectoryRef Id="AlacrittyProgramFiles">
<Component Id="AlacrittyExe" Guid="*">
<File Id="AlacrittyExeFile" Source="..\target\release\alacritty.exe" Name="alacritty.exe" KeyPath="yes"/>
</Component>
<Component Id="WinPtyAgentExe" Guid="*">
<File Id="WinPtyAgentExeFile" Source="..\target\release\winpty-agent.exe" Name="winpty-agent.exe" KeyPath="yes"/>
<File Id="AlacrittyExeFile" Source=".\target\release\alacritty.exe" Name="alacritty.exe" KeyPath="yes"/>
</Component>
</DirectoryRef>
@ -67,7 +61,4 @@
</Component>
</DirectoryRef>
</Product>
</Wix>