#!/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"
}

function debian {
    arch=$1

    docker pull "undeadleech/alacritty-ubuntu-${arch}" \
        && docker_tar "alacritty-ubuntu-${arch}" "ubuntu_18_04_${arch}" \
        && docker_deb "alacritty-ubuntu-${arch}" "ubuntu_18_04_${arch}" \
        && sudo chown -R $USER:$USER "./target"
}

function docker_tar {
    image=$1
    archname=$2

    docker run -v "$(pwd):/source" "undeadleech/${image}" \
        /root/.cargo/bin/cargo build --release --manifest-path /source/Cargo.toml

    tar -cvzf "./target/deploy/${name}-${archname}.tar.gz" -C "./target/release/" "alacritty"
}

function docker_deb {
    image=$1
    archname=$2

    docker run -v "$(pwd):/source" "undeadleech/${image}" sh -c \
        "cd /source && /root/.cargo/bin/cargo deb --no-build -p alacritty \
        --output ./target/deploy/${name}-${archname}.deb"
}

if [ "$TRAVIS_OS_NAME" == "osx" ]; then
    osx || exit
elif [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$ARCH" != "i386" ]; then
    debian "amd64" || exit
elif [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$ARCH" == "i386" ]; then
    debian "i386" || 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
