aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts')
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/CHANGELOG.twig72
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/apidoc-generate.sh6
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/changelog.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-cron.sh65
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-lint.sh14
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-mocha.sh5
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcs.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpcsbf.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpstan.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/ci-phpunit.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install-reporters.sh27
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/ci/install.sh4
-rwxr-xr-xsrcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/release.php165
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sami-config.php19
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/.sudobotignore3
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/keys.tar.encbin0 -> 30736 bytes
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/pubkey.asc186
-rw-r--r--srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/template.js89
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
new file mode 100644
index 0000000..d382dd6
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/scripts/sudo-bot/keys.tar.enc
Binary files differ
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,
+};