name: CI on: push: branches: [main] pull_request: jobs: syntax: name: Syntax check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Node --check on source files run: | set -e node --check index.js node --check mdm.js docker-smoke: name: Docker build + healthcheck smoke test runs-on: ubuntu-latest needs: syntax steps: - uses: actions/checkout@v4 - name: Build production image run: docker build -t appspace-webex:ci . # Boot the container with dummy credentials + SMOKE_TEST=true so the Webex # bot framework is skipped. The Dockerfile's built-in HEALTHCHECK hits /health; # we poll `docker inspect` for the health status. - name: Start container with dummy credentials run: | docker run -d --name smoke \ -e PORT=3000 \ -e NODE_ENV=production \ -e SMOKE_TEST=true \ -e WEBEX_BOT_TOKEN=smoke-test-bot-token \ -e WEBEX_ROOM_ID=smoke-test-room-id \ -e APPSPACE_INSTANCE_URL=https://smoke.example.com \ -e APPSPACE_SUBJECT_ID=smoke-subject \ -e APPSPACE_REFRESH_TOKEN=smoke-refresh-token \ -e APPSPACE_API_BASE_URL=https://smoke.example.com \ appspace-webex:ci - name: Wait for container to become healthy run: | set -e for i in $(seq 1 30); do status=$(docker inspect --format='{{.State.Health.Status}}' smoke 2>/dev/null || echo none) echo "attempt $i: status=$status" if [ "$status" = "healthy" ]; then echo "Container reached healthy" exit 0 fi sleep 1 done echo "Container failed to reach healthy within 30s" docker logs smoke exit 1 - name: Container logs on success (for reference) if: success() run: docker logs smoke - name: Container logs on failure if: failure() run: docker logs smoke || true - name: Cleanup if: always() run: docker rm -f smoke || true