Skip to content

Commit

Permalink
debug cypress ga
Browse files Browse the repository at this point in the history
  • Loading branch information
sam committed Feb 24, 2024
1 parent 9c737e1 commit 7628431
Show file tree
Hide file tree
Showing 5 changed files with 521 additions and 11 deletions.
262 changes: 258 additions & 4 deletions .github/workflows/ci-test.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: testing cypress envs
name: Integration and Functional tests

on:
pull_request:
Expand All @@ -15,16 +15,270 @@ jobs:
matrix:
php-versions: ['7.4']
steps:
# REMOVE RESIDUAL CONTAINERS ( for local debug with act only )
- name: Remove all mysql containers when working with act
if: ${{ env.ACT }}
run: |
CONTAINERS=$(docker ps -a -q --filter ancestor=mariadb:10.4.10)
if [ ! -z "$CONTAINERS" ]; then
docker rm -f $CONTAINERS
else
echo "No containers to remove."
fi
- name: Checkout code
uses: actions/checkout@v4

# INSTALL DEPENDENCIES ----------------
- name: Setup PHP, extensions and composer with shivammathur/setup-php
uses: shivammathur/setup-php@verbose
with:
php-version: ${{ matrix.php-versions }}
tools: composer:2.2
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.11.0'

- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_ENV

- name: Cache composer dependencies
uses: actions/cache@v4
with:
path: |
${{ env.dir }}
./vendor
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

# INSTALL PACKAGES ----------------
- name: Clean node_modules
run: rm -rf node_modules

- name: Install NPM packages
run: npm ci

- name: Install Composer dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader


# UPLOAD CACHED DIRECTORIES ----------------
- name: Upload Vendor Directory as Artifact
uses: actions/upload-artifact@v4
with:
name: vendor-dir
path: vendor/

phpStan:
needs: setup
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

# GET CACHED DIRECTORIES ----------------
- name: Download Vendor Directory
uses: actions/download-artifact@v4
with:
name: vendor-dir
path: vendor/

# INSTALL DEPENDENCIES ----------------
- name: Setup PHP, extensions and composer with shivammathur/setup-php
uses: shivammathur/setup-php@verbose
with:
php-version: ${{ matrix.php-versions }}
tools: composer:2.2
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json

- name: Set executable permissions for PHPStan
run: chmod +x ./vendor/bin/phpstan

# RUN PHPSTAN ----------------
- name: Run PHPStan
run: ./vendor/bin/phpstan analyse src


symfony-tests:
needs: setup
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

# GET CACHED DIRECTORIES ----------------
- name: Download Vendor Directory
uses: actions/download-artifact@v4
with:
name: vendor-dir
path: vendor/

# INSTALL DEPENDENCIES ----------------
- name: Install MySQL Client
run: sudo apt-get update && sudo apt-get install -y mysql-client

- name: Setup PHP, extensions and composer with shivammathur/setup-php
uses: shivammathur/setup-php@verbose
with:
php-version: ${{ matrix.php-versions }}
tools: composer:2.2
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json

# SET ENVIRONMENT VARIABLES ----------------
- name: Set up test environment variables
run: cp .env.test .env

# START SERVICES ----------------
- name: Set up MySQL
uses: getong/[email protected]
with:
host port: 3306 # Optional, default value is 3306. The port of host
container port: 3306 # Optional, default value is 3306. The port of container
character set server: 'utf8mb4' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
collation server: 'utf8mb4_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
mariadb version: '10.4.10' # Optional, default value is "latest". The version of the MySQL
mysql database: 'symfony' # Optional, default value is "test". The specified database which will be created
mysql root password: 'secret' # Required if "mysql user" is empty, default is empty. The root superuser password
mysql user: 'user' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
mysql password: 'password' # Required if "mysql user" exists. The password for the "mysql user"

- name: Wait for MySQL to become available
run: |
until mysql -h 127.0.0.1 -u root -psecret -e "SELECT 1"; do
echo 'Waiting for MySQL...'
sleep 1
done
# RUN MIGRATIONS ----------------
- name: Run migrations
run: php bin/console doctrine:migrations:migrate --no-interaction

# RUN TESTS ----------------
- name: Run unit and functional tests
run: |
php ./vendor/bin/phpunit --configuration phpunit.xml.dist
cypress-tests:
needs: setup
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

# GET CACHED DIRECTORIES ----------------
- name: Download Vendor Directory
uses: actions/download-artifact@v4
with:
name: vendor-dir
path: vendor/

# INSTALL DEPENDENCIES ----------------
- name: Install MySQL Client
run: sudo apt-get update && sudo apt-get install -y mysql-client

- name: Install Cypress dependencies
run: sudo apt-get install -y xvfb libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth

- name: Setup PHP, extensions and composer with shivammathur/setup-php
uses: shivammathur/setup-php@verbose
with:
php-version: ${{ matrix.php-versions }}
tools: composer:2.2
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.11.0'

- name: Install Symfony CLI globally
run: |
curl -sS https://get.symfony.com/cli/installer | bash
sudo mv /home/runner/.symfony5/bin/symfony /usr/local/bin/symfony
# SET ENVIRONMENT VARIABLES ----------------
- name: Set up test environment variables
run: cp .env.test .env

# START SERVICES ----------------
- name: Set up MySQL
uses: getong/[email protected]
with:
host port: 3306 # Optional, default value is 3306. The port of host
container port: 3306 # Optional, default value is 3306. The port of container
character set server: 'utf8mb4' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
collation server: 'utf8mb4_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
mariadb version: '10.4.10' # Optional, default value is "latest". The version of the MySQL
mysql database: 'symfony' # Optional, default value is "test". The specified database which will be created
mysql root password: 'secret' # Required if "mysql user" is empty, default is empty. The root superuser password
mysql user: 'user' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
mysql password: 'password' # Required if "mysql user" exists. The password for the "mysql user"

- name: Wait for MySQL to become available
run: |
until mysql -h 127.0.0.1 -u root -psecret -e "SELECT 1"; do
echo 'Waiting for MySQL...'
sleep 1
done
- name: Start Symfony server
run: symfony server:start --no-tls -d --port=8000

# RUN MIGRATIONS ----------------
- name: Run migrations
run: php bin/console doctrine:migrations:migrate --no-interaction

# FILL DATABASE ----------------
- name: Run fixture
run: php bin/console doctrine:fixtures:load --no-interaction

# BUILD FRONT ----------------
- name : install packages
run: npm install

- name: Enable verbose npm logging
run: npm config set loglevel verbose

- name: Build front-end assets
run: ./node_modules/.bin/encore production --progress

# RUN CYPRESS TESTS ----------------
- name: Run Cypress tests
run: CYPRESS_BASE_URL=http://localhost:8000 npm run cy:test:main


# CHANGE ENV VARIABLES ----------------
- name: Set up test environment variables
run: cp .env.oidc.test .env.test

# START KEYCLOAK ----------------
- name: Start Keycloak
run: |
docker run -d \
--name keycloak \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
-e DB_VENDOR=h2 \
-e KEYCLOAK_IMPORT=/config/realm-export.json \
-v ${{ github.workspace }}/.docker/keycloak/config/realm-export.localhost.json:/config/realm-export.json \
-p 8080:8080 \
--user root \
jboss/keycloak:16.1.1
# Wait for Keycloak to start
- name: Wait for Keycloak to be ready
run: |
until $(curl --output /dev/null --silent --head --fail http://localhost:8080/auth); do
printf '.'
sleep 5
done
# RUN CYPRESS TESTS ----------------
- name: Run Cypress keycloak tests
uses: cypress-io/github-action@v6
with:
start: npm run cy:test:oidc
env:
CYPRESS_BASE_URL: http://localhost:8000
CYPRESS_KEYCLOAK_URL: http://localhost:8080


Loading

0 comments on commit 7628431

Please sign in to comment.