@juangadm/pre-post 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +388 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/browser.d.ts +25 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +82 -0
- package/dist/browser.js.map +1 -0
- package/dist/capture.d.ts +9 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +52 -0
- package/dist/capture.js.map +1 -0
- package/dist/clipboard.d.ts +9 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +26 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/filename.d.ts +24 -0
- package/dist/filename.d.ts.map +1 -0
- package/dist/filename.js +76 -0
- package/dist/filename.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/generic.d.ts +11 -0
- package/dist/routes/generic.d.ts.map +1 -0
- package/dist/routes/generic.js +106 -0
- package/dist/routes/generic.js.map +1 -0
- package/dist/routes/nextjs.d.ts +14 -0
- package/dist/routes/nextjs.d.ts.map +1 -0
- package/dist/routes/nextjs.js +196 -0
- package/dist/routes/nextjs.js.map +1 -0
- package/dist/routes.d.ts +21 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +174 -0
- package/dist/routes.js.map +1 -0
- package/dist/types.d.ts +98 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/upload.d.ts +35 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +116 -0
- package/dist/upload.js.map +1 -0
- package/dist/viewport.d.ts +3 -0
- package/dist/viewport.d.ts.map +1 -0
- package/dist/viewport.js +11 -0
- package/dist/viewport.js.map +1 -0
- package/package.json +66 -0
- package/skill/SKILL.md +246 -0
- package/skill/scripts/adapters/0x0st.sh +36 -0
- package/skill/scripts/adapters/blob.sh +55 -0
- package/skill/scripts/adapters/gist.sh +59 -0
- package/skill/scripts/adapters/git-native.sh +75 -0
- package/skill/scripts/upload-and-copy.sh +183 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# upload-and-copy.sh - Upload images via pluggable storage adapters
|
|
3
|
+
# Usage: ./upload-and-copy.sh <before.png> <after.png> [--markdown]
|
|
4
|
+
#
|
|
5
|
+
# Options:
|
|
6
|
+
# --markdown Generate PR markdown table and copy to clipboard
|
|
7
|
+
#
|
|
8
|
+
# Environment:
|
|
9
|
+
# IMAGE_ADAPTER Storage adapter to use (default: git-native)
|
|
10
|
+
# Available: git-native, 0x0st, gist, blob
|
|
11
|
+
#
|
|
12
|
+
# Adapter-specific environment variables:
|
|
13
|
+
# blob: BLOB_UPLOAD_URL - Custom upload endpoint
|
|
14
|
+
#
|
|
15
|
+
# Examples:
|
|
16
|
+
# ./upload-and-copy.sh before.png after.png
|
|
17
|
+
# ./upload-and-copy.sh before.png after.png --markdown
|
|
18
|
+
# IMAGE_ADAPTER=0x0st ./upload-and-copy.sh before.png after.png --markdown
|
|
19
|
+
|
|
20
|
+
set -e
|
|
21
|
+
|
|
22
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
23
|
+
ADAPTERS_DIR="$SCRIPT_DIR/adapters"
|
|
24
|
+
|
|
25
|
+
# Default adapter
|
|
26
|
+
IMAGE_ADAPTER="${IMAGE_ADAPTER:-git-native}"
|
|
27
|
+
|
|
28
|
+
BEFORE_FILE="$1"
|
|
29
|
+
AFTER_FILE="$2"
|
|
30
|
+
shift 2 2>/dev/null || true
|
|
31
|
+
|
|
32
|
+
MARKDOWN_MODE=false
|
|
33
|
+
|
|
34
|
+
# Parse options
|
|
35
|
+
while [[ $# -gt 0 ]]; do
|
|
36
|
+
case $1 in
|
|
37
|
+
--markdown)
|
|
38
|
+
MARKDOWN_MODE=true
|
|
39
|
+
shift
|
|
40
|
+
;;
|
|
41
|
+
*)
|
|
42
|
+
echo "Unknown option: $1"
|
|
43
|
+
exit 1
|
|
44
|
+
;;
|
|
45
|
+
esac
|
|
46
|
+
done
|
|
47
|
+
|
|
48
|
+
# Validate inputs
|
|
49
|
+
if [[ -z "$BEFORE_FILE" || -z "$AFTER_FILE" ]]; then
|
|
50
|
+
echo "Usage: $0 <before.png> <after.png> [--markdown]"
|
|
51
|
+
echo ""
|
|
52
|
+
echo "Environment:"
|
|
53
|
+
echo " IMAGE_ADAPTER Storage adapter (default: git-native)"
|
|
54
|
+
echo " Available: git-native, 0x0st, gist, blob"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
if [[ ! -f "$BEFORE_FILE" ]]; then
|
|
59
|
+
echo "Error: Before file not found: $BEFORE_FILE"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
if [[ ! -f "$AFTER_FILE" ]]; then
|
|
64
|
+
echo "Error: After file not found: $AFTER_FILE"
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# Validate adapter exists
|
|
69
|
+
ADAPTER_SCRIPT="$ADAPTERS_DIR/$IMAGE_ADAPTER.sh"
|
|
70
|
+
if [[ ! -f "$ADAPTER_SCRIPT" ]]; then
|
|
71
|
+
echo "Error: Unknown adapter: $IMAGE_ADAPTER"
|
|
72
|
+
echo ""
|
|
73
|
+
echo "Available adapters:"
|
|
74
|
+
for adapter in "$ADAPTERS_DIR"/*.sh; do
|
|
75
|
+
name=$(basename "$adapter" .sh)
|
|
76
|
+
echo " - $name"
|
|
77
|
+
done
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Upload function using adapter
|
|
82
|
+
upload_file() {
|
|
83
|
+
local file="$1"
|
|
84
|
+
local filename=$(basename "$file")
|
|
85
|
+
|
|
86
|
+
echo "Uploading: $filename (via $IMAGE_ADAPTER)" >&2
|
|
87
|
+
|
|
88
|
+
# Call the adapter script
|
|
89
|
+
"$ADAPTER_SCRIPT" "$file"
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Upload both files
|
|
93
|
+
echo "=== Uploading Screenshots ==="
|
|
94
|
+
BEFORE_URL=$(upload_file "$BEFORE_FILE")
|
|
95
|
+
AFTER_URL=$(upload_file "$AFTER_FILE")
|
|
96
|
+
|
|
97
|
+
# For git-native adapter: batch commit + push after both files are staged
|
|
98
|
+
if [[ "$IMAGE_ADAPTER" == "git-native" ]]; then
|
|
99
|
+
echo "Committing and pushing screenshots..." >&2
|
|
100
|
+
git commit -m "chore: add pre/post screenshots"
|
|
101
|
+
git push origin HEAD
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
echo ""
|
|
105
|
+
echo "Before URL: $BEFORE_URL"
|
|
106
|
+
echo "After URL: $AFTER_URL"
|
|
107
|
+
echo ""
|
|
108
|
+
|
|
109
|
+
if [[ "$MARKDOWN_MODE" == "true" ]]; then
|
|
110
|
+
# Build section with commit reference
|
|
111
|
+
SHORT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
112
|
+
TIMESTAMP=$(date "+%Y-%m-%d %H:%M")
|
|
113
|
+
|
|
114
|
+
SECTION="### Screenshots ($SHORT_SHA — $TIMESTAMP)
|
|
115
|
+
|
|
116
|
+
| Pre | Post |
|
|
117
|
+
|:---:|:----:|
|
|
118
|
+
|  |  |"
|
|
119
|
+
|
|
120
|
+
echo "=== PR Markdown ==="
|
|
121
|
+
echo "$SECTION"
|
|
122
|
+
echo ""
|
|
123
|
+
|
|
124
|
+
# Auto-append to PR body if gh CLI available and PR exists
|
|
125
|
+
# Parse owner/repo from origin so this works correctly in forks
|
|
126
|
+
REMOTE_URL=$(git remote get-url origin 2>/dev/null || true)
|
|
127
|
+
GH_REPO=$(echo "$REMOTE_URL" | sed -E 's#^(https?://github\.com/|git@github\.com:)##; s#\.git$##')
|
|
128
|
+
|
|
129
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
|
|
130
|
+
|
|
131
|
+
if command -v gh &> /dev/null && [[ -n "$GH_REPO" ]] && [[ -n "$CURRENT_BRANCH" ]]; then
|
|
132
|
+
PR_JSON=$(gh pr view "$CURRENT_BRANCH" --repo "$GH_REPO" --json number,body 2>/dev/null || true)
|
|
133
|
+
if [[ -n "$PR_JSON" ]]; then
|
|
134
|
+
PR_NUMBER=$(echo "$PR_JSON" | grep -o '"number":[0-9]*' | grep -o '[0-9]*')
|
|
135
|
+
PR_BODY=$(echo "$PR_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin).get('body',''))" 2>/dev/null || echo "")
|
|
136
|
+
|
|
137
|
+
# Stack: newest on top, right after ## Visual Changes header
|
|
138
|
+
NEW_BODY=$(python3 -c "
|
|
139
|
+
import sys
|
|
140
|
+
body = sys.argv[1]
|
|
141
|
+
section = sys.argv[2]
|
|
142
|
+
marker = '## Visual Changes'
|
|
143
|
+
if marker in body:
|
|
144
|
+
# Insert new section right after header, push older ones down
|
|
145
|
+
parts = body.split(marker, 1)
|
|
146
|
+
print(parts[0] + marker + '\n\n' + section + '\n\n---' + parts[1])
|
|
147
|
+
else:
|
|
148
|
+
# First time
|
|
149
|
+
print(body + '\n\n' + marker + '\n\n' + section)
|
|
150
|
+
" "$PR_BODY" "$SECTION")
|
|
151
|
+
|
|
152
|
+
gh pr edit "$PR_NUMBER" --repo "$GH_REPO" --body "$NEW_BODY"
|
|
153
|
+
echo "Screenshots appended to PR #$PR_NUMBER body"
|
|
154
|
+
else
|
|
155
|
+
echo "(no PR found for current branch — markdown copied to clipboard)"
|
|
156
|
+
fi
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
# Also copy to clipboard as fallback
|
|
160
|
+
if command -v pbcopy &> /dev/null; then
|
|
161
|
+
echo "$SECTION" | pbcopy
|
|
162
|
+
echo "Markdown copied to clipboard!"
|
|
163
|
+
elif command -v xclip &> /dev/null; then
|
|
164
|
+
echo "$SECTION" | xclip -selection clipboard
|
|
165
|
+
echo "Markdown copied to clipboard!"
|
|
166
|
+
else
|
|
167
|
+
echo "(clipboard copy not available - install pbcopy or xclip)"
|
|
168
|
+
fi
|
|
169
|
+
else
|
|
170
|
+
# Copy URLs to clipboard
|
|
171
|
+
URLS="Before: $BEFORE_URL
|
|
172
|
+
After: $AFTER_URL"
|
|
173
|
+
|
|
174
|
+
if command -v pbcopy &> /dev/null; then
|
|
175
|
+
echo "$URLS" | pbcopy
|
|
176
|
+
echo "URLs copied to clipboard!"
|
|
177
|
+
elif command -v xclip &> /dev/null; then
|
|
178
|
+
echo "$URLS" | xclip -selection clipboard
|
|
179
|
+
echo "URLs copied to clipboard!"
|
|
180
|
+
else
|
|
181
|
+
echo "(clipboard copy not available - install pbcopy or xclip)"
|
|
182
|
+
fi
|
|
183
|
+
fi
|