b01aff8c1c
The section added in e76eec3554
(ci: allow per-branch config for
GitHub Actions, 2020-05-07) contains a `&&`-chain that connects several
commands. The first command is actually so long that it stretches over
multiple lines, and as per usual, the continuation lines are indented one
more level than the first.
However, the subsequent commands in the `&&`-chain were also indented
one more level than the first command, which was almost certainly
unintended.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
315 lines
10 KiB
YAML
315 lines
10 KiB
YAML
name: CI/PR
|
|
|
|
on: [push, pull_request]
|
|
|
|
env:
|
|
DEVELOPER: 1
|
|
|
|
jobs:
|
|
ci-config:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
enabled: ${{ steps.check-ref.outputs.enabled }}
|
|
steps:
|
|
- name: try to clone ci-config branch
|
|
continue-on-error: true
|
|
run: |
|
|
git -c protocol.version=2 clone \
|
|
--no-tags \
|
|
--single-branch \
|
|
-b ci-config \
|
|
--depth 1 \
|
|
--no-checkout \
|
|
--filter=blob:none \
|
|
https://github.com/${{ github.repository }} \
|
|
config-repo &&
|
|
cd config-repo &&
|
|
git checkout HEAD -- ci/config
|
|
- id: check-ref
|
|
name: check whether CI is enabled for ref
|
|
run: |
|
|
enabled=yes
|
|
if test -x config-repo/ci/config/allow-ref &&
|
|
! config-repo/ci/config/allow-ref '${{ github.ref }}'
|
|
then
|
|
enabled=no
|
|
fi
|
|
echo "::set-output name=enabled::$enabled"
|
|
|
|
windows-build:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
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:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
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: 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: copy dlls to root
|
|
shell: powershell
|
|
run: |
|
|
& compat\vcbuild\vcpkg_copy_dlls.bat release
|
|
if (!$?) { exit(1) }
|
|
- name: generate Visual Studio solution
|
|
shell: bash
|
|
run: |
|
|
cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \
|
|
-DIconv_LIBRARY=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows/lib/libiconv.lib -DIconv_INCLUDE_DIR=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows/include \
|
|
-DMSGFMT_EXE=`pwd`/git-sdk-64-minimal/mingw64/bin/msgfmt.exe -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON
|
|
- 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: |
|
|
& 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
|
|
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
|
|
|
|
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}}
|
|
regular:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
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:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
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:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
env:
|
|
jobname: StaticAnalysis
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- run: ci/install-dependencies.sh
|
|
- run: ci/run-static-analysis.sh
|
|
documentation:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
env:
|
|
jobname: Documentation
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- run: ci/install-dependencies.sh
|
|
- run: ci/test-documentation.sh
|