857341c1b7
When this developer tested how the git-sdk-64-minimal artifact could be served to all the GitHub workflow runs that need it, Azure Blobs looked like a pretty good choice: it is reliable, fast and we already use it in Git for Windows to serve components like OpenSSL, cURL, etc It came as an unpleasant surprise just _how many_ times this artifact was downloaded. It exploded the bandwidth to a point where the free tier would no longer be enough, threatening to block other, essential Git for Windows services. Let's switch back to using the Build Artifacts of our trusty Azure Pipeline for the time being. To avoid unnecessary hammering of the Azure Pipeline artifacts, we use the GitHub Action `actions/upload-artifact` in the `windows-build` job and the GitHub Action `actions/download-artifact` in the `windows-test` and `vs-test` jobs (the latter now depends on `windows-build` for that reason, too). Helped-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
264 lines
8.5 KiB
YAML
264 lines
8.5 KiB
YAML
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: |
|
|
## Get artifact
|
|
urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
|
|
id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
|
|
jq -r ".value[] | .id")
|
|
download_url="$(curl "$urlbase/$id/artifacts" |
|
|
jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
|
|
curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
|
|
-o artifacts.zip "$download_url"
|
|
|
|
## Unzip and remove the artifact
|
|
unzip artifacts.zip
|
|
rm artifacts.zip
|
|
- 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
|
|
- name: upload git-sdk-64-minimal
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: git-sdk-64-minimal
|
|
path: git-sdk-64-minimal
|
|
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 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: download git-sdk-64-minimal
|
|
uses: actions/download-artifact@v1
|
|
with:
|
|
name: git-sdk-64-minimal
|
|
path: ${{github.workspace}}/git-sdk-64-minimal/
|
|
- 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: |
|
|
## Get artifact
|
|
urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
|
|
id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
|
|
jq -r ".value[] | .id")
|
|
download_url="$(curl "$urlbase/$id/artifacts" |
|
|
jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
|
|
curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
|
|
-o artifacts.zip "$download_url"
|
|
|
|
## Unzip and remove the artifact
|
|
unzip artifacts.zip
|
|
rm artifacts.zip
|
|
- 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, 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
|
|
uses: actions/download-artifact@v1
|
|
with:
|
|
name: git-sdk-64-minimal
|
|
path: ${{github.workspace}}/git-sdk-64-minimal/
|
|
- 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-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
|
# Let Git ignore the SDK and the test-cache
|
|
printf '%s\n' /git-sdk-64-minimal/ /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
|