name: 🏗️ Test Install Scripts

on:
  push:
    paths-ignore:
    - '**.md'
    branches:
      - 'long_lived/**'
      - main
      - 'release/**'
  release:
    types: [published]
  pull_request:
    paths-ignore:
    - '**.md'
    branches:
      - '**'

concurrency:
  # SHA is added to the end if on `main` to let all main workflows run
  group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') || startsWith(github.ref, 'refs/heads/long_lived/')) && github.sha || '' }}
  cancel-in-progress: true

jobs:
  test_scripts:
    name: Test Install Scripts
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      max-parallel: 4
      matrix:
        python-version: [3.9]
        os: [macOS-latest, ubuntu-latest]

    steps:
    - name: Checkout Code
      uses: actions/checkout@v3
      with:
        fetch-depth: 0

    - name: Setup Python environment
      uses: Chia-Network/actions/setup-python@main
      with:
        python-version: ${{ matrix.python-version }}

    - uses: ./.github/actions/install
      with:
        python-version: ${{ matrix.python-version }}
        development: true

    - uses: chia-network/actions/activate-venv@main

    - name: Run install-gui script
      run: |
        sh install-gui.sh

  test_scripts_in_docker:
    name: Test Install Scripts ${{ matrix.distribution.name }}
    runs-on: ${{ matrix.os }}
    container: ${{ matrix.distribution.url }}
    strategy:
      fail-fast: false
      max-parallel: 4
      matrix:
        os: [ubuntu-latest]
        distribution:
        - name: amazonlinux:2
          type: amazon
          url: "docker://amazonlinux:2"
        - name: arch:latest
          type: arch
          url: "docker://archlinux:latest"
        - name: centos:7
          type: centos
          url: "docker://centos:7"
#       commented out until we decide what to do with this, it fails consistently
#         - name: centos:8
#           type: centos
#           url: "docker://centos:8"
        - name: debian:buster
          type: debian
          # https://packages.debian.org/buster/python/python3 (3.7)
          url: "docker://debian:buster"
        - name: debian:bullseye
          type: debian
          # https://packages.debian.org/bullseye/python/python3 (3.9)
          url: "docker://debian:bullseye"
        - name: debian:bookworm
          type: debian
          # https://packages.debian.org/bookworm/python/python3 (3.11)
          url: "docker://debian:bookworm"
        - name: fedora:34
          type: fedora
          # (34, 3.9) https://packages.fedoraproject.org/search?query=python3&releases=Fedora+34&start=0
          url: "docker://fedora:34"
        - name: fedora:35
          type: fedora
          # (35, 3.10) https://packages.fedoraproject.org/search?query=python3&releases=Fedora+35&start=0
          url: "docker://fedora:35"
        - name: fedora:36
          type: fedora
          # (36, 3.10) https://packages.fedoraproject.org/search?query=python3&releases=Fedora+36&start=0
          url: "docker://fedora:36"
        - name: rockylinux:8
          type: rocky
          url: "docker://rockylinux:8"
        - name: ubuntu:bionic (18.04)
          type: ubuntu
          # https://packages.ubuntu.com/bionic/python3.7 (18.04, 3.7)
          url: "docker://ubuntu:bionic"
        - name: ubuntu:focal (20.04)
          type: ubuntu
          # https://packages.ubuntu.com/focal/python3 (20.04, 3.8)
          url: "docker://ubuntu:focal"
        - name: ubuntu:jammy (22.04)
          type: ubuntu
          # https://packages.ubuntu.com/jammy/python3 (22.04, 3.10)
          url: "docker://ubuntu:jammy"

    steps:
    - name: Prepare Amazon Linux
      if: ${{ matrix.distribution.type == 'amazon' }}
      run: |
        yum install --assumeyes git sudo

    - name: Prepare Arch
      if: ${{ matrix.distribution.type == 'arch' }}
      run: |
        pacman --noconfirm -Syu
        pacman --noconfirm -S base git sudo openssl-1.1
        # The behavior we follow in install.sh is unique with Arch in that
        # we leave it to the user to install the appropriate version of python,
        # so we need to install python here in order for the test to succeed.
        pacman --noconfirm -U --needed https://archive.archlinux.org/packages/p/python/python-3.9.9-1-x86_64.pkg.tar.zst

    - name: Prepare CentOS
      if: ${{ matrix.distribution.type == 'centos' }}
      # Installing Git from yum brings git@1.x which doesn't work on actions/checkout.
      # So install git@2.x from source
      run: |
        if [ "$(rpm --eval %{centos_ver})" = "8" ]; then
          sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*;
        fi
        yum update -y
        yum install -y sudo gcc autoconf make wget curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel
        wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.29.0.tar.gz
        tar zxf git-2.29.0.tar.gz
        pushd git-2.29.0
        make configure
        ./configure --prefix=/usr/local
        make all
        make install
        popd

    - name: Prepare Debian
      if: ${{ matrix.distribution.type == 'debian' }}
      env:
        DEBIAN_FRONTEND: noninteractive
      run: |
        apt-get --yes update
        apt-get install --yes git lsb-release sudo

    - name: Prepare Fedora
      if: ${{ matrix.distribution.type == 'fedora' }}
      run: |
        yum install --assumeyes git

    - name: Prepare Rocky
      if: ${{ matrix.distribution.type == 'rocky' }}
      run: |
        yum install --assumeyes git sudo

    - name: Prepare Ubuntu
      if: ${{ matrix.distribution.type == 'ubuntu' }}
      env:
        DEBIAN_FRONTEND: noninteractive
      run: |
        # for bionic
        apt-get --yes update
        apt-get install --yes software-properties-common
        add-apt-repository --yes ppa:git-core/ppa
        apt-get --yes update
        apt-get install --yes git lsb-release sudo

    - name: Add safe git directory
      run: git config --global --add safe.directory $GITHUB_WORKSPACE

    # after installing git so we use that copy
    - name: Checkout Code
      uses: actions/checkout@v3
      with:
        fetch-depth: 0

    - uses: ./.github/actions/install
      with:
        python-version: ${{ matrix.python-version }}
        development: true

    - uses: chia-network/actions/activate-venv@main

    - name: Run chia --help
      run: |
        chia --help
