# CD GitHub Actions workflow for Monolith

name: CD

on:
  release:
    types:
    - created

jobs:

  windows:
    runs-on: windows-2019
    steps:
    - run: git config --global core.autocrlf false
    - name: Checkout the repository
      uses: actions/checkout@v2
    - name: Build the executable
      run: cargo build --release
    - uses: Shopify/upload-to-release@1.0.0
      with:
        name: monolith.exe
        path: target\release\monolith.exe
        repo-token: ${{ secrets.GITHUB_TOKEN }}

  gnu_linux_armhf:
    runs-on: ubuntu-18.04
    steps:
    - name: Checkout the repository
      uses: actions/checkout@v2
    - name: Prepare cross-platform environment
      run: |
        sudo mkdir /cross-build
        sudo touch /etc/apt/sources.list.d/armhf.list
        echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list.d/armhf.list
        sudo apt-get update
        sudo apt-get install -y gcc-arm-linux-gnueabihf libc6-armhf-cross libc6-dev-armhf-cross
        sudo apt-get download libssl1.1:armhf libssl-dev:armhf
        sudo dpkg -x libssl1.1*.deb /cross-build
        sudo dpkg -x libssl-dev*.deb /cross-build
        rustup target add arm-unknown-linux-gnueabihf
        echo "C_INCLUDE_PATH=/cross-build/usr/include" >> $GITHUB_ENV
        echo "OPENSSL_INCLUDE_DIR=/cross-build/usr/include/arm-linux-gnueabihf" >> $GITHUB_ENV
        echo "OPENSSL_LIB_DIR=/cross-build/usr/lib/arm-linux-gnueabihf" >> $GITHUB_ENV
        echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
        echo "RUSTFLAGS=-C linker=arm-linux-gnueabihf-gcc -L/usr/arm-linux-gnueabihf/lib -L/cross-build/usr/lib/arm-linux-gnueabihf -L/cross-build/lib/arm-linux-gnueabihf" >> $GITHUB_ENV
    - name: Build the executable
      run: cargo build --release --target=arm-unknown-linux-gnueabihf
    - name: Attach artifact to the release
      uses: Shopify/upload-to-release@1.0.0
      with:
        name: monolith-gnu-linux-armhf
        path: target/arm-unknown-linux-gnueabihf/release/monolith
        repo-token: ${{ secrets.GITHUB_TOKEN }}

  gnu_linux_aarch64:
    runs-on: ubuntu-18.04
    steps:
    - name: Checkout the repository
      uses: actions/checkout@v2
    - name: Prepare cross-platform environment
      run: |
        sudo mkdir /cross-build
        sudo touch /etc/apt/sources.list.d/arm64.list
        echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list.d/arm64.list
        sudo apt-get update
        sudo apt-get install -y gcc-aarch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross
        sudo apt-get download libssl1.1:arm64 libssl-dev:arm64
        sudo dpkg -x libssl1.1*.deb /cross-build
        sudo dpkg -x libssl-dev*.deb /cross-build
        rustup target add aarch64-unknown-linux-gnu
        echo "C_INCLUDE_PATH=/cross-build/usr/include" >> $GITHUB_ENV
        echo "OPENSSL_INCLUDE_DIR=/cross-build/usr/include/aarch64-linux-gnu" >> $GITHUB_ENV
        echo "OPENSSL_LIB_DIR=/cross-build/usr/lib/aarch64-linux-gnu" >> $GITHUB_ENV
        echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
        echo "RUSTFLAGS=-C linker=aarch64-linux-gnu-gcc -L/usr/aarch64-linux-gnu/lib -L/cross-build/usr/lib/aarch64-linux-gnu" >> $GITHUB_ENV
    - name: Build the executable
      run: cargo build --release --target=aarch64-unknown-linux-gnu
    - name: Attach artifact to the release
      uses: Shopify/upload-to-release@1.0.0
      with:
        name: monolith-gnu-linux-aarch64
        path: target/aarch64-unknown-linux-gnu/release/monolith
        repo-token: ${{ secrets.GITHUB_TOKEN }}

  gnu_linux_x86_64:
    runs-on: ubuntu-18.04
    steps:
    - name: Checkout the repository
      uses: actions/checkout@v2
    - name: Build the executable
      run: cargo build --release
    - uses: Shopify/upload-to-release@1.0.0
      with:
        name: monolith-gnu-linux-x86_64
        path: target/release/monolith
        repo-token: ${{ secrets.GITHUB_TOKEN }}
