vibetunnel/web/scripts/test-npm-package.dockerfile

93 lines
No EOL
2.9 KiB
Docker

# Test VibeTunnel npm package installation and functionality
ARG NODE_VERSION=22
FROM node:${NODE_VERSION}-slim
# Install dependencies for terminal functionality and building native modules
RUN apt-get update && apt-get install -y \
curl \
procps \
python3 \
build-essential \
libpam0g-dev \
&& rm -rf /var/lib/apt/lists/*
# Accept package version as build arg (defaults to latest)
ARG PACKAGE_VERSION=latest
# Install vibetunnel globally as root
RUN npm install -g vibetunnel@${PACKAGE_VERSION}
# Create a test user
RUN useradd -m -s /bin/bash testuser
# Switch to test user
USER testuser
WORKDIR /home/testuser
# Create a comprehensive test script
RUN echo '#!/bin/bash\n\
set -e\n\
\n\
echo "=== VibeTunnel npm Package Test ==="\n\
echo "Node version: $(node --version)"\n\
echo "npm version: $(npm --version)"\n\
echo ""\n\
\n\
echo "=== Installation Check ==="\n\
which vibetunnel && echo "✅ vibetunnel command found" || echo "❌ vibetunnel command not found"\n\
which vt && echo "✅ vt command found" || echo "❌ vt command not found"\n\
echo ""\n\
\n\
echo "=== Version Check ==="\n\
vibetunnel --version || echo "Note: Version check failed"\n\
echo ""\n\
\n\
echo "=== Native Module Check ==="\n\
echo "Checking node-pty installation..."\n\
ls -la /usr/local/lib/node_modules/vibetunnel/node-pty/build/Release/pty.node 2>/dev/null && \\\n\
echo "✅ node-pty native module found" || echo "❌ node-pty native module not found"\n\
echo ""\n\
echo "Checking authenticate-pam installation..."\n\
if [ -f /usr/local/lib/node_modules/vibetunnel/optional-modules/authenticate-pam/build/Release/authenticate_pam.node ]; then\n\
echo "✅ authenticate-pam found in optional-modules"\n\
elif [ -f /usr/local/lib/node_modules/vibetunnel/node_modules/authenticate-pam/build/Release/authenticate_pam.node ]; then\n\
echo "✅ authenticate-pam found in node_modules"\n\
else\n\
echo "⚠️ authenticate-pam not found (optional dependency)"\n\
fi\n\
echo ""\n\
\n\
echo "=== Server Start Test ==="\n\
echo "Starting VibeTunnel server on port 4021..."\n\
timeout 10 vibetunnel --port 4021 --no-auth &\n\
SERVER_PID=$!\n\
sleep 3\n\
\n\
echo "Testing if server is running..."\n\
if curl -s http://localhost:4021 > /dev/null; then\n\
echo "✅ Server is responding on port 4021"\n\
\n\
# Test API endpoint\n\
echo ""\n\
echo "=== API Test ==="\n\
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:4021/api/status)\n\
if [ "$STATUS" = "200" ]; then\n\
echo "✅ API status endpoint returned 200"\n\
else\n\
echo "❌ API status endpoint returned $STATUS"\n\
fi\n\
else\n\
echo "❌ Server not responding"\n\
fi\n\
\n\
echo ""\n\
echo "Stopping server..."\n\
kill $SERVER_PID 2>/dev/null || true\n\
wait $SERVER_PID 2>/dev/null || true\n\
\n\
echo ""\n\
echo "=== Test Summary ==="\n\
echo "All tests completed. Check results above for any failures."\n\
' > test.sh && chmod +x test.sh
CMD ["./test.sh"]