diff options
Diffstat (limited to 'srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts')
18 files changed, 675 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/CHANGELOG.twig b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/CHANGELOG.twig new file mode 100644 index 0000000..62ca8ac --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/CHANGELOG.twig @@ -0,0 +1,72 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +{% for version in versions %} +## {% spaceless %} + [{{version.name}}] + {% if version.tag is defined %} + (https://github.com/{{ owner }}/{{ repo }}/releases/tag/{{ version.tag }}) + {% endif %} +{% endspaceless %}{% if version.date is defined %}- {{version.date}}{% endif %} + + +{% for change in version.changesAdded %} +{% if loop.first %}### Added{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesChanged.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesChanged %} +{% if loop.first %}### Changed{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesDeprecated.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesDeprecated %} +{% if loop.first %}### Deprecated{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesRemoved.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesRemoved %} +{% if loop.first %}### Removed{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesFixed.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesFixed %} +{% if loop.first %}### Fixed{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesImprove.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesImprove %} +{% if loop.first %}### Improvements{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{% if version.changesSecurity.length > 0 %}{{ '\n'|raw }}{% endif %} +{% for change in version.changesSecurity %} +{% if loop.first %}### Security{{ '\n'|raw }}{% endif %} +{# #}{# #}- [{{change.hash}}](https://github.com/{{ owner }}/{{ repo }}/commit/{{change.longHash}}) {{ change.msg }}{% if not loop.last %}{{ '\n'|raw }}{% else %}{{ '\n'|raw }}{% endif %} +{# #}{% endfor %}{{ '\n'|raw }} +{% endfor %} +{{ '\n'|raw }} +{# +## [Unreleased] + +## [0.0.4] - 2014-08-09 +### Added + +### Changed + +### Removed + + +`Added` for new features. +`Changed` for changes in existing functionality. +`Deprecated` for soon-to-be removed features. +`Removed` for now removed features. +`Fixed` for any bug fixes. +`Security` in case of vulnerabilities. +#} + +{% for link in links %} +[{{link.name}}]: https://github.com/{{ owner }}/{{ repo }}/compare/{{link.start}}...{{link.end}} +{% endfor %} + +{# +[Unreleased]: https://github.com/{{ owner }}/{{ repo }}/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/{{ owner }}/{{ repo }}/compare/v0.3.0...v1.0.0 +#}
\ No newline at end of file diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/apidoc-generate.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/apidoc-generate.sh new file mode 100755 index 0000000..f0ef282 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/apidoc-generate.sh @@ -0,0 +1,6 @@ +#!/bin/bash +cd $(dirname $0)/../scripts +echo "Running in : $(pwd)" + +composer require --no-interaction sami/sami --prefer-dist +./vendor/bin/sami.php --no-interaction --verbose update ./sami-config.php diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/changelog.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/changelog.sh new file mode 100755 index 0000000..937daa7 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/changelog.sh @@ -0,0 +1,4 @@ +#!/bin/bash +npm install --only=dev +npm run changelog-file +git diff --no-prefix CHANGELOG.md diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-cron.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-cron.sh new file mode 100755 index 0000000..1278745 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-cron.sh @@ -0,0 +1,65 @@ +#!/bin/bash +if [ "$TRAVIS_EVENT_TYPE" != "cron" ]; then + echo "Not a travis cron !"; + exit 1; +fi + +if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then + echo "Not a travis cron !"; + exit 1; +fi + +therealpath () +{ + f=$@; + if [ -d "$f" ]; then + base=""; + dir="$f"; + else + base="/$(basename "$f")"; + dir=$(dirname "$f"); + fi; + dir=$(cd "$dir" && /bin/pwd); + echo "$dir$base" +} + + +ME="$(dirname $0)" + +BOT_DIR_FILES="$(therealpath $ME/../sudo-bot)" +REPO_DIR="$(therealpath $ME/../../)" + +echo "BOT_DIR_FILES = $BOT_DIR_FILES" +echo "REPO_DIR = $REPO_DIR" + +REPO="mariadb-mysql-kbs" +OWNER="williamdes" + + +#INSTALLATION_ID="123456" +JWT_PRIV_KEY_PATH="$BOT_DIR_FILES/sudo.2018-09-12.private-key.pem" +GPG_PRIV_PATH="$BOT_DIR_FILES/privkey.asc" +GPG_PUB_PATH="$BOT_DIR_FILES/pubkey.asc" +#GPG_PRIV_PASSWORD="gpgPasswordHere" + +BOT_NAME="Sudo Bot" +BOT_EMAIL="sudo-bot@wdes.fr" + +echo "Create env file" + +echo -e "JWT_PRIV_KEY_PATH=$JWT_PRIV_KEY_PATH\nGPG_PRIV_PATH=$GPG_PRIV_PATH\nGPG_PUB_PATH=$GPG_PUB_PATH\nGPG_PRIV_PASSWORD=$GPG_PRIV_PASSWORD\nREPO=$REPO\nOWNER=$OWNER\nASSIGN_USERS=williamdes\nAPP_ID=17453\nINSTALLATION_ID=$INSTALLATION_ID\nBOT_NAME=$BOT_NAME\nBOT_EMAIL=$BOT_EMAIL\nREPO_DIR=$REPO_DIR\nDOT_IGNORE=$BOT_DIR_FILES/.sudobotignore\nTEMPLATE_FILE=$BOT_DIR_FILES/template.js" > $BOT_DIR_FILES/.env + + +cd $REPO_DIR + +echo "Run nodejs scripts" +npm run build + +echo "Run merge script" +composer run build + +echo "Run sudo-bot" + +npm run sudo-bot-pr + +rm -f $BOT_DIR_FILES/.env diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-lint.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-lint.sh new file mode 100755 index 0000000..e9ac666 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-lint.sh @@ -0,0 +1,14 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +echo "Running jshint" +npm run jshint -- --verbose +JSHINT=$? +echo "Running prettier" +npm run prettier -- --list-different +PRETTIER=$? + +if [[ $JSHINT != 0 ]] || [[ $PRETTIER != 0 ]]; then + echo "You have some errors to fix !"; + exit 1; +fi diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-mocha.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-mocha.sh new file mode 100755 index 0000000..117d9d7 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-mocha.sh @@ -0,0 +1,5 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +npm run test +npm run report-coverage diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcs.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcs.sh new file mode 100755 index 0000000..b197cfd --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcs.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +composer run phpcs diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcsbf.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcsbf.sh new file mode 100755 index 0000000..4c70600 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcsbf.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +composer run phpcbf diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpstan.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpstan.sh new file mode 100755 index 0000000..a69d006 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpstan.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +composer run phpstan diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpunit.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpunit.sh new file mode 100755 index 0000000..33b6f94 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpunit.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd $(dirname $0)/../../ +echo "Running in : $(pwd)" +composer run test diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install-reporters.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install-reporters.sh new file mode 100755 index 0000000..19befa5 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install-reporters.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +therealpath () +{ + f=$@; + if [ -d "$f" ]; then + base=""; + dir="$f"; + else + base="/$(basename "$f")"; + dir=$(dirname "$f"); + fi; + dir=$(cd "$dir" && /bin/pwd); + echo "$dir$base" +} +ME="$(therealpath $(dirname $0))" +echo "I am in : $ME" +mkdir -p "$HOME/.cache/ci" +cd "$HOME/.cache/ci" +CODACY_LATEST_PHAR=$(curl -s https://api.github.com/repos/codacy/php-codacy-coverage/releases/latest | grep browser_download_url | cut -d '"' -f 4) +echo "CODACY_LATEST_PHAR: $CODACY_LATEST_PHAR" +wget --timestamping "$CODACY_LATEST_PHAR" + +cp "$HOME/.cache/ci/codacy-coverage.phar" "$ME/../../codacy-coverage.phar" + +chmod +x "$ME/../../codacy-coverage.phar" + +cd "$ME/../../" diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install.sh b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install.sh new file mode 100755 index 0000000..682237e --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +export PATH=~/.composer/vendor/bin/:$PATH +set -x +set -e diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/release.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/release.php new file mode 100755 index 0000000..0af0ddf --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/release.php @@ -0,0 +1,165 @@ +#!/usr/bin/env php +<?php +declare(strict_types = 1); +require_once(__DIR__ . '/../vendor/autoload.php'); + +use PhpSchool\CliMenu\CliMenu; +use PhpSchool\CliMenu\Builder\CliMenuBuilder; + +/** + * Manage release system + * @license Unlicense + */ + + /** + * Validate a version name + * + * @param string $version The version in format x.y.z + * @return bool + */ +function validateVersion(string $version): bool +{ + return preg_match("/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/", $version) === 1; +} + +/** + * Version to int + * + * @param string $version The version in format x.y.z + * @return int + */ +function versionToInt(string $version): int +{ + $matchs = array(); + preg_match("/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/", $version, $matchs); + return (int) ( sprintf('%03d', $matchs[1]).sprintf('%03d', $matchs[2]).sprintf('%03d', $matchs[3]) ); +} + +/** + * Get the version from a JSON file with attribute version + * + * @param string $filename The filename + * @return int + */ +function getVersion(string $filename): int +{ + $version = json_decode(file_get_contents($filename))->version; + return versionToInt($version); +} + +/** + * Int to version + * + * @param int $version The version in int format + * @example $version 123456789 for 123.456.789 + * @example $version 1010020 for 1.10.20 + * @return string + */ +function intToVersion(int $version): string +{ + $major = ($version / 1000000) | 0; + $minor = ( ($version / 1000) - ($major * 1000) ) | 0; + $patch = $version - (($major * 1000000) + ($minor * 1000)); + return $major.".".$minor.".".$patch; +} + +/** + * Saves files (composer, package) + * + * @param string $composerSaveVersion The actual composer version + * @param string $npmSaveVersion The actual npm version + * @return void + */ +function saveFiles(string $composerSaveVersion, string $npmSaveVersion): void +{ + global $composerActualData, $npmActualData; + $composerActualData->version = $composerSaveVersion; + $npmActualData->version = $npmSaveVersion; + $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES; + file_put_contents(__DIR__."/../composer.json", json_encode($composerActualData, $flags).PHP_EOL); + file_put_contents(__DIR__."/../package.json", json_encode($npmActualData, $flags).PHP_EOL); +} + +/* +// Test data +echo "#1 ".intToVersion(123456789).PHP_EOL; +echo "#2 ".versionToInt("1.10.20").PHP_EOL; +echo "#3 ".intToVersion(100400100).PHP_EOL; +echo "#4 ".intToVersion(1010020).PHP_EOL; +echo "#5 ".getVersion(__DIR__."/../composer.json").PHP_EOL; +echo "#6 ".intToVersion(getVersion(__DIR__."/../composer.json")).PHP_EOL; +*/ +echo "Release a new version".PHP_EOL; +$composerActualData = json_decode(file_get_contents(__DIR__."/../composer.json")); +$npmActualData = json_decode(file_get_contents(__DIR__."/../package.json")); + +$composerActualVersion = $composerActualData->version; +$npmActualVersion = $npmActualData->version; + +$composerSaveVersion = $composerActualVersion; +$npmSaveVersion = $npmActualVersion; + + + +$itemCallable = function (CliMenu $menu): void { + global $composerActualVersion, $npmActualVersion, $composerSaveVersion, $npmSaveVersion; + switch ($menu->getSelectedItem()->getText()) { + case 'Major': + $composerSaveVersion = intToVersion(versionToInt($composerSaveVersion) + 1000000); + $npmSaveVersion = intToVersion(versionToInt($npmSaveVersion) + 1000000); + break; + case 'Minor': + $composerSaveVersion = intToVersion(versionToInt($composerSaveVersion) + 1000); + $npmSaveVersion = intToVersion(versionToInt($npmSaveVersion) + 1000); + break; + case 'Patch': + $composerSaveVersion = intToVersion(versionToInt($composerSaveVersion) + 1); + $npmSaveVersion = intToVersion(versionToInt($npmSaveVersion) + 1); + break; + } + + $menu->close(); + echo "Saved versions, composer: $composerSaveVersion, npm: $npmSaveVersion"; + saveFiles($composerSaveVersion, $npmSaveVersion); +}; + +$cbManual = function (CliMenu $menu): void { + global $composerActualVersion, $npmActualVersion, $composerSaveVersion, $npmSaveVersion; + $result = $menu->askPassword() + ->setPromptText("Actual composer version: $composerActualVersion") + ->setPlaceholderText($composerActualVersion) + ->setValidationFailedText('Invalid version, try again') + ->setValidator( + function ($version) { + return validateVersion($version); + } + )->ask(); + + $composerSaveVersion = $result->fetch(); + + $result = $menu->askPassword() + ->setPromptText("Actual npm version: $npmActualVersion") + ->setPlaceholderText($composerActualVersion) + ->setValidationFailedText('Invalid version, try again') + ->setValidator( + function ($version) { + return validateVersion($version); + } + )->ask(); + $npmSaveVersion = $result->fetch(); + $menu->close(); + echo "Saved versions, composer: $composerSaveVersion, npm: $npmSaveVersion"; + saveFiles($composerSaveVersion, $npmSaveVersion); +}; + +$menu = (new CliMenuBuilder())->setTitle('Bump version') + ->addItem('Major', $itemCallable) + ->addItem('Minor', $itemCallable) + ->addItem('Patch', $itemCallable) + ->addItem('Manual', $cbManual) + ->addLineBreak('-') + ->setPadding(2, 4) + ->setMarginAuto() + ->build(); + +$menu->open(); diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sami-config.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sami-config.php new file mode 100644 index 0000000..9909374 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sami-config.php @@ -0,0 +1,19 @@ +<?php +declare(strict_types = 1); +/** + * This file has been generated for sami/sami + */ +use Sami\Sami; +use Symfony\Component\Finder\Finder; + +$iterator = Finder::create()->files()->name("*.php")->in(__DIR__."/../src"); + +$description = json_decode(file_get_contents(__DIR__."/../composer.json"))->description; + +return new Sami( + $iterator, array( + "title" => $description, + "build_dir" => __DIR__."/../docs", + "cache_dir" => __DIR__."/../tmp" + ) +); diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/.sudobotignore b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/.sudobotignore new file mode 100644 index 0000000..aa2b365 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/.sudobotignore @@ -0,0 +1,3 @@ +package-lock.json +.env +composer.lock diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/keys.tar.enc b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/keys.tar.enc Binary files differnew file mode 100644 index 0000000..d382dd6 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/keys.tar.enc diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/pubkey.asc b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/pubkey.asc new file mode 100644 index 0000000..0f8bc9f --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/pubkey.asc @@ -0,0 +1,186 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAhwCHAwEiAAIR +AQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC +BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJ +ChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3 +eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS +09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAA +AAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEH +YXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG +R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKj +pKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX2 +9/j5+v/aAAwDAQACEQMRAD8A9/ooooAKKKKACiiigAooqG6ureytnubu4it4EGXl +lcIqj3J4FAE1FctH8SfBUtz9nXxNpvmZxzOAv/fR4/WunjkSaNZInV42GVZTkEeo +NADqKKKACiiigAooooAKKKKACiiigAooooAKKKKAGyyJDE8sjBI0UszHoAOpr4+8 +e+ONV+IfiUxxNL9gWUpY2angDoGI7sepJ6dOlfVvim3mvPCOtW1sCZ5rCeOMDruM +bAfrXx54Iu7ez8U2z3JVVYMis3RWIwP8PxqZtpNoxxFSVKlKcVdpN2Lcvw71uO0M +wNs7gZMKud306Yz+NdJ8IPiFfeF/Eltol9M7aReSiFopD/x7yMcBlz056j8eortW +ZUUsxCqBkkngCvFL/wD4m/jORdNGWubwJBt/iYsACPqefxrCjVlNu542TZlXxcpR +qrbqvyPuCiiiuk98KKKKACiiigAooooAKKKKACiiigAoqKe5gtY/MuJo4k/vSMFH +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 +=0xe2 +-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/template.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/template.js new file mode 100644 index 0000000..03a44b3 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/template.js @@ -0,0 +1,89 @@ +'use strict'; + +/** + * @param {Array} modifiedFiles The modified files + * @returns {string} The commit message + */ +const commitMessage = function(modifiedFiles) { + const nbrMySQLFiles = modifiedFiles.filter(file => file.match(/mysql-[a-z\-\.]+.json$/g)).length; + const nbrMariaDBFiles = modifiedFiles.filter(file => file.match(/mariadb-[a-z\-\.]+.json$/g)).length; + const nbrMergedData = modifiedFiles.filter(file => file.match(/merged-(slim|ultraslim|raw).(json|md|php)$/g)) + .length; + + const hasMySQLFiles = nbrMySQLFiles > 0; + const hasMariaDBFiles = nbrMariaDBFiles > 0; + const hasOtherFiles = nbrMySQLFiles + nbrMariaDBFiles + nbrMergedData !== modifiedFiles.length; + if (hasMariaDBFiles && hasMySQLFiles) { + return 'update: [MariaDB] && [MySQL] updates' + (hasOtherFiles ? ' and other changes' : ''); + } else if (hasMariaDBFiles && !hasMySQLFiles) { + return 'update: [MariaDB] updates' + (hasOtherFiles ? ' and other changes' : ''); + } else if (!hasMariaDBFiles && hasMySQLFiles) { + return 'update: [MySQL] updates' + (hasOtherFiles ? ' and other changes' : ''); + } + return 'update: 🤖 Some updates 🤖'; +}; + +/** + * @param {Array} modifiedFiles The modified files + * @returns {string} The pr message + */ +const prMessage = function(modifiedFiles) { + const nbrMySQLFiles = modifiedFiles.filter(file => file.match(/mysql-[a-z-]+.json$/g)).length; + const nbrMariaDBFiles = modifiedFiles.filter(file => file.match(/mariadb-[a-z-]+.json$/g)).length; + const nbrMergedData = modifiedFiles.filter(file => file.match(/merged-(slim|ultraslim|raw).(json|md|php)$/g)) + .length; + + const hasMySQLFiles = nbrMySQLFiles > 0; + const hasMariaDBFiles = nbrMariaDBFiles > 0; + const hasOtherFiles = nbrMySQLFiles + nbrMariaDBFiles + nbrMergedData !== modifiedFiles.length; + if (hasMariaDBFiles && hasMySQLFiles) { + return '🤖 [MariaDB] && [MySQL] updates' + (hasOtherFiles ? ' 🚨🚨' : ''); + } else if (hasMariaDBFiles && !hasMySQLFiles) { + return '🤖 [MariaDB] updates' + (hasOtherFiles ? ' 🚨🚨' : ''); + } else if (!hasMariaDBFiles && hasMySQLFiles) { + return '🤖 [MySQL] updates' + (hasOtherFiles ? ' 🚨🚨' : ''); + } + return '🤖 Some updates to review 🤖'; +}; + +/** + * @param {Array} modifiedFiles The modified files + * @returns {string} The pr content + */ +const prContent = function(modifiedFiles) { + let message = + 'Dear human 🌻, after running my task the following file' + + (modifiedFiles.length > 1 ? 's where updated:' : ' was updated:') + + '\n'; + message += modifiedFiles + .map(file => { + let emoji = '👽'; + if (file.match(/mysql-[a-z-]+.json$/g)) { + emoji = '🐬'; + } + if (file.match(/mariadb-[a-z-]+.json$/g)) { + emoji = '🐳'; + } + if (file.match(/merged-(slim|ultraslim|raw).(json|md|php)$/g)) { + emoji = '📦'; + } + return '- `' + file + '` ' + emoji + '\n'; + }) + .join(''); + return message; +}; + +/** + * @param {Array} modifiedFiles The modified files + * @returns {string} The pr branch + */ +const prBranch = function(modifiedFiles) { + return 'refs/heads/update/' + new Date().getTime(); +}; + +module.exports = { + commitMessage: commitMessage, + prMessage: prMessage, + prContent: prContent, + prBranch: prBranch, +}; |
