From 349c283a4a56dfe3231fb7024cb947ae43b9865b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 15 Jul 2026 01:22:24 +0200 Subject: [PATCH] Backport ci optimizations --- .github/workflows/phan.yml | 51 ++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/.github/workflows/phan.yml b/.github/workflows/phan.yml index 228f8d37c3a..4807d1a9d08 100644 --- a/.github/workflows/phan.yml +++ b/.github/workflows/phan.yml @@ -33,7 +33,7 @@ jobs: github.repository == 'Dolibarr/dolibarr' || github.event.schedule == false steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 # Another method to get the list of changed files # It sets the variable steps.changed-php.outputs.all_changed_files for other steps @@ -49,17 +49,52 @@ jobs: with: php-version: 8.2 coverage: none # disable xdebug, pcov - tools: phan:5.5.2 + extensions: ast + tools: cs2pr:1.8.6,phan:5.5.2 + - name: Run Phan analysis - if: "! cancelled() && steps.changed-php.outputs.any_changed == 'true'" + # Proceed when: + # - the action is not cancelled + # AND + # - the branch is an integration branch (no merge), or, + # - the merge from branch contains 'phan_full', or, + # - there are changes in PHP files. + # Note: --output-mode=github does not provide file:line, so using checkstyle and cs2pr + if: ${{ ! cancelled() && (github.ref_name == 'develop' || github.ref_name == 'refs/heads/develop' || endsWith(github.ref_name, '.0') || contains(github.head_ref, 'phan_full') || steps.changed-php.outputs.phan_changed == 'true') }} env: ALL_CHANGED_FILES: ${{ steps.changed-php.outputs.all_changed_files }} + PHAN_CHANGED_FILES: ${{ steps.changed-php.outputs.phan_changed_files }} # shellcheck disable=2086 + FILE_CHANGED_LIST: /tmp/phan-changed.lst run: | # shellcheck disable=2086 - > /tmp/phpstan-files.txt - for f in $ALL_CHANGED_FILES; do echo "$f" >> /tmp/phan-files.txt; done - cat /tmp/phan-files.txt - echo phan --file-list /tmp/phan-files.txt $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=github - phan --file-list /tmp/phan-files.txt $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=github + if [ "${{ github.ref_name }}" == "develop" ] || [[ "${{ github.ref_name }}" == *.0 ]]|| [[ "${{ github.head_ref }}" == *"phan_full"* ]] ; then + echo phan $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=checkstyle -o _phan.xml + phan $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=checkstyle -o _phan.xml + else + echo -n "" > "$FILE_CHANGED_LIST" + for f in $PHAN_CHANGED_FILES; do echo "$f" >> "$FILE_CHANGED_LIST"; done + # Must exclude same files as in phan configuration + grep -v -E '^htdocs/(custom/|.*/canvas/.*/tpl/.*.tpl.php|admin/tools/ui/|includes/(nusoap/|restler/|stripe/)|conf/conf.php)$' "$FILE_CHANGED_LIST"> "$FILE_CHANGED_LIST".tmp || true + mv "$FILE_CHANGED_LIST".tmp "$FILE_CHANGED_LIST" + if [ ! -s "$FILE_CHANGED_LIST" ] ; then + echo "All changed files are excluded for phan" + else + echo phan --file-list "$FILE_CHANGED_LIST" $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=checkstyle -o _phan.xml + phan --file-list "$FILE_CHANGED_LIST" $PHAN_QUICK -k "$PHAN_CONFIG" -B "$PHAN_BASELINE" --analyze-twice --minimum-target-php-version "$PHAN_MIN_PHP" --output-mode=checkstyle -o _phan.xml + fi + fi + + - name: Add results to PR as Github notices + if: ${{ always() }} + run: | + cs2pr --prepend-filename --prepend-source --notices-as-warnings _phan.xml + + - name: Provide phan log as artifact + uses: actions/upload-artifact@v7 + if: ${{ always() }} + with: + name: phan-srcrt + path: ${{ github.workspace }}/_phan.xml + retention-days: 2