mirror of
https://github.com/git/git.git
synced 2024-05-07 03:26:08 +02:00
27f45ccf33
This just matches the style/location of the package installation for other jobs. There should be no functional change. I did flip the order of the options and command-name ("-y update" instead of "update -y") for consistency with other lines in the same file. Note also that we have to reorder the dependency install with the "checkout" action, so that we actually have the "ci" scripts available. Signed-off-by: Jeff King <peff@peff.net> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
383 lines
13 KiB
YAML
383 lines
13 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.skip-if-redundant.outputs.enabled }}
|
|
steps:
|
|
- name: try to clone ci-config branch
|
|
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 || : ignore
|
|
- 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"
|
|
- name: skip if the commit or tree was already tested
|
|
id: skip-if-redundant
|
|
uses: actions/github-script@v3
|
|
if: steps.check-ref.outputs.enabled == 'yes'
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
try {
|
|
// Figure out workflow ID, commit and tree
|
|
const { data: run } = await github.actions.getWorkflowRun({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
run_id: context.runId,
|
|
});
|
|
const workflow_id = run.workflow_id;
|
|
const head_sha = run.head_sha;
|
|
const tree_id = run.head_commit.tree_id;
|
|
|
|
// See whether there is a successful run for that commit or tree
|
|
const { data: runs } = await github.actions.listWorkflowRuns({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
per_page: 500,
|
|
status: 'success',
|
|
workflow_id,
|
|
});
|
|
for (const run of runs.workflow_runs) {
|
|
if (head_sha === run.head_sha) {
|
|
core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`);
|
|
core.setOutput('enabled', ' but skip');
|
|
break;
|
|
}
|
|
if (run.head_commit && tree_id === run.head_commit.tree_id) {
|
|
core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`);
|
|
core.setOutput('enabled', ' but skip');
|
|
break;
|
|
}
|
|
}
|
|
} catch (e) {
|
|
core.warning(e);
|
|
}
|
|
|
|
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:
|
|
fail-fast: false
|
|
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: initialize vcpkg
|
|
uses: actions/checkout@v2
|
|
with:
|
|
repository: 'microsoft/vcpkg'
|
|
path: 'compat/vcbuild/vcpkg'
|
|
- 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
|
|
- 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 \
|
|
-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:
|
|
fail-fast: false
|
|
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:
|
|
fail-fast: false
|
|
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: linux-gcc-default
|
|
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:
|
|
fail-fast: false
|
|
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-18.04
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- run: ci/install-dependencies.sh
|
|
- run: ci/run-static-analysis.sh
|
|
sparse:
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
env:
|
|
jobname: sparse
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Download a current `sparse` package
|
|
# Ubuntu's `sparse` version is too old for us
|
|
uses: git-for-windows/get-azure-pipelines-artifact@v0
|
|
with:
|
|
repository: git/git
|
|
definitionId: 10
|
|
artifact: sparse-20.04
|
|
- name: Install the current `sparse` package
|
|
run: sudo dpkg -i sparse-20.04/sparse_*.deb
|
|
- uses: actions/checkout@v2
|
|
- name: Install other dependencies
|
|
run: ci/install-dependencies.sh
|
|
- run: make sparse
|
|
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
|