phpmyadmin/phpmyadmin

View on GitHub
bin/internal/check-release-excludes.sh

Summary

Maintainability
Test Coverage
#!/bin/bash

set -e

FILE="$1"

if [ ! -f "${FILE}" ]; then
    echo 'Please provide a file as a first argument.'
    exit 1
fi

FILE_LIST="$(tar --list --file="${FILE}")"

found=0;

echo 'Searching for files'

foundFile() {
    found=1
    printf "Found: %s\n" "${filePath}"
}

foundFileExt() {
    found=1
    printf "Found unexpected file: %s with extension %s\n" "${pathWithoutFirst}" "${extension}"
}

validateExtension() {
    if [ "${filePath: -1}" = "/" ]; then
        return;
    fi

    pathWithoutFirst="$(echo "$filePath" | cut -d / -f 2-)"

    filename=$(basename -- "$pathWithoutFirst")
    extension="${filename##*.}"

    case $pathWithoutFirst in
        docs/*)
            if [ "${extension}" != "png" ] && [ "${extension}" != "txt" ] &&
                [ "${extension}" != "html" ] && [ "${extension}" != "js" ] &&
                [ "${extension}" != "css" ] && [ "${extension}" != "gif" ]; then
                foundFileExt
            fi
        ;;
        resources/js/global.d.ts)
        ;;
        public/js/vendor/*)
            if [ "${extension}" != "js" ] && [ "${extension}" != "map" ] &&
                [ "${extension}" != "css" ] && [ "${filename}" != "LICENSE" ] &&
                [ "${extension}" != "txt" ]; then
                foundFileExt
            fi
        ;;
        public/js/dist/*)
            if [ "${extension}" != "js" ] && [ "${extension}" != "map" ]; then
                foundFileExt
            fi
        ;;
        resources/js/src/*)
            if [ "${extension}" != "ts" ] && [ "${extension}" != "mjs" ]; then
                foundFileExt
            fi
        ;;
        resources/sql/*)
            if [ "${extension}" != "sql" ]; then
                foundFileExt
            fi
        ;;
        examples/*)
            if [ "${extension}" != "php" ]; then
                foundFileExt
            fi
        ;;
        resources/locale/*)
            if [ "${extension}" != "mo" ]; then
                foundFileExt
            fi
        ;;
        public/setup/*)
            if [ "${extension}" != "php" ] && [ "${extension}" != "twig" ] &&
                [ "${extension}" != "css" ] && [ "${extension}" != "scss" ] &&
                [ "${extension}" != "gif" ] && [ "${extension}" != "map" ]; then
                foundFileExt
            fi
        ;;
        resources/templates/*)
            if [ "${extension}" != "twig" ]; then
                foundFileExt
            fi
        ;;
        app/*)
            if [ "${extension}" != "php" ]; then
                foundFileExt
            fi
        ;;
        src/*)
            if [ "${extension}" != "php" ] && [ "${extension}" != "md" ] &&
                [ "${filename}" != "README" ] && [ "${filename}" != "TEMPLATE" ] &&
                [ "${filename}" != "TEMPLATE_ABSTRACT" ]; then
                foundFileExt
            fi
        ;;
        public/themes/*)
            if [ "${extension}" != "css" ] && [ "${extension}" != "png" ] &&
                [ "${extension}" != "scss" ] && [ "${extension}" != "map" ] &&
                [ "${extension}" != "svg" ] && [ "${extension}" != "ico" ] &&
                [ "${extension}" != "gif" ] && [ "${extension}" != "json" ]; then
                foundFileExt
            fi
        ;;
        vendor/phpmyadmin/sql-parser/locale/*)
            if [ "${extension}" != "mo" ]; then
                foundFileExt
            fi
        ;;
        vendor/composer/ca-bundle/res/cacert.pem)
        ;;
        vendor/pragmarx/google2fa-qrcode/composer.lock)
        ;;
        vendor/williamdes/mariadb-mysql-kbs/dist/merged-ultraslim.json)
        ;;
        vendor/composer/installed.json)
        ;;
        vendor/tecnickcom/tcpdf/*)
            if [ "${extension}" != "php" ] && [ "${filename}" != "LICENSE.TXT" ] &&
                [ "${filename}" != "README.md" ] && [ "${filename}" != "CHANGELOG.TXT" ] &&
                [ "${filename}" != "VERSION" ] && [ "${filename}" != "composer.json" ] &&
                [ "${extension}" != "z" ]; then
                foundFileExt
            fi
        ;;
        vendor/*)
            if [ "${extension}" != "php" ] && [ "${filename}" != "LICENSE" ] &&
                [ "${filename}" != "README" ] && [ "${filename}" != "CHANGELOG" ] &&
                [ "${filename}" != "composer.json" ] && [ "${filename}" != "CHANGELOG.md" ] &&
                [ "${filename}" != "README.md" ] && [ "${filename}" != "BACKERS.md" ] &&
                [ "${filename}" != "LICENSE.md" ] && [ "${filename}" != "ARCHITECTURE.md" ] &&
                [ "${filename}" != "LICENSE.txt" ] && [ "${filename}" != "AUTHORS" ] &&
                [ "${filename}" != "LICENCE.md" ] && [ "${filename}" != "LICENCE" ]; then
                foundFileExt
            fi
        ;;
        ChangeLog)
        ;;
        LICENSE)
        ;;
        RELEASE-DATE-[1-9].[0-9].[0-9])
        ;;
        RELEASE-DATE-[1-9].[0-9].[0-9]-dev)
        ;;
        RELEASE-DATE-[1-9].[0-9]+snapshot)
        ;;
        CONTRIBUTING.md)
        ;;
        README)
        ;;
        public/favicon.ico)
        ;;
        tsconfig.json)
        ;;
        webpack.config.cjs)
        ;;
        babel.config.json)
        ;;
        package.json)
        ;;
        composer.json)
        ;;
        composer.lock)
        ;;
        yarn.lock)
        ;;
        public/robots.txt)
        ;;
        index.php)
        ;;
        public/index.php)
        ;;
        config.sample.inc.php)
        ;;
        *)
            foundFileExt
        ;;
    esac

}

for filePath in ${FILE_LIST}; do
    validateExtension
    case $filePath in
        */rector*.php)
        foundFile;;
        */.gitkeep)
        foundFile;;
        */.editorconfig)
        foundFile;;
        */easy-coding-standard.neon)
        foundFile;;
        */.travis.yml)
        foundFile;;
        */psalm.xml)
        foundFile;;
        */.coveralls.yml)
        foundFile;;
        */appveyor.yml)
        foundFile;;
        */phpunit.xml)
        foundFile;;
        */phive.xml)
        foundFile;;
        */Makefile)
        foundFile;;
        */phpbench.json)
        foundFile;;
        */phpbench.json.dist)
        foundFile;;
        */.php-cs-fixer.dist.php)
        foundFile;;
        */.php_cs)
        foundFile;;
        */.php_cs.dist)
        foundFile;;
        */.php_cs.cache)
        foundFile;;
        */phpstan.neon)
        foundFile;;
        */phpcs.xml.dist)
        foundFile;;
        */phpunit.xml.dist)
        foundFile;;
        */.scrutinizer.yml)
        foundFile;;
        */codecov.yml)
        foundFile;;
        */.gitattributes)
        foundFile;;
        */.gitignore)
        foundFile;;
        */infection.json.dist)
        foundFile;;
        */infection.json)
        foundFile;;
        */infection.json5.dist)
        foundFile;;
        */infection.json5)
        foundFile;;
        */makefile)
        foundFile;;
        */.phpunit.result.cache)
        foundFile;;
        */phpstan.neon.dist)
        foundFile;;
        */phpstan-baseline.neon)
        foundFile;;
        */phpmd.xml.dist)
        foundFile;;
        */.travis.php.ini)
        foundFile;;
        */vendor/*/tests/*)
        foundFile;;
        */vendor/*/Tests/*)
        foundFile;;
        */vendor/*/test/*)
        foundFile;;
        */twig/twig/lib/Twig/Node/Expression/Test/*)
        ;;
        */twig/twig/lib/Twig/Test/*)
        ;;
        *twig/twig/src/Node/Expression/Test/*)
        ;;
        */vendor/*/Test/*)
        foundFile;;
        */.dependabot/*)
        foundFile;;
        */.github/*)
        foundFile;;
        */.circleci/*)
        foundFile;;
        */vendor/examples/*)
        foundFile;;
        */.git/*)
        foundFile;;
        *vendor/*.rst)
        foundFile;;
        *vendor/*.po)
        foundFile;;
        *vendor/*.pot)
        foundFile;;
        *vendor/*.m4)
        foundFile;;
        *vendor/*.c)
        foundFile;;
        *vendor/*.h)
        foundFile;;
        *vendor/*.sh)
        foundFile;;
        *vendor/*.w32)
        foundFile;;
        *.hhconfig)
        foundFile;;
        *.hhi)
        foundFile;;
        *.xsd)
        foundFile;;
        *.xml)
        foundFile;;
        *vendor/*CONTRIBUTING.md*)
        foundFile;;
        *CODE_OF_CONDUCT.md*)
        foundFile;;
        *PERFORMANCE.md*)
        foundFile;;
        *phar*)
        foundFile;;
        *) ;;
    esac
done

if [ ${found} -gt 0 ]; then
    echo 'Some new files to be excluded were found.'
    echo 'Please update create-release.sh'
    exit 1
else
    echo 'Everything looks okay'
    exit 0
fi