mirror of
https://github.com/git/git.git
synced 2024-11-11 12:19:40 +01:00
df7375d772
Change the names used for the GitHub CI workflows to be short enough to (mostly) fit in the pop-up tool-tips that GitHub shows in the commit view. I.e. when mouse-clicking on the passing or failing check-mark next to the commit subject. These names are seemingly truncated to 17-20 characters followed by three dots ("..."). Since a "CI/PR / " prefix is added to them the job names looked like this before (windows-test and vs-test jobs omitted): CI/PR / ci-config (p... CI/PR / windows-buil... CI/PR / vs-build (pu... CI/PR / regular (lin... CI/PR / regular (lin... CI/PR / regular (os... CI/PR / regular (os... CI/PR / regular (lin... CI/PR / regular (lin... CI/PR / dockerized (... CI/PR / dockerized (... CI/PR / dockerized (... CI/PR / static-anal... CI/PR / sparse (pu... CI/PR / documenta... By omitting the "/PR" from the top-level name, and pushing the $jobname to the front we'll now instead get: CI / config (push) CI / win build (push... CI / win+VS build (... CI / linux-clang (ub... CI / linux-gcc (ubun... CI / osx-clang (osx)... CI / osx-gcc (osx) (... CI / linux-gcc-defau... CI / linux-leaks (ub... CI / linux-musl (alp... CI / Linux32 (daald/... CI / pedantic (fedor... CI / static-analysis... CI / sparse (push)... CI / documentation We then have no truncation in the expanded view. See [1] for how it looked before, [2] for a currently visible CI run using this commit, and [3] for the GitHub workflow syntax involved being changed here. Let's also use the existing "pool" field as before. It's occasionally useful to know we're running on say ubuntu v.s. fedora. The "-latest" suffix is useful to some[4], and since it's now at the end it doesn't hurt readability in the short view compared to saying "ubuntu" or "macos". 1. https://github.com/git/git/tree/master/ 2. https://github.com/avar/git/tree/avar/ci-rm-travis-cleanup-ci-names-3 3. https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions 3. https://lore.kernel.org/git/d9b07ca5-b58d-a535-d25b-85d7f12e6295@github.com/ Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
330 lines
11 KiB
YAML
330 lines
11 KiB
YAML
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
env:
|
|
DEVELOPER: 1
|
|
|
|
jobs:
|
|
ci-config:
|
|
name: 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:
|
|
name: win build
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: git-for-windows/setup-git-for-windows-sdk@v1
|
|
- name: build
|
|
shell: bash
|
|
env:
|
|
HOME: ${{runner.workspace}}
|
|
NO_PERL: 1
|
|
run: . /etc/profile && ci/make-test-artifacts.sh artifacts
|
|
- name: zip up tracked files
|
|
run: git archive -o artifacts/tracked.tar.gz HEAD
|
|
- name: upload tracked files and build artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: windows-artifacts
|
|
path: artifacts
|
|
windows-test:
|
|
name: win 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:
|
|
- name: download tracked files and build artifacts
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: windows-artifacts
|
|
path: ${{github.workspace}}
|
|
- name: extract tracked files and build artifacts
|
|
shell: bash
|
|
run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz
|
|
- uses: git-for-windows/setup-git-for-windows-sdk@v1
|
|
- name: test
|
|
shell: bash
|
|
run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
|
|
- name: ci/print-test-failures.sh
|
|
if: failure()
|
|
shell: bash
|
|
run: ci/print-test-failures.sh
|
|
- name: Upload failed tests' directories
|
|
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: failed-tests-windows
|
|
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
|
vs-build:
|
|
name: win+VS build
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
env:
|
|
NO_PERL: 1
|
|
GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: git-for-windows/setup-git-for-windows-sdk@v1
|
|
- 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: cmd
|
|
run: compat\vcbuild\vcpkg_copy_dlls.bat release
|
|
- name: generate Visual Studio solution
|
|
shell: bash
|
|
run: |
|
|
cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \
|
|
-DNO_GETTEXT=YesPlease -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: bash
|
|
env:
|
|
MSVC: 1
|
|
VCPKG_ROOT: ${{github.workspace}}\compat\vcbuild\vcpkg
|
|
run: |
|
|
mkdir -p artifacts &&
|
|
eval "$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts NO_GETTEXT=YesPlease 2>&1 | grep ^tar)"
|
|
- name: zip up tracked files
|
|
run: git archive -o artifacts/tracked.tar.gz HEAD
|
|
- name: upload tracked files and build artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: vs-artifacts
|
|
path: artifacts
|
|
vs-test:
|
|
name: win+VS test
|
|
runs-on: windows-latest
|
|
needs: vs-build
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
steps:
|
|
- uses: git-for-windows/setup-git-for-windows-sdk@v1
|
|
- name: download tracked files and build artifacts
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: vs-artifacts
|
|
path: ${{github.workspace}}
|
|
- name: extract tracked files and build artifacts
|
|
shell: bash
|
|
run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz
|
|
- name: test
|
|
shell: bash
|
|
env:
|
|
NO_SVN_TESTS: 1
|
|
run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
|
|
- name: ci/print-test-failures.sh
|
|
if: failure()
|
|
shell: bash
|
|
run: ci/print-test-failures.sh
|
|
- name: Upload failed tests' directories
|
|
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: failed-tests-windows
|
|
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
|
regular:
|
|
name: ${{matrix.vector.jobname}} (${{matrix.vector.pool}})
|
|
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
|
|
- jobname: linux-leaks
|
|
cc: gcc
|
|
pool: ubuntu-latest
|
|
env:
|
|
CC: ${{matrix.vector.cc}}
|
|
jobname: ${{matrix.vector.jobname}}
|
|
runs-on: ${{matrix.vector.pool}}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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@v2
|
|
with:
|
|
name: failed-tests-${{matrix.vector.jobname}}
|
|
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
|
dockerized:
|
|
name: ${{matrix.vector.jobname}} (${{matrix.vector.image}})
|
|
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
|
|
- jobname: pedantic
|
|
image: fedora
|
|
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@v2
|
|
- 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:
|
|
name: documentation
|
|
needs: ci-config
|
|
if: needs.ci-config.outputs.enabled == 'yes'
|
|
env:
|
|
jobname: Documentation
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- run: ci/install-dependencies.sh
|
|
- run: ci/test-documentation.sh
|