✨ feat(workflow): adopt Matt Pocock ticket workflow
Replace the Superpowers plan pipeline with grill-with-docs, specs, local tickets, and ticket-native execution. BREAKING CHANGE: Remove the legacy Plan CLI, prompt templates, and Superpowers skills.
This commit is contained in:
@@ -29,12 +29,13 @@ env:
|
||||
|
||||
jobs:
|
||||
checks:
|
||||
# 仅在 Prepare 成功后触发。Prepare 覆盖 push(main) / pull_request /
|
||||
# schedule / dispatch,故 checks 在这些场景均会运行。
|
||||
# 仅在 Prepare 成功后触发;排除 schedule:每日 cron 仅为刷新 thirdparty,
|
||||
# main 代码未变,无需对同一 HEAD 空跑 lint+全量测试。Prepare 覆盖
|
||||
# push(main) / pull_request / dispatch,checks 在这些场景运行。
|
||||
# lint 与 test 合并为单 job:共用一个临时 worktree,准备一次,顺序执行
|
||||
# (lint 在前 fail-fast,失败即不跑 test)。二者跑同一 SOURCE_SHA、皆只读、
|
||||
# 无依赖,无需拆分为并行 job(那会重复整段 worktree 准备逻辑 + 多一个 worktree)。
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event != 'schedule' }}
|
||||
name: 🔎 规范检查 + 全量测试
|
||||
runs-on: standard-ubuntu-22
|
||||
permissions:
|
||||
|
||||
@@ -91,6 +91,8 @@ jobs:
|
||||
fi
|
||||
done
|
||||
|
||||
python3 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else "Python 3.11 or newer is required")'
|
||||
|
||||
{
|
||||
echo "## Prepare 环境"
|
||||
echo ""
|
||||
|
||||
@@ -33,8 +33,9 @@ env:
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
# 仅在 Prepare 于主分支成功后触发。
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.head_branch == 'main' || github.event.workflow_run.head_branch == 'master') }}
|
||||
# 仅在 Prepare 于主分支成功后触发;排除 schedule:每日 cron 仅为刷新
|
||||
# thirdparty,main 代码未变,重建 tsl-playbook 属纯浪费(幂等空推)。
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.head_branch == 'main' || github.event.workflow_run.head_branch == 'master') && github.event.workflow_run.event != 'schedule' }}
|
||||
name: 🔨 构建并发布 tsl-playbook
|
||||
runs-on: standard-ubuntu-22
|
||||
permissions:
|
||||
|
||||
@@ -416,7 +416,12 @@ jobs:
|
||||
entry["snapshot_dir"],
|
||||
entry["sync_mode"],
|
||||
entry["source_list"],
|
||||
entry.get("skills_subdir", ""),
|
||||
"\x1e".join(
|
||||
entry.get(
|
||||
"skills_subdirs",
|
||||
[entry.get("skills_subdir", "")],
|
||||
)
|
||||
),
|
||||
entry.get("output_name", entry["id"]),
|
||||
entry.get("platform_config", ""),
|
||||
entry.get("template_root", ""),
|
||||
@@ -541,7 +546,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_subdir output_name platform_config template_root data_dir scripts_dir include_skill_dirs; do
|
||||
while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_subdirs output_name platform_config template_root data_dir scripts_dir include_skill_dirs; do
|
||||
[ -n "$source_id" ] || continue
|
||||
|
||||
if [ -f "$source_list" ]; then
|
||||
@@ -553,7 +558,7 @@ jobs:
|
||||
done < "$sources_file"
|
||||
|
||||
declare -A owners=()
|
||||
while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_subdir output_name platform_config template_root data_dir scripts_dir include_skill_dirs; do
|
||||
while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_subdirs output_name platform_config template_root data_dir scripts_dir include_skill_dirs; do
|
||||
[ -n "$source_id" ] || continue
|
||||
|
||||
git archive --format=tar "origin/${THIRDPARTY_BRANCH}" "$snapshot_dir" | tar -xf - -C "$tmp_dir"
|
||||
@@ -562,31 +567,37 @@ jobs:
|
||||
names=()
|
||||
case "$sync_mode" in
|
||||
copy_skill_dirs)
|
||||
source_skills_dir="$snapshot_root/$skills_subdir"
|
||||
if [ ! -d "$source_skills_dir" ]; then
|
||||
echo "ERROR: $skills_subdir not found in snapshot $snapshot_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for dir in "$source_skills_dir"/*; do
|
||||
[ -d "$dir" ] || continue
|
||||
name="$(basename "$dir")"
|
||||
if ! skill_dir_included "$name" "$include_skill_dirs"; then
|
||||
continue
|
||||
fi
|
||||
if [ -n "${owners[$name]:-}" ] && [ "${owners[$name]}" != "$source_id" ]; then
|
||||
echo "ERROR: duplicate third-party skill name: $name" >&2
|
||||
exit 1
|
||||
fi
|
||||
if tracked_skill_exists "$name"; then
|
||||
echo "ERROR: skill name conflict with tracked skill: $name" >&2
|
||||
local_ifs="$IFS"
|
||||
IFS=$'\x1e'
|
||||
read -r -a skill_roots <<< "$skills_subdirs"
|
||||
IFS="$local_ifs"
|
||||
for skills_subdir in "${skill_roots[@]}"; do
|
||||
source_skills_dir="$snapshot_root/$skills_subdir"
|
||||
if [ ! -d "$source_skills_dir" ]; then
|
||||
echo "ERROR: $skills_subdir not found in snapshot $snapshot_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "skills/thirdparty/$name"
|
||||
cp -R "$dir" "skills/thirdparty/$name"
|
||||
names+=("$name")
|
||||
owners["$name"]="$source_id"
|
||||
for dir in "$source_skills_dir"/*; do
|
||||
[ -d "$dir" ] || continue
|
||||
name="$(basename "$dir")"
|
||||
if ! skill_dir_included "$name" "$include_skill_dirs"; then
|
||||
continue
|
||||
fi
|
||||
if [ -n "${owners[$name]:-}" ] && [ "${owners[$name]}" != "$source_id" ]; then
|
||||
echo "ERROR: duplicate third-party skill name: $name" >&2
|
||||
exit 1
|
||||
fi
|
||||
if tracked_skill_exists "$name"; then
|
||||
echo "ERROR: skill name conflict with tracked skill: $name" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "skills/thirdparty/$name"
|
||||
cp -R "$dir" "skills/thirdparty/$name"
|
||||
names+=("$name")
|
||||
owners["$name"]="$source_id"
|
||||
done
|
||||
done
|
||||
;;
|
||||
render_skill)
|
||||
|
||||
Reference in New Issue
Block a user