name: 'build and installation tests'

on:
  pull_request:
    branches: ['master']
    paths-ignore:
      - 'AUTHORS'
      - 'COPYING'
      - 'NEWS'
      - 'README.md'
      - 'doc/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  rpmbuild:
    name: 'rpmbuild test'
    runs-on: 'ubuntu-latest'
    strategy:
      fail-fast: false
      matrix:
        # Testing per python-version using actions/setup-python is not possible,
        # because rpm doesn't exist on pypi and cannot be installed via pip on ubuntu.
        # That's why we're going to test on the target distros directly.
        container:

          # Fedora
          - 'registry.fedoraproject.org/fedora:38'
          - 'registry.fedoraproject.org/fedora:39'
          - 'registry.fedoraproject.org/fedora:rawhide'

          # OpenSUSE
          # leap < 15.2 doesn't contain git-lfs which causes actions/checkout to fail
          - 'registry.opensuse.org/opensuse/leap:15.3'
          - 'registry.opensuse.org/opensuse/leap:15.4'
          - 'registry.opensuse.org/opensuse/leap:15.5'
          - 'registry.opensuse.org/opensuse/tumbleweed'

          # CentOS Stream
          - 'quay.io/centos/centos:stream9'

    container:
      image: ${{ matrix.container }}

    steps:
      - name: 'Install packages (OpenSUSE)'
        if: ${{ contains(matrix.container, '/opensuse/') }}
        run: |
            zypper -n modifyrepo --disable repo-openh264 || :
            zypper -n --gpg-auto-import-keys refresh
            zypper -n lr --details
            zypper -n dist-upgrade
            zypper -n install git-lfs rpm-build

      - name: 'Install packages (Fedora/CentOS)'
        if: ${{ contains(matrix.container, '/fedora:') || contains(matrix.container, '/centos:') }}
        run: |
            dnf -y makecache
            dnf -y distro-sync
            dnf -y install git-lfs rpm-build dnf-plugins-core

      - uses: actions/checkout@v3
        with:
            fetch-depth: 0

      - name: 'Install build dependencies (OpenSUSE)'
        if: ${{ contains(matrix.container, '/opensuse/') }}
        run: |
            zypper --non-interactive install $(rpmspec -q --buildrequires contrib/osc.spec)

      - name: 'Install build dependencies (Fedora/CentOS)'
        if: ${{ contains(matrix.container, '/fedora:') || contains(matrix.container, '/centos:') }}
        run: |
            RHEL_VERSION=$(rpm --eval '%{?rhel}')
            [ -n "${RHEL_VERSION}" ] && rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-${RHEL_VERSION}.noarch.rpm
            [ -n "${RHEL_VERSION}" ] && /usr/bin/crb enable
            dnf -y builddep contrib/osc.spec

      - name: 'Build SRPM and RPMs'
        run: |
            git config --global --add safe.directory "$(pwd)"

            git remote add upstream https://github.com/openSUSE/osc.git
            git fetch upstream --tags --force

            ./contrib/build_rpm.py --srpm --rpm

      - name: 'Install built RPMs (OpenSUSE)'
        if: ${{ contains(matrix.container, '/opensuse/') }}
        run: |
            zypper --non-interactive install --force --allow-vendor-change --allow-unsigned-rpm ./contrib/*/*.rpm

      - name: 'Install build RPMs (Fedora/CentOS)'
        if: ${{ contains(matrix.container, '/fedora:') || contains(matrix.container, '/centos:') }}
        run: |
            dnf -y install ./contrib/*/*.rpm

      - name: 'Run installed osc'
        run: |
            osc --help

  pip:
    name: 'pip install test'
    runs-on: 'ubuntu-latest'
    strategy:
      fail-fast: false

    steps:
      - name: 'Install packages'
        run: |
            sudo apt-get -y update
            sudo apt-get -y upgrade
            sudo apt-get -y --no-install-recommends install git python3-pip python3-rpm

      - uses: actions/checkout@v3

      - name: 'Install osc from pip'
        run: |
            pip config set global.break-system-packages 1
            pip3 install .

      - name: 'Run installed osc'
        run: |
            osc --help

  virtualenv:
    name: 'virtualenv install test'
    runs-on: 'ubuntu-latest'
    strategy:
      fail-fast: false

    steps:
      - name: 'Install packages'
        run: |
            sudo apt-get -y update
            sudo apt-get -y --no-install-recommends install git python3-pip python3-rpm python3-virtualenv

      - uses: actions/checkout@v3

      - name: 'Initialize virtualenv'
        run: |
            python3 -m venv .env3
            source .env3/bin/activate
            pip3 install .

      - name: 'Run installed osc'
        run: |
            source .env3/bin/activate
            osc --help