-
Notifications
You must be signed in to change notification settings - Fork 109
213 lines (212 loc) · 10.3 KB
/
main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
name: Integration Tests
on:
push:
pull_request:
branches:
- 6.x
schedule:
# Run Monday/Thursday at 12:13 GMT
- cron: '13 12 * * 1,4'
workflow_dispatch:
inputs:
coreprurl:
description: (optional) Core PR URL
required: false
drupal8prurl:
description: (optional) Drupal 8 PR URL
required: false
jobs:
phpunit:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- drupal: '10.2.*'
civicrm: '5.78.*'
php: '8.2'
- drupal: '10.2.*'
civicrm: '5.80.*'
php: '8.2'
- drupal: '10.2.*'
civicrm: '5.81.x-dev'
php: '8.2'
- drupal: '10.3.*'
civicrm: 'dev-master'
php: '8.3'
name: Drupal ${{ matrix.drupal }} | CiviCRM ${{ matrix.civicrm }}
services:
mysql:
image: mysql:8.0
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: db
ports:
- 3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: dom, curl, libxml, mbstring, zip, pdo, mysql, pdo_mysql, bcmath, soap, intl, gd, exif, iconv
coverage: none
tools: composer:v2
- name: Get composer cache directory
id: composercache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.composercache.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.drupal }}-composer-${{ hashFiles('**/composer.json') }}
restore-keys: ${{ runner.os }}-composer-
- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
# Notes
# - Must enable patching for civicrm/civicrm-core
# - CiviCRM requires `compile-mode: all`
- name: Setup sendmail
run: |
sudo apt-get update
sudo apt-get install sendmail
# Temp thing
- name: Downgrade chrome
run: |
curl -L -o chrome.deb http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_127.0.6533.119-1_amd64.deb
sudo apt-get install libu2f-udev
sudo dpkg -i chrome.deb
google-chrome-stable --version
- name: Setup Drupal
run: |
COMPOSER_MEMORY_LIMIT=-1 composer create-project drupal/recommended-project:${{ matrix.drupal }} ~/drupal --no-interaction --no-install
cd ~/drupal
composer config extra.enable-patching true
composer config extra.compile-mode all
composer config minimum-stability dev
composer config prefer-stable true
composer config preferred-install auto
composer config allow-plugins.civicrm/composer-compile-plugin true
composer config allow-plugins.civicrm/composer-downloads-plugin true
composer config allow-plugins.civicrm/civicrm-asset-plugin true
composer config allow-plugins.cweagans/composer-patches true
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
# Note in composer v2 the order is more important. We want the path one to have higher priority.
composer config repositories.0 composer https://packages.drupal.org/8
composer config repositories.1 path $GITHUB_WORKSPACE
composer install --no-interaction
COMPOSER_MEMORY_LIMIT=-1 composer require drupal/core-dev-pinned:${{ matrix.drupal }}
- name: Suppress links to screenshots
# There's so many! They can be useful locally if running one test, but they aren't useful here and cause massive scrolling.
run: |
cd ~/drupal
curl -L -O https://raw.githubusercontent.com/colemanw/webform_civicrm/def72b3dce1ea4bc7dd2cdd28a72844885727789/DrupalHtmlOutputTrait.diff
git apply DrupalHtmlOutputTrait.diff
- name: Install CiviCRM ${{ matrix.civicrm }}
run: |
cd ~/drupal
COMPOSER_MEMORY_LIMIT=-1 composer require civicrm/civicrm-asset-plugin:'~1.1' civicrm/civicrm-{core,packages,drupal-8}:${{ matrix.civicrm }} -W
- name: Download Webform
run: |
cd ~/drupal
COMPOSER_MEMORY_LIMIT=-1 composer require 'drupal/webform:^6.2'
- name: Install webform_civicrm
run: |
cd ~/drupal
# We used the github action `checkout` plugin at the start to check out the PR branch, and then set up a composer virtual `path` repo earlier when setting up composer config. So this should pull from that repo not the real one.
COMPOSER_MEMORY_LIMIT=-1 composer require drupal/webform_civicrm:@dev
- name: Install token
run: |
cd ~/drupal
COMPOSER_MEMORY_LIMIT=-1 composer require drupal/token:^1.11
- name: Download some test helpers
run: |
cd ~/drupal
COMPOSER_MEMORY_LIMIT=-1 composer require semperit/minkcivicrmhelpers
- name: Set identity
# Needed for `git am` but otherwise irrelevant
run: |
git config --global user.email "[email protected]"
git config --global user.name "Webform CiviCRM"
- name: Optionally Apply Core PR
if: ${{ github.event.inputs.coreprurl != 0 }}
run: |
cd ~/drupal/vendor/civicrm/civicrm-core
curl -L -o prpatch.patch ${{ github.event.inputs.coreprurl }}.patch
git am prpatch.patch
- name: Optionally Apply Drupal 8 PR
if: ${{ github.event.inputs.drupal8prurl != 0 }}
run: |
cd ~/drupal/web/modules/contrib/civicrm
curl -L -o prpatch.patch ${{ github.event.inputs.drupal8prurl }}.patch
git am prpatch.patch
- name: Do a fake temp install
# so that we can use civi api to get extensions with a version appropriate to the installed civi version
run: |
cd ~/drupal
composer require drush/drush
mkdir -p /home/runner/civicrm-cv
curl -L https://download.civicrm.org/cv/cv.phar -o /home/runner/civicrm-cv/cv
chmod +x /home/runner/civicrm-cv/cv
./vendor/drush/drush/drush -y -l http://civi.localhost site-install standard --db-url='mysql://root:@127.0.0.1:${{ job.services.mysql.ports[3306] }}/fakedb' --site-name=FakeCivi
chmod +w web/sites/default
/home/runner/civicrm-cv/cv core:install --cms-base-url=http://civi.localhost
- name: Download Civi extensions
run: |
mkdir -p ~/drupal/web/sites/default/files/civicrm/ext
cd ~/drupal/web/sites/default/files/civicrm/ext
# Allow unapproved extensions
/home/runner/civicrm-cv/cv ev '\Civi::settings()->set("ext_repo_url", "https://civicrm.org/extdir/ver={ver}|cms={uf}|ready=");'
/home/runner/civicrm-cv/cv ev '\Civi::settings()->set("http_timeout", 60);'
# Apparently we have to install it, otherwise stripe gives a dependency error even with install=0. I think that's a bug, but let's just do it. This is a fake install anyway.
/home/runner/civicrm-cv/cv api3 Extension.download install=1 key=mjwshared
/home/runner/civicrm-cv/cv api3 Extension.download install=1 key=firewall
/home/runner/civicrm-cv/cv api3 Extension.download install=1 key=mjwpaymentapi
/home/runner/civicrm-cv/cv api3 Extension.download install=1 key=com.drastikbydesign.stripe
/home/runner/civicrm-cv/cv api3 Extension.download install=0 key=com.iatspayments.civicrm
/home/runner/civicrm-cv/cv api3 Extension.download install=0 key=com.aghstrategies.uscounties
# temporary iats patches for undeclared vars
cd com.iatspayments.civicrm
curl -L -O https://patch-diff.githubusercontent.com/raw/iATSPayments/com.iatspayments.civicrm/pull/455.diff
curl -L -O https://patch-diff.githubusercontent.com/raw/iATSPayments/com.iatspayments.civicrm/pull/456.diff
curl -L -O https://patch-diff.githubusercontent.com/raw/iATSPayments/com.iatspayments.civicrm/pull/457.diff
curl -L -O https://patch-diff.githubusercontent.com/raw/iATSPayments/com.iatspayments.civicrm/pull/458.diff
git apply 455.diff
git apply 456.diff
git apply 457.diff
git apply 458.diff
- uses: nanasess/setup-chromedriver@master
with:
# temporary to match downgraded chrome
chromedriver-version: '127.0.6533.119'
- name: Run chromedriver
run: chromedriver --port=9515 &
- name: Run php built-in server
run: php -S 127.0.0.1:8080 -t ~/drupal/web &
- name: Run PHPUnit
run: |
mkdir -p $BROWSERTEST_OUTPUT_DIRECTORY
cd ~/drupal/web
../vendor/bin/phpunit --verbose -c core modules/contrib/webform_civicrm
env:
SYMFONY_DEPRECATIONS_HELPER: 999999
SIMPLETEST_DB: mysql://root:@127.0.0.1:${{ job.services.mysql.ports[3306] }}/db
SIMPLETEST_BASE_URL: http://127.0.0.1:8080
MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","goog:chromeOptions":{"args":["--disable-gpu", "--no-sandbox", "--headless"]}}, "http://127.0.0.1:9515"]'
BROWSERTEST_OUTPUT_DIRECTORY: '/home/runner/drupal/web/sites/simpletest/browser_output'
DEV_EXTENSION_DIR: /home/runner/drupal/web/sites/default/files/civicrm/ext
DEV_EXTENSION_URL: http://127.0.0.1:8080/sites/default/files/civicrm/ext
- name: Helper to make unique name for upload
if: ${{ failure() || success() }}
run: |
# doing this on multiple lines to avoid quote-hell
cd ${{ runner.temp }}
echo '${{ matrix.drupal }}_${{ matrix.civicrm }}_${{ matrix.php }}' > upload_helper.txt
sed -i -e 's/[^0-9a-zA-Z_.\-]//g' upload_helper.txt
echo "UPLOADNAME=$(cat upload_helper.txt)" >> $GITHUB_ENV
- uses: actions/upload-artifact@v4
if: ${{ failure() || success() }}
with:
name: screenshots.${{ env.UPLOADNAME }}
# For some reason Drupal prints here and not our specified BROWSERTEST_OUTPUT_DIRECTORY.
path: '/home/runner/drupal/web/sites/simpletest/browser_output'
retention-days: 7