123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/usr/bin/env bash
- #
- # SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
- # SPDX-License-Identifier: AGPL-3.0-or-later
- #
- set -e
- OPTIPNG=$(which optipng)
- if ! [ -x "$OPTIPNG" ]; then
- echo -e "\033[0;31moptipng executable not found, please install\033[0m" >&2
- exit 1
- fi
- JPEGOPTIM=$(which jpegoptim)
- if ! [ -x "$JPEGOPTIM" ]; then
- echo -e "\033[0;31mjpegoptim executable not found, please install\033[0m" >&2
- exit 2
- fi
- SCOUR=$(which scour)
- if ! [ -x "$SCOUR" ]; then
- echo -e "\033[0;31mscour executable not found, please install\033[0m" >&2
- exit 3
- fi
- REQUIRED_SCOUR_VERSION="0.38.2"
- SCOUR_VERSION=$(scour --version)
- if dpkg --compare-versions $SCOUR_VERSION lt $REQUIRED_SCOUR_VERSION; then
- echo "scour version $REQUIRED_SCOUR_VERSION or higher is required, found $SCOUR_VERSION" >&2
- exit 3
- fi
- set +e
- CHECK_DIR='../'
- if [[ -d "$1" ]]; then
- CHECK_DIR=$1
- fi
- function recursive_optimize_images() {
- cd "$1" || return
- DIR_NAME=${PWD##*/}
- if [[ "$DIR_NAME" == "3rdparty" ]]; then
- echo -e "\033[0;36mIgnoring 3rdparty for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "build" ]]; then
- echo -e "\033[0;36mIgnoring build for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "cypress" ]]; then
- echo -e "\033[0;36mIgnoring cypress for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "node_modules" ]]; then
- echo -e "\033[0;36mIgnoring node_modules for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "tests" ]]; then
- echo -e "\033[0;36mIgnoring tests for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "vendor" ]]; then
- echo -e "\033[0;36mIgnoring vendor for image optimization\033[0m"
- return
- elif [[ "$DIR_NAME" == "vendor-bin" ]]; then
- echo -e "\033[0;36mIgnoring vendor-bin for image optimization\033[0m"
- return
- fi
- # Optimize all PNGs
- for png in *.png
- do
- [[ -e "$png" ]] || break
- $OPTIPNG -o6 -strip all "$png"
- done
- # Optimize all JPGs
- for jpg in *.jpg
- do
- [[ -e "$jpg" ]] || break
- $JPEGOPTIM --strip-all "$jpg"
- done
- # Optimize all SVGs
- for svg in *.svg
- do
- [[ -e "$svg" ]] || break
- if [[ "$svg" == "default-source.svg" ]]; then
- echo -e "\033[0;36mIgnoring $svg image optimization\033[0m"
- continue
- fi
- mv $svg $svg.opttmp
- $SCOUR --create-groups \
- --enable-id-stripping \
- --enable-comment-stripping \
- --shorten-ids \
- --remove-metadata \
- --strip-xml-prolog \
- --no-line-breaks \
- -i $svg.opttmp \
- -o $svg
- rm $svg.opttmp
- done
- # Check all subfolders
- for dir in */
- do
- [[ -e "$dir" ]] || break
- if [[ -d "$dir" ]]; then
- if git check-ignore $dir -q ; then
- echo -e "\033[0;36m$dir is not shipped. Ignoring image optimization\033[0m"
- continue
- fi
- recursive_optimize_images "$dir"
- cd ..
- fi
- done
- }
- recursive_optimize_images "$CHECK_DIR"
|