name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: debug
      run: |
        id
        which bash
        whoami
        env
        ps -ef
        pwd
        cat /proc/self/uid_map
        cat /proc/self/status
        systemd-detect-virt
    - name: Install dependencies
      run: |
        sudo cat /etc/apt/sources.list
        sudo sed -i '/deb-src/d' /etc/apt/sources.list
        sudo sed -i '/^deb /p;s/ /-src /' /etc/apt/sources.list
        export DEBIAN_PRIORITY=critical
        export DEBIAN_FRONTEND=noninteractive
        # let's try to work around upgrade breakage in a pkg we don't care about
        sudo apt-mark hold grub-efi-amd64-bin grub-efi-amd64-signed
        sudo apt-get update
        sudo apt-get -y dist-upgrade
        sudo apt-get -y install ubuntu-dev-tools automake autopoint xsltproc gettext expect byacc libtool libbsd-dev pkgconf libcmocka-dev
        sudo apt-get -y build-dep shadow
    - name: configure
      run: |
        autoreconf -v -f --install
        ./autogen.sh --without-selinux --disable-man --with-yescrypt
    - run: make
    - run: make install DESTDIR=${HOME}/rootfs
    - run: sudo make install
    - name: run tests in shell with tty
      shell: 'script -q -e -c "bash {0}"'
      run: |
        set -e
        cd tests
        sudo ./run_some
        cat testsuite.log

  # Make sure that 'make dist' makes a usable tarball with no missing files
  dist-build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Install dependencies
      run: |
        sudo cat /etc/apt/sources.list
        sudo sed -i '/deb-src/d' /etc/apt/sources.list
        sudo sed -i '/^deb /p;s/ /-src /' /etc/apt/sources.list
        export DEBIAN_PRIORITY=critical
        export DEBIAN_FRONTEND=noninteractive
        # let's try to work around upgrade breakage in a pkg we don't care about
        sudo apt-mark hold grub-efi-amd64-bin grub-efi-amd64-signed
        sudo apt-get update
        sudo apt-get -y dist-upgrade
        sudo apt-get -y install ubuntu-dev-tools automake autopoint xsltproc gettext expect byacc libtool libbsd-dev pkgconf
        sudo apt-get -y build-dep shadow

    - name: Test make dist
      run: |
        ./autogen.sh
        make dist
        f=shadow-*.tar.gz
        tar -zxf $f
        d=$(basename $f .tar.gz)
        cd $d
        ./configure
        make -j5
        make check

  container-build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [alpine, debian, fedora]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Build container
      run: |
        docker buildx build -f ./share/containers/${{ matrix.os }}.dockerfile . --output build-out

    - name: Store artifacts
      uses: actions/upload-artifact@v3
      with:
        name: ${{ matrix.os }}-build
        path: |
          ./build-out/config.log
          ./build-out/config.h
        if-no-files-found: ignore
