Created comprehensive VPN setup tooling for Peaceful Spirit L2TP/IPsec connection and enhanced agent documentation framework. VPN Configuration (PST-NW-VPN): - Setup-PST-L2TP-VPN.ps1: Automated L2TP/IPsec setup with split-tunnel and DNS - Connect-PST-VPN.ps1: Connection helper with PPP adapter detection, DNS (192.168.0.2), and route config (192.168.0.0/24) - Connect-PST-VPN-Standalone.ps1: Self-contained connection script for remote deployment - Fix-PST-VPN-Auth.ps1: Authentication troubleshooting for CHAP/MSChapv2 - Diagnose-VPN-Interface.ps1: Comprehensive VPN interface and routing diagnostic - Quick-Test-VPN.ps1: Fast connectivity verification (DNS/router/routes) - Add-PST-VPN-Route-Manual.ps1: Manual route configuration helper - vpn-connect.bat, vpn-disconnect.bat: Simple batch file shortcuts - OpenVPN config files (Windows-compatible, abandoned for L2TP) Key VPN Implementation Details: - L2TP creates PPP adapter with connection name as interface description - UniFi auto-configures DNS (192.168.0.2) but requires manual route to 192.168.0.0/24 - Split-tunnel enabled (only remote traffic through VPN) - All-user connection for pre-login auto-connect via scheduled task - Authentication: CHAP + MSChapv2 for UniFi compatibility Agent Documentation: - AGENT_QUICK_REFERENCE.md: Quick reference for all specialized agents - documentation-squire.md: Documentation and task management specialist agent - Updated all agent markdown files with standardized formatting Project Organization: - Moved conversation logs to dedicated directories (guru-connect-conversation-logs, guru-rmm-conversation-logs) - Cleaned up old session JSONL files from projects/msp-tools/ - Added guru-connect infrastructure (agent, dashboard, proto, scripts, .gitea workflows) - Added guru-rmm server components and deployment configs Technical Notes: - VPN IP pool: 192.168.4.x (client gets 192.168.4.6) - Remote network: 192.168.0.0/24 (router at 192.168.0.10) - PSK: rrClvnmUeXEFo90Ol+z7tfsAZHeSK6w7 - Credentials: pst-admin / 24Hearts$ Files: 15 VPN scripts, 2 agent docs, conversation log reorganization, guru-connect/guru-rmm infrastructure additions Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
630 lines
14 KiB
Markdown
630 lines
14 KiB
Markdown
# GuruConnect CI/CD Activation Guide
|
|
|
|
**Date:** 2026-01-18
|
|
**Status:** Ready for Activation
|
|
**Server:** 172.16.3.30 (gururmm)
|
|
|
|
---
|
|
|
|
## Prerequisites Complete
|
|
|
|
- [x] Gitea Actions workflows committed
|
|
- [x] Deployment automation scripts created
|
|
- [x] Gitea Actions runner binary installed
|
|
- [x] Systemd service configured
|
|
- [x] All documentation complete
|
|
|
|
---
|
|
|
|
## Step 1: Register Gitea Actions Runner
|
|
|
|
### 1.1 Get Registration Token
|
|
|
|
1. Open browser and navigate to:
|
|
```
|
|
https://git.azcomputerguru.com/admin/actions/runners
|
|
```
|
|
|
|
2. Log in with Gitea admin credentials
|
|
|
|
3. Click **"Create new Runner"**
|
|
|
|
4. Copy the registration token (starts with something like `D0g...`)
|
|
|
|
### 1.2 Register Runner on Server
|
|
|
|
```bash
|
|
# SSH to server
|
|
ssh guru@172.16.3.30
|
|
|
|
# Register runner with token from above
|
|
sudo -u gitea-runner act_runner register \
|
|
--instance https://git.azcomputerguru.com \
|
|
--token YOUR_REGISTRATION_TOKEN_HERE \
|
|
--name gururmm-runner \
|
|
--labels ubuntu-latest,ubuntu-22.04
|
|
```
|
|
|
|
**Expected Output:**
|
|
```
|
|
INFO Registering runner, arch=amd64, os=linux, version=0.2.11.
|
|
INFO Successfully registered runner.
|
|
```
|
|
|
|
### 1.3 Start Runner Service
|
|
|
|
```bash
|
|
# Reload systemd configuration
|
|
sudo systemctl daemon-reload
|
|
|
|
# Enable runner to start on boot
|
|
sudo systemctl enable gitea-runner
|
|
|
|
# Start runner service
|
|
sudo systemctl start gitea-runner
|
|
|
|
# Check status
|
|
sudo systemctl status gitea-runner
|
|
```
|
|
|
|
**Expected Output:**
|
|
```
|
|
● gitea-runner.service - Gitea Actions Runner
|
|
Loaded: loaded (/etc/systemd/system/gitea-runner.service; enabled)
|
|
Active: active (running) since Sat 2026-01-18 16:00:00 UTC
|
|
```
|
|
|
|
### 1.4 Verify Registration
|
|
|
|
1. Go back to: https://git.azcomputerguru.com/admin/actions/runners
|
|
|
|
2. Verify "gururmm-runner" appears in the list
|
|
|
|
3. Status should show: **Online** (green)
|
|
|
|
---
|
|
|
|
## Step 2: Test Build Workflow
|
|
|
|
### 2.1 Trigger First Build
|
|
|
|
```bash
|
|
# On server
|
|
cd ~/guru-connect
|
|
|
|
# Make empty commit to trigger CI
|
|
git commit --allow-empty -m "test: trigger CI/CD pipeline"
|
|
git push origin main
|
|
```
|
|
|
|
### 2.2 Monitor Build Progress
|
|
|
|
1. Open browser: https://git.azcomputerguru.com/azcomputerguru/guru-connect/actions
|
|
|
|
2. You should see a new workflow run: **"Build and Test"**
|
|
|
|
3. Click on the workflow run to view progress
|
|
|
|
4. Watch the jobs complete:
|
|
- Build Server (Linux) - ~2-3 minutes
|
|
- Build Agent (Windows) - ~2-3 minutes
|
|
- Security Audit - ~1 minute
|
|
- Build Summary - ~10 seconds
|
|
|
|
### 2.3 Expected Results
|
|
|
|
**Build Server Job:**
|
|
```
|
|
✓ Checkout code
|
|
✓ Install Rust toolchain
|
|
✓ Cache Cargo dependencies
|
|
✓ Install dependencies (pkg-config, libssl-dev, protobuf-compiler)
|
|
✓ Build server
|
|
✓ Upload server binary
|
|
```
|
|
|
|
**Build Agent Job:**
|
|
```
|
|
✓ Checkout code
|
|
✓ Install Rust toolchain
|
|
✓ Install cross-compilation tools
|
|
✓ Build agent
|
|
✓ Upload agent binary
|
|
```
|
|
|
|
**Security Audit Job:**
|
|
```
|
|
✓ Checkout code
|
|
✓ Install Rust toolchain
|
|
✓ Install cargo-audit
|
|
✓ Run security audit
|
|
```
|
|
|
|
### 2.4 Download Build Artifacts
|
|
|
|
1. Scroll down to **Artifacts** section
|
|
|
|
2. Download artifacts:
|
|
- `guruconnect-server-linux` (server binary)
|
|
- `guruconnect-agent-windows` (agent .exe)
|
|
|
|
3. Verify file sizes:
|
|
- Server: ~15-20 MB
|
|
- Agent: ~10-15 MB
|
|
|
|
---
|
|
|
|
## Step 3: Test Workflow
|
|
|
|
### 3.1 Trigger Test Suite
|
|
|
|
```bash
|
|
# Tests run automatically on push, or trigger manually:
|
|
cd ~/guru-connect
|
|
|
|
# Make a code change to trigger tests
|
|
echo "// Test comment" >> server/src/main.rs
|
|
git add server/src/main.rs
|
|
git commit -m "test: trigger test workflow"
|
|
git push origin main
|
|
```
|
|
|
|
### 3.2 Monitor Test Execution
|
|
|
|
1. Go to: https://git.azcomputerguru.com/azcomputerguru/guru-connect/actions
|
|
|
|
2. Click on **"Run Tests"** workflow
|
|
|
|
3. Watch jobs complete:
|
|
- Test Server - ~3-5 minutes
|
|
- Test Agent - ~2-3 minutes
|
|
- Code Coverage - ~4-6 minutes
|
|
- Lint - ~2-3 minutes
|
|
|
|
### 3.3 Expected Results
|
|
|
|
**Test Server Job:**
|
|
```
|
|
✓ Run unit tests
|
|
✓ Run integration tests
|
|
✓ Run doc tests
|
|
```
|
|
|
|
**Test Agent Job:**
|
|
```
|
|
✓ Run agent tests
|
|
```
|
|
|
|
**Code Coverage Job:**
|
|
```
|
|
✓ Install tarpaulin
|
|
✓ Generate coverage report
|
|
✓ Upload coverage artifact
|
|
```
|
|
|
|
**Lint Job:**
|
|
```
|
|
✓ Check formatting (server) - cargo fmt
|
|
✓ Check formatting (agent) - cargo fmt
|
|
✓ Run clippy (server) - zero warnings
|
|
✓ Run clippy (agent) - zero warnings
|
|
```
|
|
|
|
---
|
|
|
|
## Step 4: Test Deployment Workflow
|
|
|
|
### 4.1 Create Version Tag
|
|
|
|
```bash
|
|
# On server
|
|
cd ~/guru-connect/scripts
|
|
|
|
# Create first release tag (v0.1.0)
|
|
./version-tag.sh patch
|
|
```
|
|
|
|
**Expected Interaction:**
|
|
```
|
|
=========================================
|
|
GuruConnect Version Tagging
|
|
=========================================
|
|
|
|
Current version: v0.0.0
|
|
New version: v0.1.0
|
|
|
|
Changes since v0.0.0:
|
|
-------------------------------------------
|
|
5b7cf5f ci: add Gitea Actions workflows and deployment automation
|
|
[previous commits...]
|
|
-------------------------------------------
|
|
|
|
Create tag v0.1.0? (y/N) y
|
|
|
|
Updating Cargo.toml versions...
|
|
Updated server/Cargo.toml
|
|
Updated agent/Cargo.toml
|
|
|
|
Committing version bump...
|
|
[main abc1234] chore: bump version to v0.1.0
|
|
|
|
Creating tag v0.1.0...
|
|
Tag created successfully
|
|
|
|
To push tag to remote:
|
|
git push origin v0.1.0
|
|
```
|
|
|
|
### 4.2 Push Tag to Trigger Deployment
|
|
|
|
```bash
|
|
# Push the version bump commit
|
|
git push origin main
|
|
|
|
# Push the tag (this triggers deployment workflow)
|
|
git push origin v0.1.0
|
|
```
|
|
|
|
### 4.3 Monitor Deployment
|
|
|
|
1. Go to: https://git.azcomputerguru.com/azcomputerguru/guru-connect/actions
|
|
|
|
2. Click on **"Deploy to Production"** workflow
|
|
|
|
3. Watch deployment progress:
|
|
- Deploy Server - ~10-15 minutes
|
|
- Create Release - ~2-3 minutes
|
|
|
|
### 4.4 Expected Deployment Flow
|
|
|
|
**Deploy Server Job:**
|
|
```
|
|
✓ Checkout code
|
|
✓ Install Rust toolchain
|
|
✓ Build release binary
|
|
✓ Create deployment package
|
|
✓ Transfer to server (via SSH)
|
|
✓ Run deployment script
|
|
├─ Backup current version
|
|
├─ Stop service
|
|
├─ Deploy new binary
|
|
├─ Start service
|
|
├─ Health check
|
|
└─ Verify deployment
|
|
✓ Upload deployment artifact
|
|
```
|
|
|
|
**Create Release Job:**
|
|
```
|
|
✓ Create GitHub/Gitea release
|
|
✓ Upload release assets
|
|
├─ guruconnect-server-v0.1.0.tar.gz
|
|
├─ guruconnect-agent-v0.1.0.exe
|
|
└─ SHA256SUMS
|
|
```
|
|
|
|
### 4.5 Verify Deployment
|
|
|
|
```bash
|
|
# Check service status
|
|
sudo systemctl status guruconnect
|
|
|
|
# Check new version
|
|
~/guru-connect/target/x86_64-unknown-linux-gnu/release/guruconnect-server --version
|
|
# Should output: v0.1.0
|
|
|
|
# Check health endpoint
|
|
curl http://172.16.3.30:3002/health
|
|
# Should return: {"status":"OK"}
|
|
|
|
# Check backup created
|
|
ls -lh /home/guru/deployments/backups/
|
|
# Should show: guruconnect-server-20260118-HHMMSS
|
|
|
|
# Check artifact saved
|
|
ls -lh /home/guru/deployments/artifacts/
|
|
# Should show: guruconnect-server-v0.1.0.tar.gz
|
|
```
|
|
|
|
---
|
|
|
|
## Step 5: Test Manual Deployment
|
|
|
|
### 5.1 Download Deployment Artifact
|
|
|
|
```bash
|
|
# From Actions page, download: guruconnect-server-v0.1.0.tar.gz
|
|
# Or use artifact from server:
|
|
cd /home/guru/deployments/artifacts
|
|
ls -lh guruconnect-server-v0.1.0.tar.gz
|
|
```
|
|
|
|
### 5.2 Run Manual Deployment
|
|
|
|
```bash
|
|
cd ~/guru-connect/scripts
|
|
./deploy.sh /home/guru/deployments/artifacts/guruconnect-server-v0.1.0.tar.gz
|
|
```
|
|
|
|
**Expected Output:**
|
|
```
|
|
=========================================
|
|
GuruConnect Deployment Script
|
|
=========================================
|
|
|
|
Package: /home/guru/deployments/artifacts/guruconnect-server-v0.1.0.tar.gz
|
|
Target: /home/guru/guru-connect
|
|
|
|
Creating backup...
|
|
[OK] Backup created: /home/guru/deployments/backups/guruconnect-server-20260118-161500
|
|
|
|
Stopping GuruConnect service...
|
|
[OK] Service stopped
|
|
|
|
Extracting deployment package...
|
|
Deploying new binary...
|
|
[OK] Binary deployed
|
|
|
|
Archiving deployment package...
|
|
[OK] Artifact saved
|
|
|
|
Starting GuruConnect service...
|
|
[OK] Service started successfully
|
|
|
|
Running health check...
|
|
[OK] Health check: PASSED
|
|
|
|
Deployment version information:
|
|
GuruConnect Server v0.1.0
|
|
|
|
=========================================
|
|
Deployment Complete!
|
|
=========================================
|
|
|
|
Deployment time: 20260118-161500
|
|
Backup location: /home/guru/deployments/backups/guruconnect-server-20260118-161500
|
|
Artifact location: /home/guru/deployments/artifacts/guruconnect-server-20260118-161500.tar.gz
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Runner Not Starting
|
|
|
|
**Symptom:** `systemctl status gitea-runner` shows "inactive" or "failed"
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check logs
|
|
sudo journalctl -u gitea-runner -n 50
|
|
|
|
# Common issues:
|
|
# 1. Not registered - run registration command again
|
|
# 2. Wrong token - get new token from Gitea admin
|
|
# 3. Permissions - ensure gitea-runner user owns /home/gitea-runner/.runner
|
|
|
|
# Re-register if needed
|
|
sudo -u gitea-runner act_runner register \
|
|
--instance https://git.azcomputerguru.com \
|
|
--token NEW_TOKEN_HERE
|
|
```
|
|
|
|
### Workflow Not Triggering
|
|
|
|
**Symptom:** Push to main branch but no workflow appears in Actions tab
|
|
|
|
**Checklist:**
|
|
1. Is runner registered and online? (Check admin/actions/runners)
|
|
2. Are workflow files in `.gitea/workflows/` directory?
|
|
3. Did you push to the correct branch? (main or develop)
|
|
4. Are Gitea Actions enabled in repository settings?
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Verify workflows committed
|
|
git ls-tree -r main --name-only | grep .gitea/workflows
|
|
|
|
# Should show:
|
|
# .gitea/workflows/build-and-test.yml
|
|
# .gitea/workflows/deploy.yml
|
|
# .gitea/workflows/test.yml
|
|
|
|
# If missing, add and commit:
|
|
git add .gitea/
|
|
git commit -m "ci: add missing workflows"
|
|
git push origin main
|
|
```
|
|
|
|
### Build Failing
|
|
|
|
**Symptom:** Build workflow shows red X
|
|
|
|
**Solution:**
|
|
```bash
|
|
# View logs in Gitea Actions tab
|
|
# Common issues:
|
|
|
|
# 1. Missing dependencies
|
|
# Add to workflow: apt-get install -y [package]
|
|
|
|
# 2. Rust compilation errors
|
|
# Fix code and push again
|
|
|
|
# 3. Test failures
|
|
# Run tests locally first: cargo test
|
|
|
|
# 4. Clippy warnings
|
|
# Fix warnings: cargo clippy --fix
|
|
```
|
|
|
|
### Deployment Failing
|
|
|
|
**Symptom:** Deploy workflow fails or service won't start after deployment
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check deployment logs
|
|
cat /home/guru/deployments/deploy-*.log
|
|
|
|
# Check service logs
|
|
sudo journalctl -u guruconnect -n 50
|
|
|
|
# Manual rollback if needed
|
|
ls /home/guru/deployments/backups/
|
|
cp /home/guru/deployments/backups/guruconnect-server-TIMESTAMP \
|
|
~/guru-connect/target/x86_64-unknown-linux-gnu/release/guruconnect-server
|
|
sudo systemctl restart guruconnect
|
|
```
|
|
|
|
### Health Check Failing
|
|
|
|
**Symptom:** Health check returns connection refused or timeout
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check if service is running
|
|
sudo systemctl status guruconnect
|
|
|
|
# Check if port is listening
|
|
netstat -tlnp | grep 3002
|
|
|
|
# Check server logs
|
|
sudo journalctl -u guruconnect -f
|
|
|
|
# Test manually
|
|
curl -v http://172.16.3.30:3002/health
|
|
|
|
# Common issues:
|
|
# 1. Service not started - sudo systemctl start guruconnect
|
|
# 2. Port blocked - check firewall
|
|
# 3. Database connection issue - check .env file
|
|
```
|
|
|
|
---
|
|
|
|
## Validation Checklist
|
|
|
|
After completing all steps, verify:
|
|
|
|
- [ ] Runner shows "Online" in Gitea admin panel
|
|
- [ ] Build workflow completes successfully (green checkmark)
|
|
- [ ] Test workflow completes successfully (all tests pass)
|
|
- [ ] Deployment workflow completes successfully
|
|
- [ ] Service restarts with new version
|
|
- [ ] Health check returns "OK"
|
|
- [ ] Backup created in `/home/guru/deployments/backups/`
|
|
- [ ] Artifact saved in `/home/guru/deployments/artifacts/`
|
|
- [ ] Build artifacts downloadable from Actions tab
|
|
- [ ] Version tag appears in repository tags
|
|
- [ ] Manual deployment script works
|
|
|
|
---
|
|
|
|
## Next Steps After Activation
|
|
|
|
### 1. Configure Deployment SSH Keys (Optional)
|
|
|
|
For fully automated deployment without manual intervention:
|
|
|
|
```bash
|
|
# Generate SSH key for runner
|
|
sudo -u gitea-runner ssh-keygen -t ed25519 -C "gitea-runner@gururmm"
|
|
|
|
# Add public key to authorized_keys
|
|
sudo -u gitea-runner cat /home/gitea-runner/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
|
|
|
|
# Test SSH connection
|
|
sudo -u gitea-runner ssh guru@172.16.3.30 whoami
|
|
```
|
|
|
|
### 2. Set Up Notification Webhooks (Optional)
|
|
|
|
Configure Gitea to send notifications on build/deployment events:
|
|
|
|
1. Go to repository > Settings > Webhooks
|
|
2. Add webhook for Slack/Discord/Email
|
|
3. Configure triggers: Push, Pull Request, Release
|
|
|
|
### 3. Add More Runners (Optional)
|
|
|
|
For faster builds and multi-platform support:
|
|
|
|
- **Windows Runner:** For native Windows agent builds
|
|
- **macOS Runner:** For macOS agent builds
|
|
- **Staging Runner:** For staging environment deployments
|
|
|
|
### 4. Enhance CI/CD (Optional)
|
|
|
|
**Performance:**
|
|
- Add caching for dependencies
|
|
- Parallel test execution
|
|
- Incremental builds
|
|
|
|
**Quality:**
|
|
- Code coverage thresholds
|
|
- Performance benchmarks
|
|
- Security scanning (SAST/DAST)
|
|
|
|
**Deployment:**
|
|
- Staging environment
|
|
- Canary deployments
|
|
- Blue-green deployments
|
|
- Smoke tests after deployment
|
|
|
|
---
|
|
|
|
## Quick Reference Commands
|
|
|
|
```bash
|
|
# Runner management
|
|
sudo systemctl status gitea-runner
|
|
sudo systemctl restart gitea-runner
|
|
sudo journalctl -u gitea-runner -f
|
|
|
|
# Create version tag
|
|
cd ~/guru-connect/scripts
|
|
./version-tag.sh [major|minor|patch]
|
|
|
|
# Manual deployment
|
|
./deploy.sh /path/to/package.tar.gz
|
|
|
|
# View workflows
|
|
https://git.azcomputerguru.com/azcomputerguru/guru-connect/actions
|
|
|
|
# Check service
|
|
sudo systemctl status guruconnect
|
|
curl http://172.16.3.30:3002/health
|
|
|
|
# View logs
|
|
sudo journalctl -u guruconnect -f
|
|
|
|
# Rollback deployment
|
|
cp /home/guru/deployments/backups/guruconnect-server-TIMESTAMP \
|
|
~/guru-connect/target/x86_64-unknown-linux-gnu/release/guruconnect-server
|
|
sudo systemctl restart guruconnect
|
|
```
|
|
|
|
---
|
|
|
|
## Support Resources
|
|
|
|
**Gitea Actions Documentation:**
|
|
- Overview: https://docs.gitea.com/usage/actions/overview
|
|
- Workflow Syntax: https://docs.gitea.com/usage/actions/workflow-syntax
|
|
- Act Runner: https://gitea.com/gitea/act_runner
|
|
|
|
**Repository:**
|
|
- https://git.azcomputerguru.com/azcomputerguru/guru-connect
|
|
|
|
**Created Documentation:**
|
|
- `CI_CD_SETUP.md` - Complete CI/CD setup guide
|
|
- `PHASE1_WEEK3_COMPLETE.md` - Week 3 completion summary
|
|
- `ACTIVATE_CI_CD.md` - This guide
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-01-18
|
|
**Status:** Ready for Activation
|
|
**Action Required:** Register Gitea Actions runner with admin token
|