mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2026-01-22 16:53:16 +01:00
* Qual: Add pre-commit hooks for Perl code formatting and linting - Added perltidy hook to format Perl code - Added perlcritic hook to lint Perl code * Qual: Update file opening syntax in build scripts (perltidy) The changes update the syntax for opening files in several build scripts to use the three-argument form of the `open` function, which is more secure and recommended in modern Perl practices. * Qual: Improve file handling and add strict/warnings pragmas (perlcritic) The changes include: - Adding 'use strict' and 'use warnings' pragmas to enforce better coding practices - Improving file handling by using lexical filehandles (my $IN, my $SPECFROM, etc.) - Fixing file opening and closing operations to use proper error handling - Updating various file operations to use the new lexical filehandles - Fixing indentation and formatting issues in the code * Qual: Add strict and warnings pragmas to Perl scripts (perlcritic) The changes add 'use strict;' and 'use warnings;' pragmas - dev/build/doxygen/dolibarr-doxygen-build.pl - dev/build/doxygen/dolibarr-doxygen-filter.pl - dev/build/doxygen/dolibarr-doxygen-getversion.pl - dev/build/gource/getavatars.pl - dev/tools/dolibarr-mysql2pgsql.pl * Qual: Add Perl no critic pragmas (perlcritic) - Ignore some perlcritic notices * Qual: Improve code formatting and readability Perltidy: - Indentation and spacing - Improved variable naming and alignment - Better code organization and structure - Enhanced readability of conditional statements and loops These changes do not alter the functionality of the script but make it more maintainable and easier to understand. * qual: Exclude virtualmin from perltidy and perlcritic hooks Exclude the virtualmin directory from both perltidy and perlcritic hooks due to specific reasons mentioned in the comment. This change ensures that these hooks do not process files in the virtualmin directory. * Qual: Add installation of perltidy and perlcritic for pre-commit workflow This commit adds the installation of perltidy and perlcritic as part of the pre-commit hooks workflow. * Fix: Update version detection in dolibarr-doxygen-build.pl - Add support for detecting version from DOL_MAJOR_VERSION and DOL_MINOR_VERSION constants - Fix undefined variable issue in version detection * Fix: Update getavatars.pl to use HTTPS and reverse git log - Changed the URL from HTTP to HTTPS for Gravatar - Added `--reverse` flag to git log command to process commits in chronological order (faster) - Updated error message to indicate .git repository instead of .git directory (+ correct test) * fix: Correct spelling in error messages and prompts - Fixed typo in error message for missing environment variables - Corrected spelling in prompt for module name input - Improved clarity in comment for target checking
180 lines
6.3 KiB
YAML
180 lines
6.3 KiB
YAML
---
|
|
name: pre-commit
|
|
|
|
on:
|
|
# workflow called by the parent workflow ci.yml
|
|
workflow_call:
|
|
inputs:
|
|
gh_event:
|
|
required: true
|
|
type: string
|
|
# can run job manually
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: pre-commit-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref
|
|
}}
|
|
cancel-in-progress: true
|
|
env:
|
|
gh_event: ${{ inputs.gh_event || github.event_name }}
|
|
|
|
jobs:
|
|
pre-commit:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
RAW_LOG: pre-commit.log
|
|
CS_XML: pre-commit.xml
|
|
steps:
|
|
#- name: Install required tools
|
|
# run: sudo apt-get update && sudo apt-get install cppcheck
|
|
# if: false
|
|
|
|
# Checkout git sources to analyze
|
|
- uses: actions/checkout@v5
|
|
|
|
# Try to get the list of modified files into steps.changed-php.outputs.all_changed_files
|
|
#- name: Get changed files
|
|
# id: changed-files
|
|
# uses: actions/github-script@v7
|
|
# with:
|
|
# script: |
|
|
# const base = context.payload.pull_request?.base?.sha;
|
|
# const head = context.payload.pull_request?.head?.sha;
|
|
# const response = await github.rest.repos.compareCommits({
|
|
# owner: context.repo.owner,
|
|
# repo: context.repo.repo,
|
|
# base,
|
|
# head
|
|
# });
|
|
#
|
|
# const changedFiles = response.data.files.map(file => file.filename);
|
|
# core.setOutput("all_changed_files", changedFiles.join(" "));
|
|
|
|
# Another method to get the list of changed files
|
|
# It sets the variable steps.changed-php.outputs.all_changed_files for other steps
|
|
- name: Get all changed php files (if PR)
|
|
id: changed-php
|
|
if: env.gh_event == 'pull_request'
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: ./.github/scripts/get_changed_php.sh
|
|
|
|
#- name: Print changed files
|
|
# run: echo "Changed files are ${{ steps.changed-files.outputs.all_changed_files }}"
|
|
|
|
# Action setup-python needs a requirements.txt or pyproject.toml
|
|
# This ensures one of them exists.
|
|
- name: Create requirements.txt if no requirements.txt or pyproject.toml
|
|
run: |-
|
|
[ -r requirements.txt ] || [ -r pyproject.toml ] || touch requirements.txt
|
|
# Install python and pre-commit tool
|
|
- uses: actions/setup-python@v6
|
|
with:
|
|
cache: pip
|
|
python-version: "3.11"
|
|
- run: python -m pip install pre-commit
|
|
|
|
# Restore previous cache of precommit
|
|
- uses: actions/cache/restore@v4
|
|
with:
|
|
path: ~/.cache/pre-commit/
|
|
key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
|
|
|
# Run all the precommit tools (defined in pre-commit-config.yaml).
|
|
- name: Extract PHP version
|
|
id: extract-php-version
|
|
run: |
|
|
# shellcheck disable=SC2016
|
|
PHP_VERSION=$(sed -n 's/.*\$arrayphpmaxversionwarning\s*=\s*array\s*(\s*\([0-9]\+\)\s*,\s*\([0-9]\+\).*/\1.\2/p' htdocs/install/check.php)
|
|
echo "PHP_VERSION=$PHP_VERSION" >> "$GITHUB_ENV"
|
|
|
|
- name: Setup PHPCS
|
|
uses: shivammathur/setup-php@v2
|
|
# Install proper php version, and also install phpcs which may be needed
|
|
if: |
|
|
! cancelled() &&
|
|
(
|
|
steps.changed-php.outputs.any_changed == 'true'
|
|
||
|
|
(
|
|
env.gh_event == 'push'
|
|
&& (
|
|
github.event.ref == 'refs/heads/develop'
|
|
|| endsWith(github.event.ref, '.0')
|
|
)
|
|
)
|
|
)
|
|
with:
|
|
php-version: ${{ env.PHP_VERSION }} # Version from check.php
|
|
coverage: none # disable xdebug, pcov
|
|
tools: phpcs
|
|
|
|
# Install perltidy and perlcritic
|
|
- name: Install perltidy and perlcritic
|
|
run: sudo apt-get update && sudo apt-get install -y perltidy libperl-critic-perl
|
|
|
|
# Run all the precommit tools (defined into pre-commit-config.yaml).
|
|
# We can force exclusion of some of them here.
|
|
- name: Run pre-commit hooks
|
|
env:
|
|
# SKIP is used by pre-commit to not execute certain hooks
|
|
SKIP: no-commit-to-branch,php-cs,php-cbf,trailing-whitespace,end-of-file-fixer
|
|
run: |
|
|
set -o pipefail
|
|
pre-commit gc
|
|
pre-commit run --show-diff-on-failure --color=always --all-files | tee "${RAW_LOG}"
|
|
|
|
# The next uses git, which is slow for a bit repo.
|
|
# - name: Get all changed php files (if PR)
|
|
# id: changed-php
|
|
# uses: tj-actions/changed-files@v45
|
|
# if: env.gh_event == 'pull_request'
|
|
# with:
|
|
# files: |
|
|
# **.php
|
|
|
|
- name: Run some pre-commit hooks on selected changed files only
|
|
if: "! cancelled() && steps.changed-php.outputs.any_changed == 'true'"
|
|
env:
|
|
ALL_CHANGED_FILES: ${{ steps.changed-php.outputs.all_changed_files }}
|
|
run: |
|
|
set -o pipefail
|
|
# shellcheck disable=2086
|
|
pre-commit run php-cs --files ${ALL_CHANGED_FILES} | tee -a "${RAW_LOG}"
|
|
|
|
- name: Run some pre-commit hooks on all files on push to "main" branches
|
|
if: |
|
|
env.gh_event == 'push'
|
|
&& (
|
|
github.event.ref == 'refs/heads/develop'
|
|
|| endsWith(github.event.ref, '.0')
|
|
)
|
|
run: |
|
|
set -o pipefail
|
|
ln -sf ~/.cache .cache # Absolute path in .pre-commit-config.yaml
|
|
pre-commit run --hook-stage manual -a php-cs-with-cache | tee -a "${RAW_LOG}"
|
|
pre-commit run --hook-stage manual -a sqlfluff-lint | tee -a "${RAW_LOG}"
|
|
ls -l ~/.cache/pre-commit/
|
|
|
|
- name: Convert Raw Log to Annotations
|
|
uses: mdeweerd/logToCheckStyle@v2025.11.2
|
|
if: ${{ failure() }}
|
|
with:
|
|
in: ${{ env.RAW_LOG }}
|
|
|
|
# Save the precommit cache
|
|
- uses: actions/cache/save@v4
|
|
if: ${{ ! cancelled() }}
|
|
with:
|
|
path: ~/.cache/pre-commit/
|
|
key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
|
# Upload result log files of precommit into the Artifact shared store
|
|
- name: Provide log as artifact
|
|
uses: actions/upload-artifact@v5
|
|
if: ${{ ! cancelled() }}
|
|
with:
|
|
name: precommit-logs
|
|
path: |
|
|
${{ env.RAW_LOG }}
|
|
${{ env.CS_XML }}
|