.github/workflows/20-integration.yml
name: Integration
on:
push:
branches:
- 2.11.x
- master
pull_request_target:
branches:
- 2.11.x
- master
types: [labeled,synchronize]
jobs:
build:
if: (github.event_name != 'pull_request') || contains(github.event.pull_request.labels.*.name, 'safe to test')
runs-on: ubuntu-20.04
name: 'Integration'
services:
mysql:
image: docker://mysql:5.7
env:
MYSQL_ROOT_PASSWORD: magento2
MYSQL_DATABASE: magento2
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
elasticsearch:
image: docker://magento/magento-cloud-docker-opensearch:2.4-1.3.5
ports:
- 9200:9200
options: -e="discovery.type=single-node" -e="plugins.security.disabled=true" --health-cmd="curl http://localhost:9200/_cluster/health" --health-interval=10s --health-timeout=5s --health-retries=10
strategy:
fail-fast: false
matrix:
include:
- php-versions: '8.1'
magento-versions: '2.4.6-p6'
magento-editions: 'community'
experimental: false
- php-versions: '8.1'
magento-versions: '2.4.6-p6'
magento-editions: 'enterprise'
experimental: false
- php-versions: '8.2'
magento-versions: '2.4.6-p6'
magento-editions: 'community'
experimental: false
- php-versions: '8.2'
magento-versions: '2.4.6-p6'
magento-editions: 'enterprise'
experimental: false
- php-versions: '8.2'
magento-versions: '2.4.7-p1'
magento-editions: 'community'
experimental: false
- php-versions: '8.2'
magento-versions: '2.4.7-p1'
magento-editions: 'enterprise'
experimental: false
- php-versions: '8.3'
magento-versions: '2.4.7-p1'
magento-editions: 'community'
experimental: true
- php-versions: '8.3'
magento-versions: '2.4.7-p1'
magento-editions: 'enterprise'
experimental: true
continue-on-error: ${{ matrix.experimental }}
env:
magento-directory: /var/www/magento
MAGENTO_USERNAME: ${{ secrets.MAGENTO_USERNAME }}
MAGENTO_PASSWORD: ${{ secrets.MAGENTO_PASSWORD }}
steps:
- name: "[Init] Checkout"
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: "[Init] Setup PHP"
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: hash, iconv, mbstring, intl, bcmath, ctype, gd, pdo, mysql, curl, zip, dom, sockets, soap, openssl, simplexml, xsl
ini-values: post_max_size=256M, max_execution_time=180
env:
update: true
- name: "[Init] Add php-fpm"
env:
version: ${{ matrix.php-versions }}
run: |
sudo apt-get -qq update
sudo apt-get install -y php$version-fpm
sudo service php$version-fpm start
sudo cp /usr/sbin/php-fpm$version /usr/bin/php-fpm
sudo service php$version-fpm start
sudo service php$version-fpm status
- name: "[Init] Setup Apache with PHP-FPM"
env:
MAGENTO_ROOT: ${{ env.magento-directory }}
version: ${{ matrix.php-versions }}
run: |
sudo apt-get -qq update
sudo apt-get -qq install apache2
sudo a2enmod rewrite actions alias proxy proxy_fcgi
sudo usermod -a -G www-data $USER
sudo cp -f Resources/tests/apache/apache.conf /etc/apache2/sites-available/000-default.conf
sudo mkdir -p $MAGENTO_ROOT
sudo chown -R $USER:www-data $MAGENTO_ROOT
sudo sed -e "s?%MAGENTO_ROOT%?$(readlink -f $MAGENTO_ROOT)?g" --in-place /etc/apache2/sites-available/000-default.conf
sudo sed -e "s?%PHP_VERSION%?$version?g" --in-place /etc/apache2/sites-available/000-default.conf
sudo apachectl configtest
sudo systemctl restart apache2
sudo service apache2 status
- name: "[Init] Prepare GraphQL test suite"
run: |
sudo chown $USER -R /usr/local/lib/node_modules
npm install -g graphqurl
- name: "[Init] Downgrade Composer"
env:
MAGENTO_VERSION: ${{ matrix.magento-versions }}
run: |
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
if [ $(version $MAGENTO_VERSION) -lt $(version "2.4.2") ]; then
composer self-update --1
else
composer self-update 2.1.14
fi
- name: "[Init] Determine composer cache directory"
id: composer-cache-directory
run: "echo \"directory=$(composer config cache-dir)\" >> $GITHUB_OUTPUT"
- name: "[Init] Cache Composer cache"
id: composer-cache
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-directory.outputs.directory }}
key: composer-${{ matrix.php-versions }}-${{ matrix.magento-editions }}-${{ matrix.magento-versions }}
restore-keys: |
composer-${{ matrix.php-versions }}-${{ matrix.magento-editions }}-${{ matrix.magento-versions }}
- name: "[Init] Cache Magento install"
id: magento-cache
uses: actions/cache@v3
with:
path: ${{ env.magento-directory }}
key: magento-${{ matrix.php-versions }}-${{ matrix.magento-editions }}-${{ matrix.magento-versions }}
restore-keys: |
magento-${{ matrix.php-versions }}-${{ matrix.magento-editions }}-${{ matrix.magento-versions }}
- name: "[Init] Prepare credentials"
if: ${{env.MAGENTO_USERNAME}} != 0
run: composer config -g http-basic.repo.magento.com "$MAGENTO_USERNAME" "$MAGENTO_PASSWORD"
- name: "[Init] Prepare Magento install if needed"
if: steps.magento-cache.outputs.cache-hit == 'true'
working-directory: ${{ env.magento-directory }}
run: |
rm -rf app/etc/env.php app/etc/config.php
composer config discard-changes true
composer remove magento/module-catalog-sample-data-venia --no-update --no-interaction
composer remove magento/module-configurable-sample-data-venia --no-update --no-interaction
composer remove magento/sample-data-media-venia --no-update --no-interaction
composer remove smile/elasticsuite --no-update --no-interaction
composer update --no-interaction --ignore-platform-reqs magento/module-catalog-sample-data-venia magento/module-configurable-sample-data-venia magento/sample-data-media-venia smile/elasticsuite
composer config discard-changes false
- name: "[Init] Install proper version of Magento through Composer"
if: steps.magento-cache.outputs.cache-hit != 'true'
env:
MAGENTO_VERSION: ${{ matrix.magento-versions }}
MAGENTO_EDITION: ${{ matrix.magento-editions }}
MAGENTO_ROOT: ${{ env.magento-directory }}
EXPERIMENTAL: ${{ matrix.experimental }}
run: |
STABILITY="--stability=stable"
if [ $EXPERIMENTAL = true ]; then
STABILITY=""
fi
sudo rm -rf $MAGENTO_ROOT
sudo mkdir -p $MAGENTO_ROOT
sudo chown -R $USER:www-data $MAGENTO_ROOT
composer create-project --repository-url=https://repo.magento.com magento/project-$MAGENTO_EDITION-edition=$MAGENTO_VERSION $STABILITY $MAGENTO_ROOT --quiet
- name: "[Init] Add current build of Elasticsuite"
working-directory: ${{ env.magento-directory }}
run: |
composer require --dev "smile/elasticsuite:${GITHUB_BASE_REF:-${GITHUB_REF##*/}}-dev" --ignore-platform-reqs
rm -rf vendor/smile/elasticsuite/**
cp -Rf $GITHUB_WORKSPACE/* vendor/smile/elasticsuite/
- name: "[Init] Fix Magento directory permissions"
env:
MAGENTO_ROOT: ${{ env.magento-directory }}
working-directory: ${{ env.magento-directory }}
run: |
sudo chmod -R a=r,u+w,a+X .
sudo find var pub/static pub/media app/etc generated/ -type f -exec chmod g+w {} \;
sudo find var pub/static pub/media app/etc generated/ -type d -exec chmod g+ws {} \;
sudo chown -R runner:www-data .
sudo chmod u+x bin/magento
- name: "[Test] Install Magento"
working-directory: ${{ env.magento-directory }}
run: php bin/magento setup:install --db-host="0.0.0.0" --db-password="magento2" --admin-user="admin" --admin-password="smile1234" --admin-email="admin@example.com" --admin-firstname="Admin" --admin-lastname="Smile" --db-name="magento2" --elasticsearch-host="localhost" --elasticsearch-port="9200" -q
- name: "[Test] Setup Upgrade"
working-directory: ${{ env.magento-directory }}
run: php bin/magento setup:upgrade -q
- name: "[Test] Reindex"
working-directory: ${{ env.magento-directory }}
run: php bin/magento index:reindex
- name: "[Test] Cache Flush"
working-directory: ${{ env.magento-directory }}
run: php bin/magento cache:flush
- name: "[Test] Compile"
working-directory: ${{ env.magento-directory }}
run: php bin/magento setup:di:compile
- name: "[Test] Data : Require"
working-directory: ${{ env.magento-directory }}
env:
MAGENTO_VERSION: ${{ matrix.magento-versions }}
run: |
composer config discard-changes true
composer require magento/module-catalog-sample-data-venia --no-update --no-interaction --ignore-platform-reqs
composer require magento/module-configurable-sample-data-venia --no-update --no-interaction --ignore-platform-reqs
composer require magento/sample-data-media-venia --no-update --no-interaction --ignore-platform-reqs
composer update --no-interaction --ignore-platform-reqs magento/module-catalog-sample-data-venia magento/module-configurable-sample-data-venia magento/sample-data-media-venia
- name: "[Init] Data : Prepare for Magento >= 2.4.4"
working-directory: ${{ env.magento-directory }}
run: |
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
if [ $(version $MAGENTO_VERSION) -ge $(version "2.4.2") ]; then
sed -i '/^<\/config>/i <preference for="Magento\\Framework\\Filesystem\\DriverInterface" type="Magento\\Framework\\Filesystem\\Driver\\File" />' app/etc/di.xml
fi
- name: "[Init] Data : Remove Downloadable / Virtual products"
working-directory: ${{ env.magento-directory }}
run: |
rm -rf vendor/magento/module-catalog-sample-data-venia/Setup/Patch/Data/InstallDownloadableProducts.php
- name: "[Test] Data : Install"
working-directory: ${{ env.magento-directory }}
run: php bin/magento setup:upgrade --keep-generated
- name: "[Test] Cache Clean before re-indexing"
working-directory: ${{ env.magento-directory }}
run: php bin/magento cache:clean
- name: "[Test] Data : Index"
working-directory: ${{ env.magento-directory }}
run: php bin/magento index:reindex
- name: "[Test] Web : Homepage"
run: |
echo "==> Testing homepage..."
curl_status=`curl --silent --connect-timeout 8 --output /dev/null -LI http://localhost/ -LI -w "%{http_code}\n"`
echo ${curl_status}
if [[ ${curl_status} -ge 400 ]];
then
exit 2;
fi;
- name: "[Test] Web : Catalogsearch"
run: |
echo "==> Testing catalogsearch..."
curl_status=`curl --silent --connect-timeout 8 --output /dev/null -LI http://localhost/catalogsearch/result/?q=top -LI -w "%{http_code}\n"`
echo ${curl_status}
if [[ ${curl_status} -ge 400 ]];
then
exit 2;
fi;
- name: "[Test] Web : Autocomplete"
run: |
echo "==> Testing Autocomplete..."
curl_status=`curl --silent --connect-timeout 8 --output /dev/null -LI http://localhost/search/ajax/suggest/?q=top -LI -w "%{http_code}\n"`
echo ${curl_status}
if [[ ${curl_status} -ge 400 ]];
then
exit 2;
fi;
- name: "[Test] Rest : Schema"
run: |
echo "==> Testing Rest Schema..."
curl -i -X GET http://localhost/rest/all/schema?services=all
- name: "[Test] GraphQl : Schema"
run: |
echo "==> Testing GraphQL Schema..."
curl -i -X POST http://localhost/graphql -H "Content-Type: application/json" -d @$GITHUB_WORKSPACE/Resources/tests/graphql/introspection_query.json
- name: "[Test] GraphQl : Search"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/query.gql"
- name: "[Test] GraphQl : Search (filtered)"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/filter/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/filter/query.gql"
- name: "[Test] GraphQl : Category"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/category/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/category/query.gql"
- name: "[Test] GraphQl : Category (filtered)"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/category/filter/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/category/filter/query.gql"
- name: "[Test] GraphQl : Product Detail"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/search/query.gql"
- name: "[Test] GraphQl : View More (Category)"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/viewmore/category/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/viewmore/category/query.gql"
- name: "[Test] GraphQl : View More (Search)"
run: |
echo "==> Testing Search"
gq \
http://localhost/graphql \
-l \
-H "Content-Type: application/json" \
--variablesFile="$GITHUB_WORKSPACE/Resources/tests/graphql/viewmore/search/variables.json" \
--queryFile="$GITHUB_WORKSPACE/Resources/tests/graphql/viewmore/search/query.gql"
- name: "[End] Job failed, gathering logs"
env:
MAGENTO_ROOT: ${{ env.magento-directory }}
if: ${{ failure() }}
run: |
tail -n 100 /var/log/apache2/apache-error.log
tail -n 100 $MAGENTO_ROOT/var/log/*.log