From 4ae775fb6035de2e07046c1ff96aadb66d616c9f Mon Sep 17 00:00:00 2001 From: Maksym Bilan Date: Sun, 3 May 2026 15:09:58 +0200 Subject: [PATCH] Add PR build and smoke test CI --- .github/workflows/ci.yml | 33 +++++++++++++++++++++++++++++++++ README.md | 17 +++++++++++++++++ package.json | 3 ++- scripts/smoke-test.sh | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci.yml create mode 100755 scripts/smoke-test.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fdd9e88 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,33 @@ +name: CI + +on: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + build-and-test: + name: Build and smoke test + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Test + run: npm test diff --git a/README.md b/README.md index 4c4e525..2c8c5a4 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,23 @@ npm run build The static site is generated in `dist/`. +## Test + +```bash +npm run build +npm test +``` + +The test command starts `vite preview` from the built `dist/` folder and checks that the app serves both `/` and a module deep route. + +## CI + +Pull requests to `main` run GitHub Actions on Linux (`ubuntu-latest`): + +- `npm ci` +- `npm run build` +- `npm test` + ## What Is Included - Ukrainian, Ukrainian+Spanish, and Spanish-only language modes. diff --git a/package.json b/package.json index 9caf27a..be75b7c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "vite", "build": "tsc -b && vite build", - "preview": "vite preview" + "preview": "vite preview", + "test": "bash scripts/smoke-test.sh" }, "dependencies": { "lucide-react": "^0.468.0", diff --git a/scripts/smoke-test.sh b/scripts/smoke-test.sh new file mode 100755 index 0000000..5879546 --- /dev/null +++ b/scripts/smoke-test.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail + +PORT="${PORT:-4173}" +HOST="127.0.0.1" +BASE_URL="http://${HOST}:${PORT}" +LOG_FILE="${TMPDIR:-/tmp}/plusik-vite-preview.log" + +cleanup() { + if [[ -n "${SERVER_PID:-}" ]]; then + kill "${SERVER_PID}" >/dev/null 2>&1 || true + fi +} +trap cleanup EXIT + +npm run preview -- --host "${HOST}" --port "${PORT}" >"${LOG_FILE}" 2>&1 & +SERVER_PID=$! + +for _ in {1..30}; do + if curl -fsS "${BASE_URL}/" >/dev/null 2>&1; then + break + fi + if ! kill -0 "${SERVER_PID}" >/dev/null 2>&1; then + cat "${LOG_FILE}" + exit 1 + fi + sleep 1 +done + +HOME_HTML="$(curl -fsS "${BASE_URL}/")" +MODULE_HTML="$(curl -fsS "${BASE_URL}/module/addition-no-carry")" + +[[ "${HOME_HTML}" == *'
'* ]] +[[ "${MODULE_HTML}" == *'
'* ]]