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.
348 lines
12 KiB
348 lines
12 KiB
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: print test failures |
|
if: failure() && env.FAILED_TEST_ARTIFACTS != '' |
|
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: print test failures |
|
if: failure() && env.FAILED_TEST_ARTIFACTS != '' |
|
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-sha256 |
|
cc: clang |
|
os: ubuntu |
|
pool: ubuntu-latest |
|
- jobname: linux-gcc |
|
cc: gcc |
|
cc_package: gcc-8 |
|
pool: ubuntu-latest |
|
- jobname: linux-TEST-vars |
|
cc: gcc |
|
os: ubuntu |
|
cc_package: gcc-8 |
|
pool: ubuntu-latest |
|
- jobname: osx-clang |
|
cc: clang |
|
pool: macos-latest |
|
- jobname: osx-gcc |
|
cc: gcc |
|
cc_package: gcc-9 |
|
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}} |
|
CC_PACKAGE: ${{matrix.vector.cc_package}} |
|
jobname: ${{matrix.vector.jobname}} |
|
runs_on_pool: ${{matrix.vector.pool}} |
|
runs-on: ${{matrix.vector.pool}} |
|
steps: |
|
- uses: actions/checkout@v2 |
|
- run: ci/install-dependencies.sh |
|
- run: ci/run-build-and-tests.sh |
|
- name: print test failures |
|
if: failure() && env.FAILED_TEST_ARTIFACTS != '' |
|
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-${{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 |
|
os: ubuntu32 |
|
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 |
|
- name: print test failures |
|
if: failure() && env.FAILED_TEST_ARTIFACTS != '' |
|
shell: bash |
|
run: 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-${{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 |
|
- run: ci/check-directional-formatting.bash |
|
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
|
|
|