mirror of
https://github.com/git-for-windows/git.git
synced 2026-03-17 04:23:29 -05:00
This is inspired byd051ed77ee(.github/workflows/main.yml: run static-analysis on bionic, 2021-02-08) and byef46584831(ci: update 'static-analysis' to Ubuntu 22.04, 2022-08-23), adapted to the Azure Pipeline. When Azure Pipelines' build agents transitioned 'ubuntu-latest' from 18.04 to 20.04, it broke our `static-analysis` job, since Coccinelle was not madeavailable on Ubuntu focal (it is only available in the universe suite). This is not an issue with Ubuntu 22.04, but we will only know whether it is an issue with 24.04 when _that_ comes out. So let's play it safe and pin the `static_analysis` job to the latest Ubuntu version that we know to offer a working Coccinelle package. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
394 lines
14 KiB
YAML
394 lines
14 KiB
YAML
variables:
|
|
Agent.Source.Git.ShallowFetchDepth: 1
|
|
GIT_CONFIG_PARAMETERS: "'checkout.workers=56' 'user.name=CI' 'user.email=ci@git'"
|
|
|
|
jobs:
|
|
- job: windows_build
|
|
displayName: Windows Build
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: windows-latest
|
|
timeoutInMinutes: 240
|
|
steps:
|
|
- bash: git clone --bare --depth=1 --filter=blob:none --single-branch -b main https://github.com/git-for-windows/git-sdk-64
|
|
displayName: 'clone git-sdk-64'
|
|
- bash: git clone --depth=1 --single-branch -b main https://github.com/git-for-windows/build-extra
|
|
displayName: 'clone build-extra'
|
|
- bash: sh -x ./build-extra/please.sh create-sdk-artifact --sdk=git-sdk-64.git --out=git-sdk-64-minimal minimal-sdk
|
|
displayName: 'build git-sdk-64-minimal-sdk'
|
|
- bash: |
|
|
# Let Git ignore the SDK and the test-cache
|
|
printf "%s\n" /git-sdk-64.git/ /build-extra/ /git-sdk-64-minimal/ /test-cache/ >>'.git/info/exclude'
|
|
displayName: 'Ignore untracked directories'
|
|
- bash: ci/make-test-artifacts.sh artifacts
|
|
displayName: Build
|
|
env:
|
|
HOME: $(Build.SourcesDirectory)
|
|
MSYSTEM: MINGW64
|
|
DEVELOPER: 1
|
|
NO_PERL: 1
|
|
PATH: "$(Build.SourcesDirectory)\\git-sdk-64-minimal\\mingw64\\bin;$(Build.SourcesDirectory)\\git-sdk-64-minimal\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\system32\\wbem"
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Pipeline Artifact: test artifacts'
|
|
inputs:
|
|
artifactName: 'windows-artifacts'
|
|
targetPath: '$(Build.SourcesDirectory)\artifacts'
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'
|
|
inputs:
|
|
artifactName: 'git-sdk-64-minimal'
|
|
targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
|
|
|
|
- job: windows_test
|
|
displayName: Windows Test
|
|
dependsOn: windows_build
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: windows-latest
|
|
timeoutInMinutes: 240
|
|
strategy:
|
|
parallel: 10
|
|
steps:
|
|
- task: DownloadPipelineArtifact@0
|
|
displayName: 'Download Pipeline Artifact: test artifacts'
|
|
inputs:
|
|
artifactName: 'windows-artifacts'
|
|
targetPath: '$(Build.SourcesDirectory)'
|
|
- task: DownloadPipelineArtifact@0
|
|
displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'
|
|
inputs:
|
|
artifactName: 'git-sdk-64-minimal'
|
|
targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
|
|
- bash: |
|
|
test -f artifacts.tar.gz || {
|
|
echo No test artifacts found\; skipping >&2
|
|
exit 0
|
|
}
|
|
tar xf artifacts.tar.gz || exit 1
|
|
|
|
# Let Git ignore the SDK and the test-cache
|
|
printf '%s\n' /git-sdk-64.git/ /build-extra/ /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude
|
|
|
|
ci/run-test-slice.sh $SYSTEM_JOBPOSITIONINPHASE $SYSTEM_TOTALJOBSINPHASE || {
|
|
ci/print-test-failures.sh
|
|
exit 1
|
|
}
|
|
displayName: 'Test (parallel)'
|
|
env:
|
|
HOME: $(Build.SourcesDirectory)
|
|
MSYSTEM: MINGW64
|
|
NO_SVN_TESTS: 1
|
|
GIT_TEST_SKIP_REBASE_P: 1
|
|
PATH: "$(Build.SourcesDirectory)\\git-sdk-64-minimal\\mingw64\\bin;$(Build.SourcesDirectory)\\git-sdk-64-minimal\\usr\\bin\\core_perl;$(Build.SourcesDirectory)\\git-sdk-64-minimal\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\system32\\wbem"
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'windows'
|
|
platform: Windows
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: vs_build
|
|
displayName: Visual Studio Build
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: windows-latest
|
|
timeoutInMinutes: 240
|
|
steps:
|
|
- bash: git clone --bare --depth=1 --filter=blob:none --single-branch -b main https://github.com/git-for-windows/git-sdk-64
|
|
displayName: 'clone git-sdk-64'
|
|
- bash: git clone --depth=1 --single-branch -b main https://github.com/git-for-windows/build-extra
|
|
displayName: 'clone build-extra'
|
|
- bash: sh -x ./build-extra/please.sh create-sdk-artifact --sdk=git-sdk-64.git --out=git-sdk-64-minimal minimal-sdk
|
|
displayName: 'build git-sdk-64-minimal-sdk'
|
|
- bash: |
|
|
# Let Git ignore the SDK and the test-cache
|
|
printf "%s\n" /git-sdk-64-minimal/ /test-cache/ >>'.git/info/exclude'
|
|
displayName: 'Ignore untracked directories'
|
|
- bash: make NDEBUG=1 DEVELOPER=1 vcxproj
|
|
displayName: Generate Visual Studio Solution
|
|
env:
|
|
HOME: $(Build.SourcesDirectory)
|
|
MSYSTEM: MINGW64
|
|
DEVELOPER: 1
|
|
NO_PERL: 1
|
|
PATH: "$(Build.SourcesDirectory)\\git-sdk-64-minimal\\mingw64\\bin;$(Build.SourcesDirectory)\\git-sdk-64-minimal\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\system32\\wbem"
|
|
- powershell: |
|
|
$urlbase = "https://dev.azure.com/git/git/_apis/build/builds"
|
|
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
|
|
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[0].resource.downloadUrl
|
|
(New-Object Net.WebClient).DownloadFile($downloadUrl, "compat.zip")
|
|
Expand-Archive compat.zip -DestinationPath . -Force
|
|
Remove-Item compat.zip
|
|
displayName: 'Download vcpkg artifacts'
|
|
- task: MSBuild@1
|
|
inputs:
|
|
solution: git.sln
|
|
platform: x64
|
|
configuration: Release
|
|
maximumCpuCount: 4
|
|
msbuildArguments: /p:PlatformToolset=v142
|
|
- bash: |
|
|
./compat/vcbuild/vcpkg_copy_dlls.bat release &&
|
|
mkdir -p artifacts &&
|
|
eval "$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)"
|
|
displayName: Bundle artifact tar
|
|
env:
|
|
HOME: $(Build.SourcesDirectory)
|
|
MSYSTEM: MINGW64
|
|
DEVELOPER: 1
|
|
NO_PERL: 1
|
|
MSVC: 1
|
|
VCPKG_ROOT: $(Build.SourcesDirectory)\compat\vcbuild\vcpkg
|
|
PATH: "$(Build.SourcesDirectory)\\git-sdk-64-minimal\\mingw64\\bin;$(Build.SourcesDirectory)\\git-sdk-64-minimal\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\system32\\wbem"
|
|
- powershell: |
|
|
$tag = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-tag.txt").content
|
|
$version = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-version.txt").content
|
|
$url = "https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe"
|
|
(New-Object Net.WebClient).DownloadFile($url,"PortableGit.exe")
|
|
& .\PortableGit.exe -y -oartifacts\PortableGit
|
|
# Wait until it is unpacked
|
|
while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }
|
|
displayName: Download & extract portable Git
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Pipeline Artifact: MSVC test artifacts'
|
|
inputs:
|
|
artifactName: 'vs-artifacts'
|
|
targetPath: '$(Build.SourcesDirectory)\artifacts'
|
|
|
|
- job: vs_test
|
|
displayName: Visual Studio Test
|
|
dependsOn: vs_build
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: windows-latest
|
|
timeoutInMinutes: 240
|
|
strategy:
|
|
parallel: 10
|
|
steps:
|
|
- task: DownloadPipelineArtifact@0
|
|
displayName: 'Download Pipeline Artifact: VS test artifacts'
|
|
inputs:
|
|
artifactName: 'vs-artifacts'
|
|
targetPath: '$(Build.SourcesDirectory)'
|
|
- bash: |
|
|
test -f artifacts.tar.gz || {
|
|
echo No test artifacts found\; skipping >&2
|
|
exit 0
|
|
}
|
|
tar xf artifacts.tar.gz || exit 1
|
|
|
|
# Let Git ignore the SDK and the test-cache
|
|
printf '%s\n' /PortableGit/ /test-cache/ >>.git/info/exclude
|
|
|
|
cd t &&
|
|
PATH="$PWD/helper:$PATH" &&
|
|
test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \
|
|
$(test-tool.exe path-utils slice-tests \
|
|
$SYSTEM_JOBPOSITIONINPHASE $SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)
|
|
displayName: 'Test (parallel)'
|
|
env:
|
|
HOME: $(Build.SourcesDirectory)
|
|
MSYSTEM: MINGW64
|
|
NO_SVN_TESTS: 1
|
|
GIT_TEST_SKIP_REBASE_P: 1
|
|
PATH: "$(Build.SourcesDirectory)\\PortableGit\\mingw64\\bin;$(Build.SourcesDirectory)\\PortableGit\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\system32\\wbem"
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'vs'
|
|
platform: Windows
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-vs-test-artifacts
|
|
|
|
- job: linux_clang
|
|
displayName: linux-clang
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- bash: |
|
|
export CC=clang || exit 1
|
|
|
|
ci/install-dependencies.sh || exit 1
|
|
ci/run-build-and-tests.sh || {
|
|
ci/print-test-failures.sh
|
|
exit 1
|
|
}
|
|
displayName: 'ci/run-build-and-tests.sh'
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'linux-clang'
|
|
platform: Linux
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: linux_gcc
|
|
displayName: linux-gcc
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- bash: |
|
|
ci/install-dependencies.sh || exit 1
|
|
ci/run-build-and-tests.sh || {
|
|
ci/print-test-failures.sh
|
|
exit 1
|
|
}
|
|
displayName: 'ci/run-build-and-tests.sh'
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'linux-gcc'
|
|
platform: Linux
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: osx_clang
|
|
displayName: osx-clang
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: macOS-latest
|
|
steps:
|
|
- bash: |
|
|
export CC=clang
|
|
|
|
ci/install-dependencies.sh || exit 1
|
|
ci/run-build-and-tests.sh || {
|
|
ci/print-test-failures.sh
|
|
exit 1
|
|
}
|
|
displayName: 'ci/run-build-and-tests.sh'
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'osx-clang'
|
|
platform: macOS
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: osx_gcc
|
|
displayName: osx-gcc
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: macOS-latest
|
|
steps:
|
|
- bash: |
|
|
ci/install-dependencies.sh || exit 1
|
|
ci/run-build-and-tests.sh || {
|
|
ci/print-test-failures.sh
|
|
exit 1
|
|
}
|
|
displayName: 'ci/run-build-and-tests.sh'
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'osx-gcc'
|
|
platform: macOS
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: linux32
|
|
displayName: Linux32
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- bash: |
|
|
res=0
|
|
sudo AGENT_OS="$AGENT_OS" BUILD_BUILDNUMBER="$BUILD_BUILDNUMBER" BUILD_REPOSITORY_URI="$BUILD_REPOSITORY_URI" BUILD_SOURCEBRANCH="$BUILD_SOURCEBRANCH" BUILD_SOURCEVERSION="$BUILD_SOURCEVERSION" SYSTEM_PHASENAME="$SYSTEM_PHASENAME" SYSTEM_TASKDEFINITIONSURI="$SYSTEM_TASKDEFINITIONSURI" SYSTEM_TEAMPROJECT="$SYSTEM_TEAMPROJECT" CC=$CC MAKEFLAGS="$MAKEFLAGS" jobname=linux32 bash -lxc ci/run-docker.sh || res=1
|
|
|
|
sudo chmod a+r t/out/TEST-*.xml
|
|
test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts
|
|
|
|
exit $res
|
|
displayName: 'jobname=linux32 ci/run-docker.sh'
|
|
- task: PublishTestResults@2
|
|
displayName: 'Publish Test Results **/TEST-*.xml'
|
|
inputs:
|
|
mergeTestResults: true
|
|
testRunTitle: 'linux32'
|
|
platform: Linux
|
|
publishRunAttachments: false
|
|
condition: succeededOrFailed()
|
|
- task: PublishBuildArtifacts@1
|
|
displayName: 'Publish trash directories of failed tests'
|
|
condition: failed()
|
|
inputs:
|
|
PathtoPublish: t/failed-test-artifacts
|
|
ArtifactName: failed-test-artifacts
|
|
|
|
- job: static_analysis
|
|
displayName: StaticAnalysis
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
steps:
|
|
- bash: |
|
|
sudo apt-get update &&
|
|
sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&
|
|
|
|
export jobname=StaticAnalysis &&
|
|
|
|
ci/run-static-analysis.sh || exit 1
|
|
displayName: 'ci/run-static-analysis.sh'
|
|
|
|
- job: documentation
|
|
displayName: Documentation
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- bash: |
|
|
sudo apt-get update &&
|
|
sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&
|
|
|
|
export ALREADY_HAVE_ASCIIDOCTOR=yes. &&
|
|
export jobname=Documentation &&
|
|
|
|
ci/test-documentation.sh || exit 1
|
|
displayName: 'ci/test-documentation.sh'
|