Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6cb9081
Bump github/codeql-action from 3 to 4 (#494)
dependabot[bot] Dec 15, 2025
111a692
Bump actions/checkout from 5 to 6 (#500)
dependabot[bot] Dec 15, 2025
96bf9a7
Bump sqren/backport-github-action from 9.5.1 to 10.2.0 (#496)
dependabot[bot] Dec 15, 2025
c18ada3
Bump actions/cache from 4 to 5 (#502)
dependabot[bot] Dec 15, 2025
1c619f1
Localisation updates from https://translatewiki.net.
translatewiki Dec 25, 2025
cdaca0a
Update mediawiki/mediawiki-phan-config requirement from 0.17.0 to 0.1…
dependabot[bot] Dec 27, 2025
8967e65
Localisation updates from https://translatewiki.net.
translatewiki Dec 29, 2025
c50712c
Release DPL4
Universal-Omega Jan 4, 2026
44b7ef9
Fix distinct usage
Universal-Omega Jan 5, 2026
61c2c98
Localisation updates from https://translatewiki.net.
translatewiki Jan 5, 2026
081b37b
Use DynamicPageList4 in README
Universal-Omega Jan 5, 2026
bae0a1a
Use DynamicPageList4 in all languages
Universal-Omega Jan 5, 2026
86a6c04
Use string type for hiddencategories stub
Universal-Omega Jan 6, 2026
9a0c335
Use main for namespace in parser tests
Universal-Omega Jan 7, 2026
9884181
Localisation updates from https://translatewiki.net.
translatewiki Jan 8, 2026
bb9850d
Localisation updates from https://translatewiki.net.
translatewiki Jan 12, 2026
7667d93
Update mediawiki/minus-x requirement from 1.1.3 to 2.0.0 (#525)
dependabot[bot] Jan 13, 2026
ed0a71d
Update mediawiki/mediawiki-codesniffer requirement from 48.0.0 to 49.…
dependabot[bot] Jan 13, 2026
72007e7
Remove qunit and selenium tests
Universal-Omega Jan 13, 2026
8384956
Make tests faster
Universal-Omega Jan 13, 2026
b552c82
Support categorylinks for MediaWiki 1.45
Universal-Omega Jan 13, 2026
ee86dbf
Remove requirement on view
Universal-Omega Jan 13, 2026
00d65ac
Add PHP 8.4 tests
Universal-Omega Jan 14, 2026
dfe2adc
Replace class namespace deprecated in MediaWiki 1.44
Universal-Omega Jan 14, 2026
d2f8aad
Fix fatal error when moving some pages
Universal-Omega Jan 14, 2026
007777a
Localisation updates from https://translatewiki.net.
translatewiki Jan 15, 2026
a22cb4d
Bump styfle/cancel-workflow-action from 0.12.1 to 0.13.0 (#539)
dependabot[bot] Jan 16, 2026
400e461
Some performance fixes
Universal-Omega Jan 16, 2026
aeba4ab
Bump version
Universal-Omega Jan 16, 2026
60f8375
Add CHANGELOG entry
Universal-Omega Jan 16, 2026
98626e7
Update CHANGELOG
Universal-Omega Jan 16, 2026
8497856
Update CHANGELOG
Universal-Omega Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ assignees: ''

---

**DynamicPageList3 version**:
**DynamicPageList4 version**:
**MediaWiki version**:
**PHP version**:
**Database version**:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/backport.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
)
steps:
- name: Backport
uses: sqren/backport-github-action@v9.5.1
uses: sqren/backport-github-action@v10.2.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
auto_backport_label_prefix: backport-to-
6 changes: 4 additions & 2 deletions .github/workflows/codacy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,13 @@ jobs:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results

name: Codacy Security Scan
runs-on: ubuntu-latest
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6

# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI
Expand All @@ -55,6 +56,7 @@ jobs:

# Upload the SARIF file generated in the previous step
- name: Upload SARIF results file
uses: github/codeql-action/upload-sarif@v3
uses: github/codeql-action/upload-sarif@v4
continue-on-error: true
with:
sarif_file: results.sarif
3 changes: 3 additions & 0 deletions .github/workflows/dependencies
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
PageImages:
branch: auto
repo: auto
Variables:
branch: auto
repo: auto
130 changes: 72 additions & 58 deletions .github/workflows/mediawiki-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,73 +13,87 @@ jobs:
strategy:
matrix:
include:
# Latest MediaWiki LTS - PHP 8.1 (phan)
- mw: 'REL1_43'
php: 8.1
php-docker: 81
# Legacy MediaWiki stable - PHP 8.2 (phan)
- mw: 'REL1_44'
php: 8.2
php-docker: 82
experimental: false
stage: phan

# Latest stable MediaWiki - PHP 8.1 (phan)
- mw: 'REL1_44'
php: 8.1
php-docker: 81
# Latest MediaWiki stable - PHP 8.2 (phan)
- mw: 'REL1_45'
php: 8.2
php-docker: 82
experimental: true
stage: phan

# Latest MediaWiki master - PHP 8.1 (phan)
# Latest MediaWiki stable - PHP 8.4 (phan)
- mw: 'REL1_45'
php: 8.4
php-docker: 84
experimental: true
stage: phan

# Latest MediaWiki master - PHP 8.2 (phan)
- mw: 'master'
php: 8.1
php-docker: 81
php: 8.2
php-docker: 82
experimental: true
stage: phan

# Latest MediaWiki master - PHP 8.1 (coverage)
# Latest MediaWiki master - PHP 8.4 (phan)
- mw: 'master'
php: 8.1
php-docker: 81
experimental: false
stage: coverage
php: 8.4
php-docker: 84
experimental: true
stage: phan

# Latest MediaWiki LTS - PHP 8.1 (phpunit)
- mw: 'REL1_43'
php: 8.1
php-docker: 81
experimental: false
stage: phpunit
# Latest MediaWiki master - PHP 8.2 (coverage)
- mw: 'master'
php: 8.2
php-docker: 82
experimental: true
stage: coverage

# Latest stable MediaWiki - PHP 8.1 (phpunit)
# Legacy MediaWiki stable - PHP 8.2 (phpunit)
- mw: 'REL1_44'
php: 8.1
php-docker: 81
php: 8.2
php-docker: 82
experimental: false
stage: phpunit

# Latest MediaWiki master - PHP 8.1 (phpunit)
- mw: 'master'
php: 8.1
php-docker: 81
experimental: true
# Latest MediaWiki stable - PHP 8.2 (phpunit)
- mw: 'REL1_45'
php: 8.2
php-docker: 82
experimental: false
stage: phpunit

# Latest MediaWiki stable - PHP 8.4 (phpunit)
- mw: 'REL1_45'
php: 8.4
php-docker: 84
experimental: false
stage: phpunit

# Latest MediaWiki master - PHP 8.1 (selenium)
# Latest MediaWiki master - PHP 8.2 (phpunit)
- mw: 'master'
php: 8.1
php-docker: 81
php: 8.2
php-docker: 82
experimental: true
stage: selenium
stage: phpunit

# Latest MediaWiki master - PHP 8.1 (qunit)
# Latest MediaWiki master - PHP 8.4 (phpunit)
- mw: 'master'
php: 8.1
php-docker: 81
php: 8.4
php-docker: 84
experimental: true
stage: qunit
stage: phpunit

# Latest stable MediaWiki - PHP 8.1 (composer-test)
- mw: 'REL1_43'
php: 8.1
php-docker: 81
# Latest MediaWiki stable - PHP 8.2 (composer-test)
- mw: 'REL1_45'
php: 8.2
php-docker: 82
experimental: false
stage: composer-test

Expand All @@ -89,17 +103,15 @@ jobs:
DOCKER_REGISTRY: docker-registry.wikimedia.org
DOCKER_ORG: releng
QUIBBLE_DOCKER_IMAGE: quibble-bullseye-php${{ matrix.php-docker }}
COVERAGE_DOCKER_IMAGE: quibble-bullseye-php${{ matrix.php-docker }}-coverage
PHAN_DOCKER_IMAGE: mediawiki-phan-php${{ matrix.php-docker }}
MEDIAWIKI_VERSION: ${{ matrix.mw }}

steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.12.1
uses: styfle/cancel-workflow-action@0.13.0
with:
access_token: ${{ github.token }}

- uses: actions/checkout@v5
- uses: actions/checkout@v6

# /home/runner/cache/ Cache
# /home/runner/src/ Mediawiki installation
Expand All @@ -109,13 +121,7 @@ jobs:
# $GITHUB_WORKSPACE/.github/workflows/globals.php Add global configuration options for MediaWiki
- name: Set up
run: |
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
export DOCKER_IMAGE="${QUIBBLE_DOCKER_IMAGE}"
echo "DOCKER_IMAGE=${DOCKER_IMAGE}" >> $GITHUB_ENV

# Get the latest docker tag (Ref: https://github.com/thcipriani/dockerregistry)
Expand All @@ -142,7 +148,7 @@ jobs:
fi

- name: Cache docker image
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: /home/runner/docker-images/${{ env.DOCKER_IMAGE }}
key: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_LATEST_TAG }}
Expand All @@ -154,7 +160,7 @@ jobs:

- name: Cache quibble docker image
if: ${{ matrix.stage == 'coverage' || matrix.stage == 'phan' }}
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: /home/runner/docker-images/${{ env.QUIBBLE_DOCKER_IMAGE }}
key: ${{ env.QUIBBLE_DOCKER_IMAGE }}:${{ env.QUIBBLE_DOCKER_LATEST_TAG }}
Expand Down Expand Up @@ -190,7 +196,7 @@ jobs:
git -C src/ log -n 1 --format="%H"

- name: Cache dependencies (composer and npm)
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: /home/runner/cache
key: ${{ runner.os }}-${{ env.MEDIAWIKI_VERSION }}-${{ hashFiles('**/*.json') }}
Expand Down Expand Up @@ -259,6 +265,7 @@ jobs:

if [ "${{ matrix.stage }}" == 'phan' ]; then
docker run \
--entrypoint /run-phan.sh \
-e THING_SUBNAME=extensions/"${{ github.event.repository.name }}" \
-v "$(pwd)"/src:/mediawiki \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}" \
Expand All @@ -272,8 +279,15 @@ jobs:
-v "$(pwd)"/cover:/workspace/cover \
"${DOCKER_REGISTRY}/${DOCKER_ORG}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG}" \
--skip-zuul \
--skip-deps \
-c mwext-phpunit-coverage
--packages-source composer \
-c "/bin/bash -c 'curl -sL https://raw.githubusercontent.com/wikimedia/integration-config/refs/heads/master/dockerfiles/quibble-bullseye-php81-coverage/mwext-phpunit-coverage.sh -o mwext-phpunit-coverage && \
curl -sL https://raw.githubusercontent.com/wikimedia/integration-config/refs/heads/master/dockerfiles/quibble-bullseye-php81-coverage/phpunit-suite-edit.py -o phpunit-suite-edit && \
curl -sL https://raw.githubusercontent.com/wikimedia/integration-config/refs/heads/master/dockerfiles/quibble-bullseye-php81-coverage/phpunit-junit-edit.py -o phpunit-junit-edit && \
rm -rf /workspace/src/extensions/*/vendor/squizlabs/php_codesniffer /workspace/src/extensions/*/vendor/composer/pcre && \
chmod +x mwext-phpunit-coverage phpunit-suite-edit phpunit-junit-edit && \
sed -i \"s|phpunit-suite-edit|./phpunit-suite-edit|g\" mwext-phpunit-coverage && \
sed -i \"s|phpunit-junit-edit|./phpunit-junit-edit|g\" mwext-phpunit-coverage && \
./mwext-phpunit-coverage'"
elif [ "${{ matrix.stage }}" != 'coverage' ]; then
docker run \
--entrypoint quibble-with-supervisord \
Expand Down
42 changes: 40 additions & 2 deletions .phan/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,61 @@

$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';

$cfg['minimum_target_php_version'] = '8.1';

$cfg['directory_list'] = array_merge(
$cfg['directory_list'], [
'../../extensions/PageImages',
'../../extensions/Variables',
]
);

$cfg['exclude_analysis_directory_list'] = array_merge(
$cfg['exclude_analysis_directory_list'], [
'../../extensions/PageImages',
'../../extensions/Variables',
]
);

$cfg['suppress_issue_types'] = [
'SecurityCheck-LikelyFalsePositive',
'PhanAccessMethodInternal',
'PhanPluginMixedKeyNoKey',
];

$cfg['plugins'] = array_merge( $cfg['plugins'], [
'AddNeverReturnTypePlugin',
'AlwaysReturnPlugin',
'DeprecateAliasPlugin',
'DollarDollarPlugin',
'DuplicateConstantPlugin',
'EmptyMethodAndFunctionPlugin',
'EmptyStatementListPlugin',
'FFIAnalysisPlugin',
'InlineHTMLPlugin',
'InvalidVariableIssetPlugin',
'InvokePHPNativeSyntaxCheckPlugin',
'LoopVariableReusePlugin',
'NotFullyQualifiedUsagePlugin',
'PHPDocRedundantPlugin',
'PHPUnitAssertionPlugin',
'PHPUnitNotDeadCodePlugin',
'PreferNamespaceUsePlugin',
'RedundantAssignmentPlugin',
'SimplifyExpressionPlugin',
'SleepCheckerPlugin',
'StrictComparisonPlugin',
'StrictLiteralComparisonPlugin',
'SuspiciousParamOrderPlugin',
'UnreachableCodePlugin',
'UnsafeCodePlugin',
'UseReturnValuePlugin',
] );

$cfg['analyze_signature_compatibility'] = true;
$cfg['enable_class_alias_support'] = true;
$cfg['enable_extended_internal_return_type_plugins'] = true;
$cfg['error_prone_truthy_condition_detection'] = true;
$cfg['redundant_condition_detection'] = true;
$cfg['unused_variable_detection'] = true;
$cfg['warn_about_relative_include_statement'] = true;

return $cfg;
26 changes: 20 additions & 6 deletions .phpcs.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
<?xml version="1.0"?>
<ruleset>
<file>.</file>
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
<exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
<exclude name="PSR2.Methods.MethodDeclaration.Underscore" />
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
<rule ref="Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma">
<severity>5</severity>
</rule>
<arg name="bootstrap" value="./vendor/mediawiki/mediawiki-codesniffer/utils/bootstrap-ci.php"/>
<arg name="extensions" value="php"/>
<arg name="encoding" value="UTF-8"/>
<rule ref="Squiz.WhiteSpace.FunctionSpacing.BeforeFirst">
<severity>5</severity>
</rule>
<rule ref="Squiz.WhiteSpace.MemberVarSpacing.FirstIncorrect">
<severity>5</severity>
</rule>
<rule ref="MediaWiki.Classes.FullQualifiedClassName">
<severity>5</severity>
<properties>
<property name="allowMainNamespace" value="false" />
<property name="allowInheritance" value="false" />
<property name="allowFunctions" value="false" />
</properties>
</rule>
<arg name="bootstrap" value="./vendor/mediawiki/mediawiki-codesniffer/utils/bootstrap-ci.php" />
<arg name="extensions" value="php" />
<arg name="encoding" value="UTF-8" />
</ruleset>
Loading