build: release 3.21.0 #3041
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 🔍 CI | |
| on: | |
| schedule: | |
| - cron: "0 0 * * *" | |
| push: | |
| branches: | |
| - "main" | |
| paths-ignore: | |
| - "docs/**" | |
| pull_request: | |
| branches: | |
| - "**" | |
| - "!dependabot/**" | |
| - "!release-please--branches--**" | |
| paths-ignore: | |
| - "docs/**" | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| name: 🤔 Detect changes | |
| runs-on: ubuntu-24.04-arm | |
| timeout-minutes: 5 | |
| outputs: | |
| php: ${{ steps.filter.outputs.php_any_changed }} | |
| script: ${{ steps.filter.outputs.script_any_changed }} | |
| stylesheet: ${{ steps.filter.outputs.stylesheet_any_changed }} | |
| i18n: ${{ steps.filter.outputs.i18n_any_changed }} | |
| markdown: ${{ steps.filter.outputs.markdown_any_changed }} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: tj-actions/changed-files@v47 | |
| id: filter | |
| with: | |
| files_yaml: | | |
| php: | |
| - includes/**/*.php | |
| - tests/**/*.php | |
| # A compat slice is only ever compiled by test-php | |
| # (CompatSliceCompileTest), never by stylelint. | |
| - resources/compat/** | |
| - skin.json | |
| - composer.json | |
| - composer.lock | |
| - .phan/config.php | |
| - .github/workflows/ci.yml | |
| script: | |
| - resources/**/*.js | |
| - tests/vitest/** | |
| - vitest.config.js | |
| - package.json | |
| - package-lock.json | |
| - .eslintrc.json | |
| - .github/workflows/ci.yml | |
| stylesheet: | |
| - resources/**/*.css | |
| - resources/**/*.less | |
| - skinStyles/**/*.css | |
| - skinStyles/**/*.less | |
| - package.json | |
| - package-lock.json | |
| - .github/workflows/ci.yml | |
| i18n: | |
| - i18n/*.json | |
| - package.json | |
| - package-lock.json | |
| - .github/workflows/ci.yml | |
| markdown: | |
| - '*.md' | |
| - .markdownlint.json | |
| - .github/workflows/ci.yml | |
| lint: | |
| needs: changes | |
| if: >- | |
| needs.changes.outputs.php == 'true' || | |
| needs.changes.outputs.script == 'true' || | |
| needs.changes.outputs.stylesheet == 'true' || | |
| needs.changes.outputs.i18n == 'true' || | |
| needs.changes.outputs.markdown == 'true' || | |
| github.event_name == 'schedule' | |
| uses: StarCitizenTools/mediawiki-ci-workflows/.github/workflows/lint.yml@main | |
| with: | |
| lint-php: ${{ needs.changes.outputs.php == 'true' || github.event_name == 'schedule' }} | |
| lint-js: ${{ needs.changes.outputs.script == 'true' || github.event_name == 'schedule' }} | |
| lint-styles: ${{ needs.changes.outputs.stylesheet == 'true' || github.event_name == 'schedule' }} | |
| lint-i18n: ${{ needs.changes.outputs.i18n == 'true' || github.event_name == 'schedule' }} | |
| lint-md: ${{ needs.changes.outputs.markdown == 'true' || github.event_name == 'schedule' }} | |
| runner: ubuntu-24.04-arm | |
| # Deliberately not gated on `changes`: a compat slice expires when skin.json's | |
| # version moves forward, not when anything under resources/compat/ is edited. | |
| # A path filter would skip the very commit that expires a slice. | |
| lint-compat: | |
| name: 🗓️ Compat window | |
| runs-on: ubuntu-24.04-arm | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v7 | |
| with: | |
| node-version: 24 | |
| # No `npm ci`: scripts/compat-lint.mjs imports only node: builtins. | |
| - run: npm run lint:compat | |
| analyze-php: | |
| needs: changes | |
| if: needs.changes.outputs.php == 'true' || github.event_name == 'schedule' | |
| uses: StarCitizenTools/mediawiki-ci-workflows/.github/workflows/analyze-php.yml@main | |
| with: | |
| project-type: skin | |
| project-name: Citizen | |
| skip-cache: ${{ github.event_name == 'schedule' }} | |
| runner: ubuntu-24.04-arm | |
| test-js: | |
| needs: changes | |
| if: needs.changes.outputs.script == 'true' || github.event_name == 'schedule' | |
| uses: StarCitizenTools/mediawiki-ci-workflows/.github/workflows/test-js.yml@main | |
| with: | |
| runner: ubuntu-24.04-arm | |
| test-php: | |
| needs: changes | |
| if: needs.changes.outputs.php == 'true' || github.event_name == 'schedule' | |
| uses: StarCitizenTools/mediawiki-ci-workflows/.github/workflows/test-php.yml@main | |
| with: | |
| project-type: skin | |
| project-name: Citizen | |
| skip-cache: ${{ github.event_name == 'schedule' }} | |
| runner: ubuntu-24.04-arm | |
| sonarqube: | |
| needs: [test-js, test-php] | |
| if: always() && !failure() | |
| uses: StarCitizenTools/mediawiki-ci-workflows/.github/workflows/sonarqube.yml@main | |
| with: | |
| has-js-coverage: ${{ needs.test-js.result == 'success' }} | |
| has-php-coverage: ${{ needs.test-php.result == 'success' }} | |
| runner: ubuntu-24.04-arm | |
| secrets: | |
| SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} |