Skip to content

Weekly Template Inspection #8

Weekly Template Inspection

Weekly Template Inspection #8

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: 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: |
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: Comment on Success
if: success()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
try {
const results = JSON.parse(fs.readFileSync('template_inspection_results.json', 'utf8'));
console.log(`✅ Weekly template inspection completed successfully!`);
console.log(`📊 Results: ${results.passed_templates}/${results.total_templates} templates passed`);
console.log(`📄 Detailed results available in workflow artifacts`);
} catch (error) {
console.log(`✅ Weekly template inspection completed successfully!`);
console.log(`📄 Results available in workflow artifacts`);
}