🩺 Quality assurance checks on 🌱 main #16
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: Checks | |
run-name: 🩺 Quality assurance checks on ${{ github.event_name == 'pull_request' && 'PR' || '🌱' }} ${{ github.event_name == 'pull_request' && github.event.number || github.ref_name }} | |
env: | |
NODE_VERSION: 18.16.1 | |
TEST_HIDE_CONSOLE: true | |
# This workflow runs for Pull Requests which are not draft, | |
# as well as commits going to the default branch | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: [opened, synchronize, ready_for_review] | |
# Only allow concurrent checks on the main branch to keep history | |
# on QA checks | |
concurrency: | |
group: checks-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref_name != 'main' }} | |
jobs: | |
format-lint-test: | |
if: github.event.pull_request.draft == false | |
name: Format check, lint, unit tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
fetch-depth: 0 | |
- name: Use Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Derive appropriate SHAs for base and head for `nx affected` commands | |
uses: nrwl/nx-set-shas@v2 | |
with: | |
main-branch-name: 'main' | |
- run: npm ci | |
- run: npx nx format:check | |
- run: npx nx affected -t lint --parallel=3 | |
- run: npx nx affected -t test --parallel=3 --configuration=ci --ci --codeCoverage --coverageReporters=lcov | |
- name: Coveralls | |
uses: coverallsapp/github-action@v2 | |
with: | |
allow-empty: true | |
# - name: Archive Code Coverage Results (on main) | |
# if: github.event_name != 'pull_request' | |
# uses: actions/upload-artifact@v2 | |
# with: | |
# name: code-coverage-report | |
# path: ./coverage/**/coverage-summary.json | |
# if-no-files-found: error | |
# | |
# - name: Create Code Coverage Badge (on PR) | |
# if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' | |
# uses: dkhunt27/nx-code-coverage@v1 | |
# with: | |
# github-token: ${{ secrets.GITHUB_TOKEN }} | |
# coverage-folder: ./coverage | |
# coverage-base-folder: ./coverage-base | |
# gist-token: ${{ secrets.COVERAGE_GIST_TOKEN }} | |
# gist-id: c759fcfd4e71c8853beedbe1785fc081 | |
# color: green | |
# named-logo: jest | |
# no-coverage-ran: false | |
build-affected: | |
if: github.event.pull_request.draft == false | |
name: Attempt to build affected apps | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
fetch-depth: 0 | |
- name: Use Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Derive appropriate SHAs for base and head for `nx affected` commands | |
uses: nrwl/nx-set-shas@v2 | |
with: | |
main-branch-name: 'main' | |
- run: npm ci | |
- run: npx nx affected -t build --parallel=3 | |
affected-recap: | |
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' | |
name: Print affected libs and apps | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
fetch-depth: 0 | |
- name: Use Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Derive appropriate SHAs for base and head for `nx affected` commands | |
uses: nrwl/nx-set-shas@v3 | |
- name: Install dependencies | |
run: npm ci | |
- name: Compute affected projects | |
run: | | |
echo "AFFECTED_LIBS=$(npx nx print-affected --type=lib --select=projects | awk 'BEGIN {RS = ", "; ORS = ", "} \ | |
{ print "`"$1"`" }')" >> $GITHUB_ENV | |
- name: Compute affected apps | |
run: | | |
echo "AFFECTED_APPS=$(npx nx print-affected --type=app --select=projects | awk 'BEGIN {RS = ", "; ORS = ", "} \ | |
{ print "`"$1"`" }')" >> $GITHUB_ENV | |
- name: add PR comment | |
uses: thollander/actions-comment-pull-request@v2 | |
with: | |
message: 'Affected libs: ${{ env.AFFECTED_LIBS }} | |
Affected apps: ${{ env.AFFECTED_APPS }} | |
- [ ] 🚀 Build and deploy storybook and demo on GitHub Pages | |
- [ ] 📦 Build and push affected docker images' | |
comment_tag: build-options | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
cypress-run: | |
name: End-to-end tests | |
runs-on: ubuntu-latest | |
outputs: | |
screenshotsUrl: ${{ steps.upload-screenshots.outputs.artifact-url }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Create pipeline docker image | |
run: cd tools && docker build . -f pipelines/Dockerfile -t geonetwork/geonetwork-ui-tools-pipelines:latest | |
- name: Build the backend | |
run: sudo docker-compose -f support-services/docker-compose.yml up -d init | |
- name: Install dependencies | |
run: | | |
npm ci | |
- name: Run tests | |
run: npx nx run-many --target=e2e | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
id: upload-screenshots | |
with: | |
name: cypress-screenshots | |
path: | | |
apps/datahub-e2e/cypress/screenshots/**/* | |
apps/metadata-editor-e2e/cypress/screenshots/**/* | |
- uses: thollander/actions-comment-pull-request@v2 | |
if: always() && github.event_name == 'pull_request' && steps.upload-screenshots.outputs.artifact-url | |
with: | |
message: '📷 Screenshots are [here](${{ steps.upload-screenshots.outputs.artifact-url }})!' | |
comment_tag: screenshots-url | |
pr_number: ${{ github.event.number }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
build-npm-package: | |
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' | |
name: Attempt to build the NPM package | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
fetch-depth: 0 | |
- name: Use Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Install dependencies | |
run: npm ci | |
- name: Build NPM package | |
working-directory: package | |
run: node generate-package.js |