chore: run e2e test in push commit hook #209
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
--- | |
# SPDX-FileCopyrightText: © 2022 Sebastian Davids <[email protected]> | |
# SPDX-License-Identifier: Apache-2.0 | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions | |
# https://docs.ionos.space/docs/github-actions-customization/ | |
# https://docs.ionos.space/docs/git-integration/#v1-projects-created-until-112022 | |
name: ci | |
on: # yamllint disable-line rule:truthy | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
permissions: {} | |
jobs: | |
# unfortunately each job is billed for at least 1 minute in GH Actions | |
# so use one big one to save GH Action minutes | |
# https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions | |
lint-build-deploy: | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: read | |
defaults: | |
run: | |
working-directory: hp | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout | |
# https://github.com/actions/checkout/releases | |
uses: actions/[email protected] | |
- name: Classify changes | |
# https://github.com/dorny/paths-filter/releases | |
uses: dorny/[email protected] | |
id: changes | |
with: | |
filters: | | |
sh: | |
- '**.sh' | |
yaml: | |
- '**.yaml' | |
Dockerfile: | |
- '.hadolint.yaml' | |
- '**/Dockerfile' | |
hp: | |
- 'hp/**' | |
- if: steps.changes.outputs.sh == 'true' | |
name: Lint shell scripts | |
working-directory: . | |
run: scripts/shellscript_check.sh | |
- if: steps.changes.outputs.yaml == 'true' | |
name: Lint YAML files | |
working-directory: . | |
run: yamllint --strict . | |
- if: steps.changes.outputs.Dockerfile == 'true' | |
name: Lint httpd Dockerfile | |
# https://github.com/hadolint/hadolint-action/releases | |
uses: hadolint/[email protected] | |
with: | |
dockerfile: httpd/Dockerfile | |
no-color: true | |
- if: steps.changes.outputs.hp == 'true' | |
name: Setup node and install dependencies | |
uses: ./.github/actions/setup-node-and-install-dependencies | |
with: | |
working-directory: hp | |
node-version-file: hp/.nvmrc | |
dependencies-lock-file: hp/package-lock.json | |
- if: steps.changes.outputs.hp == 'true' | |
name: Post-install esbuild | |
run: node node_modules/esbuild/install.js | |
- if: steps.changes.outputs.hp == 'true' | |
name: Post-install lightningcss-cli | |
run: node node_modules/lightningcss-cli/postinstall.js | |
- if: steps.changes.outputs.hp == 'true' | |
name: Check formatting | |
run: node --run format:check | |
- if: steps.changes.outputs.hp == 'true' | |
name: Lint project files | |
run: node --run lint | |
- if: steps.changes.outputs.hp == 'true' | |
name: Run unit tests | |
run: node --run test | |
env: | |
VITEST_SKIP_INSTALL_CHECKS: 1 | |
- if: steps.changes.outputs.hp == 'true' | |
name: Build project | |
run: node --run build | |
- if: steps.changes.outputs.hp == 'true' | |
name: Hash CSS | |
run: node --run hash:css | |
- if: steps.changes.outputs.hp == 'true' | |
name: Hash JS | |
run: node --run hash:js | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify JSON-structured script tags | |
run: node --run minify:json-tags | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify HTML | |
run: node --run minify:html | |
- if: steps.changes.outputs.hp == 'true' | |
name: Create .htaccess file | |
run: node --run create:htaccess | |
- if: steps.changes.outputs.hp == 'true' | |
name: Hash importmap | |
run: node --run hash:importmap | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify SVG | |
run: node --run minify:svg | |
- if: steps.changes.outputs.hp == 'true' | |
name: Hash SVG | |
run: node --run hash:svg | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify XML | |
run: node --run minify:xml | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify webmanifest | |
run: node --run minify:webmanifest | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify traffic-advice | |
run: node --run minify:traffic-advice | |
- if: steps.changes.outputs.hp == 'true' | |
name: Minify robots.txt | |
run: node --run minify:robots | |
- if: steps.changes.outputs.hp == 'true' | |
name: Add legal notice to robots.txt | |
run: node --run legal:robots | |
- if: steps.changes.outputs.hp == 'true' | |
name: Compress files | |
run: node --run compress:files | |
- if: steps.changes.outputs.hp == 'true' | |
name: Create Google Verification file | |
run: node --run create:google-verification-file | |
- if: steps.changes.outputs.hp == 'true' | |
name: Create timestamp file | |
run: node --run create:timestamp-file | |
- if: steps.changes.outputs.hp == 'true' | |
name: Run Lighthouse CI | |
run: node --run lighthouseci | |
- if: steps.changes.outputs.hp == 'true' | |
name: Install Playwright | |
run: npx playwright install --with-deps --no-shell chromium | |
- if: steps.changes.outputs.hp == 'true' | |
name: Run e2e Tests | |
run: node --run e2e:ci | |
- if: steps.changes.outputs.hp == 'true' | |
name: Fetch project data | |
# https://github.com/ionos-deploy-now/retrieve-project-info-action/releases | |
uses: ionos-deploy-now/[email protected] | |
id: project | |
with: | |
api-key: ${{ secrets.IONOS_API_KEY }} | |
project: ${{ secrets.IONOS_PROJECT_ID }} | |
service-host: api-eu.ionos.space | |
- if: | | |
steps.changes.outputs.hp == 'true' && | |
steps.project.outputs.deployment-enabled == 'true' | |
name: Deploy build | |
# https://github.com/ionos-deploy-now/deploy-to-ionos-action/releases | |
uses: ionos-deploy-now/[email protected] | |
with: | |
api-key: ${{ secrets.IONOS_API_KEY }} | |
bootstrap-deploy: ${{ steps.project.outputs.bootstrap-deploy }} | |
branch-id: ${{ steps.project.outputs.branch-id }} | |
dist-folder: hp/dist | |
project: ${{ secrets.IONOS_PROJECT_ID }} | |
remote-host: ${{ steps.project.outputs.remote-host }} | |
service-host: api-eu.ionos.space | |
storage-quota: ${{ steps.project.outputs.storage-quota }} | |
- if: | | |
steps.changes.outputs.hp == 'true' && | |
steps.project.outputs.deployment-enabled == 'true' | |
name: Run Smoke Tests on Deployed Site | |
run: node --run e2e:smoke | |
env: | |
PLAYWRIGHT_BASE_URL: https://sdavids.de |