Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
736b69b
Fix duplicate Traefik rule
Spenny24 Jun 12, 2025
7f37c70
Merge pull request #1 from Spenny24/codex/find-and-fix-important-bug
Spenny24 Jun 13, 2025
95b735d
Create basic CI workflow in blank.yml
Spenny24 Nov 1, 2025
6b48a02
Optimize AI Operating Model Audit workflow - V4 Production Ready
claude Jan 2, 2026
c19dec6
Fix: Environment Guard node - replace process.env with $env for n8n c…
claude Jan 2, 2026
bddb356
Add Google Sheets edition - No Airtable subscription required
claude Jan 3, 2026
e98e0a9
Add workflows folder with all workflow files for easy access
claude Jan 3, 2026
f2f033a
Fix: RACI, KPI, and Tools population + Cost Analysis
claude Jan 3, 2026
9aff5af
Update Google Sheets Edition with Data Cleaner v3
claude Jan 3, 2026
3248cbd
Add standalone Data Cleaner v3 code for manual updates
claude Jan 3, 2026
bfeb508
Fix: Support 'Vale' typo in KPI column headers
claude Jan 3, 2026
d00681e
Add V5 Premium Report Workflow - Consultant-Grade Output
claude Jan 3, 2026
aea9813
Add Premium Google Sheets Edition (no Airtable required)
claude Jan 3, 2026
bdb7b50
Add enhancement roadmaps for Google Drive trigger and consultant-grad…
claude Jan 4, 2026
e7f9d9e
Add session summary for context transfer to terminal Claude Code
claude Jan 4, 2026
4265548
feat: add AI Operating Model workflow
Spenny24 Jan 5, 2026
1edc74d
fix: connect Google Sheets nodes to Merge nodes
Spenny24 Jan 5, 2026
7017a19
Merge remote-tracking branch 'origin/claude/ai-operating-model-audit-…
Spenny24 Jan 5, 2026
b7fef7d
feat: implement P1 enhancements for AI Operating Model workflow
Spenny24 Jan 5, 2026
9f5c71f
Update print statement from 'Hello' to 'Goodbye'
Spenny24 Jan 7, 2026
e43b34e
Add files via upload
Spenny24 Jan 9, 2026
2dc1838
Add files via upload
Spenny24 Jan 10, 2026
148f45f
feat: comprehensive repository improvements for security and document…
claude Jan 14, 2026
8d7ea04
refactor: reorganize repository structure for better maintainability
claude Jan 14, 2026
db65aa0
fix: remove exposed credentials and .env files from repository
claude Jan 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
version: 2
updates:
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
commit-message:
prefix: "chore(deps)"
include: "scope"

# Docker - Main compose files
- package-ecosystem: "docker"
directory: "/docker-compose/withPostgres"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
open-pull-requests-limit: 3
labels:
- "dependencies"
- "docker"
commit-message:
prefix: "chore(deps)"
include: "scope"

- package-ecosystem: "docker"
directory: "/docker-compose/withPostgresAndWorker"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
open-pull-requests-limit: 3
labels:
- "dependencies"
- "docker"
commit-message:
prefix: "chore(deps)"
include: "scope"

- package-ecosystem: "docker"
directory: "/docker-compose/subfolderWithSSL"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
open-pull-requests-limit: 3
labels:
- "dependencies"
- "docker"
commit-message:
prefix: "chore(deps)"
include: "scope"

- package-ecosystem: "docker"
directory: "/docker-caddy"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
open-pull-requests-limit: 3
labels:
- "dependencies"
- "docker"
commit-message:
prefix: "chore(deps)"
include: "scope"
36 changes: 36 additions & 0 deletions .github/workflows/blank.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4

# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!

# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
224 changes: 224 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
name: CI/CD Pipeline

on:
push:
branches: [ "main", "claude/*" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:

jobs:
validate-workflows:
name: Validate n8n Workflows
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Validate JSON syntax
run: |
echo "🔍 Validating n8n workflow JSON files..."
find . -name "*.json" -type f ! -path "./node_modules/*" ! -path "./.git/*" | while read file; do
echo "Checking: $file"
if ! jq empty "$file" 2>/dev/null; then
echo "❌ Invalid JSON: $file"
exit 1
fi
done
echo "✅ All JSON files are valid"

- name: Check for credentials in workflows
run: |
echo "🔒 Checking for exposed credentials..."
if grep -r -i -E "(password|api_key|secret|token).*[:=].*[\"'][^\"']{10,}" --include="*.json" .; then
echo "⚠️ WARNING: Possible credentials found in workflow files!"
echo "Please use n8n's credential system instead of hardcoded values."
exit 1
fi
echo "✅ No exposed credentials detected"

lint-documentation:
name: Lint Markdown Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install markdownlint
run: npm install -g markdownlint-cli

- name: Lint markdown files
run: |
echo "📝 Linting markdown documentation..."
markdownlint '**/*.md' --ignore node_modules --ignore .git || true
echo "✅ Markdown linting complete"

validate-docker-compose:
name: Validate Docker Compose Configs
runs-on: ubuntu-latest
strategy:
matrix:
config:
- docker-compose/withPostgres
- docker-compose/withPostgresAndWorker
- docker-compose/subfolderWithSSL
- docker-caddy
steps:
- uses: actions/checkout@v4

- name: Validate docker-compose.yml
run: |
echo "🐳 Validating ${{ matrix.config }}/docker-compose.yml..."
cd ${{ matrix.config }}
docker-compose config > /dev/null
echo "✅ Docker Compose config is valid"

security-scan:
name: Security Scanning
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check for secrets
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: ${{ github.event.repository.default_branch }}
head: HEAD
extra_args: --debug --only-verified
continue-on-error: true

- name: Check for .env files
run: |
echo "🔐 Checking for committed .env files..."
if find . -name ".env" -not -path "./node_modules/*" | grep -q .; then
echo "❌ ERROR: .env files found in repository!"
echo "These should not be committed. Use .env.example instead."
find . -name ".env" -not -path "./node_modules/*"
exit 1
fi
echo "✅ No .env files committed"

- name: Verify .gitignore exists
run: |
echo "📋 Verifying .gitignore..."
if [ ! -f .gitignore ]; then
echo "❌ ERROR: .gitignore file missing!"
exit 1
fi
echo "✅ .gitignore exists"

validate-python:
name: Validate Python Scripts
runs-on: ubuntu-latest
if: contains(github.event.head_commit.modified, '.py') || contains(github.event.head_commit.added, '.py')
steps:
- uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 black

- name: Lint with flake8
run: |
echo "🐍 Linting Python files..."
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics || true
echo "✅ Python linting complete"

- name: Check formatting with black
run: |
echo "🎨 Checking Python formatting..."
black --check . || true

validate-javascript:
name: Validate JavaScript Code
runs-on: ubuntu-latest
if: contains(github.event.head_commit.modified, '.js') || contains(github.event.head_commit.added, '.js')
steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install ESLint
run: npm install -g eslint

- name: Lint JavaScript files
run: |
echo "📜 Linting JavaScript files..."
eslint **/*.js --no-eslintrc --env es6 --env node || true
echo "✅ JavaScript linting complete"

cost-estimation:
name: Estimate Workflow Costs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Analyze workflow complexity
run: |
echo "💰 Analyzing workflow costs..."
echo ""
echo "| Workflow | Estimated Cost | Model |"
echo "|----------|----------------|-------|"

for workflow in workflows/*.json improved_ai_operating_model_workflow.json workflow_*.json; do
if [ -f "$workflow" ]; then
# Count OpenAI/GPT nodes
gpt_nodes=$(jq '[.nodes[] | select(.type == "n8n-nodes-base.openAi" or .type == "n8n-nodes-langchain.lmChatOpenAi")] | length' "$workflow" 2>/dev/null || echo 0)

# Estimate cost based on node count
if [ "$gpt_nodes" -gt 10 ]; then
cost="\$0.99 (Premium)"
model="GPT-4"
elif [ "$gpt_nodes" -gt 5 ]; then
cost="\$0.21 (Standard)"
model="GPT-4o-mini"
else
cost="\$0.01 (Basic)"
model="GPT-4o-mini"
fi

echo "| $(basename $workflow) | $cost | $model |"
fi
done
echo ""
echo "📊 Cost analysis complete. Review COST_ANALYSIS.md for detailed breakdown."

summary:
name: CI Summary
runs-on: ubuntu-latest
needs: [validate-workflows, lint-documentation, validate-docker-compose, security-scan]
if: always()
steps:
- name: Check job statuses
run: |
echo "## 📊 CI/CD Pipeline Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Validate Workflows | ${{ needs.validate-workflows.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Lint Documentation | ${{ needs.lint-documentation.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Validate Docker Compose | ${{ needs.validate-docker-compose.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Security Scan | ${{ needs.security-scan.result }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

if [ "${{ needs.validate-workflows.result }}" == "success" ] && \
[ "${{ needs.lint-documentation.result }}" == "success" ] && \
[ "${{ needs.validate-docker-compose.result }}" == "success" ] && \
[ "${{ needs.security-scan.result }}" == "success" ]; then
echo "✅ **All checks passed!**" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Some checks failed. Please review the logs above.**" >> $GITHUB_STEP_SUMMARY
fi
Loading