mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-28 10:34:31 -05:00
Merge pull request #2577 from dscho/github-action+musl
Add a CI/PR workflow based on GitHub Actions
This commit is contained in:
230
.github/workflows/main.yml
vendored
Normal file
230
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,230 @@
|
||||
name: CI/PR
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
DEVELOPER: 1
|
||||
|
||||
jobs:
|
||||
windows-build:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
shell: bash
|
||||
run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -
|
||||
- name: build
|
||||
shell: powershell
|
||||
env:
|
||||
HOME: ${{runner.workspace}}
|
||||
MSYSTEM: MINGW64
|
||||
NO_PERL: 1
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
|
||||
|
||||
ci/make-test-artifacts.sh artifacts
|
||||
"@
|
||||
- name: upload build artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: windows-artifacts
|
||||
path: artifacts
|
||||
windows-test:
|
||||
runs-on: windows-latest
|
||||
needs: [windows-build]
|
||||
strategy:
|
||||
matrix:
|
||||
nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
shell: bash
|
||||
run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -
|
||||
- name: download build artifacts
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: windows-artifacts
|
||||
path: ${{github.workspace}}
|
||||
- name: extract build artifacts
|
||||
shell: bash
|
||||
run: tar xf artifacts.tar.gz
|
||||
- name: test
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
# Let Git ignore the SDK
|
||||
printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
|
||||
|
||||
ci/run-test-slice.sh ${{matrix.nr}} 10
|
||||
"@
|
||||
- name: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc ci/print-test-failures.sh
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-windows
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
vs-build:
|
||||
env:
|
||||
MSYSTEM: MINGW64
|
||||
NO_PERL: 1
|
||||
GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
shell: bash
|
||||
run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -
|
||||
- name: generate Visual Studio solution
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
make NDEBUG=1 DEVELOPER=1 vcxproj
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
- name: download vcpkg artifacts
|
||||
shell: powershell
|
||||
run: |
|
||||
$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
|
||||
- name: add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.0.0
|
||||
- name: MSBuild
|
||||
run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142
|
||||
- name: bundle artifact tar
|
||||
shell: powershell
|
||||
env:
|
||||
MSVC: 1
|
||||
VCPKG_ROOT: ${{github.workspace}}\compat\vcbuild\vcpkg
|
||||
run: |
|
||||
& compat\vcbuild\vcpkg_copy_dlls.bat release
|
||||
if (!$?) { exit(1) }
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
mkdir -p artifacts &&
|
||||
eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\"
|
||||
"@
|
||||
- name: upload build artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: vs-artifacts
|
||||
path: artifacts
|
||||
vs-test:
|
||||
runs-on: windows-latest
|
||||
needs: [vs-build]
|
||||
strategy:
|
||||
matrix:
|
||||
nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-64-portable
|
||||
shell: bash
|
||||
run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -
|
||||
- name: download build artifacts
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: vs-artifacts
|
||||
path: ${{github.workspace}}
|
||||
- name: extract build artifacts
|
||||
shell: bash
|
||||
run: tar xf artifacts.tar.gz
|
||||
- name: test (parallel)
|
||||
shell: powershell
|
||||
env:
|
||||
MSYSTEM: MINGW64
|
||||
NO_SVN_TESTS: 1
|
||||
GIT_TEST_SKIP_REBASE_P: 1
|
||||
run: |
|
||||
& git-64-portable\git-cmd.exe --command=usr\bin\bash.exe -lc @"
|
||||
# Let Git ignore the SDK and the test-cache
|
||||
printf '%s\n' /git-64-portable/ /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 \
|
||||
${{matrix.nr}} 10 t[0-9]*.sh)
|
||||
"@
|
||||
regular:
|
||||
strategy:
|
||||
matrix:
|
||||
vector:
|
||||
- jobname: linux-clang
|
||||
cc: clang
|
||||
pool: ubuntu-latest
|
||||
- jobname: linux-gcc
|
||||
cc: gcc
|
||||
pool: ubuntu-latest
|
||||
- jobname: osx-clang
|
||||
cc: clang
|
||||
pool: macos-latest
|
||||
- jobname: osx-gcc
|
||||
cc: gcc
|
||||
pool: macos-latest
|
||||
- jobname: GETTEXT_POISON
|
||||
cc: gcc
|
||||
pool: ubuntu-latest
|
||||
env:
|
||||
CC: ${{matrix.vector.cc}}
|
||||
jobname: ${{matrix.vector.jobname}}
|
||||
runs-on: ${{matrix.vector.pool}}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/run-build-and-tests.sh
|
||||
- run: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-${{matrix.vector.jobname}}
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
dockerized:
|
||||
strategy:
|
||||
matrix:
|
||||
vector:
|
||||
- jobname: linux-musl
|
||||
image: alpine
|
||||
- jobname: Linux32
|
||||
image: daald/ubuntu32:xenial
|
||||
env:
|
||||
jobname: ${{matrix.vector.jobname}}
|
||||
runs-on: ubuntu-latest
|
||||
container: ${{matrix.vector.image}}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-docker-dependencies.sh
|
||||
- run: ci/run-build-and-tests.sh
|
||||
- run: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-${{matrix.vector.jobname}}
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
static-analysis:
|
||||
env:
|
||||
jobname: StaticAnalysis
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/run-static-analysis.sh
|
||||
documentation:
|
||||
env:
|
||||
jobname: Documentation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/test-documentation.sh
|
||||
12
.travis.yml
12
.travis.yml
@@ -16,7 +16,7 @@ compiler:
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- env: jobname=GIT_TEST_GETTEXT_POISON
|
||||
- env: jobname=GETTEXT_POISON
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
@@ -32,7 +32,15 @@ matrix:
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
script: ci/run-linux32-docker.sh
|
||||
script: ci/run-docker.sh
|
||||
- env: jobname=linux-musl
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
script: ci/run-docker.sh
|
||||
- env: jobname=StaticAnalysis
|
||||
os: linux
|
||||
compiler:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[](https://dev.azure.com/git/git/_build/latest?definitionId=11)
|
||||
[](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)
|
||||
|
||||
Git - fast, scalable, distributed revision control system
|
||||
=========================================================
|
||||
|
||||
@@ -1,558 +0,0 @@
|
||||
variables:
|
||||
Agent.Source.Git.ShallowFetchDepth: 1
|
||||
|
||||
jobs:
|
||||
- job: windows_build
|
||||
displayName: Windows Build
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
timeoutInMinutes: 240
|
||||
steps:
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
|
||||
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
|
||||
}
|
||||
displayName: 'Mount test-cache'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- powershell: |
|
||||
$urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
|
||||
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
|
||||
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
|
||||
(New-Object Net.WebClient).DownloadFile($downloadUrl,"git-sdk-64-minimal.zip")
|
||||
Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
|
||||
Remove-Item git-sdk-64-minimal.zip
|
||||
|
||||
# Let Git ignore the SDK and the test-cache
|
||||
"/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
|
||||
displayName: 'Download git-sdk-64-minimal'
|
||||
- powershell: |
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
ci/make-test-artifacts.sh artifacts
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
displayName: Build
|
||||
env:
|
||||
HOME: $(Build.SourcesDirectory)
|
||||
MSYSTEM: MINGW64
|
||||
DEVELOPER: 1
|
||||
NO_PERL: 1
|
||||
- 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'
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
|
||||
}
|
||||
displayName: 'Unmount test-cache'
|
||||
condition: true
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
|
||||
- job: windows_test
|
||||
displayName: Windows Test
|
||||
dependsOn: windows_build
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
timeoutInMinutes: 240
|
||||
strategy:
|
||||
parallel: 10
|
||||
steps:
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
|
||||
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
|
||||
}
|
||||
displayName: 'Mount test-cache'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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'
|
||||
- powershell: |
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
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-minimal/ /test-cache/ >>.git/info/exclude
|
||||
|
||||
ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
displayName: 'Test (parallel)'
|
||||
env:
|
||||
HOME: $(Build.SourcesDirectory)
|
||||
MSYSTEM: MINGW64
|
||||
NO_SVN_TESTS: 1
|
||||
GIT_TEST_SKIP_REBASE_P: 1
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
|
||||
}
|
||||
displayName: 'Unmount test-cache'
|
||||
condition: true
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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:
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
|
||||
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
|
||||
}
|
||||
displayName: 'Mount test-cache'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- powershell: |
|
||||
$urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
|
||||
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
|
||||
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
|
||||
(New-Object Net.WebClient).DownloadFile($downloadUrl,"git-sdk-64-minimal.zip")
|
||||
Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
|
||||
Remove-Item git-sdk-64-minimal.zip
|
||||
|
||||
# Let Git ignore the SDK and the test-cache
|
||||
"/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
|
||||
displayName: 'Download git-sdk-64-minimal'
|
||||
- powershell: |
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
make NDEBUG=1 DEVELOPER=1 vcxproj
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
displayName: Generate Visual Studio Solution
|
||||
env:
|
||||
HOME: $(Build.SourcesDirectory)
|
||||
MSYSTEM: MINGW64
|
||||
DEVELOPER: 1
|
||||
NO_PERL: 1
|
||||
GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
|
||||
- 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
|
||||
- powershell: |
|
||||
& compat\vcbuild\vcpkg_copy_dlls.bat release
|
||||
if (!$?) { exit(1) }
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
mkdir -p artifacts &&
|
||||
eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\"
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
displayName: Bundle artifact tar
|
||||
env:
|
||||
HOME: $(Build.SourcesDirectory)
|
||||
MSYSTEM: MINGW64
|
||||
DEVELOPER: 1
|
||||
NO_PERL: 1
|
||||
MSVC: 1
|
||||
VCPKG_ROOT: $(Build.SourcesDirectory)\compat\vcbuild\vcpkg
|
||||
- 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'
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
|
||||
}
|
||||
displayName: 'Unmount test-cache'
|
||||
condition: true
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
|
||||
- job: vs_test
|
||||
displayName: Visual Studio Test
|
||||
dependsOn: vs_build
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
timeoutInMinutes: 240
|
||||
strategy:
|
||||
parallel: 10
|
||||
steps:
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
|
||||
cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
|
||||
}
|
||||
displayName: 'Mount test-cache'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- task: DownloadPipelineArtifact@0
|
||||
displayName: 'Download Pipeline Artifact: VS test artifacts'
|
||||
inputs:
|
||||
artifactName: 'vs-artifacts'
|
||||
targetPath: '$(Build.SourcesDirectory)'
|
||||
- powershell: |
|
||||
& PortableGit\git-cmd.exe --command=usr\bin\bash.exe -lc @"
|
||||
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)
|
||||
"@
|
||||
if (!$?) { exit(1) }
|
||||
displayName: 'Test (parallel)'
|
||||
env:
|
||||
HOME: $(Build.SourcesDirectory)
|
||||
MSYSTEM: MINGW64
|
||||
NO_SVN_TESTS: 1
|
||||
GIT_TEST_SKIP_REBASE_P: 1
|
||||
- powershell: |
|
||||
if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
|
||||
cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
|
||||
}
|
||||
displayName: 'Unmount test-cache'
|
||||
condition: true
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
sudo apt-get update &&
|
||||
sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&
|
||||
|
||||
export CC=clang || exit 1
|
||||
|
||||
ci/install-dependencies.sh || exit 1
|
||||
ci/run-build-and-tests.sh || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-build-and-tests.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
|
||||
sudo apt-get update &&
|
||||
sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1
|
||||
|
||||
ci/install-dependencies.sh || exit 1
|
||||
ci/run-build-and-tests.sh || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-build-and-tests.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
export CC=clang
|
||||
|
||||
ci/install-dependencies.sh || exit 1
|
||||
ci/run-build-and-tests.sh || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-build-and-tests.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
ci/install-dependencies.sh || exit 1
|
||||
ci/run-build-and-tests.sh || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-build-and-tests.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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: gettext_poison
|
||||
displayName: GETTEXT_POISON
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- bash: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
sudo apt-get update &&
|
||||
sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&
|
||||
|
||||
export jobname=GETTEXT_POISON || exit 1
|
||||
|
||||
ci/run-build-and-tests.sh || {
|
||||
ci/print-test-failures.sh
|
||||
exit 1
|
||||
}
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-build-and-tests.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- task: PublishTestResults@2
|
||||
displayName: 'Publish Test Results **/TEST-*.xml'
|
||||
inputs:
|
||||
mergeTestResults: true
|
||||
testRunTitle: 'gettext-poison'
|
||||
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: linux32
|
||||
displayName: Linux32
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- bash: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
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" bash -lxc ci/run-linux32-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
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || res=1
|
||||
exit $res
|
||||
displayName: 'ci/run-linux32-docker.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
- 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-latest
|
||||
steps:
|
||||
- bash: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
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
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/run-static-analysis.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
|
||||
- job: documentation
|
||||
displayName: Documentation
|
||||
condition: succeeded()
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- bash: |
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
|
||||
|
||||
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
|
||||
|
||||
test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
|
||||
displayName: 'ci/test-documentation.sh'
|
||||
env:
|
||||
GITFILESHAREPWD: $(gitfileshare.pwd)
|
||||
16
ci/git-problem-matcher.json
Normal file
16
ci/git-problem-matcher.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "git-test-suite",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^([^ :]+\\.sh):(\\d+): (error|warning|info):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7,12 +7,17 @@
|
||||
|
||||
P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION
|
||||
LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION
|
||||
UBUNTU_COMMON_PKGS="make libssl-dev libcurl4-openssl-dev libexpat-dev
|
||||
perl-modules liberror-perl tcl tk gettext zlib1g-dev apache2
|
||||
libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl
|
||||
libnet-smtp-ssl-perl"
|
||||
|
||||
case "$jobname" in
|
||||
linux-clang|linux-gcc)
|
||||
sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
|
||||
sudo apt-get -q update
|
||||
sudo apt-get -q -y install language-pack-is libsvn-perl apache2
|
||||
sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
|
||||
$UBUNTU_COMMON_PKGS
|
||||
case "$jobname" in
|
||||
linux-gcc)
|
||||
sudo apt-get -q -y install gcc-8
|
||||
@@ -63,10 +68,15 @@ StaticAnalysis)
|
||||
;;
|
||||
Documentation)
|
||||
sudo apt-get -q update
|
||||
sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns
|
||||
sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns \
|
||||
libcurl4-openssl-dev
|
||||
|
||||
test -n "$ALREADY_HAVE_ASCIIDOCTOR" ||
|
||||
gem install --version 1.5.8 asciidoctor
|
||||
sudo gem install --version 1.5.8 asciidoctor
|
||||
;;
|
||||
GETTEXT_POISON)
|
||||
sudo apt-get -q update
|
||||
sudo apt-get -q -y install $UBUNTU_COMMON_PKGS
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
18
ci/install-docker-dependencies.sh
Executable file
18
ci/install-docker-dependencies.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Install dependencies required to build and test Git inside container
|
||||
#
|
||||
|
||||
case "$jobname" in
|
||||
Linux32)
|
||||
linux32 --32bit i386 sh -c '
|
||||
apt update >/dev/null &&
|
||||
apt install -y build-essential libcurl4-openssl-dev \
|
||||
libssl-dev libexpat-dev gettext python >/dev/null
|
||||
'
|
||||
;;
|
||||
linux-musl)
|
||||
apk add --update build-base curl-dev openssl-dev expat-dev gettext \
|
||||
pcre2-dev python3 musl-libintl perl-utils ncurses >/dev/null
|
||||
;;
|
||||
esac
|
||||
39
ci/lib.sh
39
ci/lib.sh
@@ -34,7 +34,7 @@ save_good_tree () {
|
||||
# successfully before (e.g. because the branch got rebased, changing only
|
||||
# the commit messages).
|
||||
skip_good_tree () {
|
||||
if test "$TRAVIS_DEBUG_MODE" = true
|
||||
if test "$TRAVIS_DEBUG_MODE" = true || test true = "$GITHUB_ACTIONS"
|
||||
then
|
||||
return
|
||||
fi
|
||||
@@ -79,6 +79,9 @@ check_unignored_build_artifacts ()
|
||||
}
|
||||
}
|
||||
|
||||
# GitHub Action doesn't set TERM, which is required by tput
|
||||
export TERM=${TERM:-dumb}
|
||||
|
||||
# Clear MAKEFLAGS that may come from the outside world.
|
||||
export MAKEFLAGS=
|
||||
|
||||
@@ -136,8 +139,32 @@ then
|
||||
MAKEFLAGS="$MAKEFLAGS --jobs=10"
|
||||
test windows_nt != "$CI_OS_NAME" ||
|
||||
GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
|
||||
elif test true = "$GITHUB_ACTIONS"
|
||||
then
|
||||
CI_TYPE=github-actions
|
||||
CI_BRANCH="$GITHUB_REF"
|
||||
CI_COMMIT="$GITHUB_SHA"
|
||||
CI_OS_NAME="$(echo "$RUNNER_OS" | tr A-Z a-z)"
|
||||
test macos != "$CI_OS_NAME" || CI_OS_NAME=osx
|
||||
CI_REPO_SLUG="$GITHUB_REPOSITORY"
|
||||
CI_JOB_ID="$GITHUB_RUN_ID"
|
||||
CC="${CC:-gcc}"
|
||||
|
||||
cache_dir="$HOME/none"
|
||||
|
||||
export GIT_PROVE_OPTS="--timer --jobs 10"
|
||||
export GIT_TEST_OPTS="--verbose-log -x"
|
||||
MAKEFLAGS="$MAKEFLAGS --jobs=10"
|
||||
test windows != "$CI_OS_NAME" ||
|
||||
GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
|
||||
|
||||
# https://github.com/actions/toolkit/blob/master/docs/commands.md#problem-matchers
|
||||
echo "::add-matcher::ci/git-problem-matcher.json"
|
||||
test linux-musl = "$jobname" ||
|
||||
MAKEFLAGS="$MAKEFLAGS TEST_SHELL_PATH=/bin/sh"
|
||||
else
|
||||
echo "Could not identify CI type" >&2
|
||||
env >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -189,9 +216,17 @@ osx-clang|osx-gcc)
|
||||
# Travis CI OS X
|
||||
export GIT_SKIP_TESTS="t9810 t9816"
|
||||
;;
|
||||
GIT_TEST_GETTEXT_POISON)
|
||||
GETTEXT_POISON)
|
||||
export GIT_TEST_GETTEXT_POISON=true
|
||||
;;
|
||||
Linux32)
|
||||
CC=gcc
|
||||
;;
|
||||
linux-musl)
|
||||
CC=gcc
|
||||
MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/python3 USE_LIBPCRE2=Yes"
|
||||
MAKEFLAGS="$MAKEFLAGS NO_REGEX=Yes ICONV_OMITS_BOM=Yes"
|
||||
;;
|
||||
esac
|
||||
|
||||
MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
|
||||
|
||||
@@ -46,6 +46,13 @@ do
|
||||
mv "$trash_dir" failed-test-artifacts
|
||||
continue
|
||||
;;
|
||||
github-actions)
|
||||
mkdir -p failed-test-artifacts
|
||||
echo "::set-env name=FAILED_TEST_ARTIFACTS::t/failed-test-artifacts"
|
||||
cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
|
||||
tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
|
||||
continue
|
||||
;;
|
||||
*)
|
||||
echo "Unhandled CI type: $CI_TYPE" >&2
|
||||
exit 1
|
||||
|
||||
@@ -1,25 +1,33 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Build and test Git in a 32-bit environment
|
||||
# Build and test Git inside container
|
||||
#
|
||||
# Usage:
|
||||
# run-linux32-build.sh <host-user-id>
|
||||
# run-docker-build.sh <host-user-id>
|
||||
#
|
||||
|
||||
set -ex
|
||||
|
||||
if test $# -ne 1 || test -z "$1"
|
||||
then
|
||||
echo >&2 "usage: run-linux32-build.sh <host-user-id>"
|
||||
echo >&2 "usage: run-docker-build.sh <host-user-id>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update packages to the latest available versions
|
||||
linux32 --32bit i386 sh -c '
|
||||
apt update >/dev/null &&
|
||||
apt install -y build-essential libcurl4-openssl-dev libssl-dev \
|
||||
libexpat-dev gettext python >/dev/null
|
||||
'
|
||||
case "$jobname" in
|
||||
Linux32)
|
||||
switch_cmd="linux32 --32bit i386"
|
||||
;;
|
||||
linux-musl)
|
||||
switch_cmd=
|
||||
useradd () { adduser -D "$@"; }
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
"${0%/*}/install-docker-dependencies.sh"
|
||||
|
||||
# If this script runs inside a docker container, then all commands are
|
||||
# usually executed as root. Consequently, the host user might not be
|
||||
@@ -51,10 +59,17 @@ else
|
||||
fi
|
||||
|
||||
# Build and test
|
||||
linux32 --32bit i386 su -m -l $CI_USER -c '
|
||||
command $switch_cmd su -m -l $CI_USER -c "
|
||||
set -ex
|
||||
export DEVELOPER='$DEVELOPER'
|
||||
export DEFAULT_TEST_TARGET='$DEFAULT_TEST_TARGET'
|
||||
export GIT_PROVE_OPTS='$GIT_PROVE_OPTS'
|
||||
export GIT_TEST_OPTS='$GIT_TEST_OPTS'
|
||||
export GIT_TEST_CLONE_2GB='$GIT_TEST_CLONE_2GB'
|
||||
export MAKEFLAGS='$MAKEFLAGS'
|
||||
export cache_dir='$cache_dir'
|
||||
cd /usr/src/git
|
||||
test -n "$cache_dir" && ln -s "$cache_dir/.prove" t/.prove
|
||||
test -n '$cache_dir' && ln -s '$cache_dir/.prove' t/.prove
|
||||
make
|
||||
make test
|
||||
'
|
||||
"
|
||||
47
ci/run-docker.sh
Executable file
47
ci/run-docker.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Download and run Docker image to build and test Git
|
||||
#
|
||||
|
||||
. ${0%/*}/lib.sh
|
||||
|
||||
case "$jobname" in
|
||||
Linux32)
|
||||
CI_CONTAINER="daald/ubuntu32:xenial"
|
||||
;;
|
||||
linux-musl)
|
||||
CI_CONTAINER=alpine
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
docker pull "$CI_CONTAINER"
|
||||
|
||||
# Use the following command to debug the docker build locally:
|
||||
# <host-user-id> must be 0 if podman is used as drop-in replacement for docker
|
||||
# $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/sh "$CI_CONTAINER"
|
||||
# root@container:/# export jobname=<jobname>
|
||||
# root@container:/# /usr/src/git/ci/run-docker-build.sh <host-user-id>
|
||||
|
||||
container_cache_dir=/tmp/travis-cache
|
||||
|
||||
docker run \
|
||||
--interactive \
|
||||
--env DEVELOPER \
|
||||
--env DEFAULT_TEST_TARGET \
|
||||
--env GIT_PROVE_OPTS \
|
||||
--env GIT_TEST_OPTS \
|
||||
--env GIT_TEST_CLONE_2GB \
|
||||
--env MAKEFLAGS \
|
||||
--env jobname \
|
||||
--env cache_dir="$container_cache_dir" \
|
||||
--volume "${PWD}:/usr/src/git" \
|
||||
--volume "$cache_dir:$container_cache_dir" \
|
||||
"$CI_CONTAINER" \
|
||||
/usr/src/git/ci/run-docker-build.sh $(id -u $USER)
|
||||
|
||||
check_unignored_build_artifacts
|
||||
|
||||
save_good_tree
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Download and run Docker image to build and test 32-bit Git
|
||||
#
|
||||
|
||||
. ${0%/*}/lib.sh
|
||||
|
||||
docker pull daald/ubuntu32:xenial
|
||||
|
||||
# Use the following command to debug the docker build locally:
|
||||
# $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial
|
||||
# root@container:/# /usr/src/git/ci/run-linux32-build.sh <host-user-id>
|
||||
|
||||
container_cache_dir=/tmp/travis-cache
|
||||
|
||||
docker run \
|
||||
--interactive \
|
||||
--env DEVELOPER \
|
||||
--env DEFAULT_TEST_TARGET \
|
||||
--env GIT_PROVE_OPTS \
|
||||
--env GIT_TEST_OPTS \
|
||||
--env GIT_TEST_CLONE_2GB \
|
||||
--env cache_dir="$container_cache_dir" \
|
||||
--volume "${PWD}:/usr/src/git" \
|
||||
--volume "$cache_dir:$container_cache_dir" \
|
||||
daald/ubuntu32:xenial \
|
||||
/usr/src/git/ci/run-linux32-build.sh $(id -u $USER)
|
||||
|
||||
check_unignored_build_artifacts
|
||||
|
||||
save_good_tree
|
||||
@@ -67,7 +67,7 @@ static void unpack_sideband(void)
|
||||
case PACKET_READ_NORMAL:
|
||||
band = reader.line[0] & 0xff;
|
||||
if (band < 1 || band > 2)
|
||||
die("unexpected side band %d", band);
|
||||
continue; /* skip non-sideband packets */
|
||||
fd = band;
|
||||
|
||||
write_or_die(fd, reader.line + 1, reader.pktlen - 1);
|
||||
|
||||
@@ -17,7 +17,7 @@ compare_diff () {
|
||||
# Compare blame output using the expectation for a diff as reference.
|
||||
# Only look for the lines coming from non-boundary commits.
|
||||
compare_blame () {
|
||||
sed -n -e "1,4d" -e "s/^\+//p" <"$1" >.tmp-1
|
||||
sed -n -e "1,4d" -e "s/^+//p" <"$1" >.tmp-1
|
||||
sed -ne "s/^[^^][^)]*) *//p" <"$2" >.tmp-2
|
||||
test_cmp .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2
|
||||
}
|
||||
|
||||
@@ -52,6 +52,13 @@ test_fix () {
|
||||
|
||||
# find touched lines
|
||||
$DIFF file target | sed -n -e "s/^> //p" >fixed
|
||||
# busybox's diff(1) doesn't output normal format
|
||||
if ! test -s fixed
|
||||
then
|
||||
$DIFF -u file target |
|
||||
grep -v '^+++ target' |
|
||||
sed -ne "/^+/s/+//p" >fixed
|
||||
fi
|
||||
|
||||
# the changed lines are all expected to change
|
||||
fixed_cnt=$(wc -l <fixed)
|
||||
|
||||
@@ -7,12 +7,12 @@ test_description='git archive --format=zip test'
|
||||
SUBSTFORMAT=%H%n
|
||||
|
||||
test_lazy_prereq UNZIP_SYMLINKS '
|
||||
(
|
||||
mkdir unzip-symlinks &&
|
||||
cd unzip-symlinks &&
|
||||
"$GIT_UNZIP" "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip &&
|
||||
test -h symlink
|
||||
)
|
||||
"$GIT_UNZIP" "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip &&
|
||||
test -h symlink
|
||||
'
|
||||
|
||||
test_lazy_prereq UNZIP_CONVERT '
|
||||
"$GIT_UNZIP" -a "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip
|
||||
'
|
||||
|
||||
check_zip() {
|
||||
@@ -39,33 +39,33 @@ check_zip() {
|
||||
extracted=${dir_with_prefix}a
|
||||
original=a
|
||||
|
||||
test_expect_success UNZIP " extract ZIP archive with EOL conversion" '
|
||||
test_expect_success UNZIP_CONVERT " extract ZIP archive with EOL conversion" '
|
||||
(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
|
||||
'
|
||||
|
||||
test_expect_success UNZIP " validate that text files are converted" "
|
||||
test_expect_success UNZIP_CONVERT " validate that text files are converted" "
|
||||
test_cmp_bin $extracted/text.cr $extracted/text.crlf &&
|
||||
test_cmp_bin $extracted/text.cr $extracted/text.lf
|
||||
"
|
||||
|
||||
test_expect_success UNZIP " validate that binary files are unchanged" "
|
||||
test_expect_success UNZIP_CONVERT " validate that binary files are unchanged" "
|
||||
test_cmp_bin $original/binary.cr $extracted/binary.cr &&
|
||||
test_cmp_bin $original/binary.crlf $extracted/binary.crlf &&
|
||||
test_cmp_bin $original/binary.lf $extracted/binary.lf
|
||||
"
|
||||
|
||||
test_expect_success UNZIP " validate that diff files are converted" "
|
||||
test_expect_success UNZIP_CONVERT " validate that diff files are converted" "
|
||||
test_cmp_bin $extracted/diff.cr $extracted/diff.crlf &&
|
||||
test_cmp_bin $extracted/diff.cr $extracted/diff.lf
|
||||
"
|
||||
|
||||
test_expect_success UNZIP " validate that -diff files are unchanged" "
|
||||
test_expect_success UNZIP_CONVERT " validate that -diff files are unchanged" "
|
||||
test_cmp_bin $original/nodiff.cr $extracted/nodiff.cr &&
|
||||
test_cmp_bin $original/nodiff.crlf $extracted/nodiff.crlf &&
|
||||
test_cmp_bin $original/nodiff.lf $extracted/nodiff.lf
|
||||
"
|
||||
|
||||
test_expect_success UNZIP " validate that custom diff is unchanged " "
|
||||
test_expect_success UNZIP_CONVERT " validate that custom diff is unchanged " "
|
||||
test_cmp_bin $original/custom.cr $extracted/custom.cr &&
|
||||
test_cmp_bin $original/custom.crlf $extracted/custom.crlf &&
|
||||
test_cmp_bin $original/custom.lf $extracted/custom.lf
|
||||
|
||||
@@ -49,7 +49,7 @@ test_expect_success 'do partial clone 1' '
|
||||
test_expect_success 'verify that .promisor file contains refs fetched' '
|
||||
ls pc1/.git/objects/pack/pack-*.promisor >promisorlist &&
|
||||
test_line_count = 1 promisorlist &&
|
||||
git -C srv.bare rev-list HEAD >headhash &&
|
||||
git -C srv.bare rev-parse --verify HEAD >headhash &&
|
||||
grep "$(cat headhash) HEAD" $(cat promisorlist) &&
|
||||
grep "$(cat headhash) refs/heads/master" $(cat promisorlist)
|
||||
'
|
||||
|
||||
@@ -13,10 +13,7 @@ get_actual_refs () {
|
||||
}
|
||||
|
||||
get_actual_commits () {
|
||||
sed -n -e '/packfile/,/0000/{
|
||||
/packfile/d
|
||||
p
|
||||
}' <out | test-tool pkt-line unpack-sideband >o.pack &&
|
||||
test-tool pkt-line unpack-sideband <out >o.pack &&
|
||||
git index-pack o.pack &&
|
||||
git verify-pack -v o.idx >objs &&
|
||||
grep commit objs | cut -d" " -f1 | sort >actual_commits
|
||||
|
||||
@@ -18,7 +18,7 @@ GIT_FORCE_UNTRACKED_CACHE=true
|
||||
export GIT_FORCE_UNTRACKED_CACHE
|
||||
|
||||
sync_mtime () {
|
||||
find . -type d -ls >/dev/null
|
||||
find . -type d -exec ls -ld {} + >/dev/null
|
||||
}
|
||||
|
||||
avoid_racy() {
|
||||
|
||||
@@ -905,7 +905,7 @@ test_expect_code () {
|
||||
# - not all diff versions understand "-u"
|
||||
|
||||
test_cmp() {
|
||||
$GIT_TEST_CMP "$@"
|
||||
eval "$GIT_TEST_CMP" '"$@"'
|
||||
}
|
||||
|
||||
# Check that the given config key has the expected value.
|
||||
|
||||
@@ -657,6 +657,18 @@ die () {
|
||||
fi
|
||||
}
|
||||
|
||||
file_lineno () {
|
||||
test -z "$GIT_TEST_FRAMEWORK_SELFTEST" && test -n "$BASH" || return 0
|
||||
local i
|
||||
for i in ${!BASH_SOURCE[*]}
|
||||
do
|
||||
case $i,"${BASH_SOURCE[$i]##*/}" in
|
||||
0,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }"; return;;
|
||||
*,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }"; return;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
GIT_EXIT_OK=
|
||||
trap 'die' EXIT
|
||||
# Disable '-x' tracing, because with some shells, notably dash, it
|
||||
@@ -702,7 +714,7 @@ test_failure_ () {
|
||||
write_junit_xml_testcase "$1" " $junit_insert"
|
||||
fi
|
||||
test_failure=$(($test_failure + 1))
|
||||
say_color error "not ok $test_count - $1"
|
||||
say_color error "$(file_lineno error)not ok $test_count - $1"
|
||||
shift
|
||||
printf '%s\n' "$*" | sed -e 's/^/# /'
|
||||
test "$immediate" = "" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }
|
||||
|
||||
Reference in New Issue
Block a user