HMS-5287: Add playwright and github action to frontend #37
Workflow file for this run
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
name: build-playwright-test | |
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "**.md" | |
pull_request: | |
paths-ignore: | |
- "**.md" | |
- ".github/workflows/content-sources-actions.yml" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
playwright-tests: | |
runs-on: | |
- codebuild-content-services-frontend-repo-${{ github.run_id }}-${{ github.run_attempt }} | |
- instance-size:medium | |
- buildspec-override:true | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Create front-end .env file | |
run: | | |
# Check if the secrets are set | |
if [ -z "$USER1USERNAME" ]; then | |
echo "Error: USER1USERNAME secret is not set." | |
exit 1 | |
fi | |
if [ -z "$USER1PASSWORD" ]; then | |
echo "Error: USER1PASSWORD secret is not set." | |
exit 1 | |
fi | |
# Create the .env file and write the secrets and other variables to it | |
{ | |
echo "USER1USERNAME=$USER1USERNAME" | |
echo "USER1PASSWORD=$USER1PASSWORD" | |
echo "BASE_URL=https://stage.foo.redhat.com:1337" | |
echo "CI=true" | |
} >> .env | |
echo ".env file created successfully." | |
- name: Get current PR URL | |
id: get-pr-url | |
run: | | |
# Extract the pull request URL from the event payload | |
pr_url=$(jq -r '.pull_request.html_url' < "$GITHUB_EVENT_PATH") | |
echo "Pull Request URL: $pr_url" | |
# Set the PR URL as an output using the environment file | |
echo "pr_url=$pr_url" >> $GITHUB_ENV | |
- name: Get appropriate back-end branch | |
run: | | |
chmod +x .github/workflowScripts/getBackendBranch.sh | |
.github/workflowScripts/getBackendBranch.sh "${{ env.pr_url }}" | |
- name: Compare .nvmrc files | |
id: compare-nvmrc | |
run: | | |
# Get both .nvmrc files | |
backendNvmrc="content-sources-backend/_playwright-tests/.nvmrc" | |
frontendNvmrc=".nvmrc" | |
# Check if both files exist | |
if [ ! -f "$backendNvmrc" ]; then | |
echo "Error: $backendNvmrc does not exist." | |
exit 1 | |
fi | |
if [ ! -f "$frontendNvmrc" ]; then | |
echo "Error: $frontendNvmrc does not exist." | |
exit 1 | |
fi | |
# Compare the contents of the two files | |
if ! cmp -s "$backendNvmrc" "$frontendNvmrc"; then | |
echo "Error: The .nvmrc files are not the same." | |
exit 1 | |
fi | |
echo "The .nvmrc versions are the same!" | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: ".nvmrc" | |
- name: Cache - API-test node_modules | |
if: always() | |
uses: actions/cache@v4 | |
with: | |
path: content-sources-backend/_playwright-tests/node_modules | |
key: ${{ runner.os }}-api-node-modules-${{ hashFiles('content_sources_backend/_playwright-tests/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-api-node-modules- | |
- name: Cache - node_modules | |
if: always() | |
uses: actions/cache@v4 | |
with: | |
path: | | |
node_modules | |
dist | |
key: ${{ runner.os }}-frontend-node-modules-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-frontend-node-modules- | |
- name: Cache - Backend compose files | |
if: always() | |
uses: actions/cache@v4 | |
with: | |
path: | | |
content-sources-backend/release | |
key: ${{ runner.os }}-compose-${{ hashFiles('content-sources-backend/compose_files/pulp/docker-compose.yml') }}-${{ hashFiles('content_sources_backend/compose_files/candlepin/Dockerfile') }} | |
restore-keys: | | |
${{ runner.os }}-compose- | |
- name: Cache Playwright browsers | |
if: always() | |
id: cache-playwright-browsers | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/ms-playwright | |
key: ${{ runner.os }}-playwright-${{ hashFiles('playwright.config.ts') }} | |
restore-keys: | | |
${{ runner.os }}-playwright- | |
- name: Install front-end dependencies | |
run: yarn install | |
- name: Build front-end FEC container | |
run: | | |
yarn build | |
- name: Increase file watchers limit | |
run: | | |
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p | |
- name: Update /etc/hosts | |
run: | | |
sudo npm run patch:hosts | |
- name: Install front-end Playwright Browsers | |
run: yarn playwright install --with-deps | |
- name: Start front-end server | |
run: | | |
BACKEND_PORT=8000 yarn start:stage & | |
npx wait-on https://localhost:1337 | |
- name: Run get_go_version.sh script | |
working-directory: content-sources-backend | |
id: get-go-version | |
run: | | |
chmod +x ./scripts/get_go_version.sh | |
GO_VERSION=$(./scripts/get_go_version.sh ./go.mod) | |
echo "go-version=$GO_VERSION" >> $GITHUB_OUTPUT | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: "${{ steps.get-go-version.outputs.go-version }}" | |
- name: Set up Make | |
working-directory: content-sources-backend | |
run: | | |
sudo apt-get install make | |
- name: Copy the example config | |
working-directory: content-sources-backend | |
run: | | |
cp ./configs/config.yaml.example ./configs/config.yaml | |
- name: Backend compose-up | |
working-directory: content-sources-backend | |
run: make compose-down compose-clean compose-up | |
- name: Backend run | |
working-directory: content-sources-backend | |
run: make run & | |
- name: Wait for backend to be ready | |
run: | | |
chmod +x .github/workflowScripts/waitForBackend.sh | |
.github/workflowScripts/waitForBackend.sh | |
- name: Run front-end Playwright tests | |
run: yarn playwright test | |
# continue-on-error: true | |
- name: Publish front-end Test Report | |
uses: ctrf-io/github-test-reporter@v1 | |
with: | |
report-path: "./playwright-ctrf/playwright-ctrf.json" | |
if: always() | |
- name: Store front-end Test report | |
uses: actions/upload-artifact@v4 | |
if: ${{ !cancelled() }} | |
with: | |
name: playwright-ctrf-frontend | |
path: ./playwright-ctrf | |
retention-days: 10 | |
- name: Create backend .env file | |
working-directory: content-sources-backend/_playwright-tests | |
run: | | |
echo "BASE_URL=http://127.0.0.1:8000" >> .env | |
echo "TOKEN=apple" >> .env | |
echo "CI=true" >> .env | |
- name: Install API playwright and dependencies | |
working-directory: content-sources-backend/_playwright-tests | |
run: yarn install | |
- name: Install Playwright Browsers | |
working-directory: content-sources-backend/_playwright-tests | |
run: yarn playwright install --with-deps | |
- name: Run API Playwright tests | |
working-directory: content-sources-backend/_playwright-tests | |
run: yarn playwright test | |
# continue-on-error: true | |
- name: Publish API Test Report | |
uses: ctrf-io/github-test-reporter@v1 | |
with: | |
report-path: "./content-sources-backend/_playwright-tests/playwright-ctrf/playwright-ctrf.json" | |
if: always() | |
- name: Store API Test report | |
uses: actions/upload-artifact@v4 | |
if: ${{ !cancelled() }} | |
with: | |
name: playwright-ctrf-backend | |
path: ./content-sources-backend/_playwright-tests/playwright-ctrf | |
retention-days: 10 |