Ravs 1094 automate reports feature (#33) #460
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: RAVS TESTS - DEV | |
on: | |
push: | |
branches: | |
- '**' # Triggers on push to any branch | |
pull_request: | |
branches: | |
- '**' # Triggers on PR to any branch | |
schedule: | |
- cron: "30 7 * * *" | |
workflow_dispatch: | |
jobs: | |
build-and-test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Stop and remove all containers | |
run: | | |
docker stop $(docker ps -q) || true | |
docker rm $(docker ps -aq) || true | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build the Docker image | |
run: docker build -t playwright-tests -f Docker/tests.dockerfile . | |
- name: Run Docker container | |
id: run-container | |
run: | | |
docker run -d --name playwright-tests \ | |
--memory 8g \ | |
-e RAVS_PASSWORD="${{ secrets.RAVS_PASSWORD }}" \ | |
-e HEADLESS_MODE="true" \ | |
-e TEST_ENVIRONMENT="dev" \ | |
-e BROWSER="edge" \ | |
-e MARKER="" \ | |
-e AGENTS=3 \ | |
-p 5050:5050 \ | |
playwright-tests | |
while true; do | |
if docker logs playwright-tests 2>&1 | grep -q "Server started "; then | |
echo "Report successfully generated." | |
break | |
else | |
echo "Waiting for the Allure report to be generated..." | |
sleep 5 | |
fi | |
done | |
- name: Start Docker container | |
run: | | |
docker start playwright-tests | |
sleep 5 | |
- name: Find and upload Allure report directory | |
run: | | |
container_id=$(docker ps -qf "name=playwright-tests") | |
echo "Container ID: $container_id" | |
allure_directory=$(docker exec $container_id find / -path /proc -prune -o -type d -name "allure-report" -print -quit) | |
echo "Allure Directory: $allure_directory" | |
if [[ -n "$allure_directory" ]]; then | |
echo "ALLURE_DIRECTORY=$allure_directory" >> $GITHUB_ENV | |
# Create a temporary directory to store the contents | |
temp_dir="$(mktemp -d)" | |
echo "Temporary Directory: $temp_dir" | |
# Copy the contents of allure_directory to the temporary directory | |
docker cp "$container_id":"$allure_directory"/. "$temp_dir" | |
# Archive the contents of the temporary directory | |
(cd "$(dirname "$temp_dir")" && tar -czf allure-report.tar.gz -C "$(basename "$temp_dir")" .) | |
# Set the path of Allure report archive as output | |
echo "::set-output name=allure_report_archive::$(realpath "$(dirname "$temp_dir")/allure-report.tar.gz")" | |
# Set the environment variable for the archive path | |
export ALLURE_REPORT_ARCHIVE=$(realpath "$(dirname "$temp_dir")/allure-report.tar.gz") | |
echo "ALLURE_REPORT_ARCHIVE=$ALLURE_REPORT_ARCHIVE" >> $GITHUB_ENV | |
# Check if tar was generated successfully | |
if [ $? -eq 0 ]; then | |
echo "Tar archive generated successfully." | |
# Echo the path of the tar file | |
echo "Path of the tar file: $ALLURE_REPORT_ARCHIVE" | |
# List the contents of the tar file | |
tar -tf "$ALLURE_REPORT_ARCHIVE" | |
else | |
echo "Failed to generate tar archive." | |
fi | |
else | |
echo "Allure directory not found or is empty." | |
fi | |
- name: Upload Allure report archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: allure-report | |
path: ${{ env.ALLURE_REPORT_ARCHIVE }} | |
- name: Retrieve and extract Allure report artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: allure-report | |
path: allure-report | |
- name: List contents of the downloaded artifact | |
run: | | |
ls -l allure-report | |
- name: Unzip the tar file | |
run: | | |
tar -xzvf allure-report/allure-report.tar.gz -C allure-report | |
- name: List contents after unzipping | |
run: | | |
ls -l allure-report | |
# Move the Allure report files to the root of the gh-pages directory | |
- name: Move Allure report files | |
run: | | |
mv allure-report/* . | |
- name: Upload Attachments | |
uses: actions/upload-artifact@v3 | |
with: | |
name: screenshots | |
path: data/attachments/** | |
if-no-files-found: warn | |
include-hidden-files: false | |
- name: Get branch name | |
id: get_branch_name | |
run: echo "BRANCH_NAME=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV | |
- name: Set destination branch for GitHub Pages | |
id: set-destination-branch | |
run: echo "DESTINATION_BRANCH=gh-pages-${{ env.BRANCH_NAME }}" >> $GITHUB_ENV | |
- name: Deploy Allure report to GitHub Pages | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: . | |
destination_branch: gh-pages-dev | |
- name: Check contents of gh-pages | |
run: ls -la | |
- name: Get GitHub Pages URL | |
id: pages-url | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const repo = context.repo.repo; | |
const owner = context.repo.owner; | |
const branchName = context.ref.split('/').pop(); // Use the branch name you want to reference | |
const pagesUrl = `https://${owner}.github.io/${repo}/gh-pages-${branchName}`; // Use backticks for template literals | |
core.setOutput('pages_url', pagesUrl); | |
- name: Output GitHub Pages URL | |
run: | | |
echo "GitHub Pages URL: ${{ steps.pages-url.outputs.pages_url }}" | |
- name: Clean up | |
run: docker stop $(docker ps -q) || true | |
- name: Notify Slack on success | |
if: success() | |
run: | | |
BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||') | |
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"Ravs tests finished running for the DEV environment on branch $BRANCH_NAME! Check the Allure report: https://nhsdigital.github.io/ravs-tests/#\"}" ${{ secrets.SLACK_WEBHOOK_URL }} |