mirror of
https://gitlab.com/qemu-project/meson.git
synced 2025-11-08 21:18:48 +08:00
Merge pull request #4340 from jon-turney/azure-pipelines
Add Azure pipelines CI
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1,3 +1,3 @@
|
||||
.gitignore export-ignore
|
||||
.gitattributes export-ignore
|
||||
|
||||
* text eol=lf
|
||||
|
||||
49
azure-pipelines.yml
Normal file
49
azure-pipelines.yml
Normal file
@ -0,0 +1,49 @@
|
||||
name: $(BuildID)
|
||||
|
||||
trigger:
|
||||
branches:
|
||||
include:
|
||||
- 'master'
|
||||
|
||||
variables:
|
||||
MESON_FIXED_NINJA: 1
|
||||
CI: 1
|
||||
|
||||
jobs:
|
||||
#- job: vs2015
|
||||
# pool:
|
||||
# vmImage: vs2015-win2012r2
|
||||
#
|
||||
# strategy:
|
||||
# maxParallel: 10
|
||||
# matrix:
|
||||
# vc2015x86ninja:
|
||||
# arch: x86
|
||||
# compiler: msvc2015
|
||||
# backend: ninja
|
||||
# vc2015x86vs:
|
||||
# arch: x86
|
||||
# compiler: msvc2015
|
||||
# backend: vs2015
|
||||
#
|
||||
# steps:
|
||||
# - template: ci/azure-steps.yml
|
||||
|
||||
- job: vs2017
|
||||
pool:
|
||||
vmImage: VS2017-Win2016
|
||||
|
||||
strategy:
|
||||
maxParallel: 10
|
||||
matrix:
|
||||
vc2017x64ninja:
|
||||
arch: x64
|
||||
compiler: msvc2017
|
||||
backend: ninja
|
||||
vc2017x64vs:
|
||||
arch: x64
|
||||
compiler: msvc2017
|
||||
backend: vs2017
|
||||
|
||||
steps:
|
||||
- template: ci/azure-steps.yml
|
||||
94
ci/azure-steps.yml
Normal file
94
ci/azure-steps.yml
Normal file
@ -0,0 +1,94 @@
|
||||
steps:
|
||||
- powershell: |
|
||||
# test_find_program exercises some behaviour which relies on .py being in PATHEXT
|
||||
$env:PATHEXT += ';.py'
|
||||
|
||||
where.exe python
|
||||
|
||||
python ./skip_ci.py --base-branch-env=SYSTEM_PULLREQUEST_TARGETBRANCH --is-pull-env=SYSTEM_PULLREQUEST_PULLREQUESTID --base-branch-origin
|
||||
if ($LastExitCode -ne 0) {
|
||||
throw ('error in skip_ci.py')
|
||||
}
|
||||
|
||||
# remove MinGW from path, so we don't find gfortran and try to use it
|
||||
$env:Path = ($env:Path.Split(';') | Where-Object { $_ -notlike '*mingw*' }) -join ';'
|
||||
|
||||
# download and install prerequisites
|
||||
function DownloadFile([String] $Source, [String] $Destination) {
|
||||
$retries = 10
|
||||
for ($i = 1; $i -le $retries; $i++) {
|
||||
try {
|
||||
(New-Object net.webclient).DownloadFile($Source, $Destination)
|
||||
break # succeeded
|
||||
} catch [net.WebException] {
|
||||
if ($i -eq $retries) {
|
||||
throw # fail on last retry
|
||||
}
|
||||
$backoff = (10 * $i) # backoff 10s, 20s, 30s...
|
||||
echo ('{0}: {1}' -f $Source, $_.Exception.Message)
|
||||
echo ('Retrying in {0}s...' -f $backoff)
|
||||
Start-Sleep -m ($backoff * 1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DownloadFile -Source 'https://github.com/mesonbuild/cidata/raw/master/ninja.exe' -Destination $(System.WorkFolder)\ninja.exe
|
||||
DownloadFile -Source 'http://nirbheek.in/files/binaries/pkg-config/win32/pkg-config.exe' -Destination $(System.WorkFolder)\pkg-config.exe
|
||||
DownloadFile -Source 'https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/msmpisdk.msi' -Destination msmpisdk.msi
|
||||
DownloadFile -Source 'https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/MSMpiSetup.exe' -Destination MSMpiSetup.exe
|
||||
Start-Process msiexec.exe -ArgumentList '/i msmpisdk.msi /quiet' -Wait
|
||||
Start-Process .\MSMpiSetup.exe -ArgumentList '-unattend -full' -Wait
|
||||
|
||||
# import ms-mpi env vars (set by installer)
|
||||
foreach ($p in "MSMPI_INC", "MSMPI_LIB32", "MSMPI_LIB64") {
|
||||
$v = [Environment]::GetEnvironmentVariable($p, "Machine")
|
||||
Set-Content "env:$p" "$v"
|
||||
}
|
||||
|
||||
# add downloads to PATH
|
||||
$env:Path = "$env:SYSTEM_WORKFOLDER;$env:Path"
|
||||
|
||||
# import visual studio variables
|
||||
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
|
||||
Install-Module Pscx -Scope CurrentUser -AllowClobber
|
||||
Install-Module VSSetup -Scope CurrentUser
|
||||
$vsver = $env:compiler.Replace('msvc', '')
|
||||
Import-VisualStudioVars -VisualStudioVersion $vsver -Architecture $(arch)
|
||||
|
||||
# add .NET framework tools to path for resgen for C# tests
|
||||
# (always use 32-bit tool, as there doesn't seem to be a 64-bit tool)
|
||||
if ((Get-Command "resgen.exe" -ErrorAction SilentlyContinue) -eq $null) {
|
||||
$env:Path = "$env:WindowsSDK_ExecutablePath_x86;$env:Path"
|
||||
}
|
||||
|
||||
if ($env:backend -eq 'ninja') {
|
||||
ninja --version
|
||||
} else {
|
||||
MSBuild /version
|
||||
}
|
||||
|
||||
python run_tests.py --backend $(backend)
|
||||
|
||||
echo "##vso[task.setvariable variable=test_status]$LastExitCode"
|
||||
|
||||
continueOnError: true
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: meson-test-run.xml
|
||||
testRunTitle: $(System.JobName)
|
||||
publishRunAttachments: true
|
||||
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
contents: 'meson-test-run.*'
|
||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
inputs:
|
||||
artifactName: $(System.JobName)
|
||||
|
||||
- powershell: |
|
||||
# after publishing test results, even if some failed
|
||||
# exit with the test status
|
||||
exit $(test_status)
|
||||
@ -40,7 +40,7 @@ def runtests(cross_file, failfast):
|
||||
print('\nTotal passed cross tests:', passing_tests)
|
||||
print('Total failed cross tests:', failing_tests)
|
||||
print('Total skipped cross tests:', skipped_tests)
|
||||
if failing_tests > 0 and ('TRAVIS' in os.environ or 'APPVEYOR' in os.environ):
|
||||
if failing_tests > 0 and ('CI' in os.environ):
|
||||
print('\nMesonlogs of failing tests\n')
|
||||
for log in failing_logs:
|
||||
print(log, '\n')
|
||||
|
||||
@ -82,7 +82,7 @@ class AutoDeletedDir:
|
||||
|
||||
failing_logs = []
|
||||
print_debug = 'MESON_PRINT_TEST_OUTPUT' in os.environ
|
||||
under_ci = not {'TRAVIS', 'APPVEYOR'}.isdisjoint(os.environ)
|
||||
under_ci = 'CI' in os.environ
|
||||
do_debug = under_ci or print_debug
|
||||
no_meson_log_msg = 'No meson-log.txt found.'
|
||||
|
||||
|
||||
@ -261,7 +261,7 @@ def main():
|
||||
cross = options.cross
|
||||
backend, _ = guess_backend(options.backend, shutil.which('msbuild'))
|
||||
# Running on a developer machine? Be nice!
|
||||
if not mesonlib.is_windows() and not mesonlib.is_haiku() and 'TRAVIS' not in os.environ:
|
||||
if not mesonlib.is_windows() and not mesonlib.is_haiku() and 'CI' not in os.environ:
|
||||
os.nice(20)
|
||||
# Appveyor sets the `platform` environment variable which completely messes
|
||||
# up building with the vs2010 and vs2015 backends.
|
||||
|
||||
@ -83,7 +83,7 @@ def is_tarball():
|
||||
return False
|
||||
|
||||
def is_ci():
|
||||
if 'TRAVIS' in os.environ or 'APPVEYOR' in os.environ:
|
||||
if 'CI' in os.environ:
|
||||
return True
|
||||
return False
|
||||
|
||||
@ -100,8 +100,8 @@ def _git_init(project_dir):
|
||||
|
||||
def skipIfNoPkgconfig(f):
|
||||
'''
|
||||
Skip this test if no pkg-config is found, unless we're on Travis or
|
||||
Appveyor CI. This allows users to run our test suite without having
|
||||
Skip this test if no pkg-config is found, unless we're on CI.
|
||||
This allows users to run our test suite without having
|
||||
pkg-config installed on, f.ex., macOS, while ensuring that our CI does not
|
||||
silently skip the test because of misconfiguration.
|
||||
|
||||
@ -1673,7 +1673,7 @@ class AllPlatformTests(BasePlatformTests):
|
||||
self.assertIsInstance(linker, lib)
|
||||
self.assertEqual(cc.id, 'msvc')
|
||||
self.assertTrue(hasattr(cc, 'is_64'))
|
||||
# If we're in the appveyor CI, we know what the compiler will be
|
||||
# If we're on Windows CI, we know what the compiler will be
|
||||
if 'arch' in os.environ:
|
||||
if os.environ['arch'] == 'x64':
|
||||
self.assertTrue(cc.is_64)
|
||||
|
||||
@ -54,9 +54,13 @@ def main():
|
||||
help='Branch push is targeted to')
|
||||
parser.add_argument('--is-pull-env', required=True,
|
||||
help='Variable set if it is a PR')
|
||||
parser.add_argument('--base-branch-origin', action='store_true',
|
||||
help='Base branch reference is only in origin remote')
|
||||
args = parser.parse_args()
|
||||
check_pr(args.is_pull_env)
|
||||
base = get_base_branch(args.base_branch_env)
|
||||
if args.base_branch_origin:
|
||||
base = 'origin/' + base
|
||||
if all(is_documentation(f) for f in get_git_files(base)):
|
||||
print("Don't run CI for documentation-only changes, add '[skip ci]' to commit title.")
|
||||
print('See http://mesonbuild.com/Contributing.html#skipping-integration-tests')
|
||||
|
||||
@ -1 +1,2 @@
|
||||
usr/bin/prog.exe
|
||||
?msvc:usr/bin/prog.pdb
|
||||
|
||||
@ -1,2 +1,5 @@
|
||||
usr/bin/prog.exe
|
||||
usr/lib/helper.dll
|
||||
?msvc:usr/bin/prog.pdb
|
||||
?msvc:usr/bin/helper.dll
|
||||
?msvc:usr/bin/helper.pdb
|
||||
?gcc:usr/lib/helper.dll
|
||||
|
||||
@ -17,7 +17,7 @@ exec = executable('exec',
|
||||
test('MPI C', exec)
|
||||
|
||||
if build_machine.system() != 'windows'
|
||||
# C++ MPI not supported by MS-MPI used on AppVeyor.
|
||||
# C++ MPI not supported by MS-MPI
|
||||
mpicpp = dependency('mpi', language : 'cpp')
|
||||
execpp = executable('execpp',
|
||||
'main.cpp',
|
||||
@ -44,4 +44,6 @@ if uburesult.returncode() != 0 and add_languages('fortran', required : false)
|
||||
endif
|
||||
|
||||
# Check we can apply a version constraint
|
||||
dependency('mpi', version: '>=@0@'.format(mpic.version()))
|
||||
if mpic.version() != 'unknown'
|
||||
dependency('mpi', version: '>=@0@'.format(mpic.version()))
|
||||
endif
|
||||
|
||||
Reference in New Issue
Block a user