-
Notifications
You must be signed in to change notification settings - Fork 23
146 lines (124 loc) · 5.06 KB
/
static.yml
File metadata and controls
146 lines (124 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: Deploy static content to Pages
on:
push:
branches: ["master"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build-and-deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
# cache: 'npm'
- name: Install dependencies
run: |
echo "::group::Installing minification tools"
npm install -g html-minifier-terser clean-css-cli terser
echo "::endgroup::"
- name: Verify public directory
run: |
echo "::group::Verifying public directory contents"
echo "Files in public directory:"
find public -type f | head -20
echo "Total files: $(find public -type f | wc -l)"
echo "::endgroup::"
- name: Minify HTML files
run: |
echo "::group::Minifying HTML files in public/"
find public -name "*.html" -type f | while read file; do
echo "Processing: $file"
original_size=$(stat -c%s "$file")
html-minifier-terser \
--collapse-whitespace \
--remove-comments \
--remove-optional-tags \
--remove-redundant-attributes \
--remove-script-type-attributes \
--remove-tag-whitespace \
--use-short-doctype \
--minify-css true \
--minify-js true \
--output "$file" \
"$file"
new_size=$(stat -c%s "$file")
savings=$((original_size - new_size))
echo "✓ $file: ${original_size}B → ${new_size}B (saved ${savings}B)"
done
echo "::endgroup::"
- name: Minify CSS files
run: |
echo "::group::Minifying CSS files in public/"
find public -name "*.css" -type f | while read file; do
echo "Processing: $file"
original_size=$(stat -c%s "$file")
cleancss --output "$file" "$file"
new_size=$(stat -c%s "$file")
savings=$((original_size - new_size))
echo "✓ $file: ${original_size}B → ${new_size}B (saved ${savings}B)"
done
echo "::endgroup::"
- name: Minify JavaScript files
run: |
echo "::group::Minifying JavaScript files in public/"
find public -name "*.js" -type f | while read file; do
echo "Processing: $file"
original_size=$(stat -c%s "$file")
terser "$file" --compress --mangle --output "$file"
new_size=$(stat -c%s "$file")
savings=$((original_size - new_size))
echo "✓ $file: ${original_size}B → ${new_size}B (saved ${savings}B)"
done
echo "::endgroup::"
- name: Generate build report
run: |
echo "::group::Build Summary"
echo "## Build Report" >> $GITHUB_STEP_SUMMARY
echo "| File Type | Count | Total Size |" >> $GITHUB_STEP_SUMMARY
echo "|-----------|-------|------------|" >> $GITHUB_STEP_SUMMARY
html_count=$(find public -name "*.html" | wc -l)
html_size=$(find public -name "*.html" -exec stat -c%s {} + | awk '{sum+=$1} END {print sum}')
echo "| HTML | $html_count | ${html_size:-0} bytes |" >> $GITHUB_STEP_SUMMARY
css_count=$(find public -name "*.css" | wc -l)
css_size=$(find public -name "*.css" -exec stat -c%s {} + | awk '{sum+=$1} END {print sum}')
echo "| CSS | $css_count | ${css_size:-0} bytes |" >> $GITHUB_STEP_SUMMARY
js_count=$(find public -name "*.js" | wc -l)
js_size=$(find public -name "*.js" -exec stat -c%s {} + | awk '{sum+=$1} END {print sum}')
echo "| JavaScript | $js_count | ${js_size:-0} bytes |" >> $GITHUB_STEP_SUMMARY
total_files=$(find public -type f | wc -l)
total_size=$(find public -type f -exec stat -c%s {} + | awk '{sum+=$1} END {print sum}')
echo "| **Total** | **$total_files** | **${total_size:-0} bytes** |" >> $GITHUB_STEP_SUMMARY
echo "Build completed successfully with $total_files files totaling $total_size bytes"
echo "::endgroup::"
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'public/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
- name: Deployment success notification
if: success()
run: |
echo "::notice::Deployment successful! Site available at ${{ steps.deployment.outputs.page_url }}"
- name: Deployment failure notification
if: failure()
run: |
echo "::error::Deployment failed. Check the logs above for details."