Browse Source

Add Github Action to test Tripal on PHP 7.1 and PostgreSQL 11.

Lacey Sanderson 4 years ago
parent
commit
39482ef951
1 changed files with 130 additions and 0 deletions
  1. 130 0
      .github/workflows/phpunit-tests.yml

+ 130 - 0
.github/workflows/phpunit-tests.yml

@@ -0,0 +1,130 @@
+# Run our PHPUnit tests
+name: PHPUnit Tests
+
+# Controls when the action will run.
+# Run this workflow every time a new commit is pushed to your repository
+on: [push, pull_request]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "build"
+  run-tests:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Service containers to run with `run-tests`
+    services:
+      # Label used to access the service container
+      postgres:
+        # Docker Hub image
+        image: postgres
+        env:
+          POSTGRES_USER: postgres
+          POSTGRES_PASSWORD: dbpass
+          POSTGRES_DB: test_db
+        # Set health checks to wait until postgres has started
+        options: >-
+          --health-cmd pg_isready
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        ports:
+          # Maps tcp port 5432 on service container to the host
+          - 5432:5432
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+      # Sets up the PHP environment for PHP 7.2
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: '7.2'
+          # Install extensions for PHP-PostgreSQL
+          extensions: mbstring, intl, php-pgsql, php-gd, php-xml
+          # Increase memory limit to 2G
+          ini-values: memory_limit=2G
+          # Enable xdebug for coverage reporting
+          coverage: xdebug
+          # Install composer and phpunit globally.
+          tools: composer, phpunit
+      # Install Drush 8.x globally
+      # NOTE: `drush` is not available without the full path.
+      #       I tried adding it to the path but that broke other things.
+      - name: Install Drush
+        run: |
+          composer global require "drush/drush:~8"
+          /home/runner/.composer/vendor/bin/drush --version
+      # Install Drupal and Drupal module dependencies for Tripal.
+      # It also patches Drupal.
+      - name: Install Drupal
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          echo "==> Downloading Drupal"
+          cd /home/runner/work
+          $DRUSH dl drupal-7 -y
+          mv drupal-7* drupal
+          echo "==> Installing Drupal"
+          cd $DRUPAL_ROOT
+          $DRUSH si -y --root=$DRUPAL_ROOT \
+                --db-url=$POSTGRES_CONNECTION_STRING \
+                --account-name=$ACCOUNT_NAME \
+                --account-pass=$ACCOUNT_PASS \
+                --site-mail=admin@example.com \
+                --site-name=Tripal3
+          echo "==> Downloading dependencies"
+          $DRUSH dl -y views ctools entity redirect date ds field_group field_group_table
+          echo "==> Enabling Dependencies"
+          $DRUSH en -y views ctools entity redirect date ds field_group field_group_table
+          echo "==> Apply Drupal Patch"
+          cd $DRUPAL_ROOT
+          wget --no-check-certificate https://drupal.org/files/drupal.pgsql-bytea.27.patch
+          patch -p1 < drupal.pgsql-bytea.27.patch
+      # Install Tripal, Chado and prepares the Drupal/Chado databases
+      # Also patches views.
+      - name: Install Tripal
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          echo "==> Move Tripal into the Drupal modules directory"
+          ls /home/runner/work/tripal/tripal
+          cp -R /home/runner/work/tripal/tripal $DRUPAL_ROOT/sites/all/modules
+          echo "==> Apply Views Patch"
+          cd $DRUPAL_ROOT/sites/all/modules/views
+          patch -p1 < ../tripal/tripal_chado_views/views-sql-compliant-three-tier-naming-1971160-30.patch
+          echo "==> Install Tripal"
+          cd $DRUPAL_ROOT
+          $DRUSH en -y tripal tripal_chado tripal_chado_views tripal_ws tripal_ds
+          echo "==> Install Chado"
+          $DRUSH eval "module_load_include('inc', 'tripal_chado', 'includes/tripal_chado.install'); tripal_chado_load_drush_submit('Install Chado v1.3');"
+          $DRUSH trp-run-jobs --username=$ACCOUNT_NAME
+          echo "==> Prepare Chado"
+          $DRUSH eval "module_load_include('inc', 'tripal_chado', 'includes/setup/tripal_chado.setup'); tripal_chado_prepare_drush_submit();"
+          $DRUSH trp-run-jobs --username=$ACCOUNT_NAME
+      # Runs the PHPUnit tests.
+      # https://github.com/mheap/phpunit-github-actions-printer is used
+      # to report PHPUnit fails in a meaningful way to github in PRs.
+      - name: PHPUnit Tests
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          cd $DRUPAL_ROOT/sites/all/modules/tripal
+          composer require --dev mheap/phpunit-github-actions-printer
+          composer update
+          cp tests/.travis.env tests/.env
+          ./vendor/bin/phpunit --printer mheap\\GithubActionsReporter\\Printer