fix: link to test preview #1827
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: Validate | |
on: | |
pull_request: | |
branches: [main] | |
push: | |
branches: main | |
env: | |
DOCKER_APP_IMAGE_NAME: 'ghcr.io/hasadna/open-bus-map-search/open-bus-map-search' | |
DOCKER_APP_IMAGE_TAG: 'latest' | |
jobs: | |
local-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: make sure no yarn.json is added | |
run: | | |
if [ -f yarn.json ]; then | |
echo "::error file=yarn.json::yarn.json is being added" | |
exit 1 | |
fi | |
- name: make sure no package-lock.json is removed | |
run: | | |
if [ ! -f package-lock.json ]; then | |
echo "::error file=package-lock.json::package-lock.json is being removed" | |
exit 1 | |
fi | |
- name: make sure package-lock.json is updated | |
run: | | |
if ! npm ci; then | |
echo "::error file=package-lock.json::package-lock.json is not updated" | |
exit 1 | |
fi | |
- name: lint | |
run: npm run lint | |
- name: madge | |
run: npx madge --extensions js,ts --circular . | |
- name: unit tests | |
run: npm run test:unit | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Get Commit Hash and generate Version File | |
run: echo "$(git rev-parse --short HEAD)" >> public/hash.txt | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and Export Docker image | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
tags: ${{ env.DOCKER_APP_IMAGE_NAME }}:${{ env.DOCKER_APP_IMAGE_TAG }} | |
outputs: type=docker, dest=/tmp/docker-image.tar | |
- name: Save Docker image | |
uses: actions/upload-artifact@v4 | |
with: | |
name: docker-image | |
path: /tmp/docker-image.tar | |
test: | |
runs-on: ubuntu-22.04 | |
needs: build | |
env: | |
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} | |
APPLITOOLS_LOG_DIR: ./logs | |
APPLITOOLS_SHOW_LOGS: true | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: docker-image | |
path: /tmp | |
- name: Load image | |
run: docker load -i /tmp/docker-image.tar | |
- name: Run application | |
run: docker run -d -p 3000:80 ${{ env.DOCKER_APP_IMAGE_NAME }}:${{ env.DOCKER_APP_IMAGE_TAG }} | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Validate hash.txt file | |
run: | | |
response=$(curl -s -w "%{http_code}" -o /tmp/hash.txt http://localhost:3000/hash.txt) | |
http_code=${response: -3} | |
if [ "$http_code" -ne 200 ]; then | |
echo "Error: HTTP request failed with status code $http_code" | |
exit 1 | |
fi | |
mime_type=$(file --mime-type -b /tmp/hash.txt) | |
if [ "$mime_type" != "text/plain" ]; then | |
echo "Error: hash.txt does not have MIME type text/plain. Found: $mime_type" | |
exit 1 | |
fi | |
content_length=$(wc -c < /tmp/hash.txt | xargs) | |
if [ "$content_length" -ge 100 ]; then | |
echo "Error: hash.txt content exceeds 100 characters. Length: $content_length" | |
exit 1 | |
fi | |
echo "hash.txt is valid with MIME type $mime_type and length $content_length characters." | |
- name: Run install | |
run: npm ci | |
- run: npx playwright install | |
- name: Run test | |
run: npm test | |
- name: Run Storybook tests | |
if: env.APPLITOOLS_API_KEY | |
run: npx -y @applitools/eyes-storybook --storybook-url http://localhost:3000/storybook/index.html | |
- name: Prepare playwright artifact directory | |
if: always() | |
run: | | |
mkdir -p playwright-artifact | |
cp -r test-results/* playwright-artifact/ | |
cp -r playwright-report/* playwright-artifact/ | |
- name: upload combined playwright artifact | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: playwright | |
path: playwright-artifact | |
- name: upload logs if exists | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs | |
path: logs | |
if-no-files-found: warn | |
publish-test-results: | |
runs-on: ubuntu-latest | |
needs: test | |
if: always() && github.event.repository.fork == false && github.actor != 'dependabot[bot]' | |
env: | |
AWS_KEY_ID: ${{ secrets.AWS_KEY_ID }} | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: playwright | |
path: test-results | |
- uses: shallwefootball/s3-upload-action@master | |
name: Publish test results | |
if: always() && ${{ env.AWS_KEY_ID }} | |
id: s3-trace | |
continue-on-error: true | |
with: | |
aws_key_id: ${{env.AWS_KEY_ID}} | |
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}} | |
aws_bucket: noam-gaash.co.il | |
source_dir: test-results | |
destination_dir: ${{ github.event.pull_request.number }}/open-bus/${{ github.event.pull_request.number }}-sha-${{ github.sha }}/test-results | |
- name: Set test results | |
uses: myrotvorets/set-commit-status-action@master | |
if: always() && ${{ env.AWS_KEY_ID }} | |
with: | |
sha: ${{ github.sha }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
description: 'Playwright html report with traces' | |
status: ${{needs.test.result}} | |
context: 'Test results' | |
targetUrl: 'https://s3.amazonaws.com/noam-gaash.co.il/${{ github.event.pull_request.number }}/open-bus/${{ github.event.pull_request.number }}-sha-${{ github.sha }}/test-results/index.html' | |
build-outside-docker: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Run install | |
run: npm ci | |
- name: build | |
run: npm run build | |
- name: build storybook | |
run: npm run build-storybook | |
all-passed: | |
runs-on: ubuntu-latest | |
needs: [local-tests, test] | |
steps: | |
- name: All passed | |
run: echo "All passed" | |
- name: Generate PULL_REQUEST and UNIQUE_ID Variables | |
run: | | |
# Generate variables dynamically based on pull request context or commit SHA. | |
PULL_REQUEST=${{ github.event.pull_request.number || 'undefined' }} | |
UNIQUE_ID="pr-${{ github.event.pull_request.number || 'undefined' }}-sha-${{ github.sha }}" | |
# Debug: Print the variables to verify they are set correctly | |
echo "PULL_REQUEST=$PULL_REQUEST" | |
echo "UNIQUE_ID=$UNIQUE_ID" | |
# Save variables to a file to be used as an artifact. | |
echo "PULL_REQUEST=$PULL_REQUEST" > vars.env | |
echo "UNIQUE_ID=$UNIQUE_ID" >> vars.env | |
- name: Upload Variables as Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pr-vars # Artifact containing the variables. | |
path: vars.env |