This commit addresses intermittent failures in macOS Docker builds within the GitHub Actions environment, attributed to slow agent responses. By adjusting the retry logic, it aims to reduce build failures caused by delayed Docker service readiness. The enhancements increase the robustness and clarity of the build process, especially for macOS, while maintaining functionality across other operating systems. Key changes: - Increase max retries for the server check script from 30 to 90 for macOS, accommodating slower startup times. - Refine retry logic to prevent unnecessary retries after receiving a definitive HTTP status code, enabling faster feedback and efficient failure handling. Other supporting changes: - Introduce a `--max-retries` parameter in the server status check script for dynamic adjustment based on the operating system. - Add emojis to log messages to enhance the visibility of request attempts in logs. - Shift from `http.get` to the `fetch` API for server status checks, utilizing its modern syntax, standardization, enriched feature set, and better error handling. - Standardize error output to `stderr`. - Add a Node.js shebang in the server check script to improve usability.
104 lines
3.3 KiB
YAML
104 lines
3.3 KiB
YAML
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, ubuntu ] # Windows runners do not support Linux containers
|
|
fail-fast: false # Allows to see results from other combinations
|
|
runs-on: ${{ matrix.os }}-latest
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v4
|
|
-
|
|
name: Install Docker on macOS
|
|
if: 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: 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' }}
|