-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat: Playwright testing for boilerplate (#171)
* Playwright testing * Change name * Change job trigger * Fix core checkout * Require image to be built before calling playwright * Add core metadata (#172) * Metadata * Revert field overrides * Install develop core for other branches * Add build arg to x64 image * Only trigger playwright on PR's
- Loading branch information
1 parent
e203222
commit 1ef1c06
Showing
4 changed files
with
292 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,255 @@ | ||
name: Playwright | ||
on: | ||
workflow_dispatch: | ||
workflow_call: | ||
|
||
env: | ||
DB_HOST: mysql-8 | ||
DB_PORT: 3306 | ||
DB_USERNAME: cmfive_test | ||
DB_PASSWORD: cmfive_test | ||
DB_DATABASE: cmfive_test | ||
|
||
jobs: | ||
|
||
playwright: | ||
# Steps: Checkout the code, Pull Docker image from PR (eg ghcr.io/2pisoftware/cmfive:pr-123), Run docker container, Run playwright tests | ||
name: Playwright | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
# Set Boilerplate variables by determing which image and branch to use | ||
- name: Set Vars | ||
id: vars | ||
run: | | ||
# Set the boilerplate image to the current PR | ||
echo "BOILERPLATE_IMAGE=ghcr.io/2pisoftware/cmfive:pr-${{ github.event.pull_request.number }}" >> $GITHUB_ENV | ||
# Set the core branch to use for tests | ||
if [ "${{ github.ref }}" == "refs/heads/master" ] || [ "${{ github.event.pull_request.base.ref }}" == "master" ]; then | ||
# Base branch or current branch of boilerplate is master | ||
echo "CORE_BRANCH=main" >> $GITHUB_ENV | ||
else | ||
echo "CORE_BRANCH=develop" >> $GITHUB_ENV | ||
fi | ||
# Checkout the boilerplate | ||
- name: Checkout boilerplate | ||
uses: actions/checkout@v4 | ||
with: | ||
path: boilerplate | ||
|
||
# Checkout core | ||
- name: Checkout core | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: '2pisoftware/cmfive-core' | ||
ref: ${{ env.CORE_BRANCH }} | ||
path: core | ||
|
||
# Pull the boilerplate image and MySQL 8 | ||
- name: Pull Docker images | ||
run: | | ||
docker pull $BOILERPLATE_IMAGE | ||
docker pull mysql:8 | ||
# Start cosine and MySQL 8 containers | ||
- name: Start containers | ||
run: | | ||
# Link system dir | ||
cd boilerplate | ||
ln -s ../core/system system | ||
# Change owner | ||
sudo chown -R 1000:1000 . | ||
# Create docker network | ||
echo "Setting up docker" | ||
docker network create cmfive | ||
# Create MySQL 8 container | ||
echo "Starting MySQL 8" | ||
docker run --name mysql-8 -d -p 3306:3306 \ | ||
-e MYSQL_ROOT_PASSWORD=root \ | ||
-e MYSQL_DATABASE=$DB_DATABASE \ | ||
-e MYSQL_USER=$DB_USERNAME \ | ||
-e MYSQL_PASSWORD=$DB_PASSWORD \ | ||
--network=cmfive \ | ||
mysql:8 | ||
# Wait for MySQL to start | ||
echo "Waiting for MySQL to start" | ||
time=0 | ||
while ! docker exec mysql-8 mysqladmin ping -u$DB_USERNAME -p$DB_PASSWORD --silent; do | ||
sleep 1 | ||
time=$((time+1)) | ||
if [ $time -gt 60 ]; then | ||
echo "MySQL failed to start" | ||
exit 1 | ||
fi | ||
done | ||
# Create Cmfive container | ||
echo "Starting Cmfive" | ||
docker run --name cmfive -d -p 3000:80 \ | ||
-v ${{ github.workspace }}/boilerplate/.codepipeline/test_agent/configs/test_agent-config.php:/var/www/html/config.php:rw \ | ||
-v ${{ github.workspace }}/boilerplate/test:/var/www/html/test:rw \ | ||
-v ${{ github.workspace }}/boilerplate/storage:/var/www/html/storage:rw \ | ||
-e DB_HOST=mysql-8 \ | ||
-e DB_USERNAME=$DB_USERNAME \ | ||
-e DB_PASSWORD=$DB_PASSWORD \ | ||
-e DB_DATABASE=$DB_DATABASE \ | ||
-e ENVIRONMENT=development \ | ||
--network=cmfive \ | ||
$BOILERPLATE_IMAGE | ||
# Note: system is mounted to a volume to avoid conflicts with the symlink | ||
# Wait for cmfive healthcheck to be healthy | ||
echo "Waiting for Cmfive to start" | ||
time=0 | ||
while [ "$(docker inspect -f '{{.State.Health.Status}}' cmfive)" != "healthy" ]; do | ||
sleep 1 | ||
time=$((time+1)) | ||
if [ $time -gt 60 ]; then | ||
echo "Cmfive failed to start" | ||
exit 1 | ||
fi | ||
done | ||
# Pre-requisites Prepare Cmfive Environment | ||
- name: Setup cmfive Test Environment | ||
run: | | ||
docker exec -t cmfive sh -c "chmod -R ugo=rwX /var/www/html*" | ||
- name: Inject configs into cmfive Test Environment | ||
run: | | ||
echo "Inheriting test_agent config from PIPELINE" | ||
# Define extra config | ||
CONFIG=' | ||
Config::append(\"tests\", [\"testrunner\" => \"ENABLED\"]); | ||
' | ||
# Write extra config to cmfive container | ||
docker exec -t cmfive sh -c "echo \"$CONFIG\" >> /var/www/html/config.php" | ||
- name: Install dev tools | ||
env: | ||
CONTAINER: cmfive | ||
run: | | ||
if [ -f ./boilerplate/.codepipeline/docker/install_dev_tools.sh ]; then | ||
./boilerplate/.codepipeline/docker/install_dev_tools.sh | ||
else | ||
echo "⚠️ WARNING: could not find dev tools in boilerplate" | ||
fi | ||
- name: Prepare cmfive Test DB | ||
run: | | ||
docker exec -t cmfive sh -c "DB_HOST=mysql-8 DB_USERNAME=root DB_PASSWORD=root DB_DATABASE=$DB_DATABASE DB_PORT=3306 php cmfive.php testDB setup; exit \$?"; | ||
# Setup Node | ||
- uses: actions/setup-node@v4 | ||
with: | ||
node-version: 20 | ||
|
||
# Run Unit Tests | ||
- name: "Run unit tests" | ||
run: | | ||
docker exec -u root cmfive chmod -R ugo=rwX /var/www/html/test/ | ||
docker exec -u cmfive cmfive sh -c "DB_HOST=mysql-8 DB_USERNAME=$DB_USERNAME DB_PASSWORD=$DB_PASSWORD DB_DATABASE=$DB_DATABASE DB_PORT=3306 php cmfive.php tests unit all; exit \$?" | ||
if [ $? -gt 0 ]; then | ||
echo "Admin module tests failed" | ||
fi | ||
# Setup playwright | ||
- name: Setup Playwright | ||
run: | | ||
echo "Installing Playwright" | ||
cd boilerplate/test/playwright | ||
npm ci | ||
npx playwright install --with-deps | ||
- name: "Run admin module tests" | ||
run: | | ||
docker exec -u root cmfive sh -c "chmod ugo=rwX -R /var/www/html/system/modules/admin/install/migrations/" | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="admin" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Admin module tests failed" | ||
fi | ||
- name: "Run channel module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="channel" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Channel module tests failed" | ||
fi | ||
- name: "Run form module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="form" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Form module tests failed" | ||
fi | ||
- name: "Run report module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="report" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Report module tests failed" | ||
fi | ||
- name: "Run tag module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="tag" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Tag module tests failed" | ||
fi | ||
- name: "Run task module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="task" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Task module tests failed" | ||
fi | ||
- name: "Run timelog module tests" | ||
run: | | ||
cd boilerplate/test/playwright | ||
npm run build | ||
npm run test --module="timelog" --reporter="github" | ||
if [ $? -gt 0 ]; then | ||
echo "Timelog module tests failed" | ||
fi | ||
- name: Get container logs | ||
if: ${{ failure() }} || ${{ success() }} | ||
run: | | ||
docker logs cmfive | sudo tee cmfive_container.log | ||
- name: Stop containers | ||
# the containers should be stopped regardless of | ||
# the test result | ||
if: always() | ||
run: | | ||
docker rm cmfive -f | ||
docker rm mysql-8 -f | ||
docker network rm cmfive | ||
# Store Test Results | ||
- name: Test results | ||
if: ${{ failure() }} || ${{ success() }} | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: test-output-${{matrix.node_version}} | ||
path: | | ||
boilerplate/test/Codeception/tests/_output/ | ||
boilerplate/storage/log/ | ||
boilerplate/test/playwright/test-results/ | ||
boilerplate/test/playwright/playwright-report/ | ||
cmfive_container.log | ||
retention-days: 5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters