version: '{branch}.{build}' branches: # whitelist #only: # blacklist except: - PHP-7.0-Linux - PHP5 environment: # MSSQL credentials from https://www.appveyor.com/docs/services-databases/ TEST_PHP_SQL_PWD: Password12! TEST_PHP_SQL_UID: sa SQLSRV_DBNAME: msphpsql_sqlsrv PDOSQLSRV_DBNAME: msphpsql_pdosqlsrv PHP_DEPSVER: 7.0 PHP_SDK: c:\projects\php matrix: - BUILD_PLATFORM: x64 TEST_PHP_SQL_SERVER: (local)\SQL2016 SQL_INSTANCE: SQL2016 PHP_VC: 14 PHP_MAJOR_VER: 7.1 PHP_MINOR_VER: latest PHP_SDK_DIR: c:\projects\php\x64 PHP_INSTALL_DIR: c:\projects\php\x64\bin PHP_ZTS: --disable-zts platform: x64 - BUILD_PLATFORM: x64 TEST_PHP_SQL_SERVER: (local)\SQL2012SP1 SQL_INSTANCE: SQL2012SP1 PHP_VC: 14 PHP_MAJOR_VER: 7.0 PHP_MINOR_VER: latest PHP_SDK_DIR: c:\projects\php\x64 PHP_INSTALL_DIR: c:\projects\php\x64\bin platform: x64 - BUILD_PLATFORM: x86 TEST_PHP_SQL_SERVER: (local)\SQL2014 SQL_INSTANCE: SQL2014 PHP_VC: 14 PHP_MAJOR_VER: 7.0 PHP_MINOR_VER: latest PHP_SDK_DIR: c:\projects\php\x86 PHP_INSTALL_DIR: c:\projects\php\x86\bin platform: x86 - BUILD_PLATFORM: x86 TEST_PHP_SQL_SERVER: (local)\SQL2008R2SP2 SQL_INSTANCE: SQL2008R2SP2 PHP_VC: 14 PHP_MAJOR_VER: 7.1 PHP_MINOR_VER: latest PHP_SDK_DIR: c:\projects\php\x86 PHP_INSTALL_DIR: c:\projects\php\x86\bin PHP_ZTS: --disable-zts platform: x86 # PHP_MAJOR_VER is PHP major version to build (7.0, 7.1) # PHP_MINOR_VER is PHP point release number (or latest for latest release) # PHP_INSTALL_DIR is where the built PHP binaries go # PHP_SDK_DIR is where PHP source is extracted to (e.g. PHP_SDK_DIR\php-7.0.14-src) # PHP_SDK is where PHP sdk binary tools are extracted to # PHP_VC is the Visual C++ version # PHP_ZTS is defined to disable thread safe build # Build worker image (VM template) image: Visual Studio 2015 matrix: fast_finish: true #services: #- mssql2012sp1 # clone directory (or %APPVEYOR_BUILD_FOLDER%) clone_folder: c:\projects\sqlphp build: parallel: true # enable MSBuild parallel builds install: - echo start SQL Server # Based on http://www.appveyor.com/docs/services-databases - ps: >- [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null ; [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null ; $instanceName = $env:SQL_INSTANCE; $uri = "ManagedComputer[@Name='$env:COMPUTERNAME']/ServerInstance[@Name='$instanceName']/ServerProtocol[@Name='Tcp']"; $wmi = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'); $tcp = $wmi.GetSmoObject($uri); $tcp.IsEnabled = $true; $tcp.Alter(); Start-Service "MSSQL`$$instanceName"; Set-Service SQLBrowser -StartupType Manual; Start-Service SQLBrowser; - echo Set PHP version... - appveyor DownloadFile http://windows.php.net/downloads/releases/sha1sum.txt # determine latest PHP versions - ps: >- If ($env:PHP_MINOR_VER -Match "latest") { $env:PHP_VERSION=type sha1sum.txt | where { $_ -match "php-($env:PHP_MAJOR_VER\.\d+)-src" } | foreach { $matches[1] } ; } Else { $env:PHP_VERSION=$env:PHP_MAJOR_VER + '.' + $env:PHP_MINOR_VER; } - echo Downloading PHP-SDK - appveyor DownloadFile http://windows.php.net/downloads/php-sdk/php-sdk-binary-tools-20110915.zip - move php-sdk-binary-tools-20110915.zip .. - echo Downloading PHP source code [%PHP_VERSION%] - ps: (new-object net.webclient).DownloadFile('http://windows.php.net/downloads/releases/php-' + ${env:PHP_VERSION} + '-src.zip', ${env:APPVEYOR_BUILD_FOLDER} + '\..\php.zip') - echo Downloading MSODBCSQL 13.1 # AppVeyor build works are x64 VMs and 32-bit ODBC driver cannot be installed on it - ps: (new-object net.webclient).DownloadFile('https://download.microsoft.com/download/D/5/E/D5EEF288-A277-45C8-855B-8E2CB7E25B96/x64/msodbcsql.msi', 'c:\projects\msodbcsql.msi') - cmd /c start /wait msiexec /i "c:\projects\msodbcsql.msi" /q - echo Checking the version of MSODBCSQL - reg query "HKLM\SOFTWARE\ODBC\odbcinst.ini\ODBC Driver 13 for SQL Server" - dir C:\Windows\System32\msodbcsql13.dll - cd .. - cd - 7z x -y php-sdk-binary-tools-20110915.zip -o%PHP_SDK% - 7z x -y php.zip -o%PHP_SDK_DIR% - echo update SQL connection string - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:PDOSQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:SQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc - echo install opencppcoverage - choco install opencppcoverage - set path=C:\Program Files\OpenCppCoverage;%path% build_script: - '"C:\\Program Files (x86)\\Microsoft Visual Studio %PHP_VC%.0\\VC\\vcvarsall.bat" %BUILD_PLATFORM%' - Echo copy msphp code to ext folder - mkdir %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\sqlsrv - mkdir %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\sqlsrv\shared - mkdir %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\pdo_sqlsrv - mkdir %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\pdo_sqlsrv\shared - copy /Y %APPVEYOR_BUILD_FOLDER%\source\sqlsrv %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\sqlsrv - copy /Y %APPVEYOR_BUILD_FOLDER%\source\shared %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\sqlsrv\shared - copy /Y %APPVEYOR_BUILD_FOLDER%\source\shared %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\pdo_sqlsrv\shared - copy /Y %APPVEYOR_BUILD_FOLDER%\source\pdo_sqlsrv %PHP_SDK_DIR%\php-%PHP_VERSION%-src\ext\pdo_sqlsrv - cd %PHP_SDK_DIR%\php-%PHP_VERSION%-src - cd - dir - '%PHP_SDK%\bin\phpsdk_setvars.bat' - buildconf.bat # only build CLI and MSSQL extensions - configure.bat --disable-all %PHP_ZTS% --enable-cli --enable-sqlsrv=shared --with-pdo-sqlsrv=shared --enable-pdo=shared --with-prefix=%PHP_INSTALL_DIR% - copy php.ini-development php.ini - echo extension_dir=%PHP_INSTALL_DIR%\ext >> php.ini - echo extension=php_sqlsrv.dll >> php.ini - echo extension=php_pdo_sqlsrv.dll >> php.ini - nmake - nmake install - Echo copy php.ini and run-tests.php from php source to install directory. - copy php.ini %PHP_INSTALL_DIR% - copy run-tests.php %PHP_INSTALL_DIR% - dir %PHP_INSTALL_DIR% test_script: - cd %PHP_INSTALL_DIR% - php --ini - php -i - python -V - Echo setup test database for SQLSRV tests - %SQLSRV_DBNAME% - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\setup_dbs.py -dbname %SQLSRV_DBNAME% - Echo setup test database for PDO_SQLSRV tests - %PDOSQLSRV_DBNAME% - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\setup_dbs.py -dbname %PDOSQLSRV_DBNAME% #- copy %APPVEYOR_BUILD_FOLDER%\source\shared\msodbcsql.h %APPVEYOR_BUILD_FOLDER%\test\functional\setup\ #- python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\build_ksp.py #- copy %APPVEYOR_BUILD_FOLDER%\test\functional\setup\*.dll %APPVEYOR_BUILD_FOLDER%\test\functional\sqlsrv\ #- copy %APPVEYOR_BUILD_FOLDER%\test\functional\setup\*.dll %APPVEYOR_BUILD_FOLDER%\test\functional\pdo_sqlsrv\ #- python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\run_ksp.py -server %TEST_PHP_SQL_SERVER% -dbname %SQLSRV_DBNAME% -uid %TEST_PHP_SQL_UID% -pwd %TEST_PHP_SQL_PWD% #- python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\run_ksp.py -server %TEST_PHP_SQL_SERVER% -dbname %PDOSQLSRV_DBNAME% -uid %TEST_PHP_SQL_UID% -pwd %TEST_PHP_SQL_PWD% - ps: >- If ($env:SQL_INSTANCE -Match "SQL2016") { Write-Host "Running phpt tests via OpenCppCoverage..." $ext_dir = ${env:PHP_SDK_DIR} + "\php-" + ${env:PHP_VERSION} + "-src\ext"; OpenCppCoverage.exe --sources $ext_dir\sqlsrv --modules php_sqlsrv.dll --export_type=binary:sqlsrv.cov --quiet --cover_children --optimized_build -- php.exe run-tests.php -P ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\*.phpt | out-file -filePath ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv.log -encoding UTF8; type ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv.log; OpenCppCoverage.exe --sources $ext_dir\pdo_sqlsrv --modules php_pdo_sqlsrv.dll --export_type=cobertura:.\coverage.xml --input_coverage=sqlsrv.cov --quiet --cover_children --optimized_build -- php.exe run-tests.php -P ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\*.phpt | out-file -filePath ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv.log -encoding UTF8; type ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv.log; ls *.xml } Else { Write-Host "Running phpt tests the regular way..." .\php.exe run-tests.php -P ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\*.phpt | out-file -filePath ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv.log -encoding UTF8; type ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv.log; .\php.exe run-tests.php -P ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\*.phpt | out-file -filePath ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv.log -encoding UTF8; type ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv.log; } - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\cleanup_dbs.py -dbname %SQLSRV_DBNAME% - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\cleanup_dbs.py -dbname %PDOSQLSRV_DBNAME% - cd %PHP_INSTALL_DIR% - ps: $fileExists = Test-Path "coverage.xml" - ps: >- If ($fileExists -eq $true) { Write-Host "Running coverage analysis..."; $env:PATH = ${env:PHP_INSTALL_DIR} + $env:PATH; Invoke-WebRequest -Uri 'https://codecov.io/bash' -OutFile codecov.sh bash codecov.sh -f "coverage.xml" } after_test: - cd %APPVEYOR_BUILD_FOLDER%\test\functional\ - ps: ls *.log - python output.py - ps: $difffiles = Get-ChildItem sqlsrv\*.diff - ps: $outfiles = Get-ChildItem sqlsrv\*.out - ps: foreach($file in $difffiles){ls $file; more $file} - ps: foreach($file in $outfiles){ls $file; more $file} - ps: $diff2files = Get-ChildItem pdo_sqlsrv\*.diff - ps: $out2files = Get-ChildItem pdo_sqlsrv\*.out - ps: foreach($file in $diff2files){ls $file; more $file} - ps: foreach($file in $out2files){ls $file; more $file} - cd %APPVEYOR_BUILD_FOLDER%\test\functional\ - ps: $xmlfiles = Get-ChildItem *.xml - ps: foreach($file in $xmlfiles){(new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path $file))} - ps: >- If ($difffiles -ne $null -Or $diff2files -ne $null) { $host.SetShouldExit(1); Write-Host "Forcing build failure due to phpt unit test failure(s)"; }