# https://circleci.com/docs/2.0/

version: 2
workflows:
  version: 2
  ci:
    jobs:
      - "lint"
      - "debian-8"
      - "debian-9"
      - "centos-7"

jobs:
  lint:
    docker:
      - image: "circleci/python:2"

    steps:
      - "checkout"

      - run:
          name: "Static-ish code checks"
          command: |
            pip install --user tox
            ~/.local/bin/tox -e codechecks

  debian-8: &DEBIAN
    docker:
      - image: "debian:8"

    environment:
      - TAHOE_LAFS_HYPOTHESIS_PROFILE: "ci"

    steps:
      - run:
          node: "Install Git"
          command: |
            apt-get --quiet update
            apt-get --quiet --yes install git

      - "checkout"

      - run:
          name: "Bootstrap test environment"
          working_directory: "/tmp"
          command: |
            # Avoid the /nonexistent home directory in nobody's /etc/passwd
            # entry.
            usermod --home /tmp/nobody nobody

            # Grant read access to nobody, the user which will eventually try
            # to test this checkout.
            mv /root/project /tmp/project

            # Python build/install toolchain wants to write to the source
            # checkout, too.
            chown --recursive nobody:nogroup /tmp/project

            apt-get --quiet --yes install \
                sudo \
                build-essential \
                python2.7 \
                python2.7-dev \
                libffi-dev \
                libssl-dev \
                libyaml-dev \
                virtualenv

            # Set up the virtualenv as a non-root user so we can run the test
            # suite as a non-root user.  See below.
            sudo -u nobody virtualenv --python python2.7 /tmp/tests
            sudo -u nobody /tmp/tests/bin/pip install tox

      - run:
          name: "Run test suite"
          command: &RUN_TESTS |
            # Run the test suite as a non-root user.  This is the expected
            # usage some small areas of the test suite assume non-root
            # privileges (such as unreadable files being unreadable).
            #
            # Also run with /tmp as a workdir because the non-root user won't
            # be able to create the tox working filesystem state in the source
            # checkout because it is owned by root.
            sudo -u nobody /tmp/tests/bin/tox -c /tmp/project/tox.ini --workdir /tmp -e py27

  debian-9:
    docker:
      - image: "debian:9"

    <<: *DEBIAN


  centos-7:
    docker:
      - image: "centos:7"

    environment:
      - TAHOE_LAFS_HYPOTHESIS_PROFILE: "ci"

    steps:
      - run:
          node: "Install Git"
          command: |
            yum install --assumeyes git

      - "checkout"

      - run:
          name: "Bootstrap test environment"
          working_directory: "/tmp"
          command: |
            # Avoid the /nonexistent home directory in nobody's /etc/passwd
            # entry.
            usermod --home /tmp/nobody nobody

            # Grant read access to nobody, the user which will eventually try
            # to test this checkout.
            mv /root/project /tmp/project

            # Python build/install toolchain wants to write to the source
            # checkout, too.
            chown --recursive nobody:nobody /tmp/project

            yum install --assumeyes \
                sudo \
                make automake gcc gcc-c++ \
                python \
                python-devel \
                libffi-devel \
                openssl-devel \
                libyaml-devel \
                python-virtualenv

            # XXX net-tools is actually a Tahoe-LAFS runtime dependency!
            yum install --assumeyes \
                net-tools

            # Set up the virtualenv as a non-root user so we can run the test
            # suite as a non-root user.  See below.
            sudo -u nobody virtualenv --python python2.7 /tmp/tests
            sudo -u nobody /tmp/tests/bin/pip install tox

      - run:
          name: "Run test suite"
          command: *RUN_TESTS
