undergroundwires/privacy.sexy

View on GitHub
.github/workflows/checks.build.yaml

Summary

Maintainability
Test Coverage
name: checks.build

on:
  push:
  pull_request:

jobs:
  build-web:
    strategy:
      matrix:
        os: [ macos, ubuntu, windows ]
        mode: [
          # Vite mode: https://vitejs.dev/guide/env-and-mode.html
          development,  # Used by `dev` command
          production,   # Used by `build` command
          # Vitest mode: https://vitest.dev/guide/cli.html
          test,         # Used by Vitest
        ]
      fail-fast: false # Allows to see results from other combinations
    runs-on: ${{ matrix.os }}-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Setup node
        uses: ./.github/actions/setup-node
      -
        name: Install dependencies
        uses: ./.github/actions/npm-install-dependencies
      -
        name: Build web
        run: npm run build -- --mode ${{ matrix.mode }}
      -
        name: Verify web build artifacts
        run: npm run check:verify-build-artifacts -- --web

  build-desktop:
    strategy:
      matrix:
        os: [ macos, ubuntu, windows ]
        mode: [
          # electron-vite modes: https://electron-vite.org/guide/env-and-mode.html#global-env-variables
          development,  # Used by `dev` command
          production,   # Used by `build` and `preview` commands
        ]
      fail-fast: false # Allows to see results from other combinations
    runs-on: ${{ matrix.os }}-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Setup node
        uses: ./.github/actions/setup-node
      -
        name: Install dependencies
        uses: ./.github/actions/npm-install-dependencies
      -
        name: Prebuild desktop
        run: npm run electron:prebuild -- --mode ${{ matrix.mode }}
      -
        name: Verify unbundled desktop build artifacts
        run: npm run check:verify-build-artifacts -- --electron-unbundled
      -
        name: Build (bundle and package) desktop application
        run: npm run electron:build -- --publish never
      -
        name: Verify bundled desktop build artifacts
        run: npm run check:verify-build-artifacts -- --electron-bundled

  build-docker:
    strategy:
      matrix:
        os:
          - macos-13 # Downgraded due to lack of nested virtualization support in ARM-based runners (See: actions/runner-images#9460, actions/runner-images#9741, abiosoft/colima#1023)
          - ubuntu-latest
          # - windows-latest # Windows runners do not support Linux containers
      fail-fast: false # Allows to see results from other combinations
    runs-on: ${{ matrix.os }}
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Install Docker on macOS
        if: contains(matrix.os, 'macos') # macOS runner is missing Docker
        run: |-
          # Install Docker
          brew install docker
          # Docker on macOS misses daemon due to licensing, so install colima as runtime
          brew install colima
          # Start the daemon
          colima start
      -
        name: Build Docker image
        run: docker build -t undergroundwires/privacy.sexy:latest .
      -
        name: Run Docker image on port 8080
        run: docker run -d -p 8080:80 --rm --name privacy.sexy undergroundwires/privacy.sexy:latest
      -
        name: Enforce IPv4 Connectivity # Used due to GitHub runners' lack of IPv6 support, preventing request timeouts.
        uses: ./.github/actions/force-ipv4
      -
        name: Check server is up and returns HTTP 200
        run: >-
          node ./scripts/verify-web-server-status.js \
            --url http://localhost:8080  \
            --max-retries ${{ matrix.os == 'macos' && '90' || '30' }}