Fix cancel edit line dispatch should not update line #8
Workflow file for this run
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 with open_basedir restrictions | |
shell: cmd | |
# Objective: separate step, and before database initialisation to verify open_basedir restrictions | |
run: |- | |
echo "BASEDIR=%CD%" >> %GITHUB_ENV% | |
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 | |
REM TEST OPEN_BASEDIR restriction is not limiting wrongly | |
REM THE DATA_DIR MUST BE CREATED HERE - open_base does not allow it's creation | |
mkdir "%DATA_DIR%" | |
mkdir "%DATA_DIR%\mytest" | |
php -r "$d=implode(DIRECTORY_SEPARATOR,[__DIR__,'documents','mytest']);echo 'IS_DIR '.$d.' '.((int) is_dir($d)).PHP_EOL;" | |
php -r "$d=__DIR__.'\documents/mytest';echo 'TEST PATH IS SHOWN: '.$d.PHP_EOL;" | |
php -r "$d=__DIR__.'\documents/mytest';echo 'IS_DIR '.$d.' '.((int) is_dir($d)).PHP_EOL;" | |
ECHO "The above should show 2 successful tests" | |
- name: Run Bash script that Initialises the database | |
# Note this is bash (MSYS) on Windows | |
shell: bash | |
run: | | |
ECHO "#[group]Directory contents to verify cache files, ..." | |
ls -l | |
ECHO "#[endgroup]" | |
ECHO "==== Verify openbase_dir restriction" | |
php --ini | |
# Run bash script to initialise database | |
ECHO "==== Start 'setup_conf.sh' to setup database" | |
${SHELL} -xv dev/setup/phpunit/setup_conf.sh | |
## Updating test configuration to not stop on first failure (to see all errors) - need sed | |
sed -i -e 's/stopOnFailure="[^"]*"/stopOnFailure="false"/' test/phpunit/phpunittest.xml | |
ECHO "#[group]Directory contents after database setup to verify cache files, ..." | |
ls -l | |
ECHO "#[endgroup]" | |
# Export some tool paths to reuse the from CMD shell. | |
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: Run PHPUnit tests | |
# continue-on-error: true | |
shell: cmd | |
# setting up php.ini, starting the php server are currently in this step | |
run: |- | |
ECHO "==== Visually verify our dolibarr.INI file usage ===" | |
php --ini | |
ECHO "==== Add our web server information to the config file ===" | |
echo $dolibarr_main_url_root="http://${{ env.PHPSERVER_DOMAIN_PORT }}"; >> htdocs/conf/conf.php | |
ECHO "#[group]==== Dolibarr config file contents" | |
cat htdocs/conf/conf.php | |
ECHO "#[endgroup]" | |
ECHO "==== START PHP server" | |
start /B php -S %PHPSERVER_DOMAIN_PORT% -t htdocs >> %PHPSERVER_LOG% 2>&1 | |
ECHO "#[group]==== Output from curl on PHP server" | |
curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" | |
ECHO "#[endgroup]" | |
ECHO "==== START PHPUNIT TESTS" | |
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/logToCheckStyle@v2024.3.4 | |
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.* |