Merge pull request #28957 from Hystepik/references-field-ticket-code #2
This file contains 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: Win CI | |
# yamllint disable-line rule:truthy | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref | |
}} | |
cancel-in-progress: true | |
env: | |
PHPUNIT_LOG: phpunit_tests.log | |
DOLIBARR_LOG: documents/dolibarr.log | |
PHPSERVER_LOG: phpserver.log | |
PHPSERVER_DOMAIN_PORT: 127.0.0.1:8000 # could be 127.0.0.1:8000 if config modified | |
CACHE_KEY_PART: ${{ github.event_name == 'pull_request' && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }} | |
PHP_INI_SCAN_DIR: C:\myphpini | |
CKEY: win-ci-2 | |
GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action | |
jobs: | |
win-test: | |
strategy: | |
matrix: | |
os: [windows-latest] | |
# php_version: [7.4, 8.0] # Add more versions if needed | |
php_version: [7.4] # Add more versions if needed | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup MariaDB | |
uses: ankane/setup-mariadb@v1 | |
with: | |
# mariadb-version: ${{ matrix.mariadb-version }} | |
database: travis # Specify your database name | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php_version }} | |
# ini-values: post_max_size=256M, max_execution_time=180 | |
extensions: > | |
calendar, gd, imagick, imap, intl, json, ldap, mbstring, | |
mcrypt, mysql, mysqli, opcache, pgsql, sqlite3, xml, zip | |
tools: > | |
composer, | |
phpunit:9.5 | |
coverage: none | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# phpts: ts # ts for thread-safe, default nts | |
# Restore cache | |
- name: Restore cache | |
id: cache | |
uses: actions/cache/restore@v4 | |
with: | |
# See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 | |
enableCrossOsArchive: true | |
path: | | |
db_init.sql | |
db_init.sql.md5 | |
key: ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART | |
}}-${{ github.run_id }} | |
restore-keys: | | |
${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART }}- | |
${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.head_ref }}- | |
${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.base_ref }}- | |
${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}- | |
- name: Create local php.ini | |
shell: cmd | |
if: false | |
# Note: Setting the basedir before initialising the database results in open_basedir errors | |
# Objective: separate step, and before database initialisation to verify open_basedir restrictions | |
run: |- | |
ECHO "==== Show INI file usage before our configuration ===" | |
php --ini | |
ECHO "==== Set PHP_INI_SCAN_DIR to include the INI File we create ===" | |
mkdir %PHP_INI_SCAN_DIR% | |
SET INIFILE="%PHP_INI_SCAN_DIR%\dolibarr.ini" | |
SET HTDOCS_DIR=%CD%\htdocs | |
SET DATA_DIR=%CD%\documents | |
SET TEST_DIR=%CD%\test | |
SET INITDEMO_DIR=%CD%\dev\initdemo | |
ECHO "==== Create INI file to set open_basedir ===" | |
echo [php] > %INIFILE% | |
echo open_basedir^="%HTDOCS_DIR%;%DATA_DIR%;%TEST_DIR%;%INITDEMO_DIR%;%PHPROOT%" >> %INIFILE% | |
ECHO "==== Show contents of INI file to set open_basedir ===" | |
type %INIFILE% | |
REM Next line disables open_basedir limitation (to limit errors) | |
SET PHP_INI_SCAN_DIR= | |
ECHO "==== Verify it is used by PHP ===" | |
php --ini | |
- name: Run Bash script | |
# Note this is bash (MSYS) on Windows | |
shell: bash | |
# Note: Initialise the database (possibly from cache) and set some variables. | |
run: | | |
# Check if database cache is present (visually, to remove once ok) | |
ls -l | |
# Run bash script to initialise database | |
${SHELL} -xv dev/setup/phpunit/setup_conf.sh | |
sed -i -e 's/stopOnFailure="[^"]*"/stopOnFailure="false"/' test/phpunit/phpunittest.xml | |
# Check if database cache is present after the script (visually, to remove once ok) | |
ls -l | |
echo "TAIL=$(cygpath -w "$(which tail)")" >> "$GITHUB_ENV" | |
echo "GREP=$(cygpath -w "$(which grep)")" >> "$GITHUB_ENV" | |
echo "TEE=$(cygpath -w "$(which tee)")" >> "$GITHUB_ENV" | |
echo "BASEDIR=$(realpath .)" >> "$GITHUB_ENV" | |
- name: Start web server | |
id: server | |
if: false | |
# Objective: Start php server in separate step (but after open_basedir restriction setup!) | |
run: | | |
Start-Process -FilePath "php.exe" -WindowStyle Hidden -ArgumentList "-S ${{ env.PHPSERVER_DOMAIN_PORT }} -t htdocs > ${{ env.PHPSERVER_LOG }}" -PassThru | |
curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" | |
shell: powershell | |
- name: Run PHPUnit tests | |
# continue-on-error: true | |
shell: cmd | |
# setting up php.ini, starting the php server are currently in this step | |
run: |- | |
echo "BASEDIR=%CD%" >> %GITHUB_ENV% | |
start /B php -S %PHPSERVER_DOMAIN_PORT% -t htdocs >> %PHPSERVER_LOG% 2>&1 | |
curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" | |
ECHO "==== Show INI file usage before our configuration ===" | |
php --ini | |
ECHO "==== Set PHP_INI_SCAN_DIR to include the INI File we create ===" | |
mkdir %PHP_INI_SCAN_DIR% | |
SET INIFILE="%PHP_INI_SCAN_DIR%\dolibarr.ini" | |
SET HTDOCS_DIR=%CD%\htdocs | |
SET DATA_DIR=%CD%\documents | |
SET TEST_DIR=%CD%\test | |
SET INITDEMO_DIR=%CD%\dev\initdemo | |
ECHO "==== Create INI file to set open_basedir ===" | |
echo [php] > %INIFILE% | |
echo open_basedir^="%HTDOCS_DIR%;%DATA_DIR%;%TEST_DIR%;%INITDEMO_DIR%;%PHPROOT%" >> %INIFILE% | |
REM Unset PHP_INI_SCAN_DIR to disable open_basedir restritions (to limit debug effort) | |
REM SET PHP_INI_SCAN_DIR= | |
ECHO "==== Show contents of INI file to set open_basedir ===" | |
type %INIFILE% | |
ECHO "==== Verify it is used by PHP ===" | |
php --ini | |
echo $dolibarr_main_url_root="http://${{ env.PHPSERVER_DOMAIN_PORT }}"; >> htdocs/conf/conf.php | |
cat htdocs/conf/conf.php | |
curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" | |
REM 'DOSKEY' USED to recover error code (no pipefile equivalent in windows?) | |
( php "%PHPROOT%\phpunit" -d memory_limit=-1 -c %CD%\test\phpunit\phpunittest.xml "test\phpunit\AllTests.php" --exclude-group WindowsWaitingForFix & call doskey /exename=err err=%%^^errorlevel%% ) | "${{ env.TEE }}" "${{ env.PHPUNIT_LOG }}" | |
echo "" | |
echo "Ensure that PHPUNIT completed (no early exit from code)" | |
"${{ env.TAIL }}" -5 "${{ env.PHPUNIT_LOG }}" | "${{ env.GREP }}" -qE "(OK .*[0-9]+ tests.*[0-9]+ assertions|Tests: [0-9]+)" || EXIT /B 1 | |
echo "PHPUNIT seems to have completed with a test result, reuse the exit code" | |
for /f "tokens=2 delims==" %%A in ('doskey /m:err') do EXIT /B %%A | |
- name: Convert Raw Log to Annotations | |
uses: mdeweerd/[email protected] | |
if: ${{ failure() }} | |
with: | |
in: ${{ env.PHPUNIT_LOG }} | |
- name: Provide dolibarr and phpunit logs as artifact | |
uses: actions/upload-artifact@v4 | |
if: ${{ ! cancelled() }} | |
with: | |
name: win-ci-logs | |
path: | | |
${{ env.PHPUNIT_LOG }} | |
${{ env.DOLIBARR_LOG }} | |
${{ env.PHPSERVER_LOG }} | |
db_init.sql | |
db_init.sql.md5 | |
retention-days: 2 | |
# Save cache | |
- name: Save cache | |
uses: actions/cache/save@v4 | |
if: ${{ ! cancelled() }} | |
with: | |
# See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 | |
enableCrossOsArchive: true | |
key: ${{ steps.cache.outputs.cache-primary-key }} | |
path: db_init.* |