You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
10 KiB
314 lines
10 KiB
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
|
|
|