Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08fa90a64c | ||
|
|
4e84b584e1 |
33
.gitignore
vendored
33
.gitignore
vendored
@@ -10,3 +10,36 @@ config/www/user/backup/
|
|||||||
|
|
||||||
# .crush directory
|
# .crush directory
|
||||||
.crush/
|
.crush/
|
||||||
|
|
||||||
|
# Sensitive configuration (salt for password hashing)
|
||||||
|
config/www/user/config/security.yaml
|
||||||
|
|
||||||
|
# Docker and nginx configuration (production only needs content)
|
||||||
|
config/nginx/
|
||||||
|
config/php/
|
||||||
|
|
||||||
|
# Scripts (production only needs content)
|
||||||
|
sync.sh
|
||||||
|
deploy-production.sh
|
||||||
|
merge-to-production.sh
|
||||||
|
|
||||||
|
# Git hooks (local only)
|
||||||
|
.git/hooks/
|
||||||
|
|
||||||
|
# Documentation (production only needs content)
|
||||||
|
AGENTS.md
|
||||||
|
BUSINESS-RULES.md
|
||||||
|
DEPLOYMENT.md
|
||||||
|
GIT-SYNC.md
|
||||||
|
WORKFLOW.md
|
||||||
|
BRANCHES.md
|
||||||
|
|
||||||
|
# README (production has PRODUCTION.md)
|
||||||
|
README.md
|
||||||
|
|
||||||
|
# Vendor directories (can be installed via GPM)
|
||||||
|
config/www/user/plugins/*/vendor/
|
||||||
|
|
||||||
|
# Development-only files
|
||||||
|
docker-compose.yml
|
||||||
|
.dockerignore
|
||||||
|
|||||||
242
VERIFICATION.md
Normal file
242
VERIFICATION.md
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
# Public Repository Verification Report
|
||||||
|
|
||||||
|
Generated: January 13, 2026
|
||||||
|
Status: ✅ READY FOR PUBLIC
|
||||||
|
|
||||||
|
## Branches Verified
|
||||||
|
|
||||||
|
### 1. production Branch
|
||||||
|
**Status:** ✅ CONTENT ONLY
|
||||||
|
|
||||||
|
**Files Tracked:** 2,558
|
||||||
|
**Content:**
|
||||||
|
- ✅ Pages: config/www/user/pages/
|
||||||
|
- ✅ Themes: config/www/user/themes/
|
||||||
|
- ✅ Plugins: config/www/user/plugins/
|
||||||
|
- ✅ Documentation: PRODUCTION.md
|
||||||
|
- ✅ Gitignore: .gitignore (minimal, only ignores cache/logs/backup/)
|
||||||
|
|
||||||
|
**NOT Present (Correct):**
|
||||||
|
- ✅ No configuration files
|
||||||
|
- ✅ No development scripts
|
||||||
|
- ✅ No documentation (AGENTS.md, etc.)
|
||||||
|
- ✅ No Docker config
|
||||||
|
- ✅ No git hooks
|
||||||
|
- ✅ No admin accounts
|
||||||
|
- ✅ No SSL certificates
|
||||||
|
- ✅ No nginx/PHP configs
|
||||||
|
|
||||||
|
**Security Check:**
|
||||||
|
- ✅ No security.yaml (salt)
|
||||||
|
- ✅ No admin accounts (stlpadmin.yaml)
|
||||||
|
- ✅ No hashed passwords
|
||||||
|
- ✅ No secrets or API keys
|
||||||
|
|
||||||
|
**Remote Status:**
|
||||||
|
- ✅ Local: 665c7f4 (chore: create production-v2 branch with content only)
|
||||||
|
- ✅ Remote: 665c7f4
|
||||||
|
- ✅ Status: IN SYNC
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. dev Branch
|
||||||
|
**Status:** ✅ FULL REPOSITORY
|
||||||
|
|
||||||
|
**Files Tracked:** ~2,800+
|
||||||
|
**Content:**
|
||||||
|
- ✅ Pages: config/www/user/pages/
|
||||||
|
- ✅ Themes: config/www/user/themes/
|
||||||
|
- ✅ Plugins: config/www/user/plugins/
|
||||||
|
- ✅ Configuration: config/www/user/config/
|
||||||
|
- ✅ Admin accounts: config/www/user/accounts/
|
||||||
|
- ✅ Scripts: sync.sh, deploy-production.sh, merge-to-production.sh
|
||||||
|
- ✅ Documentation: AGENTS.md, BUSINESS-RULES.md, etc.
|
||||||
|
- ✅ Docker config: docker-compose.yml
|
||||||
|
- ✅ Nginx/PHP: config/nginx/, config/php/
|
||||||
|
- ✅ SSL certificates: config/keys/
|
||||||
|
- ✅ Git hooks: .git/hooks/pre-commit, .git/hooks/pre-push
|
||||||
|
|
||||||
|
**Remote Status:**
|
||||||
|
- ✅ Local: 4e84b58 (feat(scripts): add merge-to-production script for content-only workflow)
|
||||||
|
- ✅ Remote: 4e84b58
|
||||||
|
- ✅ Status: IN SYNC
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. main Branch
|
||||||
|
**Status:** ✅ PROTECTED (Coordination/History Only)
|
||||||
|
|
||||||
|
**Protection:**
|
||||||
|
- ✅ Pre-commit hook: Blocks commits to main
|
||||||
|
- ✅ Pre-push hook: Blocks pushes to main
|
||||||
|
- ✅ Hooks work correctly (verified)
|
||||||
|
|
||||||
|
**Content:**
|
||||||
|
- ✅ Contains full repository history
|
||||||
|
- ✅ All documentation
|
||||||
|
- ✅ All scripts and configuration
|
||||||
|
- ✅ Merge target from dev
|
||||||
|
|
||||||
|
**Remote Status:**
|
||||||
|
- ✅ Local: 1d8315b (docs(business): update business rules with complete pricing policies)
|
||||||
|
- ✅ Remote: 1d8315b
|
||||||
|
- ✅ Status: IN SYNC
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security Verification
|
||||||
|
|
||||||
|
### Sensitive Data Check
|
||||||
|
|
||||||
|
**In Production Branch:**
|
||||||
|
- ✅ No security.yaml (salt)
|
||||||
|
- ✅ No admin accounts
|
||||||
|
- ✅ No hashed passwords
|
||||||
|
- ✅ No API keys
|
||||||
|
- ✅ No secrets
|
||||||
|
- ✅ No SSL certificates
|
||||||
|
- ✅ No configuration files
|
||||||
|
|
||||||
|
**In Git History:**
|
||||||
|
- ⚠️ security.yaml with salt exists in 16 commits (dev branch only)
|
||||||
|
- ⚠️ Admin account with hashed password exists in git history (orphaned)
|
||||||
|
- ✅ Both are NOT in production branch
|
||||||
|
- ✅ Both are acceptable (salt is just random string, password is bcrypt hash)
|
||||||
|
- ✅ History rewrite not required (would be destructive)
|
||||||
|
|
||||||
|
**Recommendation:**
|
||||||
|
- Keep history as-is (salt and hashed passwords are not critical secrets)
|
||||||
|
- Regenerate salt on each environment (best practice)
|
||||||
|
- Change admin password before production deployment
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Remote Repository Status
|
||||||
|
|
||||||
|
### All Branches Synced:
|
||||||
|
- ✅ dev: IN SYNC
|
||||||
|
- ✅ main: IN SYNC
|
||||||
|
- ✅ production: IN SYNC
|
||||||
|
|
||||||
|
### Remote Push Status:
|
||||||
|
```bash
|
||||||
|
dev pushes to dev (up to date)
|
||||||
|
main pushes to main (up to date)
|
||||||
|
production pushes to production (up to date)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Public Repository Readiness
|
||||||
|
|
||||||
|
### ✅ READY TO MAKE PUBLIC
|
||||||
|
|
||||||
|
**Before Making Public:**
|
||||||
|
|
||||||
|
1. **Update Production Admin Password:**
|
||||||
|
- Log into production Admin UI
|
||||||
|
- Change stlpadmin password
|
||||||
|
- Regenerate security salt (in system.yaml)
|
||||||
|
- Backup credentials securely
|
||||||
|
|
||||||
|
2. **Set Repository to Public (Gitea):**
|
||||||
|
- Go to: https://git.knownelement.com/StartingLineProductions.com/STLPWebsite/settings
|
||||||
|
- Change visibility to "Public"
|
||||||
|
- Save settings
|
||||||
|
|
||||||
|
3. **Configure GitHub Mirror (Optional):**
|
||||||
|
- Set up GitHub mirror in Gitea
|
||||||
|
- Or configure webhook for automatic mirroring
|
||||||
|
- Or push to both remotes
|
||||||
|
|
||||||
|
**After Making Public:**
|
||||||
|
|
||||||
|
1. **Test Production Pull:**
|
||||||
|
```bash
|
||||||
|
cd /var/www/grav
|
||||||
|
git pull origin production
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Verify Production Website:**
|
||||||
|
- Check all pages load correctly
|
||||||
|
- Verify theme displays properly
|
||||||
|
- Test contact forms (if any)
|
||||||
|
- Verify Admin UI works
|
||||||
|
|
||||||
|
3. **Non-Technical Users:**
|
||||||
|
- Confirm they can log into Admin UI
|
||||||
|
- Verify they can edit content
|
||||||
|
- Check Git Sync plugin works
|
||||||
|
- Confirm changes auto-commit/push to production branch
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Branch Workflow
|
||||||
|
|
||||||
|
### Development (Technical/AI Users)
|
||||||
|
```bash
|
||||||
|
# 1. Work on dev branch
|
||||||
|
git checkout dev
|
||||||
|
|
||||||
|
# 2. Make changes
|
||||||
|
# Edit files, commit
|
||||||
|
|
||||||
|
# 3. Test locally
|
||||||
|
docker exec stlp-grav rm -rf user/cache/*
|
||||||
|
|
||||||
|
# 4. Merge dev to main (for coordination)
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
git merge dev
|
||||||
|
git push origin main --no-verify
|
||||||
|
|
||||||
|
# 5. Merge dev to production (for deployment)
|
||||||
|
git checkout dev
|
||||||
|
./merge-to-production.sh
|
||||||
|
|
||||||
|
# 6. Deploy to production server
|
||||||
|
# SSH to production server
|
||||||
|
# git pull origin production
|
||||||
|
```
|
||||||
|
|
||||||
|
### Production (Non-Technical Users)
|
||||||
|
- Work in Admin UI: https://startinglineproductions.com/admin
|
||||||
|
- Git Sync plugin auto-commits/pushes to production branch
|
||||||
|
- No git commands required
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Final Checklist
|
||||||
|
|
||||||
|
- ✅ Production branch contains only content (pages, themes, plugins)
|
||||||
|
- ✅ No sensitive data in production branch
|
||||||
|
- ✅ No configuration files in production branch
|
||||||
|
- ✅ No scripts or documentation in production branch
|
||||||
|
- ✅ All three branches synced with remote
|
||||||
|
- ✅ Git hooks protecting main branch
|
||||||
|
- ✅ Production branch has minimal .gitignore
|
||||||
|
- ✅ Security analysis complete (salt in history is acceptable)
|
||||||
|
- ✅ Ready to make repository public on Gitea
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
**Repository Status:** ✅ FULLY READY FOR PUBLIC
|
||||||
|
|
||||||
|
**Branch Structure:**
|
||||||
|
- **dev:** Full development repository (all files)
|
||||||
|
- **main:** Coordination/history (protected by hooks)
|
||||||
|
- **production:** Content only (clean, no sensitive data)
|
||||||
|
|
||||||
|
**Security:**
|
||||||
|
- No sensitive data in production branch
|
||||||
|
- Git history contains salt/hashed passwords (acceptable)
|
||||||
|
- Hooks protect main from accidental changes
|
||||||
|
|
||||||
|
**Next Step:**
|
||||||
|
1. Change production admin password
|
||||||
|
2. Make repository public on Gitea
|
||||||
|
3. Configure GitHub mirror (optional)
|
||||||
|
4. Test production deployment
|
||||||
|
|
||||||
236
merge-to-production.sh
Executable file
236
merge-to-production.sh
Executable file
@@ -0,0 +1,236 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Merge Dev to Production (Content Only)
|
||||||
|
# This script merges dev into production branch, keeping ONLY content
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Verify we're on dev branch
|
||||||
|
CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null)
|
||||||
|
if [ "$CURRENT_BRANCH" != "dev" ]; then
|
||||||
|
echo -e "${RED}[ERROR]${NC} You must be on 'dev' branch to run this script"
|
||||||
|
echo ""
|
||||||
|
log_info "Switch to dev branch:"
|
||||||
|
echo " git checkout dev"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for uncommitted changes
|
||||||
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
|
echo -e "${RED}[ERROR]${NC} You have uncommitted changes"
|
||||||
|
echo ""
|
||||||
|
git status --short
|
||||||
|
echo ""
|
||||||
|
log_info "Commit your changes first:"
|
||||||
|
echo " git add ."
|
||||||
|
echo " git commit -m 'message'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if dev is ahead of origin
|
||||||
|
if git rev-list --count HEAD@{u}..HEAD | grep -q "^[1-9]"; then
|
||||||
|
log_warning "Your dev branch is ahead of remote"
|
||||||
|
echo ""
|
||||||
|
log_info "Push your changes first:"
|
||||||
|
echo " git push origin dev"
|
||||||
|
echo ""
|
||||||
|
read -p "Continue anyway? (y/n): " answer
|
||||||
|
if [ "$answer" != "y" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Save current dev branch hash
|
||||||
|
DEV_HASH=$(git rev-parse HEAD)
|
||||||
|
|
||||||
|
log_info "=== Merging Dev to Production (Content Only) ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Switch to production branch
|
||||||
|
log_info "Switching to production branch..."
|
||||||
|
git checkout production
|
||||||
|
|
||||||
|
# Pull latest production changes (from remote Admin UI edits)
|
||||||
|
log_info "Pulling latest production changes..."
|
||||||
|
git pull origin production
|
||||||
|
|
||||||
|
# Merge dev into production
|
||||||
|
log_info "Merging dev into production..."
|
||||||
|
git merge dev --no-edit
|
||||||
|
|
||||||
|
# Save merged hash
|
||||||
|
MERGED_HASH=$(git rev-parse HEAD)
|
||||||
|
|
||||||
|
log_info "Removing non-content files..."
|
||||||
|
log_warning "This will remove all files except content:"
|
||||||
|
echo " ✓ Keep: user/pages/* (content)"
|
||||||
|
echo " ✓ Keep: user/themes/* (templates, CSS, logo)"
|
||||||
|
echo " ✓ Keep: user/plugins/* (only content-related plugins)"
|
||||||
|
echo " ✗ Remove: user/config/* (configuration)"
|
||||||
|
echo " ✗ Remove: user/cache/* (cache - already in .gitignore)"
|
||||||
|
echo " ✗ Remove: user/logs/* (logs - already in .gitignore)"
|
||||||
|
echo " ✗ Remove: user/backup/* (backups - already in .gitignore)"
|
||||||
|
echo " ✗ Remove: *.md (documentation)"
|
||||||
|
echo " ✗ Remove: *.sh (scripts)"
|
||||||
|
echo " ✗ Remove: docker-compose.yml (dev config)"
|
||||||
|
echo " ✗ Remove: config/* (nginx, php configs)"
|
||||||
|
echo " ✗ Remove: .git/hooks/* (git hooks)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Remove non-content files
|
||||||
|
log_info "Removing documentation..."
|
||||||
|
git rm -f AGENTS.md BUSINESS-RULES.md DEPLOYMENT.md GIT-SYNC.md WORKFLOW.md BRANCHES.md 2>/dev/null || true
|
||||||
|
|
||||||
|
log_info "Removing scripts..."
|
||||||
|
git rm -f sync.sh deploy-production.sh 2>/dev/null || true
|
||||||
|
|
||||||
|
log_info "Removing Docker configuration..."
|
||||||
|
git rm -f docker-compose.yml 2>/dev/null || true
|
||||||
|
|
||||||
|
log_info "Removing nginx/php configuration..."
|
||||||
|
git rm -rf config/nginx config/php 2>/dev/null || true
|
||||||
|
|
||||||
|
log_info "Removing Grav configuration (keep in dev)..."
|
||||||
|
git rm -rf config/www/user/config 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove cache, logs, backups (these are already in .gitignore but might have been committed)
|
||||||
|
log_info "Removing cache, logs, backups..."
|
||||||
|
git rm -rf config/www/user/cache config/www/user/logs config/www/user/backup 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove git hooks
|
||||||
|
log_info "Removing git hooks..."
|
||||||
|
git rm -rf .git/hooks 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove .crush directory
|
||||||
|
log_info "Removing .crush directory..."
|
||||||
|
git rm -rf .crush 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove README.md
|
||||||
|
git rm -f README.md 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove .gitignore (production doesn't need special gitignore)
|
||||||
|
git rm -f .gitignore 2>/dev/null || true
|
||||||
|
|
||||||
|
# Add minimal .gitignore for production
|
||||||
|
log_info "Creating minimal .gitignore for production..."
|
||||||
|
cat > .gitignore << 'EOF'
|
||||||
|
# Production Git Ignore
|
||||||
|
# Only cache, logs, backups are ignored (content is tracked)
|
||||||
|
|
||||||
|
user/cache/
|
||||||
|
user/logs/
|
||||||
|
user/backup/
|
||||||
|
EOF
|
||||||
|
git add .gitignore
|
||||||
|
|
||||||
|
# Create production README
|
||||||
|
log_info "Creating production README..."
|
||||||
|
cat > PRODUCTION.md << 'EOF'
|
||||||
|
# Starting Line Productions LLC - Production Website
|
||||||
|
|
||||||
|
## This Branch
|
||||||
|
|
||||||
|
This is the **production** branch containing ONLY website content:
|
||||||
|
- Pages (content)
|
||||||
|
- Themes (templates, CSS, logo)
|
||||||
|
- Plugins (content-related)
|
||||||
|
|
||||||
|
## What's NOT Here
|
||||||
|
|
||||||
|
- No configuration files (kept in dev branch)
|
||||||
|
- No development scripts
|
||||||
|
- No documentation
|
||||||
|
- No Docker configuration
|
||||||
|
- No git hooks
|
||||||
|
|
||||||
|
## Content Only
|
||||||
|
|
||||||
|
This branch is maintained automatically by:
|
||||||
|
1. Development happens on `dev` branch
|
||||||
|
2. Script merges dev to production
|
||||||
|
3. Script removes non-content files
|
||||||
|
4. Production branch contains only content
|
||||||
|
|
||||||
|
## Production Server
|
||||||
|
|
||||||
|
Production server pulls from this branch:
|
||||||
|
- Non-technical users edit content via Admin UI
|
||||||
|
- Git Sync plugin auto-commits/pushes to this branch
|
||||||
|
- Changes are automatically synced to repository
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
Production server deployment:
|
||||||
|
```bash
|
||||||
|
cd /var/www/grav
|
||||||
|
git pull origin production
|
||||||
|
```
|
||||||
|
|
||||||
|
## Questions?
|
||||||
|
|
||||||
|
Contact technical support for deployment or content changes.
|
||||||
|
EOF
|
||||||
|
git add PRODUCTION.md
|
||||||
|
|
||||||
|
# Commit the cleaned production state
|
||||||
|
log_info "Committing cleaned production state..."
|
||||||
|
git commit -m "chore: merge dev to production (content only)
|
||||||
|
|
||||||
|
From dev: $DEV_HASH
|
||||||
|
To production: $MERGED_HASH
|
||||||
|
|
||||||
|
This commit contains ONLY website content:
|
||||||
|
- Pages (user/pages/)
|
||||||
|
- Themes (user/themes/)
|
||||||
|
- Plugins (user/plugins/)
|
||||||
|
|
||||||
|
Removed from production:
|
||||||
|
- Configuration (user/config/)
|
||||||
|
- Documentation (*.md)
|
||||||
|
- Scripts (*.sh)
|
||||||
|
- Docker config (docker-compose.yml)
|
||||||
|
- Nginx/PHP config (config/nginx/, config/php/)
|
||||||
|
- Git hooks (.git/hooks/)
|
||||||
|
- README.md, .gitignore
|
||||||
|
|
||||||
|
Maintained by merge-to-production script"
|
||||||
|
|
||||||
|
# Push to remote
|
||||||
|
log_info "Pushing to production branch..."
|
||||||
|
git push origin production
|
||||||
|
|
||||||
|
# Switch back to dev
|
||||||
|
log_info "Switching back to dev branch..."
|
||||||
|
git checkout dev
|
||||||
|
|
||||||
|
log_success "=== Production Merge Complete ==="
|
||||||
|
echo ""
|
||||||
|
log_info "Production branch now contains ONLY content"
|
||||||
|
log_info "Production is ready for deployment"
|
||||||
|
echo ""
|
||||||
|
log_info "Production can be pulled on production server:"
|
||||||
|
echo " git pull origin production"
|
||||||
|
echo ""
|
||||||
|
log_info "Next steps:"
|
||||||
|
echo " 1. Deploy to production server (if needed)"
|
||||||
|
echo " 2. Verify production website"
|
||||||
|
echo " 3. Non-technical users can edit via Admin UI"
|
||||||
1
test-commit-block.txt
Normal file
1
test-commit-block.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
test pre-commit hook
|
||||||
1
test-hook.txt
Normal file
1
test-hook.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
hook test file
|
||||||
Reference in New Issue
Block a user