Skip to content

Cuc 725 fix then website #675

Cuc 725 fix then website

Cuc 725 fix then website #675

name: Start Docker Stack
on:
pull_request:
types:
- opened
- synchronize
jobs:
start-docker-stack:
name: (Node.js ${{ matrix.node-version }}) - Start Docker Stack
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Create .env file backend
run: |
echo "DATABASE_URI=${{secrets.DB_URI}}" > backend/.env
echo "EMAIL_AUTH=${{secrets.EMAIL_AUTH}}" >> backend/.env
echo "EMAIL_PW=${{secrets.EMAIL_PW}}" >> backend/.env
echo "EMAIL_PORT=${{secrets.EMAIL_PORT}}" >> backend/.env
echo "EMAIL_HOST=${{secrets.EMAIL_HOST}}" >> backend/.env
echo "FRONTEND_URL=${{secrets.FRONTEND_URL}}" >> backend/.env
echo "GITHUB_CLIENT_SECRET=${{secrets.G_CLIENT_SECRET}}" >> backend/.env
echo "GITHUB_CLIENT_ID=${{secrets.G_CLIENT_ID}}" >> backend/.env
echo "PASSPORT_GITHUB_LOCAL_PW_FIELD=${{secrets.PASSPORT_GITHUB_LOCAL_PW_FIELD}}" >> backend/.env
- name: Create .env file frontend
run: |
echo "API_SERVER=${{secrets.API_SERVER}}" > frontend/.env
echo "GITHUB_CLIENT_ID=${{secrets.G_CLIENT_ID}}" >> frontend/.env
echo "EMAIL_PW=${{secrets.EMAIL_PW}}" >> frontend/.env
echo "VERSION=SET" >> frontend/.env
- name: Build and start Docker stack
env:
NODE_VERSION: ${{ matrix.node-version }}
run: |
docker compose -f docker-test.yml build \
--build-arg NODE_VERSION=$NODE_VERSION
docker compose -f docker-test.yml up -d
- name: Send failure notification
if: ${{ failure() }}
uses: ./actions/fullReport
with:
prnumber: ${{ github.event.pull_request.number }}
originBranch: ${{ github.event.pull_request.head.ref }}
destinationBranch: ${{ github.event.pull_request.base.ref }}
requestor: ${{ github.event.pull_request.user.login }}
date: ${{ github.event.pull_request.created_at }}
description: ${{ github.event.pull_request.body }}
dockerStatus: "failed"
workflowLink: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
webhook: ${{ secrets.MS_TEAMS_WEBHOOK_URI }}
- name: Wait for 1/2 minute
run: sleep 30
# Execute npm test in the backend container
- name: Run npm test backend
run: |
docker exec Seed-backend npm test > testResultsBackend.txt 2>&1
continue-on-error: true
- name: Clean up the result backend
run: |
awk '/Test Suites:/{flag=1; print; next} /Ran all test suites\./{flag=0} flag' testResultsBackend.txt > cleanResultsBackend.txt
echo "" >> cleanResultsBackend.txt
printf "$(cat cleanResultsBackend.txt)" > cleanResultsBackend.txt
- name: Get passed, failed and total backend
run: |
passed=$(awk '/Tests:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsBackend.txt)
failed=$(awk '/Tests:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsBackend.txt)
echo "passedTests=${passed}" >> "${GITHUB_OUTPUT}"
echo "failedTests=${failed}" >> "${GITHUB_OUTPUT}"
passedSuites=$(awk '/Suites:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsBackend.txt)
failedSuites=$(awk '/Suites:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsBackend.txt)
echo "passedSuites=${passedSuites}" >> ${GITHUB_OUTPUT}
echo "failedSuites=${failedSuites}" >> ${GITHUB_OUTPUT}
bottomText=$(awk '/Snapshots:/{flag=1;print}/^$/{flag=0}flag' cleanResultsBackend.txt | tr -d '\n')
echo "bottomText=${bottomText}" >> ${GITHUB_OUTPUT}
id: passed-total-backend
- name: Upload Artifact Backend
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v4
with:
name: test-results-backend-${{ matrix.node-version }}
path: testResultsBackend.txt
# Execute npm test in the frontend container
- name: Run npm test frontend
run: |
docker exec Seed-frontend npm test > testResultsFrontend.txt 2>&1
continue-on-error: true
- name: Clean up the result frontend
run: |
awk '/Test Suites:/{flag=1; print; next} /Ran all test suites\./{flag=0} flag' testResultsFrontend.txt > cleanResultsFrontend.txt
echo "" >> cleanResultsFrontend.txt
printf "$(cat cleanResultsFrontend.txt)" > cleanResultsFrontend.txt
- name: Get passed and total frontend
run: |
passed=$(awk '/Tests:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsFrontend.txt)
failed=$(awk '/Tests:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsFrontend.txt)
echo "passedTests=${passed}" >> "${GITHUB_OUTPUT}"
echo "failedTests=${failed}" >> "${GITHUB_OUTPUT}"
passedSuites=$(awk '/Suites:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsFrontend.txt)
failedSuites=$(awk '/Suites:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' cleanResultsFrontend.txt)
echo "passedSuites=${passedSuites}" >> ${GITHUB_OUTPUT}
echo "failedSuites=${failedSuites}" >> ${GITHUB_OUTPUT}
bottomText=$(awk '/Snapshots:/{flag=1;print}/^$/{flag=0}flag' cleanResultsFrontend.txt | tr -d '\n')
echo "bottomText=${bottomText}" >> ${GITHUB_OUTPUT}
id: passed-total-frontend
- name: Upload Artifact Frontend
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v4
with:
name: test-results-frontend-${{ matrix.node-version }}
path: testResultsFrontend.txt
# SANITY CHECK
- name: Send sanity POST request and store response
env:
API_URL: localhost:8080/api/sanity/test/${{ secrets.SANITY_REPO_ID }}/${{ secrets.SANITY_GROUP_ID }}
run: |
curl -X POST -H 'Content-Type: application/json' -d '{"email": "${{ secrets.SEED_EMAIL }}", "password": "${{ secrets.SEED_PW }}", "stayLoggedIn": true, "repository": "Seed-Test", "source": "db"}' "$API_URL" > sanityReport.txt
- name: print sanity
run: |
echo $(cat sanityReport.txt)
- name: Get passed and total sanity
run: |
passed=$(awk '/Steps:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' sanityReport.txt)
failed=$(awk '/Steps:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' sanityReport.txt)
skipped=$(awk '/Steps:/ { match($0, /[0-9]+ skipped/); print substr($0, RSTART, RLENGTH-8) }' sanityReport.txt)
echo "passedSteps=${passed}" >> "${GITHUB_OUTPUT}"
echo "failedSteps=${failed}" >> "${GITHUB_OUTPUT}"
echo "skippedSteps=${skipped}" >> "${GITHUB_OUTPUT}"
passedScenarios=$(awk '/Scenarios:/ { match($0, /[0-9]+ passed/); print substr($0, RSTART, RLENGTH-7) }' sanityReport.txt)
failedScenarios=$(awk '/Scenarios:/ { match($0, /[0-9]+ failed/); print substr($0, RSTART, RLENGTH-7) }' sanityReport.txt)
echo "passedScenarios=${passedScenarios}" >> ${GITHUB_OUTPUT}
echo "failedScenarios=${failedScenarios}" >> ${GITHUB_OUTPUT}
bottomText=bottomText=$(awk '/Snapshots:/{flag=1;next}/^$/{flag=0}flag' sanityReport.txt | tr -d '\n')
echo "bottomText=${bottomText}" >> ${GITHUB_OUTPUT}
id: passed-total-sanity
- name: Upload Artifact Sanity
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v4
with:
name: sanity-report-${{ matrix.node-version }}
path: |
sanityReport.txt
# SEND FULL REPORT
- name: Send Teams Message
uses: ./actions/fullReport
with:
prnumber: ${{ github.event.pull_request.number }}
prlink: ${{ github.event.pull_request.html_url }}
originBranch: ${{ github.event.pull_request.head.ref }}
destinationBranch: ${{ github.event.pull_request.base.ref }}
requestor: ${{ github.event.pull_request.user.login }}
date: ${{ github.event.pull_request.created_at }}
description: ${{ github.event.pull_request.body }}
dockerStatus: "success"
frontendSuitsPassed: ${{ steps.passed-total-frontend.outputs.passedSuites }}
frontendSuitsFailed: ${{ steps.passed-total-frontend.outputs.failedSuites }}
frontendTestsPassed: ${{ steps.passed-total-frontend.outputs.passedTests }}
frontendTestsFailed: ${{ steps.passed-total-frontend.outputs.failedTests }}
frontendBottomText: ${{ steps.passed-total-frontend.outputs.bottomText }}
backendSuitsPassed: ${{ steps.passed-total-backend.outputs.passedSuites }}
backendSuitsFailed: ${{ steps.passed-total-backend.outputs.failedSuites }}
backendTestsPassed: ${{ steps.passed-total-backend.outputs.passedTests }}
backendTestsFailed: ${{ steps.passed-total-backend.outputs.failedTests }}
backendBottomText: ${{ steps.passed-total-backend.outputs.bottomText }}
sanityScenariosPassed: ${{ steps.passed-total-sanity.outputs.passedScenarios }}
sanityScenariosFailed: ${{ steps.passed-total-sanity.outputs.failedScenarios }}
sanityStepsPassed: ${{ steps.passed-total-sanity.outputs.passedSteps }}
sanityStepsFailed: ${{ steps.passed-total-sanity.outputs.failedSteps }}
sanityStepsSkipped: ${{ steps.passed-total-sanity.outputs.skippedSteps }}
workflowLink: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
webhook: ${{ secrets.MS_TEAMS_WEBHOOK_URI }}