From 63a2f760569ab94662601b901e332678403b5e1d Mon Sep 17 00:00:00 2001
From: Joe Corall <jjc223@lehigh.edu>
Date: Tue, 23 Apr 2024 06:44:31 -0400
Subject: [PATCH] Install chromedriver on host since GitHub services can't
 access host ports

---
 .github/workflows/build-2.x.yml | 62 ++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 32 deletions(-)

diff --git a/.github/workflows/build-2.x.yml b/.github/workflows/build-2.x.yml
index 2851956b..7e2d54b1 100644
--- a/.github/workflows/build-2.x.yml
+++ b/.github/workflows/build-2.x.yml
@@ -1,34 +1,35 @@
-# This is a basic workflow to help you get started with Actions
-
 name: CI
 
-# Controls when the action will run.
 on:
-  # Triggers the workflow on push or pull request events but only for the 2.x branch
   push:
     branches: [ 2.x ]
   pull_request:
     branches: [ 2.x ]
-
-  # Allows you to run this workflow manually from the Actions tab
   workflow_dispatch:
 
-# 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"
   build:
-    # The type of runner that the job will run on
+    env:
+      DRUPAL_VERSION: ${{ matrix.drupal-version }}
+      SCRIPT_DIR: ${{ github.workspace }}/islandora_ci
+      DRUPAL_DIR: /opt/drupal
+      PHPUNIT_FILE: ${{ github.workspace }}/build_dir/phpunit.xml
+      MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-gpu","--headless", "--no-sandbox", "--disable-dev-shm-usage"]}}, "http://localhost:9515"]'
+      CHROMEDRIVER_VERSION: 114.0.5735.90
+
     runs-on: ubuntu-latest
     continue-on-error: ${{ matrix.allowed_failure }}
     strategy:
       fail-fast: false
       matrix:
-        php-versions: ["8.1", "8.2"]
-        # test-suite functional-javascript will appear to pass but will skip tests; missing chromedriver.
+        php-versions: ["8.1", "8.2", "8.3"]
         test-suite: ["kernel", "functional", "functional-javascript"]
-        drupal-version: ["10.0.x", "10.1.x", "10.2.x-dev"]
+        drupal-version: ["10.1.x", "10.2.x", "10.3.x-dev"]
         mysql: ["8.0"]
         allowed_failure: [false]
+        exclude:
+          - php-versions: "8.3"
+            drupal-version: "10.1.x"
 
 
     name: PHP ${{ matrix.php-versions }} | drupal ${{ matrix.drupal-version }} | mysql ${{ matrix.mysql }} | test-suite ${{ matrix.test-suite }}
@@ -47,24 +48,16 @@ jobs:
           - 8161:8161
           - 61616:61616
           - 61613:61613
-      chrome:
-        image: drupalci/webdriver-chromedriver:production
-        ports:
-          - 9515:9515
-        # XXX: Doesn't presently work; however, seems to represent the current default.
-        #options: --entrypoint 'chromedriver --log-path=/tmp/chromedriver.log --verbose --allowed-ips= --allowed-origins=*'
 
-    # 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 code
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           path: build_dir
 
       - name: Checkout islandora_ci
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           repository: islandora/islandora_ci
           ref: github-actions
@@ -82,13 +75,6 @@ jobs:
           sudo apt-get remove -y mysql-client mysql-common
           sudo apt-get install -y mysql-client
 
-      - name: Set environment variables
-        run: |
-          echo "DRUPAL_VERSION=${{ matrix.drupal-version }}" >> $GITHUB_ENV
-          echo "SCRIPT_DIR=$GITHUB_WORKSPACE/islandora_ci" >> $GITHUB_ENV
-          echo "DRUPAL_DIR=/opt/drupal" >> $GITHUB_ENV
-          echo "PHPUNIT_FILE=$GITHUB_WORKSPACE/build_dir/phpunit.xml" >> $GITHUB_ENV
-
       - name: Cache Composer dependencies
         uses: actions/cache@v3
         with:
@@ -121,11 +107,23 @@ jobs:
 
       - name: Test scripts
         run: $SCRIPT_DIR/travis_scripts.sh
+      
+      - name: Start chromedriver
+        if: matrix.test-suite == 'functional-javascript'
+        run: |-
+          curl -s -o ./chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip
+          unzip chromedriver_linux64.zip
+          ./chromedriver \
+            --log-path=/tmp/chromedriver.log \
+            --verbose \
+            --allowed-ips= \
+            --allowed-origins=* &
 
       - name: PHPUNIT tests
-        env:
-          MINK_DRIVER_ARGS: '["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-gpu","--headless", "--no-sandbox", "--disable-dev-shm-usage"]}}, "http://chrome:9515"]'
-          MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-gpu","--headless", "--no-sandbox", "--disable-dev-shm-usage"]}}, "http://chrome:9515"]'
         run: |
           cd $DRUPAL_DIR/web/core
           $DRUPAL_DIR/vendor/bin/phpunit --verbose --testsuite "${{ matrix.test-suite }}"
+
+      - name: Print chromedriver logs
+        if: matrix.test-suite == 'functional-javascript'
+        run: cat /tmp/chromedriver.log