Switch to side-by-side view

--- a
+++ b/.github/workflows/qiita-ci.yml
@@ -0,0 +1,262 @@
+# name: Qiita CI
+
+on:
+  push:
+    branches: [ dev ]
+  pull_request:
+
+jobs:
+  # derived from https://github.com/actions/example-services/blob/master/.github/workflows/postgres-service.yml
+  main:
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        include:
+          - cover_package: "qiita_db"
+          - cover_package: "qiita_pet qiita_core qiita_ware"
+
+    services:
+      postgres:
+        # Docker Hub image
+        image: postgres:13.4
+        env:
+          POSTGRES_DB: postgres
+          POSTGRES_USER: postgres
+          POSTGRES_PASSWORD: postgres
+          COVER_PACKAGE: ${{ matrix.cover_package }}
+
+        # Set health checks to wait until postgres has started
+        options: >-
+          --health-cmd pg_isready
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        ports:
+          # based on https://github.com/actions/example-services/blob/master/.github/workflows/postgres-service.yml#L44-L72
+          - 5432/tcp
+
+    steps:
+      # Downloads a copy of the code in your repository before running CI tests
+      - name: Check out repository code
+        uses: actions/checkout@v2
+
+      - name: Setup for conda
+        uses: conda-incubator/setup-miniconda@v2
+        with:
+          auto-update-conda: true
+          python-version: '3.9'
+
+      - name: Basic dependencies install
+        env:
+          COVER_PACKAGE: ${{ matrix.cover_package }}
+        shell: bash -l {0}
+        run: |
+          echo "Testing: " $COVER_PACKAGE
+
+          # pull out the port so we can modify the configuration file easily
+          pgport=${{ job.services.postgres.ports[5432] }}
+          sed -i "s/PORT = 5432/PORT = $pgport/" qiita_core/support_files/config_test.cfg
+
+          # PGPASSWORD is read by pg_restore, which is called by the build_db process.
+          export PGPASSWORD=postgres
+
+          # Setting up main qiita conda environment
+          conda config --add channels conda-forge
+          conda deactivate
+          conda create --quiet --yes -n qiita python=3.9 pip libgfortran numpy nginx cython redis
+          conda env list
+          conda activate qiita
+          pip install -U pip
+          pip install sphinx sphinx-bootstrap-theme nose-timer Click coverage
+
+          # Configuring SSH
+          cp /etc/ssh/sshd_config sshd_config
+          echo "RSAAuthentication yes" > sshd_config
+          echo "PubkeyAuthentication yes" > sshd_config
+          echo "StrictModes no" > sshd_config
+          sudo mv sshd_config /etc/ssh/sshd_config
+          sudo systemctl restart ssh
+
+      - name: Webdis install
+        shell: bash -l {0}
+        run: |
+          sudo apt-get -y install libevent-dev
+          git clone https://github.com/nicolasff/webdis
+          cd webdis
+          make
+
+      - name: Main install
+        shell: bash -l {0}
+        run: |
+          conda activate qiita
+          export QIITA_ROOTCA_CERT=`pwd`/qiita_core/support_files/ci_rootca.crt
+          export QIITA_CONFIG_FP=`pwd`/qiita_core/support_files/config_test.cfg
+          export REDBIOM_HOST="http://localhost:7379"
+
+          pip install . --no-binary redbiom
+          # 10.2022
+          # this is for redbiom / biom-format (so fine to delete in the future)
+          pip install future
+          pwd
+          mkdir ~/.qiita_plugins
+
+      - name: Install plugins
+        shell: bash -l {0}
+        run: |
+          conda env create -n qtp-biom --file https://data.qiime2.org/distro/amplicon/qiime2-amplicon-2024.5-py39-linux-conda.yml
+          export QIITA_ROOTCA_CERT=`pwd`/qiita_core/support_files/ci_rootca.crt
+          export QIITA_CONFIG_FP=`pwd`/qiita_core/support_files/config_test.cfg
+          export REDBIOM_HOST="http://localhost:7379"
+          conda activate qtp-biom
+          pip install -U pip
+          pip install https://github.com/qiita-spots/qiita_client/archive/master.zip
+          pip install https://github.com/qiita-spots/qtp-biom/archive/master.zip
+
+          # if QIITA_ROOTCA_CERT is appended to certifi's cacert.pem file,
+          # then --server-cert does not need to be specified to any plugin,
+          # including configure_biom.
+          # echo `python -c "import certifi;print(certifi.where())"`
+          configure_biom --env-script "source /home/runner/.profile; conda activate qtp-biom" --server-cert $QIITA_ROOTCA_CERT
+
+      - name: Starting services
+        shell: bash -l {0}
+        run: |
+          conda activate qiita
+          export QIITA_ROOTCA_CERT=`pwd`/qiita_core/support_files/ci_rootca.crt
+          export QIITA_CONFIG_FP=`pwd`/qiita_core/support_files/config_test.cfg
+          export REDBIOM_HOST="http://localhost:7379"
+
+          echo "1. Setting up redis"
+          redis-server --daemonize yes --port 7777
+          redis-server --daemonize yes --port 6379
+
+          echo "2. Starting webdis"
+          pushd webdis
+          ./webdis &
+          popd
+
+          echo "3. Starting redbiom: " $REDBIOM_HOST
+          curl -s http://localhost:7379/FLUSHALL > /dev/null
+          redbiom --version
+          redbiom admin scripts-writable
+          redbiom admin create-context --name "qiita-test" --description "qiita-test context"
+          redbiom admin load-sample-metadata --metadata `pwd`/qiita_db/support_files/test_data/templates/1_19700101-000000.txt
+          redbiom admin load-sample-metadata-search --metadata `pwd`/qiita_db/support_files/test_data/templates/1_19700101-000000.txt
+          redbiom admin load-sample-data --table `pwd`/qiita_db/support_files/test_data/processed_data/1_study_1001_closed_reference_otu_table.biom --context qiita-test --tag 4
+          redbiom admin load-sample-data --table `pwd`/qiita_db/support_files/test_data/processed_data/1_study_1001_closed_reference_otu_table-for_redbiom_tests.biom --context qiita-test --tag 5
+
+          echo "4. Setting up nginx"
+          mkdir -p /usr/share/miniconda/envs/qiita/var/run/nginx/
+          nginx -c ${PWD}/qiita_pet/nginx_example.conf
+
+          echo "5. Setting up qiita"
+          conda activate qiita
+          qiita-env make --no-load-ontologies
+          qiita-test-install
+          qiita plugins update
+
+          echo "6. Starting supervisord => multiple qiita instances"
+          supervisord -c ${PWD}/qiita_pet/supervisor_example.conf
+          sleep 10
+          cat /tmp/supervisord.log
+
+          echo "7. Starting plugins"
+          conda deactivate
+          conda activate qtp-biom
+          export QIITA_CLIENT_DEBUG_LEVEL=DEBUG
+          start_biom https://localhost:8383 register ignored
+          conda deactivate
+
+          echo "8. Setting up SSH"
+          ssh-keygen -t rsa -b 4096 -N '' -f $PWD/qiita_ware/test/test_data/test_key
+          mkdir ~/.ssh/
+          cp $PWD/qiita_ware/test/test_data/test_key* ~/.ssh/
+          cat ~/.ssh/test_key.pub > ~/.ssh/authorized_keys
+          chmod 600 $PWD/qiita_ware/test/test_data/test_key*
+          chmod 600 ~/.ssh/*
+          chmod 700 ~/.ssh/
+          echo "Connecting as $USER@localhost"
+          # this line (and the -o StrictHostKeyChecking=no) is so the server
+          # is added to the list of known servers
+          scp -O -o StrictHostKeyChecking=no -i $PWD/qiita_ware/test/test_data/test_key $USER@localhost:/home/runner/work/qiita/qiita/qiita_ware/test/test_data/random_key /home/runner/work/qiita/qiita/qiita_ware/test/test_data/random_key_copy_1
+
+      - name: Main tests
+        shell: bash -l {0}
+        env:
+          COVER_PACKAGE: ${{ matrix.cover_package }}
+        run: |
+          conda activate qiita
+          export QIITA_ROOTCA_CERT=`pwd`/qiita_core/support_files/ci_rootca.crt
+          export QIITA_CONFIG_FP=`pwd`/qiita_core/support_files/config_test.cfg
+          # for testing we only need to have this set, not actually exist
+          export QIITA_JOB_SCHEDULER_EPILOGUE=`/path/to/epilogue/file`
+          export REDBIOM_HOST="http://localhost:7379"
+
+          nosetests $COVER_PACKAGE --with-doctest --with-coverage --with-timer -v --cover-package=${COVER_PACKAGE// / --cover-package=} -e 'test_submit_EBI_parse_EBI_reply_failure' -e 'test_full_submission'
+
+          # killing the qiita server to run the next commands
+          QIITA_PID=`cat /tmp/supervisord.pid`
+          kill $QIITA_PID
+          sleep 10
+          # due to qiita_db tests being more complex and taking longer than
+          # the other tests we will only add some extra tests to the run that is
+          # not testing qiita_db
+          if [[ "$COVER_PACKAGE" != *"qiita_db"* ]]; then
+              # 1. testing that we can add some "dummy" studies to the db via
+              #    CLI
+              test_data_studies/commands.sh;
+              # 2. making sure that all qiita cron jobs complete as expected
+              all-qiita-cron-job;
+              # 3. making sure than a production system has the expected rows
+              #    in all our tables; steps: a. drop test db, b. change $QIITA_CONFIG_FP
+              #    c. create new production system, c. count rows in the db.
+              qiita-env drop;
+              cp $QIITA_CONFIG_FP ${QIITA_CONFIG_FP}.bk
+              sed 's/TEST_ENVIRONMENT = TRUE/TEST_ENVIRONMENT = FALSE/g' ${QIITA_CONFIG_FP}.bk > $QIITA_CONFIG_FP;
+              qiita-env make --no-load-ontologies;
+
+              export PGPASSWORD=postgres
+              pgport=${{ job.services.postgres.ports[5432] }}
+              row_counts=`psql -h localhost -U postgres -d qiita_test -p $pgport -c "SELECT SUM(c.reltuples) FROM pg_class c JOIN pg_namespace n on n.oid = c.relnamespace WHERE n.nspname = 'qiita' AND c.relkind = 'r' AND n.nspname NOT IN ('information_schema', 'pg_catalog');"`
+              if [[ `echo $row_counts` != *" 0 "* ]]; then
+                 echo "***********";
+                 echo "The number of rows in a production system is not what's expected:";
+                 echo $row_counts;
+                 echo "***********";
+                 exit 1
+              fi
+          fi
+
+      - name: Submit coveralls
+        uses: AndreMiras/coveralls-python-action@develop
+        with:
+          github-token: ${{ secrets.github_token }}
+          flag-name: "${{ matrix.cover_package }}"
+          parallel: true
+
+  coveralls_finish:
+    needs: main
+    runs-on: ubuntu-latest
+    steps:
+    - name: Coveralls Finished
+      uses: AndreMiras/coveralls-python-action@develop
+      with:
+        github-token: ${{ secrets.github_token }}
+        parallel-finished: true
+
+  lint:
+    runs-on: ubuntu-latest
+    steps:
+    - name: flake8
+      uses: actions/setup-python@v2
+      with:
+        python-version: '3.9'
+    - name: install dependencies
+      run: python -m pip install --upgrade pip
+    - name: Check out repository code
+      uses: actions/checkout@v2
+    - name: lint
+      run: |
+        pip install -q flake8
+        flake8 qiita_* setup.py scripts/qiita* notebooks/*/*.py