ci: add daily upstream sync + custom skills lint#9
Conversation
- GitHub Actions workflow: sync upstream Kiro Powers daily at 08:00 UTC - Clones from main branch (upstream has no release tags) - Preserves 8 custom skills (module-organizer, refactoring, unit-testing, etc) - Creates PR for manual review before merge - Updates README Last synced date automatically - Both actions pinned to SHA for supply-chain safety - Lint workflow: verify custom skills list consistency - Checks CUSTOM_SKILLS array vs README table - Prevents drift via CI gate on all pushes/PRs - Runs on every commit (fast validation) - README: updated sync instructions + custom skills documentation - Added sentinel comments for markdown anchoring - Linked to CI automation details - Clarified prerequisites (GitHub Actions approval setting) Fixes: supply-chain hardening (SHA pinning), markdown robustness (sentinels), lint validation (consistency checks), grep anchoring (no false positives)
|
Claude finished @royosherove's task in 1m 24s —— View job PR Review
Overall this is well-structured and clearly thought through. A few issues worth addressing before merge. sync-upstream.ymlBug — labels will be treated as a single string (line 130) labels: 'chore, automated'
labels: |
chore
automatedSupply chain risk — upstream cloned unpinned from git clone --depth 1 https://github.com/kirodotdev/powers.git /tmp/powersThis is acknowledged in the PR description ("no release tags"). It means a compromised upstream
skill_name=$(basename "$skill_dir")
...
rm -rf "$skill_name"
# Validate: skill name must be alphanumeric + hyphens only
if [[ ! "$skill_name" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "⚠️ Skipping invalid skill name: $skill_name"
continue
filint.ymlFragility — single-line array assumption (line 19) WORKFLOW_SKILLS=$(grep "^[[:space:]]*CUSTOM_SKILLS=(" .github/workflows/sync-upstream.yml \
| sed 's/.*CUSTOM_SKILLS=(\([^)]*\)).*/\1/' \
| tr ' ' '\n' | sed 's/"//g' | sort)This only works when # NOTE: CUSTOM_SKILLS must remain on a single line in sync-upstream.yml
# Multi-line format will break this extraction.Or switch to a more robust extraction approach. Missing The lint job performs only reads, but has no explicit jobs:
verify-custom-skills-sync:
runs-on: ubuntu-latest
permissions:
contents: readREADME.mdChanges look clean. The sentinel comments are well-placed and the note inside the sentinel block won't be incorrectly parsed by the lint grep (which anchors to Summary
The labels bug is the only one that will silently misbehave at runtime. The rest are defensive hardening. Good work overall — the structure, SHA-pinning, and concurrency handling are solid. |
Summary
Automated daily sync from upstream Kiro Powers + CI validation for custom skills consistency.
Changes
Sync Workflow (sync-upstream.yml)
Lint Workflow (lint.yml)
Documentation (README.md)
Security
Testing
Ready to merge!