Skip to content

Weekly Template Inspection #18

Weekly Template Inspection

Weekly Template Inspection #18

name: Weekly Template Inspection
on:
schedule:
- cron: "0 0 * * 3"
workflow_dispatch:
inputs:
templates:
description: "Specific templates to inspect (comma-separated, leave empty for all)"
required: false
default: ""
permissions:
contents: read
issues: write
jobs:
inspect-templates:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Setup PDM
uses: pdm-project/setup-pdm@v4
- name: Install dependencies
run: pdm install -G dev
- name: Install UV package manager
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Verify UV installation
run: |
export PATH="$HOME/.cargo/bin:$PATH"
uv --version
which uv
- name: Set up Docker Compose
run: |
if ! command -v docker-compose &> /dev/null; then
echo "Installing Docker Compose..."
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
fi
docker --version
docker-compose --version
- name: Run template inspection
run: |
export PATH="$HOME/.cargo/bin:$PATH"
uv --version # Verify UV is available
pdm run python scripts/inspect-templates.py --templates "${{ github.event.inputs.templates }}" --output template_inspection_results.json --verbose
- name: Upload inspection results
uses: actions/upload-artifact@v4
if: always() # Upload even if inspection fails
with:
name: template-inspection-results
path: template_inspection_results.json
retention-days: 30
- name: Create Issue on Failure
if: failure()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
let resultsContent = "Inspection results not available.";
try {
const results = JSON.parse(fs.readFileSync('template_inspection_results.json', 'utf8'));
resultsContent = `## 📊 Template Inspection Results
**Inspection Date:** ${results.inspection_date}
**Total Templates:** ${results.total_templates}
**✅ Passed:** ${results.passed_templates}
**❌ Failed:** ${results.failed_templates}
### Failed Templates:
`;
results.results.forEach(result => {
if (!result.is_valid) {
resultsContent += `\n#### ❌ ${result.template_name}\n`;
if (result.errors && result.errors.length > 0) {
resultsContent += "**Errors:**\n";
result.errors.forEach(error => {
resultsContent += `- ${error}\n`;
});
}
if (result.warnings && result.warnings.length > 0) {
resultsContent += "**Warnings:**\n";
result.warnings.forEach(warning => {
resultsContent += `- ${warning}\n`;
});
}
}
});
resultsContent += `\n---\n**Workflow:** [${context.workflow}](${context.payload.repository.html_url}/actions/runs/${context.runId})`;
} catch (error) {
resultsContent += `\nError reading results: ${error.message}`;
}
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `🚨 Weekly Template Inspection Failed - ${new Date().toISOString().split('T')[0]}`,
body: resultsContent,
labels: ['bug', 'template-inspection', 'automated']
});
- name: Report Results
if: always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
try {
const results = JSON.parse(fs.readFileSync('template_inspection_results.json', 'utf8'));
let summary = `## 📊 Template Inspection Summary\n\n`;
summary += `**Inspection Date:** ${results.inspection_date}\n`;
summary += `**Total Templates:** ${results.total_templates}\n`;
summary += `**✅ Passed:** ${results.passed_templates}\n`;
summary += `**❌ Failed:** ${results.failed_templates}\n\n`;
if (results.passed_templates > 0) {
summary += `### ✅ Passed Templates:\n`;
results.results.forEach(result => {
if (result.is_valid) {
summary += `- ${result.template_name}\n`;
}
});
summary += `\n`;
}
if (results.failed_templates > 0) {
summary += `### ❌ Failed Templates:\n`;
results.results.forEach(result => {
if (!result.is_valid) {
summary += `- ${result.template_name}`;
if (result.errors && result.errors.length > 0) {
summary += `: ${result.errors[0]}`;
}
summary += `\n`;
}
});
}
console.log(summary);
if (results.failed_templates === 0) {
console.log(`🎉 All templates passed inspection!`);
} else {
console.log(`⚠️ ${results.failed_templates} template(s) failed inspection`);
}
} catch (error) {
console.log(`📊 Template inspection completed`);
console.log(`📄 Results available in workflow artifacts`);
console.log(`❌ Error reading results: ${error.message}`);
}