Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
87 changes: 87 additions & 0 deletions .github/workflows/goose-pr-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Goose AI PR Review

on:
pull_request:
types: [opened, synchronize, reopened, labeled]
workflow_dispatch:

permissions:
contents: write
pull-requests: write
issues: write

env:
PROVIDER_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
PR_NUMBER: ${{ github.event.pull_request.number }}
GH_TOKEN: ${{ github.token }}

jobs:
goose-comment:
name: Goose Comment
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Gather PR information
run: |
{
echo "# Files Changed"
gh pr view "$PR_NUMBER" --json files \
-q '.files[] | "* " + .path + " (" + (.additions|tostring) + " additions, " + (.deletions|tostring) + " deletions)"'
echo ""
echo "# Changes Summary"
gh pr diff "$PR_NUMBER"
} > changes.txt

- name: Install Goose CLI
run: |
mkdir -p /home/runner/.local/bin
curl -fsSL https://github.com/block/goose/releases/download/stable/download_cli.sh \
| CONFIGURE=false INSTALL_PATH=/home/runner/.local/bin bash
echo "/home/runner/.local/bin" >> "$GITHUB_PATH"

- name: Configure Goose
run: |
mkdir -p ~/.config/goose
cat > ~/.config/goose/config.yaml <<'EOF'
GOOSE_PROVIDER: google
GOOSE_MODEL: gemini-2.0-flash-exp
keyring: false
EOF

- name: Prepare review instructions
run: |
# Read custom instructions from repository
cat .goose/instructions.txt > review_instructions.txt
echo "" >> review_instructions.txt
echo "The changes to review are:" >> review_instructions.txt
cat changes.txt >> review_instructions.txt

- name: Run Goose AI review
env:
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
run: |
goose run --instructions review_instructions.txt \
| sed -E 's/\x1B\[[0-9;]*[mK]//g' \
| grep -v "logging to /home/runner/.config/goose/sessions/" \
| grep -v "^starting session" \
| grep -v "^Closing session" \
| sed 's/[[:space:]]*$//' \
> pr_comment.txt

- name: Post AI review to PR
run: |
{
echo "## 🤖 AI Code Review"
echo "*Automated review by Goose + Google Gemini*"
echo ""
cat pr_comment.txt
echo ""
echo "---"
echo "*This review was automatically generated. Use human judgment for final decisions.*"
} > final_comment.txt

gh pr comment "$PR_NUMBER" --body-file final_comment.txt
50 changes: 50 additions & 0 deletions .goose/instructions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
You are an expert DevOps engineer reviewing code changes for a machine learning application.

Focus your review on these key areas:

## 🐳 Docker & Containerization
- Dockerfile best practices and optimization
- Multi-stage builds and layer efficiency
- Security considerations (non-root users, minimal base images)
- Health checks and restart policies

## 🏗️ Infrastructure & Orchestration
- Docker Compose service configuration
- Service dependencies and networking
- Volume mounts and data persistence
- Load balancing and proxy setup

## 🔒 Security & Best Practices
- Exposed ports and network security
- Environment variable management
- Container security practices
- Access controls and permissions

## 🚀 CI/CD & Automation
- Workflow efficiency and optimization
- Security scanning integration
- Caching strategies and performance
- Error handling and reliability

## 📊 Code Quality
- Configuration file structure and clarity
- Documentation and maintainability
- Production readiness
- Scalability considerations

## Review Format
Please structure your review as:

**`filename`**
- Summary of changes
- Key observations
- Recommendations for improvement
- Security or performance notes

**Overall Assessment:**
- Rate: Excellent/Good/Needs Improvement
- Main strengths
- Priority improvements
- Production readiness assessment

Keep feedback constructive, specific, and actionable.
26 changes: 26 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: '3.8'

services:
tech-stack-advisor:
build: .
ports:
- "7860:7860"
environment:
- ENV=production
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:7860', timeout=5)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped

nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- tech-stack-advisor
restart: unless-stopped