* Improve senior-fullstack skill description and workflow validation - Expand frontmatter description with concrete actions and trigger clauses - Add validation steps to scaffolding workflow (verify scaffold succeeded) - Add re-run verification step to audit workflow (confirm P0 fixes) * chore: sync codex skills symlinks [automated] * fix(skill): normalize senior-fullstack frontmatter to inline format Normalize YAML description from block scalar (>) to inline single-line format matching all other 50+ skills. Align frontmatter trigger phrases with the body's Trigger Phrases section to eliminate duplication. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(ci): add GITHUB_TOKEN to checkout + restore corrupted skill descriptions - Add token: ${{ secrets.GITHUB_TOKEN }} to actions/checkout@v4 in sync-codex-skills.yml so git-auto-commit-action can push back to branch (fixes: fatal: could not read Username, exit 128) - Restore correct description for incident-commander (was: 'Skill from engineering-team') - Restore correct description for senior-fullstack (was: '>') * fix(ci): pass PROJECTS_TOKEN to fix automated commits + remove duplicate checkout Fixes PROJECTS_TOKEN passthrough for git-auto-commit-action and removes duplicate checkout step in pr-issue-auto-close workflow. * fix(ci): remove stray merge conflict marker in sync-codex-skills.yml (#221) Co-authored-by: Leo <leo@leo-agent-server> * fix(ci): fix workflow errors + add OpenClaw support (#222) --------- Co-authored-by: Baptiste Fernandez <fernandez.baptiste1@gmail.com> Co-authored-by: alirezarezvani <5697919+alirezarezvani@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Leo <leo@leo-agent-server>
90 lines
2.8 KiB
YAML
90 lines
2.8 KiB
YAML
---
|
|
name: Sync Codex Skills Symlinks
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- '**/SKILL.md'
|
|
- 'scripts/sync-codex-skills.py'
|
|
branches:
|
|
- main
|
|
- dev
|
|
workflow_dispatch:
|
|
inputs:
|
|
dry_run:
|
|
description: 'Dry run (no changes)'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
jobs:
|
|
sync:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.PROJECTS_TOKEN }}
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Sync Codex skills symlinks
|
|
env:
|
|
DRY_RUN: ${{ github.event.inputs.dry_run }}
|
|
run: |
|
|
if [ "$DRY_RUN" == "true" ]; then
|
|
python scripts/sync-codex-skills.py --verbose --dry-run
|
|
else
|
|
python scripts/sync-codex-skills.py --verbose --validate
|
|
fi
|
|
|
|
- name: Check for changes
|
|
id: check_changes
|
|
run: |
|
|
if git diff --quiet .codex/; then
|
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "has_changes=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Commit changes (dev only)
|
|
if: steps.check_changes.outputs.has_changes == 'true' && github.event.inputs.dry_run != 'true' && github.ref != 'refs/heads/main'
|
|
uses: stefanzweifel/git-auto-commit-action@v5
|
|
with:
|
|
commit_message: "chore: sync codex skills symlinks [automated]"
|
|
file_pattern: ".codex/*"
|
|
commit_user_name: "github-actions[bot]"
|
|
commit_user_email: "github-actions[bot]@users.noreply.github.com"
|
|
token: ${{ secrets.PROJECTS_TOKEN }}
|
|
|
|
- name: Warn if main has drift
|
|
if: steps.check_changes.outputs.has_changes == 'true' && github.ref == 'refs/heads/main'
|
|
run: |
|
|
echo "::warning::Codex skills symlinks are out of sync on main. Run the sync on dev and merge via PR."
|
|
|
|
- name: Summary
|
|
run: |
|
|
echo "## Codex Skills Sync Summary" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
if [ -f ".codex/skills-index.json" ]; then
|
|
TOTAL=$(python3 -c "import json; print(json.load(open('.codex/skills-index.json'))['total_skills'])")
|
|
echo "**Total Skills:** $TOTAL" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### Categories" >> $GITHUB_STEP_SUMMARY
|
|
python3 -c "
|
|
import json
|
|
data = json.load(open('.codex/skills-index.json'))
|
|
for cat, info in data['categories'].items():
|
|
print(f'- **{cat}**: {info[\"count\"]} skills')
|
|
" >> $GITHUB_STEP_SUMMARY
|
|
else
|
|
echo "No skills index found." >> $GITHUB_STEP_SUMMARY
|
|
fi
|