Files
kenn-io--agentsview/docs/screenshots/update-generated-assets-branch.sh
wehub-resource-sync f99010fae1
CI / lint (push) Failing after 1s
CI / frontend (push) Failing after 1s
CI / scripts (push) Failing after 1s
CI / Go Test (ubuntu-latest) (push) Failing after 0s
CI / frontend-node-25 (push) Failing after 1s
CI / docs (push) Failing after 0s
CI / coverage (push) Failing after 0s
CI / e2e (push) Failing after 0s
Docker / build-and-push (push) Failing after 1s
CI / integration (push) Failing after 4m43s
CI / Go Test (windows-latest) (push) Has been cancelled
CI / Desktop Unit Tests (Windows) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux (arm64)) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Windows) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (aarch64)) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (x86_64)) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:36 +08:00

205 lines
5.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Regenerate docs screenshots and update docs-generated-assets.
set -euo pipefail
script_dir="$(cd "$(dirname "$0")" && pwd)"
docs_root="$(cd "$script_dir/.." && pwd)"
repo_root="$(cd "$docs_root/.." && pwd)"
assets_branch="${AGENTSVIEW_DOCS_GENERATED_ASSETS_BRANCH:-docs-generated-assets}"
source_dir=""
push=false
generate=true
expected_assets=(
"screenshots/about-dialog.png"
"screenshots/activity-breakdowns.png"
"screenshots/activity-concurrency.png"
"screenshots/activity-insight.png"
"screenshots/activity-page.png"
"screenshots/activity-sessions.png"
"screenshots/activity-timeline.png"
"screenshots/activity-week.png"
"screenshots/agent-comparison.png"
"screenshots/analytics-model-filter.png"
"screenshots/block-filter.png"
"screenshots/code-block-copy-btn.png"
"screenshots/command-palette.png"
"screenshots/dashboard.png"
"screenshots/date-range.png"
"screenshots/focused-transcript.png"
"screenshots/follow-latest-toggle.png"
"screenshots/grade-badge.png"
"screenshots/heatmap-filtered.png"
"screenshots/heatmap.png"
"screenshots/hour-of-week.png"
"screenshots/import-button.png"
"screenshots/import-modal-chatgpt.png"
"screenshots/import-modal-claude.png"
"screenshots/in-session-search.png"
"screenshots/insight-content.png"
"screenshots/insights.png"
"screenshots/layout-compact.png"
"screenshots/layout-stream.png"
"screenshots/machine-labels.png"
"screenshots/message-copy-btn.png"
"screenshots/message-viewer.png"
"screenshots/project-breakdown.png"
"screenshots/publish-modal.png"
"screenshots/recent-edits.png"
"screenshots/resync-modal.png"
"screenshots/search-grouped.png"
"screenshots/search-results.png"
"screenshots/session-filtered.png"
"screenshots/session-filters-active.png"
"screenshots/session-filters.png"
"screenshots/session-health.png"
"screenshots/session-insight-action.png"
"screenshots/session-list.png"
"screenshots/session-shape.png"
"screenshots/session-vital-signs.png"
"screenshots/settings-remote.png"
"screenshots/settings.png"
"screenshots/shortcuts-modal.png"
"screenshots/signal-panel.png"
"screenshots/starred-session.png"
"screenshots/subagent-tree.png"
"screenshots/summary-cards.png"
"screenshots/theme-dark.png"
"screenshots/theme-light.png"
"screenshots/thinking-blocks.png"
"screenshots/token-usage.png"
"screenshots/tool-block-copy-btn.png"
"screenshots/tool-blocks.png"
"screenshots/tool-groups.png"
"screenshots/tool-usage.png"
"screenshots/top-sessions.png"
"screenshots/top-skills.png"
"screenshots/trends.png"
"screenshots/usage-attribution.png"
"screenshots/usage-cache-efficiency.png"
"screenshots/usage-cost-trend.png"
"screenshots/usage-filter-dropdown.png"
"screenshots/usage-page.png"
"screenshots/usage-summary-cards.png"
"screenshots/usage-toolbar.png"
"screenshots/usage-top-sessions.png"
"screenshots/velocity.png"
"screenshots/vital-signs-panel.png"
"screenshots/worktree-mappings.png"
)
usage() {
cat <<EOF
Usage: $(basename "$0") [--source DIR] [--skip-generate] [--push]
Update the local $assets_branch branch to a single orphan commit containing
generated CLI/TUI screenshots. By default this regenerates screenshots first.
Pass --source DIR to import existing screenshots instead.
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--source)
[[ $# -ge 2 ]] || { printf 'ERROR: --source requires a directory\n' >&2; exit 2; }
source_dir="$2"
generate=false
shift 2
;;
--skip-generate)
generate=false
shift
;;
--push)
push=true
shift
;;
-h|--help)
usage
exit 0
;;
*)
printf 'unknown option: %s\n' "$1" >&2
usage >&2
exit 2
;;
esac
done
if [[ "$generate" == true ]]; then
rm -rf "$docs_root/assets/generated"
"$script_dir/run.sh"
fi
if [[ -z "$source_dir" ]]; then
source_dir="$docs_root/assets/generated"
fi
source_dir="$(cd "$source_dir" 2>/dev/null && pwd)" || {
printf 'generated docs asset source does not exist: %s\n' "$source_dir" >&2
exit 1
}
for asset in "${expected_assets[@]}"; do
if [[ -L "$source_dir/$asset" ]]; then
printf 'generated docs asset source must not be a symlink: %s\n' "$asset" >&2
exit 1
fi
if [[ ! -f "$source_dir/$asset" ]]; then
printf 'generated docs asset source is missing expected asset: %s\n' "$asset" >&2
exit 1
fi
done
is_expected_asset() {
local path="$1"
local asset
for asset in "${expected_assets[@]}"; do
[[ "$asset" == "$path" ]] && return 0
done
return 1
}
while IFS= read -r -d '' path; do
rel="${path#"$source_dir"/}"
case "$rel" in
.DS_Store|*/.DS_Store)
continue
;;
esac
if ! is_expected_asset "$rel"; then
printf 'generated docs asset source has unexpected file: %s\n' "$rel" >&2
exit 1
fi
done < <(find "$source_dir" -mindepth 1 \( -type f -o -type l \) -print0)
tmp_root="$(mktemp -d)"
asset_repo="$tmp_root/assets-repo"
cleanup() {
rm -rf "$tmp_root"
}
trap cleanup EXIT
mkdir -p "$asset_repo"
for asset in "${expected_assets[@]}"; do
mkdir -p "$asset_repo/$(dirname "$asset")"
cp "$source_dir/$asset" "$asset_repo/$asset"
done
git -C "$asset_repo" init --quiet
git -C "$asset_repo" add .
git -C "$asset_repo" \
-c user.name="${GIT_AUTHOR_NAME:-agentsview docs bot}" \
-c user.email="${GIT_AUTHOR_EMAIL:-docs-bot@example.invalid}" \
commit -m "docs generated assets" >/dev/null
asset_commit="$(git -C "$asset_repo" rev-parse HEAD)"
git -C "$asset_repo" update-ref refs/heads/assets "$asset_commit"
git -C "$repo_root" fetch "$asset_repo" "+refs/heads/assets:refs/heads/$assets_branch" >/dev/null
printf 'Updated %s -> %s\n' "$assets_branch" "$asset_commit"
if [[ "$push" == true ]]; then
git -C "$repo_root" push --force origin "$assets_branch"
fi