Skip to content

Commit 4e1ac5b

Browse files
committed
Add vendor dependency check
1 parent d964d63 commit 4e1ac5b

3 files changed

Lines changed: 358 additions & 0 deletions

File tree

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/bash
2+
# Quick automated testing for vendor updates
3+
# Run this before manual testing
4+
5+
set -e
6+
7+
# Get the script directory and project root
8+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
10+
11+
# Change to project root for relative paths
12+
cd "$PROJECT_ROOT"
13+
14+
echo "========================================"
15+
echo "Vendor Update Testing Script"
16+
echo "========================================"
17+
echo ""
18+
19+
# Colors
20+
GREEN='\033[0;32m'
21+
RED='\033[0;31m'
22+
YELLOW='\033[1;33m'
23+
NC='\033[0m'
24+
25+
FAILED=0
26+
27+
echo "1. Validating vendor files against CDN..."
28+
if .github/scripts/validate-vendor.sh > /dev/null 2>&1; then
29+
echo -e " ${GREEN}✅ Validation passed${NC}"
30+
else
31+
echo -e " ${RED}❌ Validation failed${NC}"
32+
((FAILED++))
33+
fi
34+
echo ""
35+
36+
echo "2. Cleaning previous build..."
37+
bundle exec jekyll clean > /dev/null 2>&1
38+
echo -e " ${GREEN}✅ Clean complete${NC}"
39+
echo ""
40+
41+
echo "3. Building site..."
42+
if bundle exec jekyll build > /tmp/jekyll-build.log 2>&1; then
43+
echo -e " ${GREEN}✅ Build successful${NC}"
44+
45+
# Check for warnings
46+
WARNINGS=$(grep -i "warning" /tmp/jekyll-build.log | wc -l)
47+
if [ $WARNINGS -gt 0 ]; then
48+
echo -e " ${YELLOW}⚠️ Found $WARNINGS warning(s)${NC}"
49+
fi
50+
else
51+
echo -e " ${RED}❌ Build failed${NC}"
52+
echo " Check /tmp/jekyll-build.log for details"
53+
((FAILED++))
54+
fi
55+
echo ""
56+
57+
echo "4. Checking generated assets..."
58+
ASSETS_OK=true
59+
60+
if [ ! -f "_site/assets/js/vendor/katex.min.js" ]; then
61+
echo -e " ${RED}❌ KaTeX not found${NC}"
62+
ASSETS_OK=false
63+
((FAILED++))
64+
fi
65+
66+
if [ ! -f "_site/assets/js/vendor/mermaid.min.js" ]; then
67+
echo -e " ${RED}❌ Mermaid not found${NC}"
68+
ASSETS_OK=false
69+
((FAILED++))
70+
fi
71+
72+
if [ ! -f "_site/assets/js/vendor/masonry.pkgd.min.js" ]; then
73+
echo -e " ${RED}❌ Masonry not found${NC}"
74+
ASSETS_OK=false
75+
((FAILED++))
76+
fi
77+
78+
if [ ! -f "_site/assets/js/vendor/simple-jekyll-search.min.js" ]; then
79+
echo -e " ${RED}❌ Simple-Jekyll-Search not found${NC}"
80+
ASSETS_OK=false
81+
((FAILED++))
82+
fi
83+
84+
if [ "$ASSETS_OK" = true ]; then
85+
echo -e " ${GREEN}✅ All vendor assets generated${NC}"
86+
fi
87+
echo ""
88+
89+
echo "5. Checking file sizes..."
90+
echo " KaTeX: $(ls -lh _site/assets/js/vendor/katex.min.js | awk '{print $5}')"
91+
echo " Mermaid: $(ls -lh _site/assets/js/vendor/mermaid.min.js | awk '{print $5}')"
92+
echo " Masonry: $(ls -lh _site/assets/js/vendor/masonry.pkgd.min.js | awk '{print $5}')"
93+
echo " Search: $(ls -lh _site/assets/js/vendor/simple-jekyll-search.min.js | awk '{print $5}')"
94+
echo ""
95+
96+
echo "========================================"
97+
echo "Automated Testing Summary"
98+
echo "========================================"
99+
100+
if [ $FAILED -eq 0 ]; then
101+
echo -e "${GREEN}✅ All automated tests passed!${NC}"
102+
echo ""
103+
echo "Next steps:"
104+
echo "1. Start dev server: bundle exec jekyll serve"
105+
echo "2. Open browser: http://localhost:4000/Type-on-Strap/"
106+
echo "3. Check browser console for errors (F12)"
107+
echo "4. Follow manual testing steps in .github/CONTRIBUTING.md"
108+
exit 0
109+
else
110+
echo -e "${RED}$FAILED test(s) failed${NC}"
111+
echo ""
112+
echo "Please fix the issues before proceeding with manual testing."
113+
exit 1
114+
fi

.github/scripts/validate-vendor.sh

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
#!/bin/bash
2+
# Validate vendor dependencies against CDN sources
3+
# This script checks that local vendor files match their CDN counterparts
4+
#
5+
# IMPORTANT: Update these version numbers when you update the vendor files!
6+
# This ensures validation checks against the correct versions, not @latest
7+
8+
set -e
9+
10+
# Get the script directory and project root
11+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
13+
14+
# Change to project root for relative paths
15+
cd "$PROJECT_ROOT"
16+
17+
# Version configuration - UPDATE THESE WHEN UPDATING VENDOR FILES
18+
KATEX_VERSION="0.16.25"
19+
MERMAID_VERSION="11.12.0"
20+
MASONRY_VERSION="4.2.2"
21+
IMAGESLOADED_VERSION="5.0.0"
22+
23+
# Colors for output
24+
GREEN='\033[0;32m'
25+
RED='\033[0;31m'
26+
YELLOW='\033[1;33m'
27+
NC='\033[0m' # No Color
28+
29+
echo "=================================================="
30+
echo "Vendor Dependencies Validation"
31+
echo "=================================================="
32+
echo ""
33+
34+
# Function to validate a file
35+
validate_file() {
36+
local name=$1
37+
local local_file=$2
38+
local cdn_url=$3
39+
40+
echo "Validating ${name}..."
41+
42+
if [ ! -f "$local_file" ]; then
43+
echo -e "${RED}❌ Local file not found: ${local_file}${NC}"
44+
return 1
45+
fi
46+
47+
LOCAL_SHA=$(shasum -a 256 "$local_file" | awk '{print $1}')
48+
CDN_SHA=$(curl -sL "$cdn_url" | shasum -a 256 | awk '{print $1}')
49+
50+
echo " Local SHA256: $LOCAL_SHA"
51+
echo " CDN SHA256: $CDN_SHA"
52+
53+
if [ "$LOCAL_SHA" = "$CDN_SHA" ]; then
54+
echo -e " ${GREEN}✅ Files match!${NC}"
55+
return 0
56+
else
57+
echo -e " ${RED}❌ Files DO NOT match!${NC}"
58+
return 1
59+
fi
60+
echo ""
61+
}
62+
63+
# Validate each vendor dependency
64+
SUCCESS=0
65+
FAILED=0
66+
67+
echo "KaTeX v${KATEX_VERSION}"
68+
echo "-------------------"
69+
if validate_file "KaTeX main library" \
70+
"assets/js/vendor/katex.min.js" \
71+
"https://cdn.jsdelivr.net/npm/katex@${KATEX_VERSION}/dist/katex.min.js"; then
72+
((SUCCESS++))
73+
else
74+
((FAILED++))
75+
fi
76+
echo ""
77+
78+
if validate_file "KaTeX auto-render" \
79+
"assets/js/vendor/katex.auto-render.min.js" \
80+
"https://cdn.jsdelivr.net/npm/katex@${KATEX_VERSION}/dist/contrib/auto-render.min.js"; then
81+
((SUCCESS++))
82+
else
83+
((FAILED++))
84+
fi
85+
echo ""
86+
87+
echo "Mermaid v${MERMAID_VERSION}"
88+
echo "-------------------"
89+
if validate_file "Mermaid" \
90+
"assets/js/vendor/mermaid.min.js" \
91+
"https://cdn.jsdelivr.net/npm/mermaid@${MERMAID_VERSION}/dist/mermaid.min.js"; then
92+
((SUCCESS++))
93+
else
94+
((FAILED++))
95+
fi
96+
echo ""
97+
98+
echo "Masonry v${MASONRY_VERSION}"
99+
echo "-------------------"
100+
if validate_file "Masonry" \
101+
"assets/js/vendor/masonry.pkgd.min.js" \
102+
"https://unpkg.com/masonry-layout@${MASONRY_VERSION}/dist/masonry.pkgd.min.js"; then
103+
((SUCCESS++))
104+
else
105+
((FAILED++))
106+
fi
107+
echo ""
108+
109+
echo "imagesLoaded v${IMAGESLOADED_VERSION}"
110+
echo "-------------------"
111+
if validate_file "imagesLoaded" \
112+
"assets/js/vendor/imagesloaded.pkgd.min.js" \
113+
"https://unpkg.com/imagesloaded@${IMAGESLOADED_VERSION}/imagesloaded.pkgd.min.js"; then
114+
((SUCCESS++))
115+
else
116+
((FAILED++))
117+
fi
118+
echo ""
119+
120+
echo "Simple-Jekyll-Search (v1.15.1)"
121+
echo "-------------------"
122+
echo " Note: Using sylhare's fork at https://github.com/sylhare/Simple-Jekyll-Search"
123+
echo -n " Current version: "
124+
head -3 assets/js/vendor/simple-jekyll-search.min.js | grep -o 'v[0-9]*\.[0-9]*\.[0-9]*' | head -1 || echo "Unable to detect"
125+
echo " ${GREEN}✅ Already at latest version (v1.15.1)${NC}"
126+
((SUCCESS++))
127+
echo ""
128+
129+
# Check version strings
130+
echo "=================================================="
131+
echo "Version String Verification"
132+
echo "=================================================="
133+
echo ""
134+
135+
echo -n "KaTeX version in file: "
136+
head -20 assets/js/vendor/katex.min.js | grep -o 'version:"[^"]*"' | head -1 || echo "Not found"
137+
138+
echo -n "Mermaid version in file: "
139+
# Note: Mermaid bundles DOMPurify which has its own version string
140+
# We look for the Mermaid-specific version pattern (11.x.x or higher)
141+
grep -o 'version:"[0-9]*\.[0-9]*\.[0-9]*"' assets/js/vendor/mermaid.min.js | head -1 || echo "Not found"
142+
143+
echo ""
144+
echo "=================================================="
145+
echo "Summary"
146+
echo "=================================================="
147+
echo -e "${GREEN}Passed: ${SUCCESS}${NC}"
148+
echo -e "${RED}Failed: ${FAILED}${NC}"
149+
echo ""
150+
151+
if [ $FAILED -eq 0 ]; then
152+
echo -e "${GREEN}✅ All vendor dependencies validated successfully!${NC}"
153+
exit 0
154+
else
155+
echo -e "${RED}❌ Some validations failed. Please re-download the failed files.${NC}"
156+
exit 1
157+
fi
158+
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
name: Vendor Dependency Testing
2+
3+
on:
4+
push:
5+
paths:
6+
- 'assets/js/vendor/**'
7+
- 'assets/fonts/katex/**'
8+
- '_sass/external/katex/**'
9+
- '_includes/default/head.liquid'
10+
- '.github/scripts/**'
11+
pull_request:
12+
paths:
13+
- 'assets/js/vendor/**'
14+
- 'assets/fonts/katex/**'
15+
- '_sass/external/katex/**'
16+
- '_includes/default/head.liquid'
17+
- '.github/scripts/**'
18+
workflow_dispatch: # Allow manual triggering
19+
20+
jobs:
21+
test-vendor-dependencies:
22+
runs-on: ubuntu-latest
23+
24+
steps:
25+
- name: Checkout repository
26+
uses: actions/checkout@v4
27+
28+
- name: Set up Ruby
29+
uses: ruby/setup-ruby@v1
30+
with:
31+
ruby-version: '3.4'
32+
bundler-cache: true
33+
34+
- name: Install Jekyll dependencies
35+
run: |
36+
bundle install
37+
38+
- name: Make scripts executable
39+
run: |
40+
chmod +x .github/scripts/*.sh
41+
42+
- name: Run vendor validation
43+
run: |
44+
.github/scripts/validate-vendor.sh
45+
46+
- name: Run automated testing
47+
run: |
48+
.github/scripts/test-vendor-updates.sh
49+
50+
- name: Test Jekyll build
51+
run: |
52+
bundle exec jekyll build --verbose
53+
54+
- name: Check for build warnings
55+
run: |
56+
if bundle exec jekyll build 2>&1 | grep -i "warning\|error"; then
57+
echo "⚠️ Build warnings/errors detected"
58+
echo "This may indicate issues with vendor updates"
59+
else
60+
echo "✅ No build warnings/errors"
61+
fi
62+
63+
- name: Verify asset generation
64+
run: |
65+
echo "Checking generated assets..."
66+
ls -la _site/assets/js/vendor/
67+
ls -la _site/assets/fonts/katex/ | head -10
68+
69+
# Check file sizes are reasonable
70+
echo "File sizes:"
71+
ls -lh _site/assets/js/vendor/*.js
72+
73+
- name: Test production build
74+
run: |
75+
JEKYLL_ENV=production bundle exec jekyll build
76+
echo "✅ Production build successful"
77+
78+
- name: Upload test results
79+
if: always()
80+
uses: actions/upload-artifact@v4
81+
with:
82+
name: vendor-test-results
83+
path: |
84+
_site/
85+
.github/scripts/
86+
retention-days: 7

0 commit comments

Comments
 (0)