401 words
2 minutes
Web deploy github action

For most of my web deployments that run on Netlify I like to run 2 kinds of action workflows. The first is for Code Quality metrics and the second is for testing

Code Quality#

name: Code Quality Scan
on:
  workflow_call:
    inputs:
      project-dir:
        description: 'Directory to use for Qodana scans'
        required: false
        type: string
        default: '.'
    secrets:
      QODANA_TOKEN:
        required: true
jobs:
  TruffleHog:
    name: Secrets Scan
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: TruffleHog OSS
        uses: trufflesecurity/trufflehog@main
        with:
          path: ./
          base: ${{ github.event.repository.default_branch }}
          head: HEAD
          extra_args: --debug --only-verified
  QodanaScan:
    name: Qodana
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          args: --project-dir ${{ inputs.project-dir }}
      - name: 'Qodana Scan'
        uses: JetBrains/qodana-action@v2022.3.4
        env:
          QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
  Linting:
    name: Lint Code Base
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Lint Code Base
        uses: github/super-linter@v4
        env:
          VALIDATE_ALL_CODEBASE: false
          DEFAULT_BRANCH: main
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VALIDATE_MARKDOWN: false
          FILTER_REGEX_EXCLUDE: .*test/.*
          FILTER_REGEX_INCLUDE: .*src/.*,.*lib/.*

Truffle Hog#

This action scans my repo for secrets that might have been accidentally checked in.

Qodana#

I use this for SAST testing. It scans the code and returns a list of potentially error prone code as well as scans packages and shows if there are any known vulnerabilities in the packages being used

qodana

Linting#

Just your typical linter. Nothing fancy here, just using the default eslint astro or react config is most of my sites

Testing#

For testing I use Cypress as well as Lighthouse

name: JS Frontend Tests
on:
  workflow_call:
    inputs:
      site-name:
        required: true
        type: string

jobs:
  CypressTest:
    name: Cypress Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Cypress run
        uses: cypress-io/github-action@v5
        with:
          config-file: cypress.config.js
          start: yarn cypress:start
          wait-on: 'http://localhost:3000'
  Lighthouse:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Wait for the Netlify Preview
        uses: jakepartusch/wait-for-netlify-action@v1.4
        id: netlify
        with:
          site_name: ${{ inputs.site-name }}
      - name: Audit URLs using Lighthouse
        uses: treosh/lighthouse-ci-action@v9
        with:
          urls: |
            ${{ steps.netlify.outputs.url }}
          budgetPath: ./budget.json
          uploadArtifacts: true

Cypress#

The cypress command will start up my front end up and then start to run my cypress tests against the build. I usually only do functional tests and test direct interactions that I expect my users to be making

Lighthouse#

This doesn’t have a fail state, I only use lighthouse to generate a score and see what portions of my site that I need to improve to bump up my score. 9 times out of 10 its usually sizes of scripts being loaded at first load and images

Web deploy github action
https://edwardbeazer.com/posts/web-deploy-github-action/
Author
Edward Beazer
Published at
2023-05-08