Skip to content

Instantly share code, notes, and snippets.

@lens0021
Last active December 31, 2020 03:11
Show Gist options
  • Save lens0021/c5afa42ffe730eee40e569a5d6af61ad to your computer and use it in GitHub Desktop.
Save lens0021/c5afa42ffe730eee40e569a5d6af61ad to your computer and use it in GitHub Desktop.
#!/bin/bash
set -euo pipefail; IFS=$'\n\t'
if [ $EUID != 0 ]; then
sudo TOOL="${TOOL:-phpunit}" bash "$0" "$@";
exit "$?";
fi
EXT=$1
test EXT || exit
BASE_PATH="/home/nemo/git/femiwiki"
MEDIAWIKI_VERSION="$(git --git-dir "${BASE_PATH}/${EXT}"/.git branch --show-current)"
echo "Use ${MEDIAWIKI_VERSION} branch"
if [ -e src/"${MEDIAWIKI_VERSION}"/LocalSettings.php ]; then
rm src/"${MEDIAWIKI_VERSION}"/LocalSettings.php
fi
if [ ! -d src/"${MEDIAWIKI_VERSION}" ]; then
echo 'Trying to download MW...'
if [ "${MEDIAWIKI_VERSION}" == 'master' ]; then
git clone --recurse-submodules -b "${MEDIAWIKI_VERSION}" --depth 1 \
https://gerrit.wikimedia.org/r/mediawiki/core src/"${MEDIAWIKI_VERSION}"
else
git clone -b "${MEDIAWIKI_VERSION}" --depth 1 \
https://gerrit.wikimedia.org/r/mediawiki/core src/"${MEDIAWIKI_VERSION}"
fi
fi
if [ -e "${BASE_PATH}/${EXT}"/extension.json ]; then
TYPE=extension
else
TYPE=skin
fi
NAME=$(python -c 'import sys,json;print(json.loads(sys.stdin.read())["name"])' < "${BASE_PATH}/${EXT}"/extension.json)
if [ -e "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}" ]; then
echo 'purging...'
rm -rf "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}" > /dev/null
fi
cp -r "${BASE_PATH}/${EXT}" "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}"
if [ -e "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}/.github/workflows/.test-env" ]; then
# shellcheck disable=SC1090
source "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}/.github/workflows/.test-env"
fi
DEPENDENCIES=$(echo "${DEPENDENCIES:-}" | tr " " "\n")
for dep in $(echo "$DEPENDENCIES" | tr " " "\n"); do
DEP_NAME=$(basename "${dep}")
if [ ! -d "src/${MEDIAWIKI_VERSION}/extensions/${DEP_NAME}" ]; then
git clone --recurse-submodules -b "${MEDIAWIKI_VERSION}" --depth 1 \
https://gerrit.wikimedia.org/r/"${dep}" "src/${MEDIAWIKI_VERSION}/extensions/${DEP_NAME}"
fi
done
chmod 777 src/"${MEDIAWIKI_VERSION}" cache
chown -R nobody:nogroup src/"${MEDIAWIKI_VERSION}" cache
chown "$(id -u)":"$(id -g)" src/"${MEDIAWIKI_VERSION}" cache
if [ "${2:-}" == 'deps' ]; then
echo 'deps'
docker run \
-e ZUUL_PROJECT=mediawiki/"${TYPE}s/${NAME}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src/"${MEDIAWIKI_VERSION}":/workspace/src \
--rm \
docker-registry.wikimedia.org/releng/quibble-stretch-php73:latest \
--skip-zuul \
--packages-source composer \
--skip-install \
--skip all \
$DEPENDENCIES
elif [ "${TOOL}" == 'phpunit' ]; then
echo 'run quibble...'
if [ -e src/"${MEDIAWIKI_VERSION}"/composer.lock ]; then
echo '...without deps'
docker run \
-e ZUUL_PROJECT=mediawiki/"${TYPE}s/${NAME}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src/"${MEDIAWIKI_VERSION}":/workspace/src \
--rm \
docker-registry.wikimedia.org/releng/quibble-stretch-php73:latest \
--skip-zuul \
--skip-deps \
-c "php tests/phpunit/phpunit.php --group ${EXT}" \
$DEPENDENCIES
else
echo '...with deps'
docker run \
-e ZUUL_PROJECT=mediawiki/"${TYPE}s/${NAME}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src/"${MEDIAWIKI_VERSION}":/workspace/src \
--rm \
docker-registry.wikimedia.org/releng/quibble-stretch-php73:latest \
--skip-zuul \
--packages-source composer \
-c "php tests/phpunit/phpunit.php --group ${EXT}" \
$DEPENDENCIES
fi
elif [ "${TOOL}" == 'phan' ]; then
echo 'run phan...'
docker run \
-e THING_SUBNAME="${TYPE}s/${NAME}" \
-v "$(pwd)"/src/"${MEDIAWIKI_VERSION}":/mediawiki \
--rm \
docker-registry.wikimedia.org/releng/mediawiki-phan-php73:latest \
--color
elif [ "${TOOL}" == 'cover' ]; then
docker run \
-e ZUUL_PROJECT=mediawiki/"${TYPE}s/${NAME}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src/"${MEDIAWIKI_VERSION}":/workspace/src \
docker-registry.wikimedia.org/releng/quibble-coverage:latest \
--skip-zuul \
--skip-deps \
-c mwext-phpunit-coverage
else
echo "unknown command: ${0:-''} ${1:-''} ${2:-''}"
fi
rm -rf "src/${MEDIAWIKI_VERSION}/${TYPE}s/${NAME}" > /dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment