name: release

on: [push, pull_request]

env:
  CARGO_TERM_COLOR: always

jobs:
  release-linux:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
        profile: minimal
    - name: Environment
      run: |
        uname -a
        cargo --version
    - name: set Version
      run: |
        echo VERSION=$(grep '^version' packages/hurl/Cargo.toml | cut -f2 -d'"') >> $GITHUB_ENV
    - name: Build
      run: |
        ci/man.sh
        # Install libcurl dev so that hurl can be built dynamically with libcurl
        sudo apt update
        sudo apt install libcurl4-openssl-dev        
        ci/release.sh
        ci/create_tarball.sh linux
        ci/deb.sh
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: release-linux-artifacts
        path: target/upload/*

  release-osx:
    runs-on: macos-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
        profile: minimal
    - name: Environment
      run: |
        uname -a
        cargo --version          
    - name: set Version
      run: |
        echo VERSION=$(grep '^version' packages/hurl/Cargo.toml | cut -f2 -d'"') >> $GITHUB_ENV
    - name: Build
      run: |
        ci/man.sh
        ci/release.sh
        ci/create_tarball.sh osx
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: release-osx-artifacts
        path: target/upload/*
 
  release-win64:
    runs-on: windows-latest
    env:
      VCPKGRS_DYNAMIC: 1
    steps:
    - name: Checkout repository
      uses: actions/checkout@v2 
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
        profile: minimal
    - name: Environment
      run: |
        $Properties = 'Caption', 'CSName', 'Version', 'BuildType', 'OSArchitecture'
        Get-CimInstance Win32_OperatingSystem | Select-Object $Properties | Format-Table -AutoSize
        cargo --version        
    - name: Build
      run: |
        # vcpkg build prequisites
        (Get-Command vcpkg).Path
        Expand-Archive -PassThru -Force -LiteralPath .\ci\windows\vcpkg_installed.zip -DestinationPath C:\vcpkg\
        Get-ChildItem C:\vcpkg\installed
        vcpkg integrate install
        refreshenv
        # fix known win build bugs
        (Get-Content .\packages\hurl\src\runner\hurl_file.rs).replace('```', '') | Set-Content .\packages\hurl\src\runner\hurl_file.rs
        # build release
        cargo build --release --verbose
        New-Item -ItemType Directory -Name .\target\win-package
        Get-ChildItem -Path '.\target\release' -Recurse -Include *.dll -File | Copy-Item -Destination '.\target\win-package'
        Get-ChildItem -Path '.\target\release' -Recurse -Include hurl*.exe -File | Copy-Item -Destination '.\target\win-package'
        ((.\target\win-package\hurl.exe --version) -Split " ")[1] > .\target\win-package\version.txt
        Get-ChildItem .\target\win-package
        Get-Content .\target\win-package\version.txt
    - name: Create Zip package and win64 installer
      run: |
        # create zip
        $hurl_package_version = Get-Content .\target\win-package\version.txt
        cd .\target\win-package
        Get-ChildItem -Path *.dll, *hurl.exe, *hurlfmt.exe, *.txt, ../../*.md -Exclude hex_literal* | Compress-Archive -DestinationPath hurl-${hurl_package_version}-win64.zip
        Get-ChildItem .\*win64.zip
        cd ..\..
        # create installer
        choco install --confirm --no-progress nsis   
        refreshenv
        Get-Command Expand-Archive
        Expand-Archive -Path '.\ci\windows\EnVar_plugin.zip' -DestinationPath 'C:\Program Files (x86)\NSIS' -Verbose
        cd .\target\win-package
        makensis.exe /NOCD /V4 ..\..\ci\windows\hurl.nsi
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: release-win64-artifacts
        path: |
          .\target\win-package\hurl-*-installer.exe
          .\target\win-package\hurl-*-win64.zip

  benchsuite:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          profile: minimal
      - name: Environment
        run: |
          uname -a
          cargo --version
      - name: Build
        run: |
          # Install libcurl dev so that hurl can be built dynamically with libcurl
          sudo apt update
          sudo apt install libcurl4-openssl-dev
          ci/release.sh
      - name: Test Prequisites
        run: |
          pip3 install Flask
          cd bench
          python3 server.py >server.log 2>&1 &
          sleep 2
          netstat -an | grep 8000
      - name: Run Bench Suite
        run: |
          export PATH="$PWD/target/release:$PATH"
          cd bench
          ./run.sh
      - name: Archive artifacts
        uses: actions/upload-artifact@v2
        if: ${{ always() }}
        with:
          name: tests-bench-artifacts
          path: |
            bench/server.log
