|
40 | 40 |
|
41 | 41 | # Install CLI tools for minification and compression |
42 | 42 | - name: Install optimization tools |
43 | | - run: npm install -g terser clean-css-cli svgo-cli imagemin-cli imagemin-mozjpeg imagemin-pngquant |
| 43 | + run: npm install -g terser clean-css-cli svgo-cli imagemin-cli imagemin-mozjpeg imagemin-pngquant imagemin-webp imagemin-avif |
44 | 44 |
|
45 | 45 | # Minify JS files |
46 | 46 | - name: Minify JS |
|
61 | 61 | imagemin "$file" --plugin=mozjpeg --plugin=pngquant > "$file.tmp" && mv "$file.tmp" "$file" |
62 | 62 | done |
63 | 63 |
|
| 64 | + # Convert images to WebP and AVIF |
| 65 | + - name: Convert Images to WebP and AVIF |
| 66 | + run: | |
| 67 | + for file in $(find . -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \)); do |
| 68 | + # Generate WebP |
| 69 | + imagemin "$file" --plugin=webp --out-dir="$(dirname "$file")" --out-suffix=".webp" |
| 70 | + # Generate AVIF |
| 71 | + imagemin "$file" --plugin=avif --out-dir="$(dirname "$file")" --out-suffix=".avif" |
| 72 | + done |
| 73 | +
|
| 74 | + # Backup original HTML and convert <img> to <picture> |
| 75 | + - name: Convert <img> to <picture> |
| 76 | + run: | |
| 77 | + # Backup original HTML files |
| 78 | + find . -type f -name '*.html' -exec cp {} {}.bak \; |
| 79 | + # Replace <img> with <picture> for each image |
| 80 | + for img in $(find . -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \)); do |
| 81 | + base_name=$(basename "$img") |
| 82 | + dir_name=$(dirname "$img") |
| 83 | + file_name="${base_name%.*}" |
| 84 | + # Construct the <picture> replacement |
| 85 | + picture_tag="<picture><source type='image/avif' srcset='${file_name}.avif'><source type='image/webp' srcset='${file_name}.webp'><img src='${base_name}' alt=''></picture>" |
| 86 | + # Replace <img src="..." alt="..."> with <picture> structure |
| 87 | + find . -type f -name '*.html' -exec sed -i "s|<img src=\"${base_name}\" alt=\"[^\"]*\"|>${picture_tag}|g" {} \; |
| 88 | + done |
| 89 | +
|
64 | 90 | - name: Setup Pages |
65 | 91 | uses: actions/configure-pages@v5 |
66 | 92 |
|
|
0 commit comments