@@ -11,161 +11,123 @@ on:
1111 - ' main'
1212
1313jobs :
14- unit- tests :
15- name : Unit Tests - ${{ matrix.module }} (PHP ${{ matrix.php -version }})
14+ tests :
15+ name : Tests - ${{ matrix.module }} (PS ${{ matrix.ps -version }})
1616 runs-on : ubuntu-latest
1717
1818 strategy :
1919 fail-fast : false
2020 matrix :
2121 include :
2222 - module : ps17
23+ ps-version : ' 1.7.7.0'
2324 php-version : ' 7.2'
2425 - module : ps8
26+ ps-version : ' 8.1.5'
2527 php-version : ' 8.1'
2628 - module : ps9
29+ ps-version : ' 9.0.0'
2730 php-version : ' 8.4'
2831
32+ services :
33+ mysql :
34+ image : mariadb:10.9.4
35+ env :
36+ MYSQL_ROOT_PASSWORD : prestashop
37+ MYSQL_DATABASE : prestashop
38+ options : >-
39+ --health-cmd="mysqladmin ping -h127.0.0.1 -uroot -pprestashop --silent"
40+ --health-interval=10s
41+ --health-timeout=5s
42+ --health-retries=5
43+
2944 steps :
3045 - name : Checkout code
3146 uses : actions/checkout@v4
3247
33- - name : Setup PHP
34- uses : shivammathur/setup-php@v2
35- with :
36- php-version : ${{ matrix.php-version }}
37- extensions : mbstring, xml, ctype, json, zip
38- coverage : none
39-
40- - name : Get Composer cache directory
41- id : composer-cache
42- run : echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
43-
44- - name : Cache Composer dependencies
45- uses : actions/cache@v4
46- with :
47- path : ${{ steps.composer-cache.outputs.dir }}
48- key : ${{ runner.os }}-php-${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.lock') }}
49- restore-keys : |
50- ${{ runner.os }}-php-${{ matrix.php-version }}-composer-
51-
52- - name : Install root dependencies
53- run : composer install --prefer-dist --no-progress --no-interaction
54-
55- - name : Install ${{ matrix.module }} module dependencies
56- working-directory : ${{ matrix.module }}
57- run : composer install --prefer-dist --no-progress --no-interaction
58-
59- - name : Copy monorepo directories to vendor
60- working-directory : ${{ matrix.module }}
48+ - name : Pull PrestaShop Docker image
49+ run : docker pull prestashop/prestashop:${{ matrix.ps-version }}
50+
51+ - name : Start PrestaShop container
52+ run : |
53+ docker run -tid --rm \
54+ --name prestashop-${{ matrix.module }} \
55+ --network ${{ job.container.network }} \
56+ -e DB_SERVER=mysql \
57+ -e DB_NAME=prestashop \
58+ -e DB_USER=root \
59+ -e DB_PASSWD=prestashop \
60+ -e PS_INSTALL_AUTO=0 \
61+ prestashop/prestashop:${{ matrix.ps-version }}
62+
63+ - name : Wait for PrestaShop to be ready
64+ run : |
65+ timeout 60 bash -c 'until docker exec prestashop-${{ matrix.module }} test -f /var/www/html/config/config.inc.php 2>/dev/null || docker exec prestashop-${{ matrix.module }} test -f /var/www/html/app/config/parameters.php 2>/dev/null; do sleep 2; done' || true
66+ sleep 5
67+
68+ - name : Copy module to PrestaShop
69+ run : |
70+ docker cp ${{ matrix.module }}/. prestashop-${{ matrix.module }}:/var/www/html/modules/ps_checkout/
71+
72+ - name : Install Composer
73+ run : |
74+ docker exec prestashop-${{ matrix.module }} bash -c "curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer"
75+
76+ - name : Install Composer dependencies in container
77+ run : |
78+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && composer install --no-interaction --prefer-dist"
79+
80+ - name : Copy monorepo directories to module vendor
6181 run : |
62- mkdir -p vendor/invertus
63- cp -r ${{ github.workspace }}/api vendor/invertus/
64- cp -r ${{ github.workspace }}/core vendor/invertus/
65- cp -r ${{ github.workspace }}/infrastructure vendor/invertus/
66- cp -r ${{ github.workspace }}/presentation vendor/invertus/
67- cp -r ${{ github.workspace }}/utility vendor/invertus/
82+ docker exec prestashop-${{ matrix.module }} bash -c " mkdir -p /var/www/html/modules/ps_checkout/ vendor/invertus"
83+ docker cp api/. prestashop- ${{ matrix.module }}:/var/www/html/modules/ps_checkout/ vendor/invertus/api /
84+ docker cp core/. prestashop- ${{ matrix.module }}:/var/www/html/modules/ps_checkout/ vendor/invertus/core /
85+ docker cp infrastructure/. prestashop- ${{ matrix.module }}:/var/www/html/modules/ps_checkout/ vendor/invertus/infrastructure /
86+ docker cp presentation/. prestashop- ${{ matrix.module }}:/var/www/html/modules/ps_checkout/ vendor/invertus/presentation /
87+ docker cp utility/. prestashop- ${{ matrix.module }}:/var/www/html/modules/ps_checkout/ vendor/invertus/utility /
6888
6989 - name : Run Infrastructure Unit Tests
70- working-directory : ${{ matrix.module }}
7190 run : |
72- php vendor/bin/phpunit \
91+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
7392 --configuration=vendor/invertus/infrastructure/tests/phpunit.xml \
74- --bootstrap=vendor/invertus/infrastructure/tests/bootstrap.php
93+ --bootstrap=vendor/invertus/infrastructure/tests/bootstrap.php"
7594
7695 - name : Run Utility Unit Tests
77- working-directory : ${{ matrix.module }}
7896 run : |
79- php vendor/bin/phpunit \
97+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
8098 --configuration=vendor/invertus/utility/tests/phpunit.xml \
81- --bootstrap=vendor/invertus/utility/tests/bootstrap.php
99+ --bootstrap=vendor/invertus/utility/tests/bootstrap.php"
82100
83101 - name : Run Core Unit Tests
84- working-directory : ${{ matrix.module }}
85102 run : |
86- php vendor/bin/phpunit \
103+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
87104 --configuration=vendor/invertus/core/tests/phpunit.xml \
88- --bootstrap=vendor/invertus/core/tests/bootstrap.php
105+ --bootstrap=vendor/invertus/core/tests/bootstrap.php"
89106
90107 - name : Run Presentation Unit Tests
91- working-directory : ${{ matrix.module }}
92108 run : |
93- php vendor/bin/phpunit \
109+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
94110 --configuration=vendor/invertus/presentation/tests/phpunit.xml \
95- --bootstrap=vendor/invertus/presentation/tests/bootstrap.php
96-
97- integration-tests :
98- name : Integration Tests - ${{ matrix.module }} (PHP ${{ matrix.php-version }})
99- runs-on : ubuntu-latest
100-
101- strategy :
102- fail-fast : false
103- matrix :
104- include :
105- - module : ps17
106- php-version : ' 7.2'
107- - module : ps8
108- php-version : ' 8.1'
109- - module : ps9
110- php-version : ' 8.4'
111-
112- steps :
113- - name : Checkout code
114- uses : actions/checkout@v4
115-
116- - name : Setup PHP
117- uses : shivammathur/setup-php@v2
118- with :
119- php-version : ${{ matrix.php-version }}
120- extensions : mbstring, xml, ctype, json, zip
121- coverage : none
122-
123- - name : Get Composer cache directory
124- id : composer-cache
125- run : echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
126-
127- - name : Cache Composer dependencies
128- uses : actions/cache@v4
129- with :
130- path : ${{ steps.composer-cache.outputs.dir }}
131- key : ${{ runner.os }}-php-${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.lock') }}
132- restore-keys : |
133- ${{ runner.os }}-php-${{ matrix.php-version }}-composer-
134-
135- - name : Install root dependencies
136- run : composer install --prefer-dist --no-progress --no-interaction
137-
138- - name : Install ${{ matrix.module }} module dependencies
139- working-directory : ${{ matrix.module }}
140- run : composer install --prefer-dist --no-progress --no-interaction
141-
142- - name : Copy monorepo directories to vendor
143- working-directory : ${{ matrix.module }}
144- run : |
145- mkdir -p vendor/invertus
146- cp -r ${{ github.workspace }}/api vendor/invertus/
147- cp -r ${{ github.workspace }}/core vendor/invertus/
148- cp -r ${{ github.workspace }}/infrastructure vendor/invertus/
149- cp -r ${{ github.workspace }}/presentation vendor/invertus/
150- cp -r ${{ github.workspace }}/utility vendor/invertus/
111+ --bootstrap=vendor/invertus/presentation/tests/bootstrap.php"
151112
152113 - name : Run Infrastructure Integration Tests
153- working-directory : ${{ matrix.module }}
154114 run : |
155- php vendor/bin/phpunit \
115+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
156116 --configuration=vendor/invertus/infrastructure/tests/phpunit-integration.xml \
157- --bootstrap=vendor/invertus/infrastructure/tests/bootstrap-integration.php
117+ --bootstrap=vendor/invertus/infrastructure/tests/bootstrap-integration.php"
158118
159119 - name : Run Core Integration Tests
160- working-directory : ${{ matrix.module }}
161120 run : |
162- php vendor/bin/phpunit \
121+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
163122 --configuration=vendor/invertus/core/tests/phpunit-integration.xml \
164- --bootstrap=vendor/invertus/core/tests/bootstrap-integration.php
123+ --bootstrap=vendor/invertus/core/tests/bootstrap-integration.php"
165124
166125 - name : Run Module Integration Tests
167- working-directory : ${{ matrix.module }}
168126 run : |
169- php vendor/bin/phpunit \
127+ docker exec prestashop-${{ matrix.module }} bash -c "cd /var/www/html/modules/ps_checkout && php vendor/bin/phpunit \
170128 --configuration=tests/phpunit-integration.xml \
171- --bootstrap=tests/bootstrap-integration.php
129+ --bootstrap=tests/bootstrap-integration.php"
130+
131+ - name : Cleanup
132+ if : always()
133+ run : docker stop prestashop-${{ matrix.module }} || true
0 commit comments