From 796d372e793169f89ed346d586545dbd4cd8088c Mon Sep 17 00:00:00 2001 From: null Date: Thu, 14 May 2026 01:18:44 -0500 Subject: [PATCH] chore: add docker-push.sh, docker-test.sh, npm scripts, bump v0.5.0 - docker-push.sh: build + tag + push dev image to Forgejo registry - docker-test.sh: rebuild and run container for local testing - npm scripts: docker:push and docker:test - Version bump to 0.5.0 (Phase 5) --- package.json | 6 +- scripts/docker-push.sh | 22 ++++++ scripts/docker-test.sh | 150 ++++------------------------------------- 3 files changed, 39 insertions(+), 139 deletions(-) create mode 100755 scripts/docker-push.sh diff --git a/package.json b/package.json index a97b380..1c09c52 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "queuenorth-website", "private": true, - "version": "0.4.8", + "version": "0.5.0", "type": "module", "scripts": { "dev": "concurrently \"vite\" \"node server/index.js\"", @@ -13,7 +13,9 @@ "docker:run": "docker run -p 3001:3001 --rm --name queuenorth -v queuenorth-db:/app/db -v queuenorth-logs:/app/logs --env NODE_ENV=production queuenorth-website", "docker:compose:up": "docker-compose up -d", "docker:compose:down": "docker-compose down", - "docker:compose:logs": "docker-compose logs -f" + "docker:compose:logs": "docker-compose logs -f", + "docker:push": "bash scripts/docker-push.sh", + "docker:test": "bash scripts/docker-test.sh" }, "dependencies": { "@radix-ui/react-dialog": "^1.1.0", diff --git a/scripts/docker-push.sh b/scripts/docker-push.sh new file mode 100755 index 0000000..eb3c753 --- /dev/null +++ b/scripts/docker-push.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# docker-push.sh — Tag and push dev image to Forgejo registry +# Usage: ./scripts/docker-push.sh +# Requires: ~/.openclaw/docker-registry.env (chmod 600) + +set -euo pipefail +cd "$(dirname "$0")/.." + +source ~/.openclaw/docker-registry.env + +# Build image via docker compose +DOCKER_API_VERSION=1.44 docker compose build + +# Tag and push dev +IMAGE_NAME="queue-north-website-queuenorth" +docker tag "${IMAGE_NAME}:latest" "${FORGEJO_REGISTRY}/null/queue-north-website:dev" + +echo "$FORGEJO_REGISTRY_TOKEN" | docker login "$FORGEJO_REGISTRY" -u "$FORGEJO_REGISTRY_USER" --password-stdin +docker push "${FORGEJO_REGISTRY}/null/queue-north-website:dev" + +docker logout "$FORGEJO_REGISTRY" +echo "✓ Pushed dev image" \ No newline at end of file diff --git a/scripts/docker-test.sh b/scripts/docker-test.sh index 845e870..b37863d 100755 --- a/scripts/docker-test.sh +++ b/scripts/docker-test.sh @@ -1,142 +1,18 @@ -#!/bin/bash +#!/usr/bin/env bash +# docker-test.sh — Build and run Queue North Website in Docker for testing +# Usage: ./scripts/docker-test.sh +# Access: http://localhost:3001 -# Docker persistence test script for Queue North Website -# Verifies SQLite database survives container restart with volume mount +set -euo pipefail +cd "$(dirname "$0")/.." -set -e +# Stop and remove existing container +DOCKER_API_VERSION=1.44 docker compose down 2>/dev/null || true -echo "=== Docker Persistence Test for Queue North Website ===" +# Clean build +rm -rf dist node_modules/.vite 2>/dev/null -# Stop any existing container -docker stop queuenorth-test 2>/dev/null || true -docker rm queuenorth-test 2>/dev/null || true +DOCKER_API_VERSION=1.44 docker compose up -d --build -# Remove any existing volumes for fresh start -docker volume rm queuenorth-test-db 2>/dev/null || true -docker volume rm queuenorth-test-logs 2>/dev/null || true - -# Build fresh image -echo "Building fresh Docker image..." -docker build -t queuenorth-test . - -# Create volumes for persistence -docker volume create queuenorth-test-db > /dev/null -docker volume create queuenorth-test-logs > /dev/null - -# Run container with volume mount -echo "Starting container with persistent volume..." -docker run -d \ - --name queuenorth-test \ - -p 3002:3001 \ - -v queuenorth-test-db:/app/db \ - -v queuenorth-test-logs:/app/logs \ - -e NODE_ENV=production \ - -e SERVER_PORT=3001 \ - queuenorth-test - -# Wait for server to be ready -echo "Waiting for server to be ready..." -sleep 5 - -# Verify health endpoint -if curl -s http://localhost:3002/api/health | grep -q '"status":"ok"'; then - echo "✓ Health check passed" -else - echo "✗ Health check failed" - docker logs queuenorth-test - exit 1 -fi - -# Insert test data via API -echo "Inserting test lead data..." -curl -s -X POST http://localhost:3002/api/leads \ - -H "Content-Type: application/json" \ - -d '{"company":"Docker Test Co","name":"Docker Test User","email":"docker@test.com","phone":"555-DOCKER","zip":"54321","message":"Docker persistence test","service_interest":"contact-center"}' > /dev/null - -echo "Inserting test support request data..." -curl -s -X POST http://localhost:3002/api/support \ - -H "Content-Type: application/json" \ - -d '{"name":"Docker Test User","company":"Docker Test Co","email":"docker@test.com","phone":"555-DOCKER","issue":"Docker persistence test support request","priority":"medium"}' > /dev/null - -# Verify data was inserted using Node.js (sqlite3 CLI not available in container) -echo "Verifying data in database..." - -# Check leads table -if docker exec queuenorth-test node -e " - const sqlite3 = require('better-sqlite3'); - const db = new sqlite3('/app/db/queuenorth.db'); - const row = db.prepare('SELECT COUNT(*) as c FROM leads WHERE email=?').get('docker@test.com'); - console.log(row.c); - process.exit(row.c === 1 ? 0 : 1); -" 2>/dev/null; then - echo "✓ Test lead data persisted in database" -else - echo "✗ Test lead data NOT persisted in database" - exit 1 -fi - -# Check support_requests table -if docker exec queuenorth-test node -e " - const sqlite3 = require('better-sqlite3'); - const db = new sqlite3('/app/db/queuenorth.db'); - const row = db.prepare('SELECT COUNT(*) as c FROM support_requests WHERE email=?').get('docker@test.com'); - console.log(row.c); - process.exit(row.c === 1 ? 0 : 1); -" 2>/dev/null; then - echo "✓ Test support request data persisted in database" -else - echo "✗ Test support request data NOT persisted in database" - exit 1 -fi - -# Stop the container (simulates restart) -echo "Stopping container to simulate restart..." -docker stop queuenorth-test > /dev/null -sleep 2 - -# Restart with same volume mount -echo "Restarting container with same volume..." -docker start queuenorth-test > /dev/null -sleep 3 - -# Verify data is still there after restart -echo "Verifying data persists after restart..." - -# Check leads after restart -if docker exec queuenorth-test node -e " - const sqlite3 = require('better-sqlite3'); - const db = new sqlite3('/app/db/queuenorth.db'); - const row = db.prepare('SELECT COUNT(*) as c FROM leads WHERE email=?').get('docker@test.com'); - console.log(row.c); - process.exit(row.c === 1 ? 0 : 1); -" 2>/dev/null; then - echo "✓ Data persists after container restart" -else - echo "✗ Data NOT persisted after container restart" - exit 1 -fi - -# Check support_requests after restart -if docker exec queuenorth-test node -e " - const sqlite3 = require('better-sqlite3'); - const db = new sqlite3('/app/db/queuenorth.db'); - const row = db.prepare('SELECT COUNT(*) as c FROM support_requests WHERE email=?').get('docker@test.com'); - console.log(row.c); - process.exit(row.c === 1 ? 0 : 1); -" 2>/dev/null; then - echo "✓ Support requests data persists after container restart" -else - echo "✗ Support requests data NOT persisted after container restart" - exit 1 -fi - -# Cleanup -echo "Cleaning up..." -docker stop queuenorth-test > /dev/null -docker rm queuenorth-test > /dev/null -docker volume rm queuenorth-test-db > /dev/null -docker volume rm queuenorth-test-logs > /dev/null - -echo "" -echo "=== All Docker persistence tests passed! ===" -echo "SQLite database correctly persists across container restarts with volume mount." +echo "✓ Running on http://localhost:3001" +echo " Health check: http://localhost:3001/api/health" \ No newline at end of file