mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-29 04:28:53 -05:00
Merge 'sgn/github-action-latest'
This topic thicket defines a Continuous Integration/Pull Request build using GitHub Actions, and retires our Azure Pipeline in return. The secondary change in this topic thicket is to make sure that Git works with musl's libc and with BusyBox (which simplifies/changes a couple of Git for Windows' own BusyBox patches, too). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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