Skip to content

Version 2.8.0 with new Features, Bugfixes and Cherry picking from haleyjd and jdlrobson, activate Themes #103

Version 2.8.0 with new Features, Bugfixes and Cherry picking from haleyjd and jdlrobson, activate Themes

Version 2.8.0 with new Features, Bugfixes and Cherry picking from haleyjd and jdlrobson, activate Themes #103

name: Quibble and Phan
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
test:
name: "${{ matrix.mw }} | PHP ${{ matrix.php }} (${{ matrix.stage }})"
strategy:
matrix:
include:
# Latest stable MediaWiki - PHP 7.4 (phan)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: phan
# Latest MediaWiki master - PHP 7.4 (phan)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: true
stage: phan
# Latest MediaWiki master - PHP 7.4 (coverage)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: false
stage: coverage
# Latest stable MediaWiki - PHP 7.4 (phpunit-unit)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: phpunit-unit
# Latest MediaWiki master - PHP 7.4 (phpunit-unit)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: false
stage: phpunit-unit
# Latest stable MediaWiki - PHP 7.4 (phpunit)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: phpunit
# Latest MediaWiki master - PHP 7.4 (phpunit)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: true
stage: phpunit
# Latest MediaWiki master - PHP 8.1 (phpunit)
- mw: 'master'
php: 8.1
php-docker: 81
experimental: false
stage: phpunit
# Latest stable MediaWiki - PHP 7.4 (selenium)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: selenium
# Latest MediaWiki master - PHP 7.4 (selenium)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: false
stage: selenium
# Latest stable MediaWiki - PHP 7.4 (qunit)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: qunit
# Latest MediaWiki master - PHP 7.4 (qunit)
- mw: 'master'
php: 7.4
php-docker: 74
experimental: false
stage: qunit
# Latest stable MediaWiki - PHP 7.4 (npm-test)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: npm-test
# Latest stable MediaWiki - PHP 7.4 (composer-test)
- mw: 'REL1_39'
php: 7.4
php-docker: 74
experimental: false
stage: composer-test
runs-on: ubuntu-latest
env:
DOCKER_REGISTRY: docker-registry.wikimedia.org
DOCKER_ORG: releng
QUIBBLE_DOCKER_IMAGE: quibble-buster-php${{ matrix.php-docker }}
COVERAGE_DOCKER_IMAGE: quibble-buster-php${{ matrix.php-docker }}-coverage
PHAN_DOCKER_IMAGE: mediawiki-phan-php${{ matrix.php-docker }}
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ github.token }}
- uses: actions/checkout@v3
# /home/runner/cache/ Cache
# /home/runner/src/ Mediawiki installation
# /home/runner/src/extensions/EXTENSION_NAME/ Clone of the extension repository
# /home/runner/docker-images/ Docker images which exported with docker-save command
# $GITHUB_WORKSPACE/.github/workflows/dependencies Necessary dependencies - YAML syntax
# $GITHUB_WORKSPACE/.github/workflows/globals.php Add global configuration options for MediaWiki
- name: Set up
run: |
echo MEDIAWIKI_VERSION="${{ matrix.mw }}" >> $GITHUB_ENV
if [ "${{ matrix.stage }}" == 'phan' ]; then
export DOCKER_IMAGE="${PHAN_DOCKER_IMAGE}"
elif [ "${{ matrix.stage }}" == coverage ]; then
export DOCKER_IMAGE="${COVERAGE_DOCKER_IMAGE}"
else
export DOCKER_IMAGE="${QUIBBLE_DOCKER_IMAGE}"
fi
echo "DOCKER_IMAGE=${DOCKER_IMAGE}" >> $GITHUB_ENV
# Get the latest docker tag (Ref: https://github.com/thcipriani/dockerregistry)
DOCKER_LATEST_TAG="$(curl -sL "https://${DOCKER_REGISTRY}/v2/${DOCKER_ORG}/${DOCKER_IMAGE}/tags/list" |
python3 -c 'import json;print("\n".join(json.loads(input())["tags"]))' |
grep -v latest | sort -Vr | head -1)"
echo "DOCKER_LATEST_TAG=${DOCKER_LATEST_TAG}" >> $GITHUB_ENV
if [ "${{ matrix.stage }}" == 'phan' ] || [ "${{ matrix.stage }}" == 'coverage' ]; then
echo "QUIBBLE_DOCKER_LATEST_TAG=$(curl -sL "https://${DOCKER_REGISTRY}/v2/${DOCKER_ORG}/${QUIBBLE_DOCKER_IMAGE}/tags/list" |
python3 -c 'import json;print("\n".join(json.loads(input())["tags"]))' |
grep -v latest | sort -Vr | head -1)" >> $GITHUB_ENV
fi
# Resolve dependencies
if [ -e .github/workflows/dependencies ]; then
cd .github/workflows
curl -sL https://raw.githubusercontent.com/wikimedia/integration-config/master/zuul/parameter_functions.py -o pf.py
curl -sL https://raw.githubusercontent.com/Universal-Omega/scripts/master/mediawiki/resolve_dependencies.py -o rd.py
echo "DEPENDENCIES=$(python3 rd.py)" >> $GITHUB_ENV
fi
- name: Cache docker image
uses: actions/cache@v3.3.1
with:
path: /home/runner/docker-images/${{ env.DOCKER_IMAGE }}
key: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_LATEST_TAG }}
- name: Load or pull docker image
run: |
docker load -i /home/runner/docker-images/"${DOCKER_IMAGE}" || \
docker pull "${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}"
- name: Cache quibble docker image
if: ${{ matrix.stage == 'coverage' || matrix.stage == 'phan' }}
uses: actions/cache@v3.3.1
with:
path: /home/runner/docker-images/${{ env.QUIBBLE_DOCKER_IMAGE }}
key: ${{ env.QUIBBLE_DOCKER_IMAGE }}:${{ env.QUIBBLE_DOCKER_LATEST_TAG }}
- name: Load or pull quibble docker image
if: ${{ matrix.stage == 'coverage' || matrix.stage == 'phan' }}
run: |
docker load -i /home/runner/docker-images/"${QUIBBLE_DOCKER_IMAGE}" || \
docker pull "${DOCKER_REGISTRY}/${DOCKER_ORG}/${QUIBBLE_DOCKER_IMAGE}:${QUIBBLE_DOCKER_LATEST_TAG}"
- name: Download MediaWiki and extensions
run: |
cd /home/runner
if [ ! -d src ]; then
git clone -b "${MEDIAWIKI_VERSION}" --depth 1 https://gerrit.wikimedia.org/r/mediawiki/core src
git clone --recurse-submodules -b "${MEDIAWIKI_VERSION}" --depth 1 https://gerrit.wikimedia.org/r/mediawiki/skins/Vector src/skins/Vector
for dep in $DEPENDENCIES; do
dependency=$(echo $dep | cut -d'|' -f1)
repository=$(echo $dep | cut -sd'|' -f2)
branch=$(echo $dep | rev | cut -sd'|' -f1 | rev)
if [ $repository == $branch ]; then
repository=""
fi
git clone --recurse-submodules -b "${branch:-${MEDIAWIKI_VERSION}}" --depth 1 "${repository:-https://gerrit.wikimedia.org/r/${dependency}}" src/"$(echo $dependency | cut -d'/' -f2,3)"
done
fi
if [ -e "$GITHUB_WORKSPACE"/.github/workflows/globals.php ]; then
echo 'require_once __DIR__ . "/../extensions/${{ github.event.repository.name }}/.github/workflows/globals.php";' >> src/includes/DevelopmentSettings.php
fi
git -C src/ log -n 1 --format="%H"
- name: Cache dependencies (composer and npm)
uses: actions/cache@v3.3.1
with:
path: /home/runner/cache
key: ${{ runner.os }}-${{ env.MEDIAWIKI_VERSION }}-${{ hashFiles('**/*.lock') }}
- name: Setup PHP Action
if: ${{ matrix.stage == 'phan' }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
tools: composer:v2
- name: Composer install
if: ${{ matrix.stage == 'phan' }}
run: |
if [ -e composer.json ]; then
composer install --prefer-dist --no-progress --no-interaction
fi
- name: Fix PHPCS violations
continue-on-error: true
if: ${{ github.event_name == 'pull_request' && matrix.stage == 'composer-test' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ -e composer.json ]; then
composer install --prefer-dist --no-progress --no-interaction
composer fix
rm composer.lock
if ! git diff --exit-code --quiet; then
git config --global user.name "github-actions"
git config --global user.email "github-actions@users.noreply.github.com"
git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
git checkout -b ${GITHUB_HEAD_REF}
git add .
git commit -am "CI: lint code to MediaWiki standards" -m "Check commit and GitHub actions for more details"
git pull origin ${GITHUB_HEAD_REF} --rebase
git push --set-upstream origin ${GITHUB_HEAD_REF}
else
echo "No changes to commit"
fi
fi
- name: Main Test
continue-on-error: ${{ matrix.experimental }}
run: |
cd /home/runner
# Move our extension
sudo cp -r "${GITHUB_WORKSPACE}" src/extensions/
mkdir -p cache cover
chmod 777 src cache cover
sudo chown -R nobody:nogroup src cache
sudo chown $(id -u):$(id -g) src cache
# Composer install
if [ "${{ matrix.stage }}" == 'phan' ] || [ "${{ matrix.stage }}" == 'coverage' ]; then
docker run \
-e ZUUL_PROJECT=mediawiki/extensions/"${{ github.event.repository.name }}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src:/workspace/src \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${QUIBBLE_DOCKER_IMAGE}:${QUIBBLE_DOCKER_LATEST_TAG}" \
--skip-zuul \
--packages-source composer \
--skip-install \
--skip all \
$DEPENDENCIES
fi
if [ "${{ matrix.stage }}" == 'phan' ]; then
docker run \
-e THING_SUBNAME=extensions/"${{ github.event.repository.name }}" \
-v "$(pwd)"/src:/mediawiki \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}" \
--color
elif [ "${{ matrix.stage }}" == 'coverage' ] && [ -d src/extensions/"${{ github.event.repository.name }}"/tests/phpunit ]; then
docker run \
--entrypoint quibble-with-supervisord \
-e ZUUL_PROJECT=mediawiki/extensions/"${{ github.event.repository.name }}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src:/workspace/src \
-v "$(pwd)"/cover:/workspace/cover \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}" \
--skip-zuul \
--skip-deps \
-c mwext-phpunit-coverage
elif [ "${{ matrix.stage }}" != 'coverage' ]; then
docker run \
--entrypoint quibble-with-supervisord \
-e ZUUL_PROJECT=mediawiki/extensions/"${{ github.event.repository.name }}" \
-v "$(pwd)"/cache:/cache \
-v "$(pwd)"/src:/workspace/src \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}" \
--skip-zuul \
--packages-source composer \
--run "${{ matrix.stage }}" \
$DEPENDENCIES
fi
- name: Upload coverage to Codecov
if: ${{ matrix.stage == 'coverage' }}
uses: codecov/codecov-action@v3
with:
directory: /home/runner/cover
- name: Tear down
run: |
cd /home/runner
sudo rm -rf src/extensions/"${{ github.event.repository.name }}"
# See https://doc.wikimedia.org/quibble/index.html#remove-localsettings-php-between-runs
rm "$(pwd)"/src/LocalSettings.php || true
mkdir -p docker-images
docker save -o "$(pwd)/docker-images/${DOCKER_IMAGE}" \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}"