name: package

on:
  pull_request:
  workflow_dispatch:
  workflow_call:
    inputs:
      branch:
        description: "ref branch for this workflow"
        default: "master"
        required: true
        type: string

env:
  CARGO_TERM_COLOR: always

jobs:
  package-generic-linux-x64:
    runs-on: ubuntu-18.04
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Install
      run: |
        bin/install_prerequisites_ubuntu.sh
        bin/install_rust_latest.sh
    - name: Build
      run: |
        bin/release/release.sh
        echo "PATH=:${PWD}/target/release:$PATH" >> "${GITHUB_ENV}"
    - name: Install Python 3.8
      uses: actions/setup-python@v4
      with:
        python-version: '3.8'
    - name: Install Curl 7.68
      uses: myci-actions/add-deb-repo@10
      with:
        repo: deb http://azure.archive.ubuntu.com/ubuntu/ focal main restricted
        repo-name: focal
        install: curl
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Get version
      run: |
        VERSION=$(bin/release/get_version.sh)
        echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}"
    - name: Create generic linux package
      run: |
        bin/release/man.sh
        bin/release/create_tarball.sh linux
    - name: Install package
      run: |
        bin/release/install_generic_linux_package.sh
        echo "PATH=/tmp/hurl-generic-linux:$PATH" >> "${GITHUB_ENV}"
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      with:
        name: release-generic-linux-x64-artifacts
        path: target/upload/*

  test-generic-linux-docker-debian-x64:
    needs: package-generic-linux-x64
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Retrieve release-generic-linux-x64-artifacts
      uses: actions/download-artifact@v3
      with:
        name: release-generic-linux-x64-artifacts
        path: target/upload
    - name: Install package and tests integ
      uses: addnab/docker-run-action@v3
      with:
        image: debian
        options: --volume ${{ github.workspace }}:/work --workdir /work --privileged
        run: |
          set -e
          echo "::group::Install system prerequisites"
          bin/install_prerequisites_docker_ubuntu.sh
          echo "::endgroup::"
          echo "::group::Environment"
          bin/environment.sh
          echo "::endgroup::"
          echo "::group::Install generic linux package"
          bin/release/install_generic_linux_package.sh
          export PATH="/tmp/hurl-generic-linux:$PATH"
          echo "::endgroup::"
          echo "::group::Install tests prerequisites"
          bin/test/test_prerequisites.sh
          echo "::endgroup::"
          echo "::group::Tests"
          bin/test/test_integ.sh
          echo "::endgroup::"
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      if: ${{ always() }}
      with:
        name: test-generic-linux-package-docker-debian-x64-artifacts
        path: |
          ./**/*.log

  test-generic-linux-docker-archlinux-x64:
    needs: package-generic-linux-x64
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Retrieve release-generic-linux-x64-artifacts
      uses: actions/download-artifact@v3
      with:
        name: release-generic-linux-x64-artifacts
        path: target/upload
    - name: Install package and tests integ
      uses: addnab/docker-run-action@v3
      with:
        image: archlinux
        options: --volume ${{ github.workspace }}:/work --workdir /work --privileged
        run: |
          set -e
          echo "::group::Install system prerequisites"
          bin/install_prerequisites_docker_archlinux.sh
          echo "::endgroup::"
          echo "::group::Environment"
          bin/environment.sh
          echo "::endgroup::"
          echo "::group::Install generic linux package"
          bin/release/install_generic_linux_package.sh
          export PATH="/tmp/hurl-generic-linux:$PATH"
          echo "::endgroup::"
          echo "::group::Install tests prerequisites"
          bin/test/test_prerequisites.sh
          echo "::endgroup::"
          echo "::group::Tests"
          bin/test/test_integ.sh
          echo "::endgroup::"
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      if: ${{ always() }}
      with:
        name: test-generic-linux-package-docker-archlinux-x64-artifacts
        path: |
          ./**/*.log

  test-generic-linux-docker-fedora-x64:
    needs: package-generic-linux-x64
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Retrieve release-generic-linux-x64-artifacts
      uses: actions/download-artifact@v3
      with:
        name: release-generic-linux-x64-artifacts
        path: target/upload
    - name: Install package and tests integ
      uses: addnab/docker-run-action@v3
      with:
        image: fedora
        options: --volume ${{ github.workspace }}:/work --workdir /work --privileged
        run: |
          set -e
          echo "::group::Install system prerequisites"
          bin/install_prerequisites_docker_fedora.sh
          echo "::endgroup::"
          echo "::group::Environment"
          bin/environment.sh
          echo "::endgroup::"
          echo "::group::Install generic linux package"
          bin/release/install_generic_linux_package.sh
          export PATH="/tmp/hurl-generic-linux:$PATH"
          echo "::group::Install tests prerequisites"
          echo "::endgroup::"
          bin/test/test_prerequisites.sh
          echo "::endgroup::"
          echo "::group::Tests"
          bin/test/test_integ.sh || true # to be fixed => "error in stderr actual: <hurl: /lib64/libcurl.so.4: no version information available (required by hurl)"
          echo "::endgroup::"
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      if: ${{ always() }}
      with:
        name: test-generic-linux-package-docker-fedora-x64-artifacts
        path: |
          ./**/*.log

  package-deb-x64:
    runs-on: ubuntu-18.04
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Install
      run: |
        bin/install_prerequisites_ubuntu.sh
        bin/install_rust_latest.sh
    - name: Environment
      run: bin/environment.sh
    - name: Build
      run: |
        bin/release/release.sh
        echo "PATH=:${PWD}/target/release:$PATH" >> "${GITHUB_ENV}"
    - name: Install Python 3.8
      uses: actions/setup-python@v4
      with:
        python-version: '3.8'
    - name: Install Curl 7.68
      uses: myci-actions/add-deb-repo@10
      with:
        repo: deb http://azure.archive.ubuntu.com/ubuntu/ focal main restricted
        repo-name: focal
        install: curl
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Get version
      run: |
        VERSION=$(bin/release/get_version.sh)
        echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}"
    - name: Create deb package
      run: |
        bin/release/man.sh
        bin/release/create_deb_package.sh
    - name: Install package
      run: |
        bin/release/install_deb_package.sh
        echo "PATH=/tmp/hurl-deb-package/usr/bin:$PATH" >> "${GITHUB_ENV}"
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      with:
        name: release-deb-x64-artifacts
        path: target/upload/*

  package-macos-x64:
    runs-on: macos-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
    - name: Install Rust
      run: bin/install_rust_latest.sh
    - name: Install Python 3.8
      uses: actions/setup-python@v4
      with:
        python-version: '3.8'
    - name: Build
      run: |
        bin/release/release.sh
        echo "PATH=:${PWD}/target/release:$PATH" >> "${GITHUB_ENV}"
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Get version
      run: |
        VERSION=$(bin/release/get_version.sh)
        echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}"
    - name: Create generic macos package
      run: |
        bin/release/man.sh
        bin/release/create_tarball.sh macos
    - name: Install package
      run: |
        bin/release/install_generic_macos_package.sh
        echo "PATH=/tmp/hurl-generic-macos:$PATH" >> "${GITHUB_ENV}"
    - name: Test integ
      run: |
        bin/test/test_prerequisites.sh
        bin/test/test_integ.sh
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      with:
        name: release-macos-x64-artifacts
        path: target/upload/*
 
  package-windows-x64:
    runs-on: windows-latest
    env:
      VCPKGRS_DYNAMIC: 1
    steps:
    - name: Set git to use LF
      run: |
        git config --global core.autocrlf false
        git config --global core.eol lf
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        ref: ${{ inputs.branch }}
#    - name: Cache
#      uses: actions/cache@v3
#      with:
#        path: C:\vcpkg\installed
#        key: ${{ runner.os }}-release-windows-x64-${{ github.sha }}
#        restore-keys: ${{ runner.os }}-release-windows-x64-
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
        profile: minimal
    - name: Environment
      run: .\bin\environment.ps1
    - name: Install prerequisites
      run: .\bin\install_prerequisites_windows.ps1
    - name: Build and test integ
      run: |
        .\bin\release\release.ps1
        .\bin\test\test_prerequisites.ps1
        .\bin\test\test_integ.ps1
    - name: Create windows64 Zip package
      run: .\bin\release\create_windows64_zip_package.ps1
    - name: Install win64 zip and test integ
      run: |
        .\bin\release\install_windows64_zip_package.ps1
        .\bin\test\test_prerequisites.ps1
        .\bin\test\test_integ.ps1
    - name: Create windows64 installer
      run: .\bin\release\create_windows64_installer.ps1
    - name: Install win64 installer and test integ
      run: |
        .\bin\release\install_windows64_installer.ps1
        .\bin\test\test_prerequisites.ps1
        .\bin\test\test_integ.ps1
    - name: Archive logs artifacts
      uses: actions/upload-artifact@v3
      with:
        name: log-windows-x64-artifacts
        path: |
          .\**\*.log
    - name: Archive production artifacts
      uses: actions/upload-artifact@v3
      with:
        name: release-windows-x64-artifacts
        path: |
          .\target\win-package\hurl-*-installer.exe
          .\target\win-package\hurl-*-win64.zip

