{"thread":{"id":"53143","subject":"[PATCH 1/5] ci/lib: if CI type is unknown, show the environment variables","startedAt":"2020-03-31T12:48:39Z","lastAt":"2020-05-15T22:57:54Z","messageCount":110,"participants":["Johannes Schindelin via GitGitGadget","Danh Doan","Junio C Hamano","Đoàn Trần Công Danh","SZEDER Gábor","Johannes Schindelin","Emily Shaffer","Elijah Newren","Carlo Marcelo Arenas Belón","Alban Gruin","Eric Sunshine"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"394412","messageId":"447ea0c2f6dc9403af3a8f0bae6c23f82bc96838.1585658913.git.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH 1/5] ci/lib: if CI type is unknown, show the environment variables","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:29Z","receivedAt":"2020-03-31T12:48:39Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis should help with adding new CI-specific if-else arms.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n ci/lib.sh | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex a90d0dc0fd2..8d73551a12f 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -138,6 +138,7 @@ then\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n+\tenv >&2\n \texit 1\n fi\n \n-- \ngitgitgadget\n\n"},{"id":"394413","messageId":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":null,"subject":"[PATCH 0/5] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:28Z","receivedAt":"2020-03-31T12:48:39Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Our Azure Pipeline has served us well over the course of the past year or\nso, steadily catching issues before the respective patches hit the next \nbranch.\n\nThere is a GitHub-native CI system now, though, called \"GitHub Actions\"\n[https://github.com/features/actions] which is essentially on par with Azure\nPipelines as far as our needs are concerned, and it brings a couple of\nadvantages:\n\n * It is substantially easier to set up than Azure Pipelines: all you need\n   is to add the YAML-based build definition, push to your fork on GitHub,\n   and that's it.\n * The syntax is a bit easier to read than Azure Pipelines'.\n * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n   jobs).\n\nWith this change, users also no longer need to open a PR at \nhttps://github.com/git/git or at https://github.com/gitgitgadget/git just to\nget the benefit of a CI build. They just push to their fork on GitHub and\nmonitor the build. Easier than making apple pie.\n\nThe only caveat is that this will only work once the patch series makes it\nto master. In the meantime, you can adore the CI build here: \nhttps://github.com/dscho/git/actions/runs/67349068\n\nJohannes Schindelin (5):\n  ci/lib: if CI type is unknown, show the environment variables\n  ci/lib: allow running in GitHub Actions\n  ci: configure GitHub Actions for CI/PR\n  README: add a build badge for the GitHub Actions runs\n  ci: retire the Azure Pipelines definition\n\n .github/workflows/main.yml | 271 ++++++++++++++++++\n README.md                  |   2 +-\n azure-pipelines.yml        | 558 -------------------------------------\n ci/lib.sh                  |  21 +-\n 4 files changed, 292 insertions(+), 560 deletions(-)\n create mode 100644 .github/workflows/main.yml\n delete mode 100644 azure-pipelines.yml\n\n\nbase-commit: 274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-743%2Fdscho%2Fgithub-actions-git.git-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-743/dscho/github-actions-git.git-v1\nPull-Request: https://github.com/git/git/pull/743\n-- \ngitgitgadget\n"},{"id":"394414","messageId":"a30419dca111d161b4f28b6ce55084654e02140c.1585658913.git.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH 4/5] README: add a build badge for the GitHub Actions runs","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:32Z","receivedAt":"2020-03-31T12:48:41Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex 9d4564c8aa1..e2e00ae2495 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,4 @@\n+[![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n [![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n-- \ngitgitgadget\n\n"},{"id":"394415","messageId":"d9227c87a7bb2872f6a69f48f6a4988f08545d8a.1585658913.git.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:30Z","receivedAt":"2020-03-31T12:48:43Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nFor each CI system we support, we need a specific arm in that if/else\nconstruct in ci/lib.sh. Let's add one for GitHub Actions.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n ci/lib.sh | 20 +++++++++++++++++++-\n 1 file changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 8d73551a12f..52e350496a3 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -34,7 +34,7 @@ save_good_tree () {\n # successfully before (e.g. because the branch got rebased, changing only\n # the commit messages).\n skip_good_tree () {\n-\tif test \"$TRAVIS_DEBUG_MODE\" = true\n+\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n \tthen\n \t\treturn\n \tfi\n@@ -136,6 +136,24 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows_nt != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+elif test true = \"$GITHUB_ACTIONS\"\n+then\n+\tCI_TYPE=github-actions\n+\tCI_BRANCH=\"$GITHUB_REF\"\n+\tCI_COMMIT=\"$GITHUB_SHA\"\n+\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n+\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n+\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n+\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n+\tCC=\"${CC:-gcc}\"\n+\n+\tcache_dir=\"$HOME/none\"\n+\n+\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n+\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n+\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n+\ttest windows != \"$CI_OS_NAME\" ||\n+\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \ngitgitgadget\n\n"},{"id":"394416","messageId":"1610b296064a8757dc159435fa49b1c59b6f05d7.1585658913.git.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH 5/5] ci: retire the Azure Pipelines definition","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:33Z","receivedAt":"2020-03-31T12:48:43Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWe have GitHub Actions now. Running the same builds and tests in Azure\nPipelines would be redundant, and a waste of energy.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n README.md           |   1 -\n azure-pipelines.yml | 558 --------------------------------------------\n 2 files changed, 559 deletions(-)\n delete mode 100644 azure-pipelines.yml\n\ndiff --git a/README.md b/README.md\nindex e2e00ae2495..eb8115e6b04 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,5 +1,4 @@\n [![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n =========================================================\ndiff --git a/azure-pipelines.yml b/azure-pipelines.yml\ndeleted file mode 100644\nindex 675c3a43c9c..00000000000\n--- a/azure-pipelines.yml\n+++ /dev/null\n@@ -1,558 +0,0 @@\n-variables:\n-  Agent.Source.Git.ShallowFetchDepth: 1\n-\n-jobs:\n-- job: windows_build\n-  displayName: Windows Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        ci/make-test-artifacts.sh artifacts\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Build\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: windows_test\n-  displayName: Windows Test\n-  dependsOn: windows_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude\n-\n-        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {\n-          ci/print-test-failures.sh\n-          exit 1\n-        }\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'windows'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: vs_build\n-  displayName: Visual Studio Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        make NDEBUG=1 DEVELOPER=1 vcxproj\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Generate Visual Studio Solution\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n-      Expand-Archive compat.zip -DestinationPath . -Force\n-      Remove-Item compat.zip\n-    displayName: 'Download vcpkg artifacts'\n-  - task: MSBuild@1\n-    inputs:\n-      solution: git.sln\n-      platform: x64\n-      configuration: Release\n-      maximumCpuCount: 4\n-      msbuildArguments: /p:PlatformToolset=v142\n-  - powershell: |\n-      & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n-      if (!$?) { exit(1) }\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        mkdir -p artifacts &&\n-        eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\\\"\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Bundle artifact tar\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      MSVC: 1\n-      VCPKG_ROOT: $(Build.SourcesDirectory)\\compat\\vcbuild\\vcpkg\n-  - powershell: |\n-      $tag = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-tag.txt\").content\n-      $version = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-version.txt\").content\n-      $url = \"https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe\"\n-      (New-Object Net.WebClient).DownloadFile($url,\"PortableGit.exe\")\n-      & .\\PortableGit.exe -y -oartifacts\\PortableGit\n-      # Wait until it is unpacked\n-      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }\n-    displayName: Download & extract portable Git\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: vs_test\n-  displayName: Visual Studio Test\n-  dependsOn: vs_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: VS test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - powershell: |\n-      & PortableGit\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /PortableGit/ /test-cache/ >>.git/info/exclude\n-\n-        cd t &&\n-        PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n-        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n-                `$(test-tool.exe path-utils slice-tests \\\n-                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'vs'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-vs-test-artifacts\n-\n-- job: linux_clang\n-  displayName: linux-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n-\n-       export CC=clang || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-clang'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_gcc\n-  displayName: linux-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-gcc'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_clang\n-  displayName: osx-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       export CC=clang\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-clang'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_gcc\n-  displayName: osx-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-gcc'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: gettext_poison\n-  displayName: GETTEXT_POISON\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&\n-\n-       export jobname=GETTEXT_POISON || exit 1\n-\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'gettext-poison'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux32\n-  displayName: Linux32\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'ci/run-linux32-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux32'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: static_analysis\n-  displayName: StaticAnalysis\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&\n-\n-       export jobname=StaticAnalysis &&\n-\n-       ci/run-static-analysis.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-static-analysis.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: documentation\n-  displayName: Documentation\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&\n-\n-       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&\n-       export jobname=Documentation &&\n-\n-       ci/test-documentation.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/test-documentation.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-- \ngitgitgadget\n"},{"id":"394417","messageId":"36621bdd31a53046450f73ed197585469b1a1b96.1585658913.git.gitgitgadget@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH 3/5] ci: configure GitHub Actions for CI/PR","fromName":"Johannes Schindelin via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2020-03-31T12:48:31Z","receivedAt":"2020-03-31T12:48:45Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis patch adds CI builds via GitHub Actions. While the underlying\ntechnology is at least _very_ similar to that of Azure Pipelines, GitHub\nActions are much easier to set up than Azure Pipelines: no need to\ninstall a GitHub App, no need to set up an Azure DevOps account, all you\nneed to do is push to your fork on GitHub.\n\nTherefore, it makes a lot of sense for us to have a working GitHub\nActions setup.\n\nWhile transmogrifying `azure-pipelines.yml` into\n`.github/workflows/main.yml`, we also use the opportunity to accelerate\nthe step that sets up a minimal subset of Git for Windows' SDK in the\nWindows-build job: we now download a `.tar.xz` stored in Azure Blobs and\nextract it simultaneously (by calling `curl` and piping the result to\n`tar`, decompressing via `xz`, all three utilities being available by\ngrace of using Git for Windows' Bash that is installed on the build\nagents). This accelerates that step from ~1m50s to ~7s.\n\nAlso, we do away with the parts that try to mount a file share on which\n`prove` can store data between runs. It is just too complicated to set\nup, so it's little return on investment there.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n .github/workflows/main.yml | 271 +++++++++++++++++++++++++++++++++++++\n 1 file changed, 271 insertions(+)\n create mode 100644 .github/workflows/main.yml\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nnew file mode 100644\nindex 00000000000..14025c8a7eb\n--- /dev/null\n+++ b/.github/workflows/main.yml\n@@ -0,0 +1,271 @@\n+name: CI/PR\n+\n+on: [push, pull_request]\n+\n+jobs:\n+  windows-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Build\n+      shell: powershell\n+      env:\n+        HOME: ${{runner.workspace}}\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+        printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/make-test-artifacts.sh artifacts\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: artifacts\n+  windows-test:\n+    runs-on: windows-latest\n+    needs: [windows-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: ${{github.workspace}}\n+    - name: Test\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz || exit 1\n+\n+          # Let Git ignore the SDK\n+          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/run-test-slice.sh ${{matrix.nr}} 10 || {\n+            ci/print-test-failures.sh\n+            exit 1\n+          }\n+        \"@\n+        if (!$?) { exit(1) }\n+  vs-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Generate Visual Studio Solution\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          make NDEBUG=1 DEVELOPER=1 vcxproj\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Download vcpkg artifacts\n+      shell: powershell\n+      run: |\n+        $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n+        $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n+        $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n+        (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n+        Expand-Archive compat.zip -DestinationPath . -Force\n+        Remove-Item compat.zip\n+    - name: Add msbuild to PATH\n+      uses: microsoft/setup-msbuild@v1.0.0\n+    - name: MSBuild\n+      run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n+    - name: Bundle artifact tar\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        MSVC: 1\n+        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+      run: |\n+        & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+        if (!$?) { exit(1) }\n+        & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          mkdir -p artifacts &&\n+          eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\\\"\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: artifacts\n+  vs-test:\n+    runs-on: windows-latest\n+    needs: [vs-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-64-portable\n+      shell: bash\n+      run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: ${{github.workspace}}\n+    - name: Test (parallel)\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        NO_SVN_TESTS: 1\n+        GIT_TEST_SKIP_REBASE_P: 1\n+      run: |\n+        & git-64-portable\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz || exit 1\n+\n+          # Let Git ignore the SDK and the test-cache\n+          printf '%s\\n' /git-64-portable/ /test-cache/ >>.git/info/exclude\n+\n+          cd t &&\n+          PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n+          test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n+                  `$(test-tool.exe path-utils slice-tests \\\n+                          ${{matrix.nr}} 10 t[0-9]*.sh)\n+        \"@\n+        if (!$?) { exit(1) }\n+  linux-clang:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-test.sh\n+      env:\n+        CC: clang\n+      run: |\n+        ci/run-build-and-tests.sh || {\n+          ci/print-test-failures.sh\n+          exit 1\n+        }\n+  linux-gcc:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: |\n+        ci/run-build-and-tests.sh || {\n+          ci/print-test-failures.sh\n+          exit 1\n+        }\n+  osx-clang:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        CC: clang\n+      run: |\n+        ci/run-build-and-tests.sh || {\n+          ci/print-test-failures.sh\n+          exit 1\n+        }\n+  osx-gcc:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: |\n+        ci/run-build-and-tests.sh || {\n+          ci/print-test-failures.sh\n+          exit 1\n+        }\n+  GETTEXT_POISON:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        jobname: GETTEXT_POISON\n+      run: |\n+        ci/run-build-and-tests.sh || {\n+          ci/print-test-failures.sh\n+          exit 1\n+        }\n+  linux32:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: ci/run-linux32-docker.sh\n+      run: |\n+        res=0\n+        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n+  static-analysis:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext\n+    - name: ci/run-static-analysis.sh\n+      env:\n+        jobname: StaticAnalysis\n+      run: ci/run-static-analysis.sh\n+  documentation:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns\n+    - name: ci/test-documentation.sh\n+      env:\n+        ALREADY_HAVE_ASCIIDOCTOR: yes.\n+        jobname: Documentation\n+      run: ci/test-documentation.sh\n-- \ngitgitgadget\n\n"},{"id":"394419","messageId":"20200331144648.GC15850@danh.dev","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"Re: [PATCH 0/5] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-03-31T14:46:48Z","receivedAt":"2020-03-31T14:46:56Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-03-31 12:48:28+0000, Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com> wrote:\n> Our Azure Pipeline has served us well over the course of the past year or\n> so, steadily catching issues before the respective patches hit the next \n> branch.\n> \n> There is a GitHub-native CI system now, though, called \"GitHub Actions\"\n> [https://github.com/features/actions] which is essentially on par with Azure\n> Pipelines as far as our needs are concerned, and it brings a couple of\n> advantages:\n> \n>  * It is substantially easier to set up than Azure Pipelines: all you need\n>    is to add the YAML-based build definition, push to your fork on GitHub,\n>    and that's it.\n>  * The syntax is a bit easier to read than Azure Pipelines'.\n>  * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n>    jobs).\n> \n> With this change, users also no longer need to open a PR at \n> https://github.com/git/git or at https://github.com/gitgitgadget/git just to\n> get the benefit of a CI build. They just push to their fork on GitHub and\n> monitor the build. Easier than making apple pie.\n> \n> The only caveat is that this will only work once the patch series makes it\n> to master.\n\nGithub Actions also works in other branches, at least in pu:\nhttps://github.com/sgn/git/runs/548975243?check_suite_focus=true\n\nAnyway, this series will conflicts with my series for linux-musl CI.\nAnd, Github Actions' Documentation job in pu failed because of missing\n\"curl-config\".\n\nAttached patches can be used to merge this series into pu.\n\n-- \nDanh\n\n\nFrom dfc8e913c9878a1b5a9e58d1c69884a1b7bd7864 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=\n <congdanhqx@gmail.com>\nDate: Tue, 31 Mar 2020 21:21:23 +0700\nSubject: [PATCH 1/2] github-actions: fixup to dd/musl-libc-travis-ci\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex 14025c8a7e..19e831c45e 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -240,10 +240,10 @@ jobs:\n     runs-on: ubuntu-latest\n     steps:\n     - uses: actions/checkout@v1\n-    - name: ci/run-linux32-docker.sh\n+    - name: jobname=Linux32 ci/run-docker.sh\n       run: |\n         res=0\n-        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n+        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n   static-analysis:\n     runs-on: ubuntu-latest\n     steps:\n-- \n2.26.0.334.g6536db25bb\n\n\n\nFrom 48d4247a8c70a6b99171a863a43fc40c925351b4 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=\n <congdanhqx@gmail.com>\nDate: Tue, 31 Mar 2020 21:23:16 +0700\nSubject: [PATCH 2/2] github-actions: enable linux-musl check\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 8 ++++++++\n 1 file changed, 8 insertions(+)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex 19e831c45e..2f7c77afad 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -236,6 +236,14 @@ jobs:\n           ci/print-test-failures.sh\n           exit 1\n         }\n+  linux-musl:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: jobname=linux-musl ci/run-docker.sh\n+      run: |\n+        res=0\n+        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1\n   linux32:\n     runs-on: ubuntu-latest\n     steps:\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394431","messageId":"xmqq8sjg745y.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200331144648.GC15850@danh.dev","subject":"Re: [PATCH 0/5] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-03-31T18:47:05Z","receivedAt":"2020-03-31T18:47:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Danh Doan <congdanhqx@gmail.com> writes:\n\n>> The only caveat is that this will only work once the patch series makes it\n>> to master.\n>\n> Github Actions also works in other branches, at least in pu:\n> https://github.com/sgn/git/runs/548975243?check_suite_focus=true\n>\n> Anyway, this series will conflicts with my series for linux-musl CI.\n> And, Github Actions' Documentation job in pu failed because of missing\n> \"curl-config\".\n>\n> Attached patches can be used to merge this series into pu.\n\nPlease work together to have either one of them build on the other.\nThanks.\n\n\n"},{"id":"394496","messageId":"27cb77c257e717aba3386505d70d4cc93cdf13fa.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 1/6] ci/lib: if CI type is unknown, show the environment variables","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:03Z","receivedAt":"2020-04-01T15:55:35Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis should help with adding new CI-specific if-else arms.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex c3a8cd2104..766da75063 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -138,6 +138,7 @@ then\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n+\tenv >&2\n \texit 1\n fi\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394497","messageId":"cover.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH v2 0/6] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:02Z","receivedAt":"2020-04-01T15:55:35Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This series is based on work started by Dscho,\nI started to work with this series since there're merge conflicts\nwith my series at dd/ci-musl-lib, and Dscho said he was busy for a while.\n\nChanges frome Dscho's version:\n* Based on dd/ci-musl-libc\n* Move artifact extraction out of Test phase of windows-test\n* Move ci/print-test-failures.sh out of build-and-test phase\n* set TERM environment variable if not exist\n* add linux-musl job\n* v1 doesn't report failure on linux32, fixed\n* run linux32 directly inside container\n* install development file of curl in documentation job because \"curl-config\"\n  will be called in pu's Makefile\n  + Other approach could be call make CURL_CONFIG=: in test-documentation.sh\n\nSample run:\n* of this series: https://github.com/sgn/git/actions/runs/68291472\n* pretend compile failure: https://github.com/sgn/git/actions/runs/68292112\n* pretend test failure: https://github.com/sgn/git/actions/runs/68293056\n* merged to pu: https://github.com/sgn/git/actions/runs/68301122\n\n\nJohannes Schindelin (4):\n  ci/lib: if CI type is unknown, show the environment variables\n  ci/lib: allow running in GitHub Actions\n  README: add a build badge for the GitHub Actions runs\n  ci: retire the Azure Pipelines definition\n\nĐoàn Trần Công Danh (2):\n  ci/lib: set TERM environment variable if not exist\n  ci: configure GitHub Actions for CI/PR\n\n .github/workflows/main.yml | 314 ++++++++++++++++++++\n README.md                  |   2 +-\n azure-pipelines.yml        | 593 -------------------------------------\n ci/lib.sh                  |  24 +-\n 4 files changed, 338 insertions(+), 595 deletions(-)\n create mode 100644 .github/workflows/main.yml\n delete mode 100644 azure-pipelines.yml\n\nRange-diff against v1:\n1:  64d61c3e38 ! 1:  27cb77c257 ci/lib: if CI type is unknown, show the environment variables\n    @@ Commit message\n         This should help with adding new CI-specific if-else arms.\n     \n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n    -    Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## ci/lib.sh ##\n     @@ ci/lib.sh: then\n2:  4a0ec072cc ! 2:  079038c4a7 ci/lib: allow running in GitHub Actions\n    @@ Commit message\n         construct in ci/lib.sh. Let's add one for GitHub Actions.\n     \n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n    -    Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## ci/lib.sh ##\n     @@ ci/lib.sh: save_good_tree () {\n-:  ---------- > 3:  f9d0b6b0d5 ci/lib: set TERM environment variable if not exist\n3:  e33653fdf0 ! 4:  fb714f5889 ci: configure GitHub Actions for CI/PR\n    @@\n      ## Metadata ##\n    -Author: Johannes Schindelin <Johannes.Schindelin@gmx.de>\n    +Author: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## Commit message ##\n         ci: configure GitHub Actions for CI/PR\n     \n         This patch adds CI builds via GitHub Actions. While the underlying\n         technology is at least _very_ similar to that of Azure Pipelines, GitHub\n    -    Actions are much easier to set up than Azure Pipelines: no need to\n    -    install a GitHub App, no need to set up an Azure DevOps account, all you\n    -    need to do is push to your fork on GitHub.\n    +    Actions are much easier to set up than Azure Pipelines:\n    +    - no need to install a GitHub App,\n    +    - no need to set up an Azure DevOps account,\n    +    - all you need to do is push to your fork on GitHub.\n     \n         Therefore, it makes a lot of sense for us to have a working GitHub\n         Actions setup.\n     \n    -    While transmogrifying `azure-pipelines.yml` into\n    +    While translate-and-modify `azure-pipelines.yml` into\n         `.github/workflows/main.yml`, we also use the opportunity to accelerate\n         the step that sets up a minimal subset of Git for Windows' SDK in the\n    -    Windows-build job: we now download a `.tar.xz` stored in Azure Blobs and\n    -    extract it simultaneously (by calling `curl` and piping the result to\n    -    `tar`, decompressing via `xz`, all three utilities being available by\n    -    grace of using Git for Windows' Bash that is installed on the build\n    -    agents). This accelerates that step from ~1m50s to ~7s.\n    +    Windows-build job:\n    +    - we now download a `.tar.xz` stored in Azure Blobs and extract it\n    +    simultaneously (by calling `curl` and piping the result to `tar`,\n    +    - decompressing via `xz`,\n    +    - all three utilities are installed together with Git for Windows\n     \n         Also, we do away with the parts that try to mount a file share on which\n         `prove` can store data between runs. It is just too complicated to set\n         up, so it's little return on investment there.\n     \n    +    Based-on-patch-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n    @@ .github/workflows/main.yml (new)\n     +      with:\n     +        name: windows-artifacts\n     +        path: ${{github.workspace}}\n    -+    - name: Test\n    ++    - name: extract artifact\n     +      shell: powershell\n     +      run: |\n     +        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n    @@ .github/workflows/main.yml (new)\n     +            echo No test artifacts found\\; skipping >&2\n     +            exit 0\n     +          }\n    -+          tar xf artifacts.tar.gz || exit 1\n    -+\n    ++          tar xf artifacts.tar.gz\n    ++        \"@\n    ++        if (!$?) { exit(1) }\n    ++    - name: Test\n    ++      shell: powershell\n    ++      run: |\n    ++        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n     +          # Let Git ignore the SDK\n     +          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n     +\n    -+          ci/run-test-slice.sh ${{matrix.nr}} 10 || {\n    -+            ci/print-test-failures.sh\n    -+            exit 1\n    -+          }\n    ++          ci/run-test-slice.sh ${{matrix.nr}} 10\n     +        \"@\n     +        if (!$?) { exit(1) }\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n    ++      shell: powershell\n    ++      run: |\n    ++        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n    ++        exit(1)\n     +  vs-build:\n     +    runs-on: windows-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +    - name: ci/run-build-and-test.sh\n     +      env:\n     +        CC: clang\n    ++      run: ci/run-build-and-tests.sh\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n    ++      env:\n    ++        CC: clang\n     +      run: |\n    -+        ci/run-build-and-tests.sh || {\n    -+          ci/print-test-failures.sh\n    -+          exit 1\n    -+        }\n    ++        ci/print-test-failures.sh\n    ++        exit 1\n     +  linux-gcc:\n     +    runs-on: ubuntu-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n     +        ci/install-dependencies.sh\n     +    - name: ci/run-build-and-tests.sh\n    ++      run: ci/run-build-and-tests.sh\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n     +      run: |\n    -+        ci/run-build-and-tests.sh || {\n    -+          ci/print-test-failures.sh\n    -+          exit 1\n    -+        }\n    ++        ci/print-test-failures.sh\n    ++        exit 1\n     +  osx-clang:\n     +    runs-on: macos-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +      env:\n     +        CC: clang\n     +      run: ci/install-dependencies.sh\n    -+    - name: ci/run-build-and-tests.sh\n    ++    - name: ci/run-build-and-test.sh\n    ++      env:\n    ++        CC: clang\n    ++      run: ci/run-build-and-tests.sh\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n     +      env:\n     +        CC: clang\n     +      run: |\n    -+        ci/run-build-and-tests.sh || {\n    -+          ci/print-test-failures.sh\n    -+          exit 1\n    -+        }\n    ++        ci/print-test-failures.sh\n    ++        exit 1\n     +  osx-gcc:\n     +    runs-on: macos-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +    - name: install dependencies\n     +      run: ci/install-dependencies.sh\n     +    - name: ci/run-build-and-tests.sh\n    ++      run: ci/run-build-and-tests.sh\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n     +      run: |\n    -+        ci/run-build-and-tests.sh || {\n    -+          ci/print-test-failures.sh\n    -+          exit 1\n    -+        }\n    ++        ci/print-test-failures.sh\n    ++        exit 1\n     +  GETTEXT_POISON:\n     +    runs-on: ubuntu-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +    - name: ci/run-build-and-tests.sh\n     +      env:\n     +        jobname: GETTEXT_POISON\n    ++      run: ci/run-build-and-tests.sh\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n    ++      env:\n    ++        jobname: GETTEXT_POISON\n     +      run: |\n    -+        ci/run-build-and-tests.sh || {\n    -+          ci/print-test-failures.sh\n    -+          exit 1\n    -+        }\n    -+  linux32:\n    ++        ci/print-test-failures.sh\n    ++        exit 1\n    ++  linux-musl:\n     +    runs-on: ubuntu-latest\n    ++    container: alpine\n     +    steps:\n     +    - uses: actions/checkout@v1\n    -+    - name: ci/run-linux32-docker.sh\n    ++    - name: install additional dependencies\n    ++      run: apk add --update ncurses perl-utils\n    ++    - name: prepare /usr/src/git\n     +      run: |\n    -+        res=0\n    -+        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n    ++        mkdir -p /usr/src &&\n    ++        rm -rf /usr/src/git &&\n    ++        ln -sf $(pwd) /usr/src/git\n    ++    - name: ci/run-alpine-build.sh\n    ++      run: ci/run-alpine-build.sh $(id -u)\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n    ++      run: ci/print-test-failures.sh\n    ++  linux32:\n    ++    runs-on: ubuntu-latest\n    ++    container: daald/ubuntu32:xenial\n    ++    steps:\n    ++    - uses: actions/checkout@v1\n    ++    - name: prepare /usr/src/git\n    ++      run:\n    ++        mkdir -p /usr/src &&\n    ++        rm -rf /usr/src/git &&\n    ++        ln -sf $(pwd) /usr/src/git\n    ++    - name: ci/run-linux32-build.sh\n    ++      run: ci/run-linux32-build.sh $(id -u)\n    ++    - name: ci/print-test-failures.sh\n    ++      if: failure()\n    ++      run: ci/print-test-failures.sh\n     +  static-analysis:\n     +    runs-on: ubuntu-latest\n     +    steps:\n    @@ .github/workflows/main.yml (new)\n     +    - name: install dependencies\n     +      run: |\n     +        sudo apt-get update &&\n    -+        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns\n    ++        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns libcurl4-openssl-dev\n     +    - name: ci/test-documentation.sh\n     +      env:\n     +        ALREADY_HAVE_ASCIIDOCTOR: yes.\n4:  c4f7338184 ! 5:  4310a7c9d6 README: add a build badge for the GitHub Actions runs\n    @@ Commit message\n         README: add a build badge for the GitHub Actions runs\n     \n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n    -    Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## README.md ##\n     @@\n5:  9598f73435 ! 6:  2451d4991f ci: retire the Azure Pipelines definition\n    @@ Commit message\n         Pipelines would be redundant, and a waste of energy.\n     \n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n    +    [Danh: fix apply conflicts]\n         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## README.md ##\n    @@ azure-pipelines.yml (deleted)\n     -       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n     -\n     -       res=0\n    --       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n    +-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n     -\n     -       sudo chmod a+r t/out/TEST-*.xml\n     -       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n     -\n     -       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n     -       exit $res\n    --    displayName: 'ci/run-linux32-docker.sh'\n    +-    displayName: 'jobname=Linux32 ci/run-docker.sh'\n     -    env:\n     -      GITFILESHAREPWD: $(gitfileshare.pwd)\n     -  - task: PublishTestResults@2\n    @@ azure-pipelines.yml (deleted)\n     -      PathtoPublish: t/failed-test-artifacts\n     -      ArtifactName: failed-test-artifacts\n     -\n    +-- job: linux_musl\n    +-  displayName: linux-musl\n    +-  condition: succeeded()\n    +-  pool:\n    +-    vmImage: ubuntu-latest\n    +-  steps:\n    +-  - bash: |\n    +-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n    +-\n    +-       res=0\n    +-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1\n    +-\n    +-       sudo chmod a+r t/out/TEST-*.xml\n    +-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n    +-\n    +-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n    +-       exit $res\n    +-    displayName: 'jobname=linux-musl ci/run-docker.sh'\n    +-    env:\n    +-      GITFILESHAREPWD: $(gitfileshare.pwd)\n    +-  - task: PublishTestResults@2\n    +-    displayName: 'Publish Test Results **/TEST-*.xml'\n    +-    inputs:\n    +-      mergeTestResults: true\n    +-      testRunTitle: 'musl'\n    +-      platform: Linux\n    +-      publishRunAttachments: false\n    +-    condition: succeededOrFailed()\n    +-  - task: PublishBuildArtifacts@1\n    +-    displayName: 'Publish trash directories of failed tests'\n    +-    condition: failed()\n    +-    inputs:\n    +-      PathtoPublish: t/failed-test-artifacts\n    +-      ArtifactName: failed-test-artifacts\n    +-\n     -- job: static_analysis\n     -  displayName: StaticAnalysis\n     -  condition: succeeded()\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394498","messageId":"079038c4a7599d269ffa8286d25c0baeb8426b62.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 2/6] ci/lib: allow running in GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:04Z","receivedAt":"2020-04-01T15:55:37Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nFor each CI system we support, we need a specific arm in that if/else\nconstruct in ci/lib.sh. Let's add one for GitHub Actions.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 20 +++++++++++++++++++-\n 1 file changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 766da75063..d2fe02083f 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -34,7 +34,7 @@ save_good_tree () {\n # successfully before (e.g. because the branch got rebased, changing only\n # the commit messages).\n skip_good_tree () {\n-\tif test \"$TRAVIS_DEBUG_MODE\" = true\n+\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n \tthen\n \t\treturn\n \tfi\n@@ -136,6 +136,24 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows_nt != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+elif test true = \"$GITHUB_ACTIONS\"\n+then\n+\tCI_TYPE=github-actions\n+\tCI_BRANCH=\"$GITHUB_REF\"\n+\tCI_COMMIT=\"$GITHUB_SHA\"\n+\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n+\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n+\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n+\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n+\tCC=\"${CC:-gcc}\"\n+\n+\tcache_dir=\"$HOME/none\"\n+\n+\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n+\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n+\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n+\ttest windows != \"$CI_OS_NAME\" ||\n+\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394499","messageId":"f9d0b6b0d55b79c075d9c4860f8cdfd636edd5da.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 3/6] ci/lib: set TERM environment variable if not exist","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:05Z","receivedAt":"2020-04-01T15:55:38Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"GitHub Action doesn't set TERM environment variable, which is required\nby \"tput\".\n\nFallback to dumb if it's not set.\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex d2fe02083f..c605695e38 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -79,6 +79,9 @@ check_unignored_build_artifacts ()\n \t}\n }\n \n+# GitHub Action doesn't set TERM, which is required by tput\n+export TERM=${TERM:-dumb}\n+\n # Clear MAKEFLAGS that may come from the outside world.\n export MAKEFLAGS=\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394500","messageId":"4310a7c9d6062e10a74ff8910a6abc1a7806eabd.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 5/6] README: add a build badge for the GitHub Actions runs","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:07Z","receivedAt":"2020-04-01T15:55:41Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex 9d4564c8aa..e2e00ae249 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,4 @@\n+[![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n [![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394501","messageId":"fb714f588950c800feab094327fa1db92c47ba08.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 4/6] ci: configure GitHub Actions for CI/PR","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:06Z","receivedAt":"2020-04-01T15:55:43Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This patch adds CI builds via GitHub Actions. While the underlying\ntechnology is at least _very_ similar to that of Azure Pipelines, GitHub\nActions are much easier to set up than Azure Pipelines:\n- no need to install a GitHub App,\n- no need to set up an Azure DevOps account,\n- all you need to do is push to your fork on GitHub.\n\nTherefore, it makes a lot of sense for us to have a working GitHub\nActions setup.\n\nWhile translate-and-modify `azure-pipelines.yml` into\n`.github/workflows/main.yml`, we also use the opportunity to accelerate\nthe step that sets up a minimal subset of Git for Windows' SDK in the\nWindows-build job:\n- we now download a `.tar.xz` stored in Azure Blobs and extract it\nsimultaneously (by calling `curl` and piping the result to `tar`,\n- decompressing via `xz`,\n- all three utilities are installed together with Git for Windows\n\nAlso, we do away with the parts that try to mount a file share on which\n`prove` can store data between runs. It is just too complicated to set\nup, so it's little return on investment there.\n\nBased-on-patch-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 314 +++++++++++++++++++++++++++++++++++++\n 1 file changed, 314 insertions(+)\n create mode 100644 .github/workflows/main.yml\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nnew file mode 100644\nindex 0000000000..f9e4b749a1\n--- /dev/null\n+++ b/.github/workflows/main.yml\n@@ -0,0 +1,314 @@\n+name: CI/PR\n+\n+on: [push, pull_request]\n+\n+jobs:\n+  windows-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Build\n+      shell: powershell\n+      env:\n+        HOME: ${{runner.workspace}}\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+        printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/make-test-artifacts.sh artifacts\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: artifacts\n+  windows-test:\n+    runs-on: windows-latest\n+    needs: [windows-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract artifact\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Test\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK\n+          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/run-test-slice.sh ${{matrix.nr}} 10\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+        exit(1)\n+  vs-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Generate Visual Studio Solution\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          make NDEBUG=1 DEVELOPER=1 vcxproj\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Download vcpkg artifacts\n+      shell: powershell\n+      run: |\n+        $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n+        $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n+        $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n+        (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n+        Expand-Archive compat.zip -DestinationPath . -Force\n+        Remove-Item compat.zip\n+    - name: Add msbuild to PATH\n+      uses: microsoft/setup-msbuild@v1.0.0\n+    - name: MSBuild\n+      run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n+    - name: Bundle artifact tar\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        MSVC: 1\n+        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+      run: |\n+        & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+        if (!$?) { exit(1) }\n+        & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          mkdir -p artifacts &&\n+          eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\\\"\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: artifacts\n+  vs-test:\n+    runs-on: windows-latest\n+    needs: [vs-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-64-portable\n+      shell: bash\n+      run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: ${{github.workspace}}\n+    - name: Test (parallel)\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        NO_SVN_TESTS: 1\n+        GIT_TEST_SKIP_REBASE_P: 1\n+      run: |\n+        & git-64-portable\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz || exit 1\n+\n+          # Let Git ignore the SDK and the test-cache\n+          printf '%s\\n' /git-64-portable/ /test-cache/ >>.git/info/exclude\n+\n+          cd t &&\n+          PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n+          test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n+                  `$(test-tool.exe path-utils slice-tests \\\n+                          ${{matrix.nr}} 10 t[0-9]*.sh)\n+        \"@\n+        if (!$?) { exit(1) }\n+  linux-clang:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-test.sh\n+      env:\n+        CC: clang\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        CC: clang\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  linux-gcc:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  osx-clang:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-test.sh\n+      env:\n+        CC: clang\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        CC: clang\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  osx-gcc:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  GETTEXT_POISON:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        jobname: GETTEXT_POISON\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        jobname: GETTEXT_POISON\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  linux-musl:\n+    runs-on: ubuntu-latest\n+    container: alpine\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install additional dependencies\n+      run: apk add --update ncurses perl-utils\n+    - name: prepare /usr/src/git\n+      run: |\n+        mkdir -p /usr/src &&\n+        rm -rf /usr/src/git &&\n+        ln -sf $(pwd) /usr/src/git\n+    - name: ci/run-alpine-build.sh\n+      run: ci/run-alpine-build.sh $(id -u)\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: ci/print-test-failures.sh\n+  linux32:\n+    runs-on: ubuntu-latest\n+    container: daald/ubuntu32:xenial\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: prepare /usr/src/git\n+      run:\n+        mkdir -p /usr/src &&\n+        rm -rf /usr/src/git &&\n+        ln -sf $(pwd) /usr/src/git\n+    - name: ci/run-linux32-build.sh\n+      run: ci/run-linux32-build.sh $(id -u)\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: ci/print-test-failures.sh\n+  static-analysis:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext\n+    - name: ci/run-static-analysis.sh\n+      env:\n+        jobname: StaticAnalysis\n+      run: ci/run-static-analysis.sh\n+  documentation:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns libcurl4-openssl-dev\n+    - name: ci/test-documentation.sh\n+      env:\n+        ALREADY_HAVE_ASCIIDOCTOR: yes.\n+        jobname: Documentation\n+      run: ci/test-documentation.sh\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394502","messageId":"2451d4991fdc3235abc8f8dd3dca377ac1079808.1585756350.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v2 6/6] ci: retire the Azure Pipelines definition","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-01T15:55:08Z","receivedAt":"2020-04-01T15:55:45Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWe have GitHub Actions now. Running the same builds and tests in Azure\nPipelines would be redundant, and a waste of energy.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n[Danh: fix apply conflicts]\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md           |   1 -\n azure-pipelines.yml | 593 --------------------------------------------\n 2 files changed, 594 deletions(-)\n delete mode 100644 azure-pipelines.yml\n\ndiff --git a/README.md b/README.md\nindex e2e00ae249..eb8115e6b0 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,5 +1,4 @@\n [![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n =========================================================\ndiff --git a/azure-pipelines.yml b/azure-pipelines.yml\ndeleted file mode 100644\nindex 84ecad76ec..0000000000\n--- a/azure-pipelines.yml\n+++ /dev/null\n@@ -1,593 +0,0 @@\n-variables:\n-  Agent.Source.Git.ShallowFetchDepth: 1\n-\n-jobs:\n-- job: windows_build\n-  displayName: Windows Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        ci/make-test-artifacts.sh artifacts\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Build\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: windows_test\n-  displayName: Windows Test\n-  dependsOn: windows_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude\n-\n-        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {\n-          ci/print-test-failures.sh\n-          exit 1\n-        }\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'windows'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: vs_build\n-  displayName: Visual Studio Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        make NDEBUG=1 DEVELOPER=1 vcxproj\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Generate Visual Studio Solution\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n-      Expand-Archive compat.zip -DestinationPath . -Force\n-      Remove-Item compat.zip\n-    displayName: 'Download vcpkg artifacts'\n-  - task: MSBuild@1\n-    inputs:\n-      solution: git.sln\n-      platform: x64\n-      configuration: Release\n-      maximumCpuCount: 4\n-      msbuildArguments: /p:PlatformToolset=v142\n-  - powershell: |\n-      & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n-      if (!$?) { exit(1) }\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        mkdir -p artifacts &&\n-        eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\\\"\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Bundle artifact tar\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      MSVC: 1\n-      VCPKG_ROOT: $(Build.SourcesDirectory)\\compat\\vcbuild\\vcpkg\n-  - powershell: |\n-      $tag = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-tag.txt\").content\n-      $version = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-version.txt\").content\n-      $url = \"https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe\"\n-      (New-Object Net.WebClient).DownloadFile($url,\"PortableGit.exe\")\n-      & .\\PortableGit.exe -y -oartifacts\\PortableGit\n-      # Wait until it is unpacked\n-      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }\n-    displayName: Download & extract portable Git\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: vs_test\n-  displayName: Visual Studio Test\n-  dependsOn: vs_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: VS test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - powershell: |\n-      & PortableGit\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /PortableGit/ /test-cache/ >>.git/info/exclude\n-\n-        cd t &&\n-        PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n-        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n-                `$(test-tool.exe path-utils slice-tests \\\n-                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'vs'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-vs-test-artifacts\n-\n-- job: linux_clang\n-  displayName: linux-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n-\n-       export CC=clang || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-clang'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_gcc\n-  displayName: linux-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-gcc'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_clang\n-  displayName: osx-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       export CC=clang\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-clang'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_gcc\n-  displayName: osx-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-gcc'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: gettext_poison\n-  displayName: GETTEXT_POISON\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&\n-\n-       export jobname=GETTEXT_POISON || exit 1\n-\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'gettext-poison'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux32\n-  displayName: Linux32\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=Linux32 ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux32'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_musl\n-  displayName: linux-musl\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=linux-musl ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'musl'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: static_analysis\n-  displayName: StaticAnalysis\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&\n-\n-       export jobname=StaticAnalysis &&\n-\n-       ci/run-static-analysis.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-static-analysis.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: documentation\n-  displayName: Documentation\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&\n-\n-       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&\n-       export jobname=Documentation &&\n-\n-       ci/test-documentation.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/test-documentation.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394528","messageId":"xmqq7dyy6gui.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"Re: [PATCH v2 0/6] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-01T21:23:01Z","receivedAt":"2020-04-01T21:23:11Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:\n\n> This series is based on work started by Dscho,\n> I started to work with this series since there're merge conflicts\n> with my series at dd/ci-musl-lib, and Dscho said he was busy for a while.\n>\n> Changes frome Dscho's version:\n> * Based on dd/ci-musl-libc\n> * Move artifact extraction out of Test phase of windows-test\n> * Move ci/print-test-failures.sh out of build-and-test phase\n> * set TERM environment variable if not exist\n> * add linux-musl job\n> * v1 doesn't report failure on linux32, fixed\n> * run linux32 directly inside container\n> * install development file of curl in documentation job because \"curl-config\"\n>   will be called in pu's Makefile\n>   + Other approach could be call make CURL_CONFIG=: in test-documentation.sh\n>\n> Sample run:\n> * of this series: https://github.com/sgn/git/actions/runs/68291472\n> * pretend compile failure: https://github.com/sgn/git/actions/runs/68292112\n> * pretend test failure: https://github.com/sgn/git/actions/runs/68293056\n> * merged to pu: https://github.com/sgn/git/actions/runs/68301122\n\nWhen I look at\n\n    https://github.com/git/git/actions\n\nit appears that every time I push[*1*], we are running _two_ sets of\nthe same tests, one says \"Pu nu bu?\" and the other says \"CI/PR\".\n\nIn addition, the former refers to \"Pull request #nnn synchronize by\ngitster\", with #nnn part made clickable, but clicking on it results\nin 404 page, as there is no such pull request.\n\nDoes this series need some help from me (i.e. changing my workflow)\nto make the CI tests run more smoothly?\n\nThanks.\n\n\n[Footnote] \n\n*1* I always push to github.com/git/git and github.com/gitster/git\nalmost at the same time---the latter has all the topics that gets\nmerged to 'pu' separated out.  But the latter push does not say\nanything about anybody asking to anybody else to pull anything.\n"},{"id":"394536","messageId":"20200402001408.GA2764@danh.dev","threadId":"53143","inReplyTo":"xmqq7dyy6gui.fsf@gitster.c.googlers.com","subject":"Re: [PATCH v2 0/6] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T00:14:08Z","receivedAt":"2020-04-02T00:14:14Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-01 14:23:01-0700, Junio C Hamano <gitster@pobox.com> wrote:\n> Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:\n> \n> > This series is based on work started by Dscho,\n> > I started to work with this series since there're merge conflicts\n> > with my series at dd/ci-musl-lib, and Dscho said he was busy for a while.\n> >\n> > Changes frome Dscho's version:\n> > * Based on dd/ci-musl-libc\n> > * Move artifact extraction out of Test phase of windows-test\n> > * Move ci/print-test-failures.sh out of build-and-test phase\n> > * set TERM environment variable if not exist\n> > * add linux-musl job\n> > * v1 doesn't report failure on linux32, fixed\n> > * run linux32 directly inside container\n> > * install development file of curl in documentation job because \"curl-config\"\n> >   will be called in pu's Makefile\n> >   + Other approach could be call make CURL_CONFIG=: in test-documentation.sh\n> >\n> > Sample run:\n> > * of this series: https://github.com/sgn/git/actions/runs/68291472\n> > * pretend compile failure: https://github.com/sgn/git/actions/runs/68292112\n> > * pretend test failure: https://github.com/sgn/git/actions/runs/68293056\n> > * merged to pu: https://github.com/sgn/git/actions/runs/68301122\n> \n> When I look at\n> \n>     https://github.com/git/git/actions\n> \n> it appears that every time I push[*1*], we are running _two_ sets of\n> the same tests, one says \"Pu nu bu?\" and the other says \"CI/PR\".\n> \n> In addition, the former refers to \"Pull request #nnn synchronize by\n> gitster\", with #nnn part made clickable, but clicking on it results\n> in 404 page, as there is no such pull request.\n> \n> Does this series need some help from me (i.e. changing my workflow)\n> to make the CI tests run more smoothly?\n\nI suspect there is a github Pull Request #738 (merging pu to master) in\nprivate mode because it's what reported by Github actions.\n\nIt seems like the last 2 pushes to pu doesn't trigger it anymore?\n\nIf the problem still persists,\nI think either you or Dscho can login to github and see what is there.\n\n\n-- \nDanh\n"},{"id":"394574","messageId":"cover.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585756350.git.congdanhqx@gmail.com","subject":"[PATCH v3 0/6] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:54Z","receivedAt":"2020-04-02T13:17:25Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This series is based on work started by Dscho,\nI started to work with this series since there're merge conflicts\nwith my series at dd/ci-musl-lib, and Dscho said he was busy for a while.\n\nChanges from v3:\n* Base on v3 of dd/ci-musl-libc (submited)\n* linux32 and linux-musl jobs' structure is the same with linux-gcc and\n  linux-clang, they will be run inside container instead of vm:\n  + they will install dependencies in separate step by common script\n  + they will run ci/run-build-and-tests\n* StaticAnalysis job will use ci/install-dependencies to install\n\nChanges in v2 frome Dscho's version:\n* Based on dd/ci-musl-libc\n* Move artifact extraction out of Test phase of windows-test\n* Move ci/print-test-failures.sh out of build-and-test phase\n* set TERM environment variable if not exist\n* add linux-musl job\n* v1 doesn't report failure on linux32, fixed\n* run linux32 directly inside container\n* install development file of curl in documentation job because \"curl-config\"\n  will be called in pu's Makefile\n  + Other approach could be call make CURL_CONFIG=: in test-documentation.sh\n\nSample run without busybox fix:\nhttps://github.com/sgn/git/actions/runs/69030441\n\nMerged into old pu:\nhttps://github.com/sgn/git/actions/runs/69048780\n\nJohannes Schindelin (4):\n  ci/lib: if CI type is unknown, show the environment variables\n  ci/lib: allow running in GitHub Actions\n  README: add a build badge for the GitHub Actions runs\n  ci: retire the Azure Pipelines definition\n\nĐoàn Trần Công Danh (2):\n  ci/lib: set TERM environment variable if not exist\n  ci: configure GitHub Actions for CI/PR\n\n .github/workflows/main.yml | 314 ++++++++++++++++++++\n README.md                  |   2 +-\n azure-pipelines.yml        | 593 -------------------------------------\n ci/lib.sh                  |  24 +-\n 4 files changed, 338 insertions(+), 595 deletions(-)\n create mode 100644 .github/workflows/main.yml\n delete mode 100644 azure-pipelines.yml\n\nRange-diff against v2:\n1:  4cc17cfe43 = 1:  3f9f1c6335 ci/lib: if CI type is unknown, show the environment variables\n2:  e7e52d5d4c = 2:  7a4f646bc1 ci/lib: allow running in GitHub Actions\n3:  043f6be3ee = 3:  9a03c0844c ci/lib: set TERM environment variable if not exist\n4:  834b0f73b0 ! 4:  7308199e24 ci: configure GitHub Actions for CI/PR\n    @@ .github/workflows/main.yml (new)\n     +    container: alpine\n     +    steps:\n     +    - uses: actions/checkout@v1\n    -+    - name: install additional dependencies\n    -+      run: apk add --update ncurses perl-utils\n    -+    - name: prepare /usr/src/git\n    -+      run: |\n    -+        mkdir -p /usr/src &&\n    -+        rm -rf /usr/src/git &&\n    -+        ln -sf $(pwd) /usr/src/git\n    -+    - name: ci/run-alpine-build.sh\n    -+      run: ci/run-alpine-build.sh $(id -u)\n    ++    - name: install dependencies\n    ++      env:\n    ++        jobname: linux-musl\n    ++      run: ci/install-docker-dependencies.sh\n    ++    - name: ci/run-build-and-tests.sh\n    ++      env:\n    ++        jobname: linux-musl\n    ++      run: ci/run-build-and-tests.sh\n     +    - name: ci/print-test-failures.sh\n     +      if: failure()\n     +      run: ci/print-test-failures.sh\n    @@ .github/workflows/main.yml (new)\n     +    container: daald/ubuntu32:xenial\n     +    steps:\n     +    - uses: actions/checkout@v1\n    -+    - name: prepare /usr/src/git\n    -+      run:\n    -+        mkdir -p /usr/src &&\n    -+        rm -rf /usr/src/git &&\n    -+        ln -sf $(pwd) /usr/src/git\n    -+    - name: ci/run-linux32-build.sh\n    -+      run: ci/run-linux32-build.sh $(id -u)\n    ++    - name: install dependencies\n    ++      env:\n    ++        jobname: Linux32\n    ++      run: ci/install-docker-dependencies.sh\n    ++    - name: ci/run-build-and-tests.sh\n    ++      env:\n    ++        jobname: Linux32\n    ++      run: ci/run-build-and-tests.sh\n     +    - name: ci/print-test-failures.sh\n     +      if: failure()\n     +      run: ci/print-test-failures.sh\n    @@ .github/workflows/main.yml (new)\n     +    steps:\n     +    - uses: actions/checkout@v1\n     +    - name: install dependencies\n    -+      run: |\n    -+        sudo apt-get update &&\n    -+        sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext\n    ++      env:\n    ++        jobname: StaticAnalysis\n    ++      run: ci/install-dependencies.sh\n     +    - name: ci/run-static-analysis.sh\n     +      env:\n     +        jobname: StaticAnalysis\n5:  0d14645c32 = 5:  365ba5e831 README: add a build badge for the GitHub Actions runs\n6:  87abc123b0 = 6:  53094612d3 ci: retire the Azure Pipelines definition\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394575","messageId":"3f9f1c6335d95cc8120697cf7293a7a755b1abb1.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 1/6] ci/lib: if CI type is unknown, show the environment variables","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:55Z","receivedAt":"2020-04-02T13:17:30Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis should help with adding new CI-specific if-else arms.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 87cd29bab6..bda746df68 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -138,6 +138,7 @@ then\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n+\tenv >&2\n \texit 1\n fi\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394576","messageId":"9a03c0844cf0595d611a0df32c8777ca51ab6fe2.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 3/6] ci/lib: set TERM environment variable if not exist","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:57Z","receivedAt":"2020-04-02T13:17:33Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"GitHub Action doesn't set TERM environment variable, which is required\nby \"tput\".\n\nFallback to dumb if it's not set.\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex f92e3a5211..40b159e24d 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -79,6 +79,9 @@ check_unignored_build_artifacts ()\n \t}\n }\n \n+# GitHub Action doesn't set TERM, which is required by tput\n+export TERM=${TERM:-dumb}\n+\n # Clear MAKEFLAGS that may come from the outside world.\n export MAKEFLAGS=\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394577","messageId":"7a4f646bc1640ffabc5dd01d8c210ce5086d4eb1.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 2/6] ci/lib: allow running in GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:56Z","receivedAt":"2020-04-02T13:17:34Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nFor each CI system we support, we need a specific arm in that if/else\nconstruct in ci/lib.sh. Let's add one for GitHub Actions.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 20 +++++++++++++++++++-\n 1 file changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex bda746df68..f92e3a5211 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -34,7 +34,7 @@ save_good_tree () {\n # successfully before (e.g. because the branch got rebased, changing only\n # the commit messages).\n skip_good_tree () {\n-\tif test \"$TRAVIS_DEBUG_MODE\" = true\n+\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n \tthen\n \t\treturn\n \tfi\n@@ -136,6 +136,24 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows_nt != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+elif test true = \"$GITHUB_ACTIONS\"\n+then\n+\tCI_TYPE=github-actions\n+\tCI_BRANCH=\"$GITHUB_REF\"\n+\tCI_COMMIT=\"$GITHUB_SHA\"\n+\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n+\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n+\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n+\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n+\tCC=\"${CC:-gcc}\"\n+\n+\tcache_dir=\"$HOME/none\"\n+\n+\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n+\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n+\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n+\ttest windows != \"$CI_OS_NAME\" ||\n+\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394578","messageId":"365ba5e831cff36177a0a486e74e3fbc438562de.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 5/6] README: add a build badge for the GitHub Actions runs","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:59Z","receivedAt":"2020-04-02T13:17:38Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex 9d4564c8aa..e2e00ae249 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,4 @@\n+[![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n [![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394579","messageId":"7308199e244bdfca77370c6607630ab530e00ede.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 4/6] ci: configure GitHub Actions for CI/PR","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:16:58Z","receivedAt":"2020-04-02T13:17:38Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This patch adds CI builds via GitHub Actions. While the underlying\ntechnology is at least _very_ similar to that of Azure Pipelines, GitHub\nActions are much easier to set up than Azure Pipelines:\n- no need to install a GitHub App,\n- no need to set up an Azure DevOps account,\n- all you need to do is push to your fork on GitHub.\n\nTherefore, it makes a lot of sense for us to have a working GitHub\nActions setup.\n\nWhile translate-and-modify `azure-pipelines.yml` into\n`.github/workflows/main.yml`, we also use the opportunity to accelerate\nthe step that sets up a minimal subset of Git for Windows' SDK in the\nWindows-build job:\n- we now download a `.tar.xz` stored in Azure Blobs and extract it\nsimultaneously (by calling `curl` and piping the result to `tar`,\n- decompressing via `xz`,\n- all three utilities are installed together with Git for Windows\n\nAlso, we do away with the parts that try to mount a file share on which\n`prove` can store data between runs. It is just too complicated to set\nup, so it's little return on investment there.\n\nBased-on-patch-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 314 +++++++++++++++++++++++++++++++++++++\n 1 file changed, 314 insertions(+)\n create mode 100644 .github/workflows/main.yml\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nnew file mode 100644\nindex 0000000000..084550bf53\n--- /dev/null\n+++ b/.github/workflows/main.yml\n@@ -0,0 +1,314 @@\n+name: CI/PR\n+\n+on: [push, pull_request]\n+\n+jobs:\n+  windows-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Build\n+      shell: powershell\n+      env:\n+        HOME: ${{runner.workspace}}\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+        printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/make-test-artifacts.sh artifacts\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: artifacts\n+  windows-test:\n+    runs-on: windows-latest\n+    needs: [windows-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract artifact\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Test\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK\n+          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/run-test-slice.sh ${{matrix.nr}} 10\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+        exit(1)\n+  vs-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Generate Visual Studio Solution\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          make NDEBUG=1 DEVELOPER=1 vcxproj\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Download vcpkg artifacts\n+      shell: powershell\n+      run: |\n+        $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n+        $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n+        $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n+        (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n+        Expand-Archive compat.zip -DestinationPath . -Force\n+        Remove-Item compat.zip\n+    - name: Add msbuild to PATH\n+      uses: microsoft/setup-msbuild@v1.0.0\n+    - name: MSBuild\n+      run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n+    - name: Bundle artifact tar\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        DEVELOPER: 1\n+        NO_PERL: 1\n+        MSVC: 1\n+        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+      run: |\n+        & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+        if (!$?) { exit(1) }\n+        & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          mkdir -p artifacts &&\n+          eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\\\"\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: Upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: artifacts\n+  vs-test:\n+    runs-on: windows-latest\n+    needs: [vs-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: Download git-64-portable\n+      shell: bash\n+      run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: Download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: ${{github.workspace}}\n+    - name: Test (parallel)\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        NO_SVN_TESTS: 1\n+        GIT_TEST_SKIP_REBASE_P: 1\n+      run: |\n+        & git-64-portable\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n+          test -f artifacts.tar.gz || {\n+            echo No test artifacts found\\; skipping >&2\n+            exit 0\n+          }\n+          tar xf artifacts.tar.gz || exit 1\n+\n+          # Let Git ignore the SDK and the test-cache\n+          printf '%s\\n' /git-64-portable/ /test-cache/ >>.git/info/exclude\n+\n+          cd t &&\n+          PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n+          test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n+                  `$(test-tool.exe path-utils slice-tests \\\n+                          ${{matrix.nr}} 10 t[0-9]*.sh)\n+        \"@\n+        if (!$?) { exit(1) }\n+  linux-clang:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-test.sh\n+      env:\n+        CC: clang\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        CC: clang\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  linux-gcc:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n+        ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  osx-clang:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        CC: clang\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-test.sh\n+      env:\n+        CC: clang\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        CC: clang\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  osx-gcc:\n+    runs-on: macos-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  GETTEXT_POISON:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        jobname: GETTEXT_POISON\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      env:\n+        jobname: GETTEXT_POISON\n+      run: |\n+        ci/print-test-failures.sh\n+        exit 1\n+  linux-musl:\n+    runs-on: ubuntu-latest\n+    container: alpine\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        jobname: linux-musl\n+      run: ci/install-docker-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        jobname: linux-musl\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: ci/print-test-failures.sh\n+  linux32:\n+    runs-on: ubuntu-latest\n+    container: daald/ubuntu32:xenial\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        jobname: Linux32\n+      run: ci/install-docker-dependencies.sh\n+    - name: ci/run-build-and-tests.sh\n+      env:\n+        jobname: Linux32\n+      run: ci/run-build-and-tests.sh\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      run: ci/print-test-failures.sh\n+  static-analysis:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      env:\n+        jobname: StaticAnalysis\n+      run: ci/install-dependencies.sh\n+    - name: ci/run-static-analysis.sh\n+      env:\n+        jobname: StaticAnalysis\n+      run: ci/run-static-analysis.sh\n+  documentation:\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: install dependencies\n+      run: |\n+        sudo apt-get update &&\n+        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns libcurl4-openssl-dev\n+    - name: ci/test-documentation.sh\n+      env:\n+        ALREADY_HAVE_ASCIIDOCTOR: yes.\n+        jobname: Documentation\n+      run: ci/test-documentation.sh\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394580","messageId":"53094612d3464c47a34f305ffda8ad78411ba48d.1585832999.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1585832999.git.congdanhqx@gmail.com","subject":"[PATCH v3 6/6] ci: retire the Azure Pipelines definition","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-02T13:17:00Z","receivedAt":"2020-04-02T13:17:40Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWe have GitHub Actions now. Running the same builds and tests in Azure\nPipelines would be redundant, and a waste of energy.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md           |   1 -\n azure-pipelines.yml | 593 --------------------------------------------\n 2 files changed, 594 deletions(-)\n delete mode 100644 azure-pipelines.yml\n\ndiff --git a/README.md b/README.md\nindex e2e00ae249..eb8115e6b0 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,5 +1,4 @@\n [![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n =========================================================\ndiff --git a/azure-pipelines.yml b/azure-pipelines.yml\ndeleted file mode 100644\nindex 84ecad76ec..0000000000\n--- a/azure-pipelines.yml\n+++ /dev/null\n@@ -1,593 +0,0 @@\n-variables:\n-  Agent.Source.Git.ShallowFetchDepth: 1\n-\n-jobs:\n-- job: windows_build\n-  displayName: Windows Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        ci/make-test-artifacts.sh artifacts\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Build\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: windows_test\n-  displayName: Windows Test\n-  dependsOn: windows_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude\n-\n-        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {\n-          ci/print-test-failures.sh\n-          exit 1\n-        }\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'windows'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: vs_build\n-  displayName: Visual Studio Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        make NDEBUG=1 DEVELOPER=1 vcxproj\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Generate Visual Studio Solution\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n-      Expand-Archive compat.zip -DestinationPath . -Force\n-      Remove-Item compat.zip\n-    displayName: 'Download vcpkg artifacts'\n-  - task: MSBuild@1\n-    inputs:\n-      solution: git.sln\n-      platform: x64\n-      configuration: Release\n-      maximumCpuCount: 4\n-      msbuildArguments: /p:PlatformToolset=v142\n-  - powershell: |\n-      & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n-      if (!$?) { exit(1) }\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        mkdir -p artifacts &&\n-        eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\\\"\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Bundle artifact tar\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      MSVC: 1\n-      VCPKG_ROOT: $(Build.SourcesDirectory)\\compat\\vcbuild\\vcpkg\n-  - powershell: |\n-      $tag = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-tag.txt\").content\n-      $version = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-version.txt\").content\n-      $url = \"https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe\"\n-      (New-Object Net.WebClient).DownloadFile($url,\"PortableGit.exe\")\n-      & .\\PortableGit.exe -y -oartifacts\\PortableGit\n-      # Wait until it is unpacked\n-      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }\n-    displayName: Download & extract portable Git\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: vs_test\n-  displayName: Visual Studio Test\n-  dependsOn: vs_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: VS test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - powershell: |\n-      & PortableGit\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /PortableGit/ /test-cache/ >>.git/info/exclude\n-\n-        cd t &&\n-        PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n-        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n-                `$(test-tool.exe path-utils slice-tests \\\n-                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'vs'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-vs-test-artifacts\n-\n-- job: linux_clang\n-  displayName: linux-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n-\n-       export CC=clang || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-clang'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_gcc\n-  displayName: linux-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-gcc'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_clang\n-  displayName: osx-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       export CC=clang\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-clang'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_gcc\n-  displayName: osx-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-gcc'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: gettext_poison\n-  displayName: GETTEXT_POISON\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&\n-\n-       export jobname=GETTEXT_POISON || exit 1\n-\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'gettext-poison'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux32\n-  displayName: Linux32\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=Linux32 ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux32'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_musl\n-  displayName: linux-musl\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=linux-musl ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'musl'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: static_analysis\n-  displayName: StaticAnalysis\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&\n-\n-       export jobname=StaticAnalysis &&\n-\n-       ci/run-static-analysis.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-static-analysis.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: documentation\n-  displayName: Documentation\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&\n-\n-       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&\n-       export jobname=Documentation &&\n-\n-       ci/test-documentation.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/test-documentation.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"394645","messageId":"20200403084654.GK2224@szeder.dev","threadId":"53143","inReplyTo":"d9227c87a7bb2872f6a69f48f6a4988f08545d8a.1585658913.git.gitgitgadget@gmail.com","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2020-04-03T08:46:54Z","receivedAt":"2020-04-03T08:47:02Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Tue, Mar 31, 2020 at 12:48:30PM +0000, Johannes Schindelin via GitGitGadget wrote:\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> \n> For each CI system we support, we need a specific arm in that if/else\n> construct in ci/lib.sh. Let's add one for GitHub Actions.\n> \n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> ---\n>  ci/lib.sh | 20 +++++++++++++++++++-\n>  1 file changed, 19 insertions(+), 1 deletion(-)\n> \n> diff --git a/ci/lib.sh b/ci/lib.sh\n> index 8d73551a12f..52e350496a3 100755\n> --- a/ci/lib.sh\n> +++ b/ci/lib.sh\n> @@ -34,7 +34,7 @@ save_good_tree () {\n>  # successfully before (e.g. because the branch got rebased, changing only\n>  # the commit messages).\n>  skip_good_tree () {\n> -\tif test \"$TRAVIS_DEBUG_MODE\" = true\n> +\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n>  \tthen\n>  \t\treturn\n>  \tfi\n> @@ -136,6 +136,24 @@ then\n>  \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n>  \ttest windows_nt != \"$CI_OS_NAME\" ||\n>  \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n> +elif test true = \"$GITHUB_ACTIONS\"\n> +then\n> +\tCI_TYPE=github-actions\n> +\tCI_BRANCH=\"$GITHUB_REF\"\n> +\tCI_COMMIT=\"$GITHUB_SHA\"\n> +\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n> +\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n\nHmm, if \"macos\" isn't not equal to $CI_OS_NAME, then set\nCI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n\n  test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n\nwould read better.\n\n> +\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n> +\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n> +\tCC=\"${CC:-gcc}\"\n> +\n> +\tcache_dir=\"$HOME/none\"\n> +\n> +\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n> +\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n> +\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n> +\ttest windows != \"$CI_OS_NAME\" ||\n> +\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n\nLikewise.\n\n>  else\n>  \techo \"Could not identify CI type\" >&2\n>  \tenv >&2\n> -- \n> gitgitgadget\n> \n"},{"id":"394722","messageId":"20200403220732.GL2224@szeder.dev","threadId":"53143","inReplyTo":"36621bdd31a53046450f73ed197585469b1a1b96.1585658913.git.gitgitgadget@gmail.com","subject":"Re: [PATCH 3/5] ci: configure GitHub Actions for CI/PR","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2020-04-03T22:07:32Z","receivedAt":"2020-04-03T22:07:41Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Tue, Mar 31, 2020 at 12:48:31PM +0000, Johannes Schindelin via GitGitGadget wrote:\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> \n> This patch adds CI builds via GitHub Actions. While the underlying\n> technology is at least _very_ similar to that of Azure Pipelines, GitHub\n> Actions are much easier to set up than Azure Pipelines: no need to\n> install a GitHub App, no need to set up an Azure DevOps account, all you\n> need to do is push to your fork on GitHub.\n\nAnd then receive emails from GitHub if a build fails, even though you\nnever asked for it?  Well, I've always preferred opt-in instead of\nopt-out.\n\nBtw, does it offer direct shell access for debugging?\n\n> Therefore, it makes a lot of sense for us to have a working GitHub\n> Actions setup.\n> \n> While transmogrifying `azure-pipelines.yml` into\n> `.github/workflows/main.yml`, we also use the opportunity to accelerate\n> the step that sets up a minimal subset of Git for Windows' SDK in the\n> Windows-build job: we now download a `.tar.xz` stored in Azure Blobs and\n> extract it simultaneously (by calling `curl` and piping the result to\n> `tar`, decompressing via `xz`, all three utilities being available by\n> grace of using Git for Windows' Bash that is installed on the build\n> agents). This accelerates that step from ~1m50s to ~7s.\n> \n> Also, we do away with the parts that try to mount a file share on which\n> `prove` can store data between runs.\n\n... and on which we store the list of already successfully tested\ntrees, so when a branch is rebased changing e.g. only the commit\nmessages but leaving the code intact, then the CI won't run\nunnecessary builds.\n\n> It is just too complicated to set\n> up, so it's little return on investment there.\n> \n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> ---\n\n> +  linux-clang:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      env:\n> +        CC: clang\n> +      run: |\n> +        sudo apt-get update &&\n> +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n\nWhy install all these dependencies here, when the very next command is\n'ci/install-dependencies.sh', whose purpose is to install the\ndependencies?\n\n> +        ci/install-dependencies.sh\n> +    - name: ci/run-build-and-test.sh\n> +      env:\n> +        CC: clang\n> +      run: |\n> +        ci/run-build-and-tests.sh || {\n> +          ci/print-test-failures.sh\n> +          exit 1\n> +        }\n> +  linux-gcc:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      run: |\n> +        sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n> +        sudo apt-get update &&\n> +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n\nLikewise, and here you install some additional packages compared to\nthe clang job as well.\n\n> +        ci/install-dependencies.sh\n> +    - name: ci/run-build-and-tests.sh\n> +      run: |\n> +        ci/run-build-and-tests.sh || {\n> +          ci/print-test-failures.sh\n> +          exit 1\n> +        }\n> +  osx-clang:\n> +    runs-on: macos-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      env:\n> +        CC: clang\n> +      run: ci/install-dependencies.sh\n> +    - name: ci/run-build-and-tests.sh\n> +      env:\n> +        CC: clang\n> +      run: |\n> +        ci/run-build-and-tests.sh || {\n> +          ci/print-test-failures.sh\n> +          exit 1\n> +        }\n> +  osx-gcc:\n> +    runs-on: macos-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      run: ci/install-dependencies.sh\n> +    - name: ci/run-build-and-tests.sh\n> +      run: |\n> +        ci/run-build-and-tests.sh || {\n> +          ci/print-test-failures.sh\n> +          exit 1\n> +        }\n> +  GETTEXT_POISON:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      run: |\n> +        sudo apt-get update &&\n> +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev\n> +    - name: ci/run-build-and-tests.sh\n> +      env:\n> +        jobname: GETTEXT_POISON\n> +      run: |\n> +        ci/run-build-and-tests.sh || {\n> +          ci/print-test-failures.sh\n> +          exit 1\n> +        }\n> +  linux32:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: ci/run-linux32-docker.sh\n> +      run: |\n> +        res=0\n> +        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n> +  static-analysis:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      run: |\n> +        sudo apt-get update &&\n> +        sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext\n\nLikewise, except here you don't even run 'ci/install-dependencies.sh'\n(which would install the same packages, btw.)\n\n> +    - name: ci/run-static-analysis.sh\n> +      env:\n> +        jobname: StaticAnalysis\n> +      run: ci/run-static-analysis.sh\n> +  documentation:\n> +    runs-on: ubuntu-latest\n> +    steps:\n> +    - uses: actions/checkout@v1\n> +    - name: install dependencies\n> +      run: |\n> +        sudo apt-get update &&\n> +        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns\n> +    - name: ci/test-documentation.sh\n> +      env:\n> +        ALREADY_HAVE_ASCIIDOCTOR: yes.\n> +        jobname: Documentation\n> +      run: ci/test-documentation.sh\n> -- \n> gitgitgadget\n> \n"},{"id":"394781","messageId":"nycvar.QRO.7.76.6.2004041952050.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200403220732.GL2224@szeder.dev","subject":"Re: [PATCH 3/5] ci: configure GitHub Actions for CI/PR","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-04T17:59:37Z","receivedAt":"2020-04-04T17:59:43Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Gábor,\n\nOn Sat, 4 Apr 2020, SZEDER Gábor wrote:\n\n> On Tue, Mar 31, 2020 at 12:48:31PM +0000, Johannes Schindelin via GitGitGadget wrote:\n> > From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> >\n> > This patch adds CI builds via GitHub Actions. While the underlying\n> > technology is at least _very_ similar to that of Azure Pipelines, GitHub\n> > Actions are much easier to set up than Azure Pipelines: no need to\n> > install a GitHub App, no need to set up an Azure DevOps account, all you\n> > need to do is push to your fork on GitHub.\n>\n> And then receive emails from GitHub if a build fails, even though you\n> never asked for it?  Well, I've always preferred opt-in instead of\n> opt-out.\n\nThis complaint is misdirected.\n\nYou can easily disable it if you want to\n(https://help.github.com/en/github/administering-a-repository/disabling-or-limiting-github-actions-for-a-repository)\nand for the vast majority of Git contributors, the default to run this\nworkflow is totally the best idea.\n\n> Btw, does it offer direct shell access for debugging?\n\nThere is https://github.com/marketplace/actions/debugging-with-tmate\n\n> > Therefore, it makes a lot of sense for us to have a working GitHub\n> > Actions setup.\n> >\n> > While transmogrifying `azure-pipelines.yml` into\n> > `.github/workflows/main.yml`, we also use the opportunity to accelerate\n> > the step that sets up a minimal subset of Git for Windows' SDK in the\n> > Windows-build job: we now download a `.tar.xz` stored in Azure Blobs and\n> > extract it simultaneously (by calling `curl` and piping the result to\n> > `tar`, decompressing via `xz`, all three utilities being available by\n> > grace of using Git for Windows' Bash that is installed on the build\n> > agents). This accelerates that step from ~1m50s to ~7s.\n> >\n> > Also, we do away with the parts that try to mount a file share on which\n> > `prove` can store data between runs.\n>\n> ... and on which we store the list of already successfully tested\n> trees, so when a branch is rebased changing e.g. only the commit\n> messages but leaving the code intact, then the CI won't run\n> unnecessary builds.\n\nIn practice, I saw this Pipeline being run time and time again, as the\ntree _did_ change most of the time.\n\nA pipe dream of mine is to use actual Test Impact Analysis so that we\ntruly can run only the affected tests, but that seems so, so far away.\n\n> > It is just too complicated to set\n> > up, so it's little return on investment there.\n> >\n> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> > ---\n>\n> > +  linux-clang:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      env:\n> > +        CC: clang\n> > +      run: |\n> > +        sudo apt-get update &&\n> > +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n>\n> Why install all these dependencies here, when the very next command is\n> 'ci/install-dependencies.sh', whose purpose is to install the\n> dependencies?\n\nI copy/pasted these from `azure-pipelines.yml`, and agree that they should\nbe handled via `ci/install-dependencies.sh` instead.\n\nDanh (is this the correct way to address you?), if you want to have a look\nat that, go for it. Otherwise I'll try to find some time to do that\nmyself.\n\nThanks,\nDscho\n\n> > +        ci/install-dependencies.sh\n> > +    - name: ci/run-build-and-test.sh\n> > +      env:\n> > +        CC: clang\n> > +      run: |\n> > +        ci/run-build-and-tests.sh || {\n> > +          ci/print-test-failures.sh\n> > +          exit 1\n> > +        }\n> > +  linux-gcc:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      run: |\n> > +        sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n> > +        sudo apt-get update &&\n> > +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 &&\n>\n> Likewise, and here you install some additional packages compared to\n> the clang job as well.\n>\n> > +        ci/install-dependencies.sh\n> > +    - name: ci/run-build-and-tests.sh\n> > +      run: |\n> > +        ci/run-build-and-tests.sh || {\n> > +          ci/print-test-failures.sh\n> > +          exit 1\n> > +        }\n> > +  osx-clang:\n> > +    runs-on: macos-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      env:\n> > +        CC: clang\n> > +      run: ci/install-dependencies.sh\n> > +    - name: ci/run-build-and-tests.sh\n> > +      env:\n> > +        CC: clang\n> > +      run: |\n> > +        ci/run-build-and-tests.sh || {\n> > +          ci/print-test-failures.sh\n> > +          exit 1\n> > +        }\n> > +  osx-gcc:\n> > +    runs-on: macos-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      run: ci/install-dependencies.sh\n> > +    - name: ci/run-build-and-tests.sh\n> > +      run: |\n> > +        ci/run-build-and-tests.sh || {\n> > +          ci/print-test-failures.sh\n> > +          exit 1\n> > +        }\n> > +  GETTEXT_POISON:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      run: |\n> > +        sudo apt-get update &&\n> > +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev\n> > +    - name: ci/run-build-and-tests.sh\n> > +      env:\n> > +        jobname: GETTEXT_POISON\n> > +      run: |\n> > +        ci/run-build-and-tests.sh || {\n> > +          ci/print-test-failures.sh\n> > +          exit 1\n> > +        }\n> > +  linux32:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: ci/run-linux32-docker.sh\n> > +      run: |\n> > +        res=0\n> > +        sudo GITHUB_ACTIONS=\"$GITHUB_ACTIONS\" RUNNER_OS=\"$RUNNER_OS\" GITHUB_REF=\"$GITHUB_REF\" GITHUB_SHA=\"$GITHUB_SHA\" GITHUB_REPOSITORY=\"$GITHUB_REPOSITORY\" GITHUB_RUN_ID=\"$GITHUB_RUN_ID\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" bash -lxc ci/run-linux32-docker.sh || res=1\n> > +  static-analysis:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      run: |\n> > +        sudo apt-get update &&\n> > +        sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext\n>\n> Likewise, except here you don't even run 'ci/install-dependencies.sh'\n> (which would install the same packages, btw.)\n>\n> > +    - name: ci/run-static-analysis.sh\n> > +      env:\n> > +        jobname: StaticAnalysis\n> > +      run: ci/run-static-analysis.sh\n> > +  documentation:\n> > +    runs-on: ubuntu-latest\n> > +    steps:\n> > +    - uses: actions/checkout@v1\n> > +    - name: install dependencies\n> > +      run: |\n> > +        sudo apt-get update &&\n> > +        sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns\n> > +    - name: ci/test-documentation.sh\n> > +      env:\n> > +        ALREADY_HAVE_ASCIIDOCTOR: yes.\n> > +        jobname: Documentation\n> > +      run: ci/test-documentation.sh\n> > --\n> > gitgitgadget\n> >\n>\n"},{"id":"394782","messageId":"nycvar.QRO.7.76.6.2004042207410.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200403084654.GK2224@szeder.dev","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-04T20:08:56Z","receivedAt":"2020-04-04T20:09:00Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Gábor,\n\nOn Fri, 3 Apr 2020, SZEDER Gábor wrote:\n\n> On Tue, Mar 31, 2020 at 12:48:30PM +0000, Johannes Schindelin via GitGitGadget wrote:\n> > From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> >\n> > For each CI system we support, we need a specific arm in that if/else\n> > construct in ci/lib.sh. Let's add one for GitHub Actions.\n> >\n> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> > ---\n> >  ci/lib.sh | 20 +++++++++++++++++++-\n> >  1 file changed, 19 insertions(+), 1 deletion(-)\n> >\n> > diff --git a/ci/lib.sh b/ci/lib.sh\n> > index 8d73551a12f..52e350496a3 100755\n> > --- a/ci/lib.sh\n> > +++ b/ci/lib.sh\n> > @@ -34,7 +34,7 @@ save_good_tree () {\n> >  # successfully before (e.g. because the branch got rebased, changing only\n> >  # the commit messages).\n> >  skip_good_tree () {\n> > -\tif test \"$TRAVIS_DEBUG_MODE\" = true\n> > +\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n> >  \tthen\n> >  \t\treturn\n> >  \tfi\n> > @@ -136,6 +136,24 @@ then\n> >  \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n> >  \ttest windows_nt != \"$CI_OS_NAME\" ||\n> >  \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n> > +elif test true = \"$GITHUB_ACTIONS\"\n> > +then\n> > +\tCI_TYPE=github-actions\n> > +\tCI_BRANCH=\"$GITHUB_REF\"\n> > +\tCI_COMMIT=\"$GITHUB_SHA\"\n> > +\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n> > +\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n>\n> Hmm, if \"macos\" isn't not equal to $CI_OS_NAME, then set\n> CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n>\n>   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n>\n> would read better.\n\nI can understand where you come from, but your code is not `set -e` safe,\nwhich is the reason why I wrote the code this way (compare to the already\nexisting code in the previous clause, which was copy-edited here).\n\nCiao,\nDscho\n\n>\n> > +\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n> > +\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n> > +\tCC=\"${CC:-gcc}\"\n> > +\n> > +\tcache_dir=\"$HOME/none\"\n> > +\n> > +\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n> > +\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n> > +\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n> > +\ttest windows != \"$CI_OS_NAME\" ||\n> > +\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n>\n> Likewise.\n>\n> >  else\n> >  \techo \"Could not identify CI type\" >&2\n> >  \tenv >&2\n> > --\n> > gitgitgadget\n> >\n>\n"},{"id":"394784","messageId":"20200404235528.GB1896@danh.dev","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004041952050.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH 3/5] ci: configure GitHub Actions for CI/PR","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-04T23:55:28Z","receivedAt":"2020-04-04T23:55:36Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-04 19:59:37+0200, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> > > +  linux-clang:\n> > > +    runs-on: ubuntu-latest\n> > > +    steps:\n> > > +    - uses: actions/checkout@v1\n> > > +    - name: install dependencies\n> > > +      env:\n> > > +        CC: clang\n> > > +      run: |\n> > > +        sudo apt-get update &&\n> > > +        sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n> >\n> > Why install all these dependencies here, when the very next command is\n> > 'ci/install-dependencies.sh', whose purpose is to install the\n> > dependencies?\n> \n> I copy/pasted these from `azure-pipelines.yml`, and agree that they should\n> be handled via `ci/install-dependencies.sh` instead.\n> \n> Danh (is this the correct way to address you?), if you want to have a look\n> at that, go for it. Otherwise I'll try to find some time to do that\n> myself.\n\n\nI've managed to fix this part in the v4 series (only send privately to\nDscho, because I'm waiting for other conversations to settle).\n\n-- \nDanh\n"},{"id":"394786","messageId":"20200405000108.GC1896@danh.dev","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004042207410.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-05T00:01:08Z","receivedAt":"2020-04-05T00:01:13Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-04 22:08:56+0200, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> Hi Gábor,\n> \n> On Fri, 3 Apr 2020, SZEDER Gábor wrote:\n> \n> > > +\tCI_TYPE=github-actions\n> > > +\tCI_BRANCH=\"$GITHUB_REF\"\n> > > +\tCI_COMMIT=\"$GITHUB_SHA\"\n> > > +\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n> > > +\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n> >\n> > Hmm, if \"macos\" isn't not equal to $CI_OS_NAME, then set\n> > CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n> >\n> >   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n> >\n> > would read better.\n> \n> I can understand where you come from, but your code is not `set -e` safe,\n> which is the reason why I wrote the code this way (compare to the already\n> existing code in the previous clause, which was copy-edited here).\n\nI certainly saw a shell that broke on\n\nset -e\ntest false && ..\n\nI couldn't recall it, though.\n\nWould it be OK if we change it this way:\n\n\tif \"$CI_OS_NAME\" = macos; then CI_OS_NAME=osx; fi\n\n-- \nDanh\n"},{"id":"395022","messageId":"nycvar.QRO.7.76.6.2004080039240.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200405000108.GC1896@danh.dev","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-07T22:41:36Z","receivedAt":"2020-04-07T22:41:42Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Danh,\n\nOn Sun, 5 Apr 2020, Danh Doan wrote:\n\n> On 2020-04-04 22:08:56+0200, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> > Hi Gábor,\n> >\n> > On Fri, 3 Apr 2020, SZEDER Gábor wrote:\n> >\n> > > > +\tCI_TYPE=github-actions\n> > > > +\tCI_BRANCH=\"$GITHUB_REF\"\n> > > > +\tCI_COMMIT=\"$GITHUB_SHA\"\n> > > > +\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n> > > > +\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n> > >\n> > > Hmm, if \"macos\" isn't not equal to $CI_OS_NAME, then set\n> > > CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n> > >\n> > >   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n> > >\n> > > would read better.\n> >\n> > I can understand where you come from, but your code is not `set -e` safe,\n> > which is the reason why I wrote the code this way (compare to the already\n> > existing code in the previous clause, which was copy-edited here).\n>\n> I certainly saw a shell that broke on\n>\n> set -e\n> test false && ..\n>\n> I couldn't recall it, though.\n>\n> Would it be OK if we change it this way:\n>\n> \tif \"$CI_OS_NAME\" = macos; then CI_OS_NAME=osx; fi\n\nWe would have to fix quite a bit of code if we wanted to avoid the\n`<opposite> || <action>` pattern.\n\nIf we _would_ need to (which I don't think we do), I'd prefer:\n\n\tcase \"$CI_OS_NAME\" in macos) CI_OS_NAME=osx;; esac\n\nBut again, we would have to clean up quite a few instances of this, I am\nsure, and it might not be worth the effort, given the short-and-sweet\nnature of the originally-proposed solution.\n\nCiao,\nDscho\n"},{"id":"395045","messageId":"cover.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:31Z","receivedAt":"2020-04-08T04:06:02Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"Our Azure Pipeline has served us well over the course of the past year or\nso, steadily catching issues before the respective patches hit the next\nbranch.\n\nThere is a GitHub-native CI system now, though, called \"GitHub Actions\"\n[https://github.com/features/actions] which is essentially on par with Azure\nPipelines as far as our needs are concerned, and it brings a couple of\nadvantages:\n\n * It is substantially easier to set up than Azure Pipelines: all you need\n   is to add the YAML-based build definition, push to your fork on GitHub,\n   and that's it.\n * The syntax is a bit easier to read than Azure Pipelines'.\n * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n   jobs).\n\nWith this change, users also no longer need to open a PR at\nhttps://github.com/git/git or at https://github.com/gitgitgadget/git just to\nget the benefit of a CI build.\n\nSample run on top of dd/ci-musl-libc with dd/test-with-busybox merged:\nhttps://github.com/sgn/git/actions/runs/73179413\n\nSample run when this series applied into git-for-windows\nhttps://github.com/git-for-windows/git/runs/568625109\n\nChange from v3:\n- Use build matrix\n- All dependencies are install by scripts\n- stop repeating environment variables\n- build failure's artifacts will be uploaded\n\n\nJohannes Schindelin (9):\n  ci/lib: if CI type is unknown, show the environment variables\n  ci/lib: allow running in GitHub Actions\n  ci: fix the `jobname` of the `GETTEXT_POISON` job\n  ci: run gem with sudo to install asciidoctor\n  README: add a build badge for the GitHub Actions runs\n  ci: retire the Azure Pipelines definition\n  tests: when run in Bash, annotate test failures with file name/line\n    number\n  ci: add a problem matcher for GitHub Actions\n  ci: let GitHub Actions upload failed tests' directories\n\nĐoàn Trần Công Danh (3):\n  ci/lib: set TERM environment variable if not exist\n  ci: explicit install all required packages\n  ci: configure GitHub Actions for CI/PR\n\n .github/workflows/main.yml  | 230 +++++++++++++++\n .travis.yml                 |   2 +-\n README.md                   |   2 +-\n azure-pipelines.yml         | 558 ------------------------------------\n ci/git-problem-matcher.json |  16 ++\n ci/install-dependencies.sh  |  16 +-\n ci/lib.sh                   |  31 +-\n ci/print-test-failures.sh   |   7 +\n t/test-lib.sh               |  14 +-\n 9 files changed, 310 insertions(+), 566 deletions(-)\n create mode 100644 .github/workflows/main.yml\n delete mode 100644 azure-pipelines.yml\n create mode 100644 ci/git-problem-matcher.json\n\nRange-diff against v3:\n 1:  3f9f1c6335 =  1:  2219bf3db9 ci/lib: if CI type is unknown, show the environment variables\n 2:  7a4f646bc1 =  2:  2818799a4b ci/lib: allow running in GitHub Actions\n 3:  9a03c0844c =  3:  b88586c2c5 ci/lib: set TERM environment variable if not exist\n 4:  7308199e24 <  -:  ---------- ci: configure GitHub Actions for CI/PR\n -:  ---------- >  4:  1df60e677c ci: fix the `jobname` of the `GETTEXT_POISON` job\n -:  ---------- >  5:  4f80724641 ci: explicit install all required packages\n -:  ---------- >  6:  795ec656c6 ci: run gem with sudo to install asciidoctor\n -:  ---------- >  7:  ec0aa20119 ci: configure GitHub Actions for CI/PR\n 5:  365ba5e831 =  8:  46f2b6bce6 README: add a build badge for the GitHub Actions runs\n 6:  53094612d3 !  9:  92f2623dc7 ci: retire the Azure Pipelines definition\n    @@ Commit message\n         Pipelines would be redundant, and a waste of energy.\n     \n         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n    -    [Danh: fix apply conflicts]\n         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n     \n      ## README.md ##\n    @@ azure-pipelines.yml (deleted)\n     -      PathtoPublish: t/failed-test-artifacts\n     -      ArtifactName: failed-test-artifacts\n     -\n    --- job: linux_musl\n    --  displayName: linux-musl\n    --  condition: succeeded()\n    --  pool:\n    --    vmImage: ubuntu-latest\n    --  steps:\n    --  - bash: |\n    --       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n    --\n    --       res=0\n    --       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1\n    --\n    --       sudo chmod a+r t/out/TEST-*.xml\n    --       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n    --\n    --       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n    --       exit $res\n    --    displayName: 'jobname=linux-musl ci/run-docker.sh'\n    --    env:\n    --      GITFILESHAREPWD: $(gitfileshare.pwd)\n    --  - task: PublishTestResults@2\n    --    displayName: 'Publish Test Results **/TEST-*.xml'\n    --    inputs:\n    --      mergeTestResults: true\n    --      testRunTitle: 'musl'\n    --      platform: Linux\n    --      publishRunAttachments: false\n    --    condition: succeededOrFailed()\n    --  - task: PublishBuildArtifacts@1\n    --    displayName: 'Publish trash directories of failed tests'\n    --    condition: failed()\n    --    inputs:\n    --      PathtoPublish: t/failed-test-artifacts\n    --      ArtifactName: failed-test-artifacts\n    --\n     -- job: static_analysis\n     -  displayName: StaticAnalysis\n     -  condition: succeeded()\n -:  ---------- > 10:  f688fa50d3 tests: when run in Bash, annotate test failures with file name/line number\n -:  ---------- > 11:  715d1f732f ci: add a problem matcher for GitHub Actions\n -:  ---------- > 12:  0908d5ab9b ci: let GitHub Actions upload failed tests' directories\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395044","messageId":"2219bf3db9e247f5f4fb5d518f22709909d57a1c.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 01/12] ci/lib: if CI type is unknown, show the environment variables","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:32Z","receivedAt":"2020-04-08T04:06:03Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis should help with adding new CI-specific if-else arms.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex e9a5c51425..05fbcf681a 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -138,6 +138,7 @@ then\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n+\tenv >&2\n \texit 1\n fi\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395046","messageId":"b88586c2c5e4781c6a7fdfa0e2669bf37773afd2.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 03/12] ci/lib: set TERM environment variable if not exist","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:34Z","receivedAt":"2020-04-08T04:06:09Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"GitHub Action doesn't set TERM environment variable, which is required\nby \"tput\".\n\nFallback to dumb if it's not set.\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex a21c6241b0..5c20975c83 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -79,6 +79,9 @@ check_unignored_build_artifacts ()\n \t}\n }\n \n+# GitHub Action doesn't set TERM, which is required by tput\n+export TERM=${TERM:-dumb}\n+\n # Clear MAKEFLAGS that may come from the outside world.\n export MAKEFLAGS=\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395047","messageId":"2818799a4b135db019ac48c59b25032f8cd291ad.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 02/12] ci/lib: allow running in GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:33Z","receivedAt":"2020-04-08T04:06:09Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nFor each CI system we support, we need a specific arm in that if/else\nconstruct in ci/lib.sh. Let's add one for GitHub Actions.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 20 +++++++++++++++++++-\n 1 file changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 05fbcf681a..a21c6241b0 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -34,7 +34,7 @@ save_good_tree () {\n # successfully before (e.g. because the branch got rebased, changing only\n # the commit messages).\n skip_good_tree () {\n-\tif test \"$TRAVIS_DEBUG_MODE\" = true\n+\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n \tthen\n \t\treturn\n \tfi\n@@ -136,6 +136,24 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows_nt != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+elif test true = \"$GITHUB_ACTIONS\"\n+then\n+\tCI_TYPE=github-actions\n+\tCI_BRANCH=\"$GITHUB_REF\"\n+\tCI_COMMIT=\"$GITHUB_SHA\"\n+\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n+\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n+\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n+\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n+\tCC=\"${CC:-gcc}\"\n+\n+\tcache_dir=\"$HOME/none\"\n+\n+\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n+\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n+\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n+\ttest windows != \"$CI_OS_NAME\" ||\n+\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395049","messageId":"1df60e677c0b98b010c74914ab49f32a544bc59f.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 04/12] ci: fix the `jobname` of the `GETTEXT_POISON` job","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:35Z","receivedAt":"2020-04-08T04:06:09Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIn 6cdccfce1e0f (i18n: make GETTEXT_POISON a runtime option,\n2018-11-08), the `jobname` was adjusted to have the `GIT_TEST_` prefix,\nbut that prefix makes no sense in this context.\n\nCo-authored-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .travis.yml | 2 +-\n ci/lib.sh   | 2 +-\n 2 files changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/.travis.yml b/.travis.yml\nindex 0cfc3c3428..05f3e3f8d7 100644\n--- a/.travis.yml\n+++ b/.travis.yml\n@@ -16,7 +16,7 @@ compiler:\n \n matrix:\n   include:\n-    - env: jobname=GIT_TEST_GETTEXT_POISON\n+    - env: jobname=GETTEXT_POISON\n       os: linux\n       compiler:\n       addons:\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 5c20975c83..8b39624f3c 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -211,7 +211,7 @@ osx-clang|osx-gcc)\n \t# Travis CI OS X\n \texport GIT_SKIP_TESTS=\"t9810 t9816\"\n \t;;\n-GIT_TEST_GETTEXT_POISON)\n+GETTEXT_POISON)\n \texport GIT_TEST_GETTEXT_POISON=true\n \t;;\n Linux32)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395048","messageId":"4f80724641e17bf0d1937dbad77f987fbf86cd64.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 05/12] ci: explicit install all required packages","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:36Z","receivedAt":"2020-04-08T04:06:10Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"In a later patch, we will support GitHub Action.\n\nExplicitly install all of our build dependencies.\nSince GitHub Action VM hasn't install our build dependencies, yet.\nAnd there're no harm to reinstall them (in Travis)\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/install-dependencies.sh | 14 ++++++++++++--\n 1 file changed, 12 insertions(+), 2 deletions(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 497fd32ca8..371902bb75 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -7,12 +7,17 @@\n \n P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION\n LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION\n+UBUNTU_COMMON_PKGS=\"make libssl-dev libcurl4-openssl-dev libexpat-dev\n+ perl-modules liberror-perl tcl tk gettext zlib1g-dev apache2\n+ libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl\n+ libnet-smtp-ssl-perl\"\n \n case \"$jobname\" in\n linux-clang|linux-gcc)\n \tsudo apt-add-repository -y \"ppa:ubuntu-toolchain-r/test\"\n \tsudo apt-get -q update\n-\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2\n+\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2 \\\n+\t\t$UBUNTU_COMMON_PKGS\n \tcase \"$jobname\" in\n \tlinux-gcc)\n \t\tsudo apt-get -q -y install gcc-8\n@@ -63,11 +68,16 @@ StaticAnalysis)\n \t;;\n Documentation)\n \tsudo apt-get -q update\n-\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns\n+\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns \\\n+\t\tlibcurl4-openssl-dev\n \n \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n \tgem install --version 1.5.8 asciidoctor\n \t;;\n+GETTEXT_POISON)\n+\tsudo apt-get -q update\n+\tsudo apt-get -q -y install $UBUNTU_COMMON_PKGS\n+\t;;\n esac\n \n if type p4d >/dev/null && type p4 >/dev/null\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395050","messageId":"795ec656c6172b139a5a55f1760e0ecfe434b5f3.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 06/12] ci: run gem with sudo to install asciidoctor","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:37Z","receivedAt":"2020-04-08T04:06:14Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIn a later patch, we will run Documentation job in GitHub Actions.\nThe job will run without elevated permission.\n\nRun `gem` with `sudo` to elevate permission in order to be able to\ninstall to system location.\nThis will also keep this installation in-line with other installation in\nour Linux system for CI.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n[Danh: reword commit message]\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/install-dependencies.sh | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 371902bb75..a6a1dafa15 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -72,7 +72,7 @@ Documentation)\n \t\tlibcurl4-openssl-dev\n \n \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n-\tgem install --version 1.5.8 asciidoctor\n+\tsudo gem install --version 1.5.8 asciidoctor\n \t;;\n GETTEXT_POISON)\n \tsudo apt-get -q update\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395051","messageId":"ec0aa201195358ef9312011350b1a1c365fd1cad.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 07/12] ci: configure GitHub Actions for CI/PR","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:38Z","receivedAt":"2020-04-08T04:06:14Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This patch adds CI builds via GitHub Actions. While the underlying\ntechnology is at least _very_ similar to that of Azure Pipelines, GitHub\nActions are much easier to set up than Azure Pipelines:\n\n- no need to install a GitHub App,\n\n- no need to set up an Azure DevOps account,\n\n- all you need to do is push to your fork on GitHub.\n\nTherefore, it makes a lot of sense for us to have a working GitHub\nActions setup.\n\nWhile copy/editing `azure-pipelines.yml` into\n`.github/workflows/main.yml`, we also use the opportunity to accelerate\nthe step that sets up a minimal subset of Git for Windows' SDK in the\nWindows-build job:\n\n- we now download a `.tar.xz` stored in Azure Blobs and extract it\n  simultaneously by calling `curl` and piping the result to `tar`,\n\n- decompressing via `xz`,\n\n- all three utilities are installed together with Git for Windows\n\nAt the same time, we also make use of the matrix build feature, which\nreduces the amount of repeated text by quite a bit.\n\nAlso, we do away with the parts that try to mount a file share on which\n`prove` can store data between runs. It is just too complicated to set\nup, and most times the tree changes anyway, so there is little return on\ninvestment there.\n\nInitial-patch-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 212 +++++++++++++++++++++++++++++++++++++\n 1 file changed, 212 insertions(+)\n create mode 100644 .github/workflows/main.yml\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nnew file mode 100644\nindex 0000000000..e1ac6d23b4\n--- /dev/null\n+++ b/.github/workflows/main.yml\n@@ -0,0 +1,212 @@\n+name: CI/PR\n+\n+on: [push, pull_request]\n+\n+env:\n+  DEVELOPER: 1\n+\n+jobs:\n+  windows-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: build\n+      shell: powershell\n+      env:\n+        HOME: ${{runner.workspace}}\n+        MSYSTEM: MINGW64\n+        NO_PERL: 1\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+        printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/make-test-artifacts.sh artifacts\n+        \"@\n+    - name: upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: artifacts\n+  windows-test:\n+    runs-on: windows-latest\n+    needs: [windows-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract build artifacts\n+      shell: bash\n+      run: tar xf artifacts.tar.gz\n+    - name: test\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK\n+          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/run-test-slice.sh ${{matrix.nr}} 10\n+        \"@\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+  vs-build:\n+    env:\n+      MSYSTEM: MINGW64\n+      NO_PERL: 1\n+      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: generate Visual Studio solution\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          make NDEBUG=1 DEVELOPER=1 vcxproj\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: download vcpkg artifacts\n+      shell: powershell\n+      run: |\n+        $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n+        $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n+        $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n+        (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n+        Expand-Archive compat.zip -DestinationPath . -Force\n+        Remove-Item compat.zip\n+    - name: add msbuild to PATH\n+      uses: microsoft/setup-msbuild@v1.0.0\n+    - name: MSBuild\n+      run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n+    - name: bundle artifact tar\n+      shell: powershell\n+      env:\n+        MSVC: 1\n+        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+      run: |\n+        & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+        if (!$?) { exit(1) }\n+        & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          mkdir -p artifacts &&\n+          eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\\\"\n+        \"@\n+    - name: upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: artifacts\n+  vs-test:\n+    runs-on: windows-latest\n+    needs: [vs-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-64-portable\n+      shell: bash\n+      run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract build artifacts\n+      shell: bash\n+      run: tar xf artifacts.tar.gz\n+    - name: test (parallel)\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        NO_SVN_TESTS: 1\n+        GIT_TEST_SKIP_REBASE_P: 1\n+      run: |\n+        & git-64-portable\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK and the test-cache\n+          printf '%s\\n' /git-64-portable/ /test-cache/ >>.git/info/exclude\n+\n+          cd t &&\n+          PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n+          test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n+                  `$(test-tool.exe path-utils slice-tests \\\n+                          ${{matrix.nr}} 10 t[0-9]*.sh)\n+        \"@\n+  regular:\n+    strategy:\n+      matrix:\n+        vector:\n+          - jobname: linux-clang\n+            cc: clang\n+            pool: ubuntu-latest\n+          - jobname: linux-gcc\n+            cc: gcc\n+            pool: ubuntu-latest\n+          - jobname: osx-clang\n+            cc: clang\n+            pool: macos-latest\n+          - jobname: osx-gcc\n+            cc: gcc\n+            pool: macos-latest\n+          - jobname: GETTEXT_POISON\n+            cc: gcc\n+            pool: ubuntu-latest\n+    env:\n+      CC: ${{matrix.vector.cc}}\n+      jobname: ${{matrix.vector.jobname}}\n+    runs-on: ${{matrix.vector.pool}}\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/run-build-and-tests.sh\n+    - run: ci/print-test-failures.sh\n+      if: failure()\n+  dockerized:\n+    strategy:\n+      matrix:\n+        vector:\n+        - jobname: linux-musl\n+          image: alpine\n+        - jobname: Linux32\n+          image: daald/ubuntu32:xenial\n+    env:\n+      jobname: ${{matrix.vector.jobname}}\n+    runs-on: ubuntu-latest\n+    container: ${{matrix.vector.image}}\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-docker-dependencies.sh\n+    - run: ci/run-build-and-tests.sh\n+    - run: ci/print-test-failures.sh\n+      if: failure()\n+  static-analysis:\n+    env:\n+      jobname: StaticAnalysis\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/run-static-analysis.sh\n+  documentation:\n+    env:\n+      jobname: Documentation\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/test-documentation.sh\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395052","messageId":"46f2b6bce6ec55853a8708a090ad7e8e751b0075.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 08/12] README: add a build badge for the GitHub Actions runs","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:39Z","receivedAt":"2020-04-08T04:06:15Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex 9d4564c8aa..e2e00ae249 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,4 @@\n+[![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n [![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395054","messageId":"92f2623dc7d2da1e78edfbfbe289bd7722abb543.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 09/12] ci: retire the Azure Pipelines definition","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:40Z","receivedAt":"2020-04-08T04:06:20Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWe have GitHub Actions now. Running the same builds and tests in Azure\nPipelines would be redundant, and a waste of energy.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md           |   1 -\n azure-pipelines.yml | 558 --------------------------------------------\n 2 files changed, 559 deletions(-)\n delete mode 100644 azure-pipelines.yml\n\ndiff --git a/README.md b/README.md\nindex e2e00ae249..eb8115e6b0 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,5 +1,4 @@\n [![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n =========================================================\ndiff --git a/azure-pipelines.yml b/azure-pipelines.yml\ndeleted file mode 100644\nindex 11413f66f8..0000000000\n--- a/azure-pipelines.yml\n+++ /dev/null\n@@ -1,558 +0,0 @@\n-variables:\n-  Agent.Source.Git.ShallowFetchDepth: 1\n-\n-jobs:\n-- job: windows_build\n-  displayName: Windows Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        ci/make-test-artifacts.sh artifacts\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Build\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: windows_test\n-  displayName: Windows Test\n-  dependsOn: windows_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude\n-\n-        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {\n-          ci/print-test-failures.sh\n-          exit 1\n-        }\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'windows'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: vs_build\n-  displayName: Visual Studio Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        make NDEBUG=1 DEVELOPER=1 vcxproj\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Generate Visual Studio Solution\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n-      Expand-Archive compat.zip -DestinationPath . -Force\n-      Remove-Item compat.zip\n-    displayName: 'Download vcpkg artifacts'\n-  - task: MSBuild@1\n-    inputs:\n-      solution: git.sln\n-      platform: x64\n-      configuration: Release\n-      maximumCpuCount: 4\n-      msbuildArguments: /p:PlatformToolset=v142\n-  - powershell: |\n-      & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n-      if (!$?) { exit(1) }\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        mkdir -p artifacts &&\n-        eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\\\"\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Bundle artifact tar\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      MSVC: 1\n-      VCPKG_ROOT: $(Build.SourcesDirectory)\\compat\\vcbuild\\vcpkg\n-  - powershell: |\n-      $tag = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-tag.txt\").content\n-      $version = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-version.txt\").content\n-      $url = \"https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe\"\n-      (New-Object Net.WebClient).DownloadFile($url,\"PortableGit.exe\")\n-      & .\\PortableGit.exe -y -oartifacts\\PortableGit\n-      # Wait until it is unpacked\n-      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }\n-    displayName: Download & extract portable Git\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: vs_test\n-  displayName: Visual Studio Test\n-  dependsOn: vs_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: VS test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - powershell: |\n-      & PortableGit\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /PortableGit/ /test-cache/ >>.git/info/exclude\n-\n-        cd t &&\n-        PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n-        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n-                `$(test-tool.exe path-utils slice-tests \\\n-                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'vs'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-vs-test-artifacts\n-\n-- job: linux_clang\n-  displayName: linux-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n-\n-       export CC=clang || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-clang'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_gcc\n-  displayName: linux-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-gcc'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_clang\n-  displayName: osx-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       export CC=clang\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-clang'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_gcc\n-  displayName: osx-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-gcc'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: gettext_poison\n-  displayName: GETTEXT_POISON\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&\n-\n-       export jobname=GETTEXT_POISON || exit 1\n-\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'gettext-poison'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux32\n-  displayName: Linux32\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=Linux32 ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux32'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: static_analysis\n-  displayName: StaticAnalysis\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&\n-\n-       export jobname=StaticAnalysis &&\n-\n-       ci/run-static-analysis.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-static-analysis.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: documentation\n-  displayName: Documentation\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&\n-\n-       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&\n-       export jobname=Documentation &&\n-\n-       ci/test-documentation.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/test-documentation.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395053","messageId":"f688fa50d3d08bcb317d5e4738a7a753ab5592f9.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:41Z","receivedAt":"2020-04-08T04:06:21Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWhen a test fails, it is nice to see where the corresponding code lives\nin the worktree. Sadly, it seems that only Bash allows us to infer this\ninformation. Let's do it when we detect that we're running in a Bash.\n\nThis will come in handy in the next commit, where we teach the GitHub\nActions workflow to annotate failed test runs with this information.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n t/test-lib.sh | 14 +++++++++++++-\n 1 file changed, 13 insertions(+), 1 deletion(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 0ea1e5a05e..40a00983f7 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -657,6 +657,18 @@ die () {\n \tfi\n }\n \n+file_lineno () {\n+\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n+\tlocal i\n+\tfor i in ${!BASH_SOURCE[*]}\n+\tdo\n+\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n+\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n+\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n+\t\tesac\n+\tdone\n+}\n+\n GIT_EXIT_OK=\n trap 'die' EXIT\n # Disable '-x' tracing, because with some shells, notably dash, it\n@@ -702,7 +714,7 @@ test_failure_ () {\n \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n \tfi\n \ttest_failure=$(($test_failure + 1))\n-\tsay_color error \"not ok $test_count - $1\"\n+\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n \tshift\n \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395055","messageId":"0908d5ab9beb0e549bec8637f4d0e4ba1f85204d.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 12/12] ci: let GitHub Actions upload failed tests' directories","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:43Z","receivedAt":"2020-04-08T04:06:21Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nArguably, CI builds' most important task is to not only identify\nregressions, but to make it as easy as possible to investigate what went\nwrong.\n\nIn that light, we will want to provide users with a way to inspect the\ntests' output as well as the corresponding directories.\n\nThis commit adds build steps that are only executed when tests failed,\nuploading the relevant information as build artifacts. These artifacts\ncan then be downloaded by interested parties to diagnose the failures\nmore efficiently.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 18 ++++++++++++++++++\n ci/print-test-failures.sh  |  7 +++++++\n 2 files changed, 25 insertions(+)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex e1ac6d23b4..fd4df939b5 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -63,6 +63,12 @@ jobs:\n       shell: powershell\n       run: |\n         & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-windows\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   vs-build:\n     env:\n       MSYSTEM: MINGW64\n@@ -176,6 +182,12 @@ jobs:\n     - run: ci/run-build-and-tests.sh\n     - run: ci/print-test-failures.sh\n       if: failure()\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-${{matrix.vector.jobname}}\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   dockerized:\n     strategy:\n       matrix:\n@@ -194,6 +206,12 @@ jobs:\n     - run: ci/run-build-and-tests.sh\n     - run: ci/print-test-failures.sh\n       if: failure()\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-${{matrix.vector.jobname}}\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   static-analysis:\n     env:\n       jobname: StaticAnalysis\ndiff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh\nindex e688a26f0d..92a983a265 100755\n--- a/ci/print-test-failures.sh\n+++ b/ci/print-test-failures.sh\n@@ -46,6 +46,13 @@ do\n \t\t\tmv \"$trash_dir\" failed-test-artifacts\n \t\t\tcontinue\n \t\t\t;;\n+\t\tgithub-actions)\n+\t\t\tmkdir -p failed-test-artifacts\n+\t\t\techo \"::set-env name=FAILED_TEST_ARTIFACTS::t/failed-test-artifacts\"\n+\t\t\tcp \"${TEST_EXIT%.exit}.out\" failed-test-artifacts/\n+\t\t\ttar czf failed-test-artifacts/\"$test_name\".trash.tar.gz \"$trash_dir\"\n+\t\t\tcontinue\n+\t\t\t;;\n \t\t*)\n \t\t\techo \"Unhandled CI type: $CI_TYPE\" >&2\n \t\t\texit 1\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395056","messageId":"715d1f732fd9ee475dd18d28f1b0801abe223d8c.1586309211.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"[PATCH v4 11/12] ci: add a problem matcher for GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-08T04:05:42Z","receivedAt":"2020-04-08T04:06:23Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWith this patch, test failures will be annotated with a helpful,\nclickable message in GitHub Actions. For details, see\nhttps://github.com/actions/toolkit/blob/master/docs/problem-matchers.md\n\nNote: we need to set `TEST_SHELL_PATH` to Bash so that the problem\nmatcher is fed a file and line number for each test failure.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/git-problem-matcher.json | 16 ++++++++++++++++\n ci/lib.sh                   |  5 +++++\n 2 files changed, 21 insertions(+)\n create mode 100644 ci/git-problem-matcher.json\n\ndiff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\nnew file mode 100644\nindex 0000000000..506dfbd97f\n--- /dev/null\n+++ b/ci/git-problem-matcher.json\n@@ -0,0 +1,16 @@\n+{\n+    \"problemMatcher\": [\n+        {\n+            \"owner\": \"git-test-suite\",\n+            \"pattern\": [\n+                {\n+                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n+                    \"file\": 1,\n+                    \"line\": 2,\n+                    \"severity\": 3,\n+                    \"message\": 4\n+                }\n+            ]\n+        }\n+    ]\n+}\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 8b39624f3c..4c54540fa8 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -157,6 +157,11 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+\n+\t# https://github.com/actions/toolkit/blob/master/docs/commands.md#problem-matchers\n+\techo \"::add-matcher::ci/git-problem-matcher.json\"\n+\ttest linux-musl = \"$jobname\" ||\n+\tMAKEFLAGS=\"$MAKEFLAGS TEST_SHELL_PATH=/bin/sh\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395143","messageId":"xmqqpncgmk5z.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"cover.1586309211.git.congdanhqx@gmail.com","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-09T21:19:36Z","receivedAt":"2020-04-09T21:19:52Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:\n\n> Our Azure Pipeline has served us well over the course of the past year or\n> so, steadily catching issues before the respective patches hit the next\n> branch.\n>\n> There is a GitHub-native CI system now, though, called \"GitHub Actions\"\n> [https://github.com/features/actions] which is essentially on par with Azure\n> Pipelines as far as our needs are concerned, and it brings a couple of\n> advantages:\n>\n>  * It is substantially easier to set up than Azure Pipelines: all you need\n>    is to add the YAML-based build definition, push to your fork on GitHub,\n>    and that's it.\n>  * The syntax is a bit easier to read than Azure Pipelines'.\n>  * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n>    jobs).\n>\n> With this change, users also no longer need to open a PR at\n> https://github.com/git/git or at https://github.com/gitgitgadget/git just to\n> get the benefit of a CI build.\n>\n> Sample run on top of dd/ci-musl-libc with dd/test-with-busybox merged:\n> https://github.com/sgn/git/actions/runs/73179413\n>\n> Sample run when this series applied into git-for-windows\n> https://github.com/git-for-windows/git/runs/568625109\n>\n> Change from v3:\n> - Use build matrix\n> - All dependencies are install by scripts\n> - stop repeating environment variables\n> - build failure's artifacts will be uploaded\n\nI did not see any particular thing that is bad in any of the three\nseries involved; do people have further comments?\n\nI am not exactly happy that these had to be queued on top of a merge\nof two topics in flight, which makes it cumbersome to deal with a\nbreakage in these two other topics, though, but that would be a pain\nonly until these two topics prove to be stable enough to build on.\n\nJudging from two CI runs for 'pu' ([*1*] and [*2*]), among the\ntopics that are cooking, there are only a few topics that these\ntests are unhappy about.  Perhaps those on Windows can help these\ntopics to pass these tests?\n\n\n[References]\n\n*1* https://github.com/git/git/actions/runs/74687673 is 'pu' with\n all cooking topics.\n\n*2* https://github.com/git/git/actions/runs/74741625 is 'pu' with\n some topics excluded.\n"},{"id":"395188","messageId":"nycvar.QRO.7.76.6.2004101604210.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"xmqqpncgmk5z.fsf@gitster.c.googlers.com","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-10T14:34:15Z","receivedAt":"2020-04-10T14:34:25Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Thu, 9 Apr 2020, Junio C Hamano wrote:\n\n> Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:\n>\n> > Our Azure Pipeline has served us well over the course of the past year or\n> > so, steadily catching issues before the respective patches hit the next\n> > branch.\n> >\n> > There is a GitHub-native CI system now, though, called \"GitHub Actions\"\n> > [https://github.com/features/actions] which is essentially on par with Azure\n> > Pipelines as far as our needs are concerned, and it brings a couple of\n> > advantages:\n> >\n> >  * It is substantially easier to set up than Azure Pipelines: all you need\n> >    is to add the YAML-based build definition, push to your fork on GitHub,\n> >    and that's it.\n> >  * The syntax is a bit easier to read than Azure Pipelines'.\n> >  * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n> >    jobs).\n> >\n> > With this change, users also no longer need to open a PR at\n> > https://github.com/git/git or at https://github.com/gitgitgadget/git just to\n> > get the benefit of a CI build.\n> >\n> > Sample run on top of dd/ci-musl-libc with dd/test-with-busybox merged:\n> > https://github.com/sgn/git/actions/runs/73179413\n> >\n> > Sample run when this series applied into git-for-windows\n> > https://github.com/git-for-windows/git/runs/568625109\n> >\n> > Change from v3:\n> > - Use build matrix\n> > - All dependencies are install by scripts\n> > - stop repeating environment variables\n> > - build failure's artifacts will be uploaded\n>\n> I did not see any particular thing that is bad in any of the three\n> series involved; do people have further comments?\n\nFWIW I consider this work good enough that I already merged it into Git\nfor Windows. It should make it easier for contributors to test their\nbranches \"privately\", in their own forks, before opening a PR (most people\ndo not like to have relatively trivial issues pointed out by fellow human\nbeings, but are much more okay with machines telling them what needs to be\nimproved).\n\nPlease mark this up as a vote of confidence from my side.\n\n> I am not exactly happy that these had to be queued on top of a merge\n> of two topics in flight, which makes it cumbersome to deal with a\n> breakage in these two other topics, though, but that would be a pain\n> only until these two topics prove to be stable enough to build on.\n\nYes, and the fact that `ci-musl-libc` was _not_ based on top of\n`test-with-busybox` makes it a bit more awkward. I, for one, had totally\nmissed that the latter patch series is _required_ in order to make the\nformer work correctly. Hunting for the cause for almost an hour until Danh\nkindly pointed out that he had fixed all the issues in `test-with-busybox`\nalready.\n\n> Judging from two CI runs for 'pu' ([*1*] and [*2*]), among the\n> topics that are cooking, there are only a few topics that these\n> tests are unhappy about.  Perhaps those on Windows can help these\n> topics to pass these tests?\n\nI would like to point out that there is only one single topic that is\ncause for sorrow here, and it is the reftable one.\n\nBefore going further, let me point out that the `pu` branch has been\nbroken for quite a long time now, primarily because of `bugreport` and...\nof course because of `reftable`. Whenever `pu` included `reftable`, the CI\nbuilds failed. So these `reftable` problems are not a good reason, in my\nmind, to hold up the GitHub workflow patches from advancing.\n\nSeeing the short stat `35 files changed, 6719 insertions(+)` of even a\nsingle patch in the `reftable` patch series _really_ does not entice me to\nspend time even looking at it, certainly not at a time when I am short on\ntime, let alone to try to find time to fix it.\n\nHowever, since you asked so nicely, I did start to look into it. First,\nlet me present you the less controversial of two patches I want to show\nyou:\n\n-- snip --\nFrom 5f42a3f6ef9cf7d90bd274e55539b145cae40e28 Mon Sep 17 00:00:00 2001\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\nDate: Fri, 10 Apr 2020 14:23:40 +0200\nSubject: [PATCH] fixup??? Reftable support for git-core\n\nAs I had already pointed out over a month ago in\nhttps://github.com/gitgitgadget/git/pull/539#issuecomment-589157008 this\nC code violates the C standard, and MS Visual C is not as lenient as\nGCC/clang on it: `struct`s cannot be initialized with `= {}`.\n\nCompile errors aside, while this code conforms to the C syntax, it feels\nmore like Java when it initializes e.g. `struct object_id` only to\n_immediately_ overwrite the contents.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n refs/reftable-backend.c | 52 ++++++++++++++++++++---------------------\n 1 file changed, 26 insertions(+), 26 deletions(-)\n\ndiff --git a/refs/reftable-backend.c b/refs/reftable-backend.c\nindex 6e845e9c649..20c94bb403b 100644\n--- a/refs/reftable-backend.c\n+++ b/refs/reftable-backend.c\n@@ -31,7 +31,7 @@ static void clear_reftable_log_record(struct reftable_log_record *log)\n static void fill_reftable_log_record(struct reftable_log_record *log)\n {\n \tconst char *info = git_committer_info(0);\n-\tstruct ident_split split = {};\n+\tstruct ident_split split = { NULL };\n \tint result = split_ident_line(&split, info, strlen(info));\n \tint sign = 1;\n \tassert(0 == result);\n@@ -230,7 +230,7 @@ static int reftable_transaction_abort(struct ref_store *ref_store,\n static int reftable_check_old_oid(struct ref_store *refs, const char *refname,\n \t\t\t\t  struct object_id *want_oid)\n {\n-\tstruct object_id out_oid = {};\n+\tstruct object_id out_oid;\n \tint out_flags = 0;\n \tconst char *resolved = refs_resolve_ref_unsafe(\n \t\trefs, refname, RESOLVE_REF_READING, &out_oid, &out_flags);\n@@ -287,14 +287,14 @@ static int write_transaction_table(struct reftable_writer *writer, void *arg)\n \t\tlog->message = u->msg;\n\n \t\tif (u->flags & REF_HAVE_NEW) {\n-\t\t\tstruct object_id out_oid = {};\n+\t\t\tstruct object_id out_oid;\n \t\t\tint out_flags = 0;\n \t\t\t/* Memory owned by refs_resolve_ref_unsafe, no need to\n \t\t\t * free(). */\n \t\t\tconst char *resolved = refs_resolve_ref_unsafe(\n \t\t\t\ttransaction->ref_store, u->refname, 0, &out_oid,\n \t\t\t\t&out_flags);\n-\t\t\tstruct reftable_ref_record ref = {};\n+\t\t\tstruct reftable_ref_record ref = { NULL };\n \t\t\tref.ref_name =\n \t\t\t\t(char *)(resolved ? resolved : u->refname);\n \t\t\tlog->ref_name = ref.ref_name;\n@@ -376,8 +376,8 @@ static int write_delete_refs_table(struct reftable_writer *writer, void *argv)\n \t}\n\n \tfor (int i = 0; i < arg->refnames->nr; i++) {\n-\t\tstruct reftable_log_record log = {};\n-\t\tstruct reftable_ref_record current = {};\n+\t\tstruct reftable_log_record log = { NULL };\n+\t\tstruct reftable_ref_record current = { NULL };\n \t\tfill_reftable_log_record(&log);\n \t\tlog.message = xstrdup(arg->logmsg);\n \t\tlog.new_hash = NULL;\n@@ -455,10 +455,10 @@ static int write_create_symref_table(struct reftable_writer *writer, void *arg)\n \t}\n\n \t{\n-\t\tstruct reftable_log_record log = {};\n-\t\tstruct object_id new_oid = {};\n-\t\tstruct object_id old_oid = {};\n-\t\tstruct reftable_ref_record current = {};\n+\t\tstruct reftable_log_record log = { NULL };\n+\t\tstruct object_id new_oid;\n+\t\tstruct object_id old_oid;\n+\t\tstruct reftable_ref_record current = { NULL };\n \t\treftable_stack_read_ref(create->refs->stack, create->refname, &current);\n\n \t\tfill_reftable_log_record(&log);\n@@ -513,7 +513,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n {\n \tstruct write_rename_arg *arg = (struct write_rename_arg *)argv;\n \tuint64_t ts = reftable_stack_next_update_index(arg->stack);\n-\tstruct reftable_ref_record ref = {};\n+\tstruct reftable_ref_record ref = { NULL };\n \tint err = reftable_stack_read_ref(arg->stack, arg->oldname, &ref);\n\n \tif (err) {\n@@ -531,7 +531,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n \tref.update_index = ts;\n\n \t{\n-\t\tstruct reftable_ref_record todo[2] = {};\n+\t\tstruct reftable_ref_record todo[2] = { { NULL } };\n \t\ttodo[0].ref_name = (char *)arg->oldname;\n \t\ttodo[0].update_index = ts;\n \t\t/* leave todo[0] empty */\n@@ -545,7 +545,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n \t}\n\n \tif (ref.value != NULL) {\n-\t\tstruct reftable_log_record todo[2] = {};\n+\t\tstruct reftable_log_record todo[2] = { { NULL } };\n \t\tfill_reftable_log_record(&todo[0]);\n \t\tfill_reftable_log_record(&todo[1]);\n\n@@ -688,12 +688,12 @@ reftable_for_each_reflog_ent_newest_first(struct ref_store *ref_store,\n \t\t\t\t\t  const char *refname,\n \t\t\t\t\t  each_reflog_ent_fn fn, void *cb_data)\n {\n-\tstruct reftable_iterator it = {};\n+\tstruct reftable_iterator it = { NULL };\n \tstruct git_reftable_ref_store *refs =\n \t\t(struct git_reftable_ref_store *)ref_store;\n \tstruct reftable_merged_table *mt = NULL;\n \tint err = 0;\n-\tstruct reftable_log_record log = {};\n+\tstruct reftable_log_record log = { NULL };\n\n \tif (refs->err < 0) {\n \t\treturn refs->err;\n@@ -712,8 +712,8 @@ reftable_for_each_reflog_ent_newest_first(struct ref_store *ref_store,\n \t\t}\n\n \t\t{\n-\t\t\tstruct object_id old_oid = {};\n-\t\t\tstruct object_id new_oid = {};\n+\t\t\tstruct object_id old_oid;\n+\t\t\tstruct object_id new_oid;\n \t\t\tconst char *full_committer = \"\";\n\n \t\t\thashcpy(old_oid.hash, log.old_hash);\n@@ -744,7 +744,7 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n \t\t\t\t\t  const char *refname,\n \t\t\t\t\t  each_reflog_ent_fn fn, void *cb_data)\n {\n-\tstruct reftable_iterator it = {};\n+\tstruct reftable_iterator it = { NULL };\n \tstruct git_reftable_ref_store *refs =\n \t\t(struct git_reftable_ref_store *)ref_store;\n \tstruct reftable_merged_table *mt = NULL;\n@@ -760,7 +760,7 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n \terr = reftable_merged_table_seek_log(mt, &it, refname);\n\n \twhile (err == 0) {\n-\t\tstruct reftable_log_record log = {};\n+\t\tstruct reftable_log_record log = { NULL };\n \t\terr = reftable_iterator_next_log(it, &log);\n \t\tif (err != 0) {\n \t\t\tbreak;\n@@ -780,8 +780,8 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n\n \tfor (int i = len; i--;) {\n \t\tstruct reftable_log_record *log = &logs[i];\n-\t\tstruct object_id old_oid = {};\n-\t\tstruct object_id new_oid = {};\n+\t\tstruct object_id old_oid;\n+\t\tstruct object_id new_oid;\n \t\tconst char *full_committer = \"\";\n\n \t\thashcpy(old_oid.hash, log->old_hash);\n@@ -903,8 +903,8 @@ static int reftable_reflog_expire(struct ref_store *ref_store,\n \tstruct reflog_expiry_arg arg = {\n \t\t.refs = refs,\n \t};\n-\tstruct reftable_log_record log = {};\n-\tstruct reftable_iterator it = {};\n+\tstruct reftable_log_record log = { NULL };\n+\tstruct reftable_iterator it = { NULL };\n \tint err = 0;\n \tif (refs->err < 0) {\n \t\treturn refs->err;\n@@ -917,8 +917,8 @@ static int reftable_reflog_expire(struct ref_store *ref_store,\n \t}\n\n \twhile (1) {\n-\t\tstruct object_id ooid = {};\n-\t\tstruct object_id noid = {};\n+\t\tstruct object_id ooid;\n+\t\tstruct object_id noid;\n\n \t\tint err = reftable_iterator_next_log(it, &log);\n \t\tif (err < 0) {\n@@ -950,7 +950,7 @@ static int reftable_read_raw_ref(struct ref_store *ref_store,\n {\n \tstruct git_reftable_ref_store *refs =\n \t\t(struct git_reftable_ref_store *)ref_store;\n-\tstruct reftable_ref_record ref = {};\n+\tstruct reftable_ref_record ref = { NULL };\n \tint err = 0;\n \tif (refs->err < 0) {\n \t\treturn refs->err;\n-- snap --\n\nThis patch should fix the `vs-build` job in the Azure Pipeline as well as\nin the GitHub workflow.\n\nHowever, it does _not_ fix the test failure on Windows. When I tried to\ninvestigate this, I wanted to compare the results between Windows and\nLinux (WSL, of course, it is a major time saver for me these days because\nI don't have to power up a VM, and I can access WSL files from Windows and\nvice versa), and it turns out that the `000000000002-000000000002.ref`\nfile is different, it even has different sizes (242 bytes on Windows\ninstead of 268 bytes on Linux), and notably it contains the string `HEAD`\non Windows and `refs/heads/master` on Linux, but not vice versa.\n\nSo I dug a bit deeper and was stopped rudely by the fact that the\nt0031-reftable.sh script produces different output every time it runs.\nBecause it does not even use `test_commit`.\n\nTherefore, let me present you with this patch (whose commit message\nconveys a rather alarming indication that this endeavor of fixing\n`reftable` could become a major time sink):\n\n-- snip -\nFrom 6ba47e70a2eb8efe2116c12eb950ddb90c473d11 Mon Sep 17 00:00:00 2001\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\nDate: Fri, 10 Apr 2020 16:10:53 +0200\nSubject: [PATCH] fixup??? Reftable support for git-core\n\nThe test for the reftable functionality should use the convenience\nfunctions we provide for test scripts. Using `test_commit` in particular\ndoes help with reproducible output (otherwise the SHA-1s will change\ntogether with the time the tests were run).\n\nCurrently, this here seemingly innocuous change causes quite a few\nwarnings throughout the test, though, e.g. this slur of warnings when\ncommitting the last commit in the test script:\n\n\twarning: bad replace ref name: e\n\twarning: bad replace ref name: ber-1\n\twarning: bad replace ref name: ber-2\n\twarning: bad replace ref name: ber-3\n\twarning: bad replace ref name: ber-4\n\twarning: bad replace ref name: ber-5\n\twarning: bad replace ref name: ber-6\n\twarning: bad replace ref name: ber-7\n\twarning: bad replace ref name: ber-8\n\twarning: bad replace ref name: ber-9\n\nThis is notably _not_ a problem that was introduced by this here patch,\nof course, but a very real concern about the reftable patches, most\nlikely the big one that introduces the reftable library in one fell\nswoop.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n t/t0031-reftable.sh | 20 +++++++++-----------\n 1 file changed, 9 insertions(+), 11 deletions(-)\n\ndiff --git a/t/t0031-reftable.sh b/t/t0031-reftable.sh\nindex 3ebf13c2f42..4bc7bd8167f 100755\n--- a/t/t0031-reftable.sh\n+++ b/t/t0031-reftable.sh\n@@ -8,28 +8,26 @@ test_description='reftable basics'\n . ./test-lib.sh\n\n test_expect_success 'basic operation of reftable storage' '\n-\tgit init --ref-storage=reftable repo && (\n-\tcd repo &&\n-\techo \"hello\" >world.txt &&\n-\tgit add world.txt &&\n-\tgit commit -m \"first post\" &&\n-\ttest_write_lines HEAD refs/heads/master >expect &&\n+\trm -rf .git &&\n+\tgit init --ref-storage=reftable &&\n+\tmv .git/hooks .git/hooks-disabled &&\n+\ttest_commit file &&\n+\ttest_write_lines HEAD refs/heads/master refs/tags/file >expect &&\n \tgit show-ref &&\n \tgit show-ref | cut -f2 -d\" \" > actual &&\n \ttest_cmp actual expect &&\n \tfor count in $(test_seq 1 10)\n \tdo\n-\t\techo \"hello\" >>world.txt\n-\t\tgit commit -m \"number ${count}\" world.txt ||\n+\t\ttest_commit \"number $count\" file.t $count number-$count ||\n \t\treturn 1\n \tdone &&\n \tgit gc &&\n-\tnfiles=$(ls -1 .git/reftable | wc -l ) &&\n-\ttest ${nfiles} = \"2\" &&\n+\tls -1 .git/reftable >table-files &&\n+\ttest_line_count = 2 table-files &&\n \tgit reflog refs/heads/master >output &&\n \ttest_line_count = 11 output &&\n \tgrep \"commit (initial): first post\" output &&\n-\tgrep \"commit: number 10\" output )\n+\tgrep \"commit: number 10\" output\n '\n\n test_done\n-- snap --\n\nWhile I am very happy with the post-image of this diff, I am super unhappy\nabout the output of it. It makes me believe that this `reftable` patch\nseries is in serious need of being \"incrementalized\" _after the fact_.\nOtherwise it will be simply impossible to build enough confidence in the\ncorrectness of it, especially given the fact that it obviously does some\nincorrect things right now (see the \"bad replace ref name\" warning\nmentioned above).\n\nI'll take a break from this now, but I would like to encourage you to\napply both patches as `SQUASH???` on top of `hn/reftable` for the time\nbeing.\n\nCiao,\nDscho\n\n>\n>\n> [References]\n>\n> *1* https://github.com/git/git/actions/runs/74687673 is 'pu' with\n>  all cooking topics.\n>\n> *2* https://github.com/git/git/actions/runs/74741625 is 'pu' with\n>  some topics excluded.\n>\n>\n"},{"id":"395189","messageId":"nycvar.QRO.7.76.6.2004101636150.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004101604210.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-10T14:37:27Z","receivedAt":"2020-04-10T14:37:34Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nme again, just quickly, because the `t0031-reftable.sh --valgrind` run\njust came back with this:\n\n-- snip --\n[...]\n+ git gc\n==28394== error calling PR_SET_PTRACER, vgdb might block\n==28399== error calling PR_SET_PTRACER, vgdb might block\n==28399== error calling PR_SET_PTRACER, vgdb might block\n==28404== error calling PR_SET_PTRACER, vgdb might block\n==28404== Invalid read of size 1\n==28404==    at 0x4C32CF2: strlen (in\n/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)\n==28404==    by 0x551D9AD: strdup (strdup.c:41)\n==28404==    by 0x39D15A: xstrdup (wrapper.c:29)\n==28404==    by 0x3DA9CA: reftable_log_record_copy_from (record.c:605)\n==28404==    by 0x3DB844: record_copy_from (record.c:968)\n==28404==    by 0x3D64B3: merged_iter_next (merged.c:117)\n==28404==    by 0x3D656B: merged_iter_next_void (merged.c:131)\n==28404==    by 0x3D597D: iterator_next (iter.c:45)\n==28404==    by 0x3D5AD2: reftable_iterator_next_log (iter.c:71)\n==28404==    by 0x3DE037: stack_write_compact (stack.c:718)\n==28404==    by 0x3DDBEA: stack_compact_locked (stack.c:632)\n==28404==    by 0x3DE5AD: stack_compact_range (stack.c:847)\n==28404==  Address 0x0 is not stack'd, malloc'd or (recently) free'd\n==28404==\n{\n   <insert_a_suppression_name_here>\n   Memcheck:Addr1\n   fun:strlen\n   fun:strdup\n   fun:xstrdup\n   fun:reftable_log_record_copy_from\n   fun:record_copy_from\n   fun:merged_iter_next\n   fun:merged_iter_next_void\n   fun:iterator_next\n   fun:reftable_iterator_next_log\n   fun:stack_write_compact\n   fun:stack_compact_locked\n   fun:stack_compact_range\n}\n==28404==\n==28404== Process terminating with default action of signal 11 (SIGSEGV)\n==28404==  Access not within mapped region at address 0x0\n==28404==    at 0x4C32CF2: strlen (in\n/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)\n==28404==    by 0x551D9AD: strdup (strdup.c:41)\n==28404==    by 0x39D15A: xstrdup (wrapper.c:29)\n==28404==    by 0x3DA9CA: reftable_log_record_copy_from (record.c:605)\n==28404==    by 0x3DB844: record_copy_from (record.c:968)\n==28404==    by 0x3D64B3: merged_iter_next (merged.c:117)\n==28404==    by 0x3D656B: merged_iter_next_void (merged.c:131)\n==28404==    by 0x3D597D: iterator_next (iter.c:45)\n==28404==    by 0x3D5AD2: reftable_iterator_next_log (iter.c:71)\n==28404==    by 0x3DE037: stack_write_compact (stack.c:718)\n==28404==    by 0x3DDBEA: stack_compact_locked (stack.c:632)\n==28404==    by 0x3DE5AD: stack_compact_range (stack.c:847)\n==28404==  If you believe this happened as a result of a stack\n==28404==  overflow in your program's main thread (unlikely but\n==28404==  possible), you can try to increase the size of the\n==28404==  main thread stack using the --main-stacksize= flag.\n==28404==  The main thread stack size used in this run was 8388608.\nerror: reflog died of signal 11\nfatal: failed to run reflog\nerror: last command exited with $?=128\n-- snap --\n\nBut now _really_ want to take a break from this,\nDscho\n\nOn Fri, 10 Apr 2020, Johannes Schindelin wrote:\n\n> Hi Junio,\n>\n> On Thu, 9 Apr 2020, Junio C Hamano wrote:\n>\n> > Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:\n> >\n> > > Our Azure Pipeline has served us well over the course of the past year or\n> > > so, steadily catching issues before the respective patches hit the next\n> > > branch.\n> > >\n> > > There is a GitHub-native CI system now, though, called \"GitHub Actions\"\n> > > [https://github.com/features/actions] which is essentially on par with Azure\n> > > Pipelines as far as our needs are concerned, and it brings a couple of\n> > > advantages:\n> > >\n> > >  * It is substantially easier to set up than Azure Pipelines: all you need\n> > >    is to add the YAML-based build definition, push to your fork on GitHub,\n> > >    and that's it.\n> > >  * The syntax is a bit easier to read than Azure Pipelines'.\n> > >  * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n> > >    jobs).\n> > >\n> > > With this change, users also no longer need to open a PR at\n> > > https://github.com/git/git or at https://github.com/gitgitgadget/git just to\n> > > get the benefit of a CI build.\n> > >\n> > > Sample run on top of dd/ci-musl-libc with dd/test-with-busybox merged:\n> > > https://github.com/sgn/git/actions/runs/73179413\n> > >\n> > > Sample run when this series applied into git-for-windows\n> > > https://github.com/git-for-windows/git/runs/568625109\n> > >\n> > > Change from v3:\n> > > - Use build matrix\n> > > - All dependencies are install by scripts\n> > > - stop repeating environment variables\n> > > - build failure's artifacts will be uploaded\n> >\n> > I did not see any particular thing that is bad in any of the three\n> > series involved; do people have further comments?\n>\n> FWIW I consider this work good enough that I already merged it into Git\n> for Windows. It should make it easier for contributors to test their\n> branches \"privately\", in their own forks, before opening a PR (most people\n> do not like to have relatively trivial issues pointed out by fellow human\n> beings, but are much more okay with machines telling them what needs to be\n> improved).\n>\n> Please mark this up as a vote of confidence from my side.\n>\n> > I am not exactly happy that these had to be queued on top of a merge\n> > of two topics in flight, which makes it cumbersome to deal with a\n> > breakage in these two other topics, though, but that would be a pain\n> > only until these two topics prove to be stable enough to build on.\n>\n> Yes, and the fact that `ci-musl-libc` was _not_ based on top of\n> `test-with-busybox` makes it a bit more awkward. I, for one, had totally\n> missed that the latter patch series is _required_ in order to make the\n> former work correctly. Hunting for the cause for almost an hour until Danh\n> kindly pointed out that he had fixed all the issues in `test-with-busybox`\n> already.\n>\n> > Judging from two CI runs for 'pu' ([*1*] and [*2*]), among the\n> > topics that are cooking, there are only a few topics that these\n> > tests are unhappy about.  Perhaps those on Windows can help these\n> > topics to pass these tests?\n>\n> I would like to point out that there is only one single topic that is\n> cause for sorrow here, and it is the reftable one.\n>\n> Before going further, let me point out that the `pu` branch has been\n> broken for quite a long time now, primarily because of `bugreport` and...\n> of course because of `reftable`. Whenever `pu` included `reftable`, the CI\n> builds failed. So these `reftable` problems are not a good reason, in my\n> mind, to hold up the GitHub workflow patches from advancing.\n>\n> Seeing the short stat `35 files changed, 6719 insertions(+)` of even a\n> single patch in the `reftable` patch series _really_ does not entice me to\n> spend time even looking at it, certainly not at a time when I am short on\n> time, let alone to try to find time to fix it.\n>\n> However, since you asked so nicely, I did start to look into it. First,\n> let me present you the less controversial of two patches I want to show\n> you:\n>\n> -- snip --\n> From 5f42a3f6ef9cf7d90bd274e55539b145cae40e28 Mon Sep 17 00:00:00 2001\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> Date: Fri, 10 Apr 2020 14:23:40 +0200\n> Subject: [PATCH] fixup??? Reftable support for git-core\n>\n> As I had already pointed out over a month ago in\n> https://github.com/gitgitgadget/git/pull/539#issuecomment-589157008 this\n> C code violates the C standard, and MS Visual C is not as lenient as\n> GCC/clang on it: `struct`s cannot be initialized with `= {}`.\n>\n> Compile errors aside, while this code conforms to the C syntax, it feels\n> more like Java when it initializes e.g. `struct object_id` only to\n> _immediately_ overwrite the contents.\n>\n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> ---\n>  refs/reftable-backend.c | 52 ++++++++++++++++++++---------------------\n>  1 file changed, 26 insertions(+), 26 deletions(-)\n>\n> diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c\n> index 6e845e9c649..20c94bb403b 100644\n> --- a/refs/reftable-backend.c\n> +++ b/refs/reftable-backend.c\n> @@ -31,7 +31,7 @@ static void clear_reftable_log_record(struct reftable_log_record *log)\n>  static void fill_reftable_log_record(struct reftable_log_record *log)\n>  {\n>  \tconst char *info = git_committer_info(0);\n> -\tstruct ident_split split = {};\n> +\tstruct ident_split split = { NULL };\n>  \tint result = split_ident_line(&split, info, strlen(info));\n>  \tint sign = 1;\n>  \tassert(0 == result);\n> @@ -230,7 +230,7 @@ static int reftable_transaction_abort(struct ref_store *ref_store,\n>  static int reftable_check_old_oid(struct ref_store *refs, const char *refname,\n>  \t\t\t\t  struct object_id *want_oid)\n>  {\n> -\tstruct object_id out_oid = {};\n> +\tstruct object_id out_oid;\n>  \tint out_flags = 0;\n>  \tconst char *resolved = refs_resolve_ref_unsafe(\n>  \t\trefs, refname, RESOLVE_REF_READING, &out_oid, &out_flags);\n> @@ -287,14 +287,14 @@ static int write_transaction_table(struct reftable_writer *writer, void *arg)\n>  \t\tlog->message = u->msg;\n>\n>  \t\tif (u->flags & REF_HAVE_NEW) {\n> -\t\t\tstruct object_id out_oid = {};\n> +\t\t\tstruct object_id out_oid;\n>  \t\t\tint out_flags = 0;\n>  \t\t\t/* Memory owned by refs_resolve_ref_unsafe, no need to\n>  \t\t\t * free(). */\n>  \t\t\tconst char *resolved = refs_resolve_ref_unsafe(\n>  \t\t\t\ttransaction->ref_store, u->refname, 0, &out_oid,\n>  \t\t\t\t&out_flags);\n> -\t\t\tstruct reftable_ref_record ref = {};\n> +\t\t\tstruct reftable_ref_record ref = { NULL };\n>  \t\t\tref.ref_name =\n>  \t\t\t\t(char *)(resolved ? resolved : u->refname);\n>  \t\t\tlog->ref_name = ref.ref_name;\n> @@ -376,8 +376,8 @@ static int write_delete_refs_table(struct reftable_writer *writer, void *argv)\n>  \t}\n>\n>  \tfor (int i = 0; i < arg->refnames->nr; i++) {\n> -\t\tstruct reftable_log_record log = {};\n> -\t\tstruct reftable_ref_record current = {};\n> +\t\tstruct reftable_log_record log = { NULL };\n> +\t\tstruct reftable_ref_record current = { NULL };\n>  \t\tfill_reftable_log_record(&log);\n>  \t\tlog.message = xstrdup(arg->logmsg);\n>  \t\tlog.new_hash = NULL;\n> @@ -455,10 +455,10 @@ static int write_create_symref_table(struct reftable_writer *writer, void *arg)\n>  \t}\n>\n>  \t{\n> -\t\tstruct reftable_log_record log = {};\n> -\t\tstruct object_id new_oid = {};\n> -\t\tstruct object_id old_oid = {};\n> -\t\tstruct reftable_ref_record current = {};\n> +\t\tstruct reftable_log_record log = { NULL };\n> +\t\tstruct object_id new_oid;\n> +\t\tstruct object_id old_oid;\n> +\t\tstruct reftable_ref_record current = { NULL };\n>  \t\treftable_stack_read_ref(create->refs->stack, create->refname, &current);\n>\n>  \t\tfill_reftable_log_record(&log);\n> @@ -513,7 +513,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n>  {\n>  \tstruct write_rename_arg *arg = (struct write_rename_arg *)argv;\n>  \tuint64_t ts = reftable_stack_next_update_index(arg->stack);\n> -\tstruct reftable_ref_record ref = {};\n> +\tstruct reftable_ref_record ref = { NULL };\n>  \tint err = reftable_stack_read_ref(arg->stack, arg->oldname, &ref);\n>\n>  \tif (err) {\n> @@ -531,7 +531,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n>  \tref.update_index = ts;\n>\n>  \t{\n> -\t\tstruct reftable_ref_record todo[2] = {};\n> +\t\tstruct reftable_ref_record todo[2] = { { NULL } };\n>  \t\ttodo[0].ref_name = (char *)arg->oldname;\n>  \t\ttodo[0].update_index = ts;\n>  \t\t/* leave todo[0] empty */\n> @@ -545,7 +545,7 @@ static int write_rename_table(struct reftable_writer *writer, void *argv)\n>  \t}\n>\n>  \tif (ref.value != NULL) {\n> -\t\tstruct reftable_log_record todo[2] = {};\n> +\t\tstruct reftable_log_record todo[2] = { { NULL } };\n>  \t\tfill_reftable_log_record(&todo[0]);\n>  \t\tfill_reftable_log_record(&todo[1]);\n>\n> @@ -688,12 +688,12 @@ reftable_for_each_reflog_ent_newest_first(struct ref_store *ref_store,\n>  \t\t\t\t\t  const char *refname,\n>  \t\t\t\t\t  each_reflog_ent_fn fn, void *cb_data)\n>  {\n> -\tstruct reftable_iterator it = {};\n> +\tstruct reftable_iterator it = { NULL };\n>  \tstruct git_reftable_ref_store *refs =\n>  \t\t(struct git_reftable_ref_store *)ref_store;\n>  \tstruct reftable_merged_table *mt = NULL;\n>  \tint err = 0;\n> -\tstruct reftable_log_record log = {};\n> +\tstruct reftable_log_record log = { NULL };\n>\n>  \tif (refs->err < 0) {\n>  \t\treturn refs->err;\n> @@ -712,8 +712,8 @@ reftable_for_each_reflog_ent_newest_first(struct ref_store *ref_store,\n>  \t\t}\n>\n>  \t\t{\n> -\t\t\tstruct object_id old_oid = {};\n> -\t\t\tstruct object_id new_oid = {};\n> +\t\t\tstruct object_id old_oid;\n> +\t\t\tstruct object_id new_oid;\n>  \t\t\tconst char *full_committer = \"\";\n>\n>  \t\t\thashcpy(old_oid.hash, log.old_hash);\n> @@ -744,7 +744,7 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n>  \t\t\t\t\t  const char *refname,\n>  \t\t\t\t\t  each_reflog_ent_fn fn, void *cb_data)\n>  {\n> -\tstruct reftable_iterator it = {};\n> +\tstruct reftable_iterator it = { NULL };\n>  \tstruct git_reftable_ref_store *refs =\n>  \t\t(struct git_reftable_ref_store *)ref_store;\n>  \tstruct reftable_merged_table *mt = NULL;\n> @@ -760,7 +760,7 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n>  \terr = reftable_merged_table_seek_log(mt, &it, refname);\n>\n>  \twhile (err == 0) {\n> -\t\tstruct reftable_log_record log = {};\n> +\t\tstruct reftable_log_record log = { NULL };\n>  \t\terr = reftable_iterator_next_log(it, &log);\n>  \t\tif (err != 0) {\n>  \t\t\tbreak;\n> @@ -780,8 +780,8 @@ reftable_for_each_reflog_ent_oldest_first(struct ref_store *ref_store,\n>\n>  \tfor (int i = len; i--;) {\n>  \t\tstruct reftable_log_record *log = &logs[i];\n> -\t\tstruct object_id old_oid = {};\n> -\t\tstruct object_id new_oid = {};\n> +\t\tstruct object_id old_oid;\n> +\t\tstruct object_id new_oid;\n>  \t\tconst char *full_committer = \"\";\n>\n>  \t\thashcpy(old_oid.hash, log->old_hash);\n> @@ -903,8 +903,8 @@ static int reftable_reflog_expire(struct ref_store *ref_store,\n>  \tstruct reflog_expiry_arg arg = {\n>  \t\t.refs = refs,\n>  \t};\n> -\tstruct reftable_log_record log = {};\n> -\tstruct reftable_iterator it = {};\n> +\tstruct reftable_log_record log = { NULL };\n> +\tstruct reftable_iterator it = { NULL };\n>  \tint err = 0;\n>  \tif (refs->err < 0) {\n>  \t\treturn refs->err;\n> @@ -917,8 +917,8 @@ static int reftable_reflog_expire(struct ref_store *ref_store,\n>  \t}\n>\n>  \twhile (1) {\n> -\t\tstruct object_id ooid = {};\n> -\t\tstruct object_id noid = {};\n> +\t\tstruct object_id ooid;\n> +\t\tstruct object_id noid;\n>\n>  \t\tint err = reftable_iterator_next_log(it, &log);\n>  \t\tif (err < 0) {\n> @@ -950,7 +950,7 @@ static int reftable_read_raw_ref(struct ref_store *ref_store,\n>  {\n>  \tstruct git_reftable_ref_store *refs =\n>  \t\t(struct git_reftable_ref_store *)ref_store;\n> -\tstruct reftable_ref_record ref = {};\n> +\tstruct reftable_ref_record ref = { NULL };\n>  \tint err = 0;\n>  \tif (refs->err < 0) {\n>  \t\treturn refs->err;\n> -- snap --\n>\n> This patch should fix the `vs-build` job in the Azure Pipeline as well as\n> in the GitHub workflow.\n>\n> However, it does _not_ fix the test failure on Windows. When I tried to\n> investigate this, I wanted to compare the results between Windows and\n> Linux (WSL, of course, it is a major time saver for me these days because\n> I don't have to power up a VM, and I can access WSL files from Windows and\n> vice versa), and it turns out that the `000000000002-000000000002.ref`\n> file is different, it even has different sizes (242 bytes on Windows\n> instead of 268 bytes on Linux), and notably it contains the string `HEAD`\n> on Windows and `refs/heads/master` on Linux, but not vice versa.\n>\n> So I dug a bit deeper and was stopped rudely by the fact that the\n> t0031-reftable.sh script produces different output every time it runs.\n> Because it does not even use `test_commit`.\n>\n> Therefore, let me present you with this patch (whose commit message\n> conveys a rather alarming indication that this endeavor of fixing\n> `reftable` could become a major time sink):\n>\n> -- snip -\n> From 6ba47e70a2eb8efe2116c12eb950ddb90c473d11 Mon Sep 17 00:00:00 2001\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> Date: Fri, 10 Apr 2020 16:10:53 +0200\n> Subject: [PATCH] fixup??? Reftable support for git-core\n>\n> The test for the reftable functionality should use the convenience\n> functions we provide for test scripts. Using `test_commit` in particular\n> does help with reproducible output (otherwise the SHA-1s will change\n> together with the time the tests were run).\n>\n> Currently, this here seemingly innocuous change causes quite a few\n> warnings throughout the test, though, e.g. this slur of warnings when\n> committing the last commit in the test script:\n>\n> \twarning: bad replace ref name: e\n> \twarning: bad replace ref name: ber-1\n> \twarning: bad replace ref name: ber-2\n> \twarning: bad replace ref name: ber-3\n> \twarning: bad replace ref name: ber-4\n> \twarning: bad replace ref name: ber-5\n> \twarning: bad replace ref name: ber-6\n> \twarning: bad replace ref name: ber-7\n> \twarning: bad replace ref name: ber-8\n> \twarning: bad replace ref name: ber-9\n>\n> This is notably _not_ a problem that was introduced by this here patch,\n> of course, but a very real concern about the reftable patches, most\n> likely the big one that introduces the reftable library in one fell\n> swoop.\n>\n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> ---\n>  t/t0031-reftable.sh | 20 +++++++++-----------\n>  1 file changed, 9 insertions(+), 11 deletions(-)\n>\n> diff --git a/t/t0031-reftable.sh b/t/t0031-reftable.sh\n> index 3ebf13c2f42..4bc7bd8167f 100755\n> --- a/t/t0031-reftable.sh\n> +++ b/t/t0031-reftable.sh\n> @@ -8,28 +8,26 @@ test_description='reftable basics'\n>  . ./test-lib.sh\n>\n>  test_expect_success 'basic operation of reftable storage' '\n> -\tgit init --ref-storage=reftable repo && (\n> -\tcd repo &&\n> -\techo \"hello\" >world.txt &&\n> -\tgit add world.txt &&\n> -\tgit commit -m \"first post\" &&\n> -\ttest_write_lines HEAD refs/heads/master >expect &&\n> +\trm -rf .git &&\n> +\tgit init --ref-storage=reftable &&\n> +\tmv .git/hooks .git/hooks-disabled &&\n> +\ttest_commit file &&\n> +\ttest_write_lines HEAD refs/heads/master refs/tags/file >expect &&\n>  \tgit show-ref &&\n>  \tgit show-ref | cut -f2 -d\" \" > actual &&\n>  \ttest_cmp actual expect &&\n>  \tfor count in $(test_seq 1 10)\n>  \tdo\n> -\t\techo \"hello\" >>world.txt\n> -\t\tgit commit -m \"number ${count}\" world.txt ||\n> +\t\ttest_commit \"number $count\" file.t $count number-$count ||\n>  \t\treturn 1\n>  \tdone &&\n>  \tgit gc &&\n> -\tnfiles=$(ls -1 .git/reftable | wc -l ) &&\n> -\ttest ${nfiles} = \"2\" &&\n> +\tls -1 .git/reftable >table-files &&\n> +\ttest_line_count = 2 table-files &&\n>  \tgit reflog refs/heads/master >output &&\n>  \ttest_line_count = 11 output &&\n>  \tgrep \"commit (initial): first post\" output &&\n> -\tgrep \"commit: number 10\" output )\n> +\tgrep \"commit: number 10\" output\n>  '\n>\n>  test_done\n> -- snap --\n>\n> While I am very happy with the post-image of this diff, I am super unhappy\n> about the output of it. It makes me believe that this `reftable` patch\n> series is in serious need of being \"incrementalized\" _after the fact_.\n> Otherwise it will be simply impossible to build enough confidence in the\n> correctness of it, especially given the fact that it obviously does some\n> incorrect things right now (see the \"bad replace ref name\" warning\n> mentioned above).\n>\n> I'll take a break from this now, but I would like to encourage you to\n> apply both patches as `SQUASH???` on top of `hn/reftable` for the time\n> being.\n>\n> Ciao,\n> Dscho\n>\n> >\n> >\n> > [References]\n> >\n> > *1* https://github.com/git/git/actions/runs/74687673 is 'pu' with\n> >  all cooking topics.\n> >\n> > *2* https://github.com/git/git/actions/runs/74741625 is 'pu' with\n> >  some topics excluded.\n> >\n> >\n"},{"id":"395193","messageId":"20200410153131.GM2224@szeder.dev","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004042207410.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2020-04-10T15:31:31Z","receivedAt":"2020-04-10T15:31:38Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Sat, Apr 04, 2020 at 10:08:56PM +0200, Johannes Schindelin wrote:\n\n> > > +\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n> >\n> > Hmm, if \"macos\" isn't not equal to $CI_OS_NAME, then set\n> > CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n> >\n> >   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n> >\n> > would read better.\n> \n> I can understand where you come from, but your code is not `set -e` safe,\n\nIt works as expected in at least in dash, Bash, BusyBox sh, ksh,\nksh93, mksh/lksh, yash, posh, FreeBSD /bin/sh, NetBSD /bin/sh.  But it\ndoesn't really matter.\n\nThis is not in the part of Git that should run on a wide variety of\nplatforms, but only in our CI systems, where we do know which system\nand which shell we use, and we can rely on that it just works.\n\n> which is the reason why I wrote the code this way (compare to the already\n> existing code in the previous clause, which was copy-edited here).\n\nDidn't like it there, either.\n\n"},{"id":"395195","messageId":"xmqq1rovl54d.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004101604210.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-10T15:42:10Z","receivedAt":"2020-04-10T15:42:18Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> Judging from two CI runs for 'pu' ([*1*] and [*2*]), among the\n>> topics that are cooking, there are only a few topics that these\n>> tests are unhappy about.  Perhaps those on Windows can help these\n>> topics to pass these tests?\n>\n> I would like to point out that there is only one single topic that is\n> cause for sorrow here, and it is the reftable one.\n\nI first thought so, too, but vsbuild failures like the one in\nhttps://github.com/git/git/runs/575116793 do not appear to be\ncaused by that topic (6a8c1d17b8 excludes reftable), so there\nmust be somebody else that is broken.\n\nAn all green build https://github.com/git/git/actions/runs/74741625\nwas my attempt to see how ready these tests are (not 'how ready\nother topics are to be tested by this topic) by moving the\nswap-azure-pipelines-with-github-actions topic early in 'pu',\ntemporarily discarding many other topics, and pushing it out, by the\nway.\n"},{"id":"395196","messageId":"20200410155322.GN2224@szeder.dev","threadId":"53143","inReplyTo":"4f80724641e17bf0d1937dbad77f987fbf86cd64.1586309211.git.congdanhqx@gmail.com","subject":"Re: [PATCH v4 05/12] ci: explicit install all required packages","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2020-04-10T15:53:22Z","receivedAt":"2020-04-10T15:53:31Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Wed, Apr 08, 2020 at 11:05:36AM +0700, Đoàn Trần Công Danh wrote:\n> In a later patch, we will support GitHub Action.\n> \n> Explicitly install all of our build dependencies.\n\n... on Linux.  This patch doesn't touch the parts installing\ndependencies in the osx jobs, but we do rely on some packages being\ninstalled by default in the osx images we use.  This is worth\nclarifying in the commit message, and in its subject line.\n\n> Since GitHub Action VM hasn't install our build dependencies, yet.\n\ns/install/installed/\nI'm not sure what you mean with \"yet\".\n\n> And there're no harm to reinstall them (in Travis)\n\n> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n> ---\n>  ci/install-dependencies.sh | 14 ++++++++++++--\n>  1 file changed, 12 insertions(+), 2 deletions(-)\n> \n> diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n> index 497fd32ca8..371902bb75 100755\n> --- a/ci/install-dependencies.sh\n> +++ b/ci/install-dependencies.sh\n> @@ -7,12 +7,17 @@\n>  \n>  P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION\n>  LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION\n> +UBUNTU_COMMON_PKGS=\"make libssl-dev libcurl4-openssl-dev libexpat-dev\n> + perl-modules liberror-perl tcl tk gettext zlib1g-dev apache2\n> + libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl\n> + libnet-smtp-ssl-perl\"\n\nI note that this list includes 'make' and 'apache2'.\n\n>  case \"$jobname\" in\n>  linux-clang|linux-gcc)\n>  \tsudo apt-add-repository -y \"ppa:ubuntu-toolchain-r/test\"\n>  \tsudo apt-get -q update\n> -\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2\n> +\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2 \\\n\n'apache2' is listed here again.\n\n> +\t\t$UBUNTU_COMMON_PKGS\n>  \tcase \"$jobname\" in\n>  \tlinux-gcc)\n>  \t\tsudo apt-get -q -y install gcc-8\n> @@ -63,11 +68,16 @@ StaticAnalysis)\n>  \t;;\n>  Documentation)\n>  \tsudo apt-get -q update\n> -\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns\n> +\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns \\\n> +\t\tlibcurl4-openssl-dev\n\nDoes the Documentation job really need the 'libcurl4-openssl-dev'\npackage?  FWIW, I just removed this package from my system, and 'make\ndoc' still succeeded.\n\nFurthermore, this doesn't install 'make', though in other jobs it is\ninstalled explicitly.  Note that the StaticAnalysis job requires\n'make' as well.\n\nAlso note that we have a 'linux-gcc-4.8' job as well...\n\n>  \n>  \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n>  \tgem install --version 1.5.8 asciidoctor\n>  \t;;\n> +GETTEXT_POISON)\n> +\tsudo apt-get -q update\n> +\tsudo apt-get -q -y install $UBUNTU_COMMON_PKGS\n\nThe GETTEXT_POISON job currently doesn't install 'apache2', but with\nthis change it will.  If this change is intentional, then please\njustify it in the commit message.  But I think that we shouldn't\ninclude 'apache2' in $UBUNTU_COMMON_PKGS.\n\n> +\t;;\n>  esac\n>  \n>  if type p4d >/dev/null && type p4 >/dev/null\n> -- \n> 2.26.0.334.g6536db25bb\n> \n"},{"id":"395198","messageId":"20200410160741.GA12360@danh.dev","threadId":"53143","inReplyTo":"20200410155322.GN2224@szeder.dev","subject":"Re: [PATCH v4 05/12] ci: explicit install all required packages","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T16:07:41Z","receivedAt":"2020-04-10T16:07:47Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-10 17:53:22+0200, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n> On Wed, Apr 08, 2020 at 11:05:36AM +0700, Đoàn Trần Công Danh wrote:\n> > In a later patch, we will support GitHub Action.\n> > \n> > Explicitly install all of our build dependencies.\n> \n> ... on Linux.  This patch doesn't touch the parts installing\n> dependencies in the osx jobs, but we do rely on some packages being\n> installed by default in the osx images we use.  This is worth\n> clarifying in the commit message, and in its subject line.\n\nFair enough.\n\n> > Since GitHub Action VM hasn't install our build dependencies, yet.\n> \n> s/install/installed/\n\n> > +UBUNTU_COMMON_PKGS=\"make libssl-dev libcurl4-openssl-dev libexpat-dev\n> > + perl-modules liberror-perl tcl tk gettext zlib1g-dev apache2\n> > + libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl\n> > + libnet-smtp-ssl-perl\"\n> \n> I note that this list includes 'make' and 'apache2'.\n\nI'll remove apache2.\n\n> >  case \"$jobname\" in\n> >  linux-clang|linux-gcc)\n> >  \tsudo apt-add-repository -y \"ppa:ubuntu-toolchain-r/test\"\n> >  \tsudo apt-get -q update\n> > -\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2\n> > +\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2 \\\n> \n> 'apache2' is listed here again.\n> \n> > +\t\t$UBUNTU_COMMON_PKGS\n> >  \tcase \"$jobname\" in\n> >  \tlinux-gcc)\n> >  \t\tsudo apt-get -q -y install gcc-8\n> > @@ -63,11 +68,16 @@ StaticAnalysis)\n> >  \t;;\n> >  Documentation)\n> >  \tsudo apt-get -q update\n> > -\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns\n> > +\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns \\\n> > +\t\tlibcurl4-openssl-dev\n> \n> Does the Documentation job really need the 'libcurl4-openssl-dev'\n> package?  FWIW, I just removed this package from my system, and 'make\n> doc' still succeeded.\n\nAt the time of writing this series.\npu requires `curl-config` for Documentation jobs.\n\nSkimming over the mail archive, Peff has sent a patch to fix it.\nI haven't checked again, though.\n\n> Furthermore, this doesn't install 'make', though in other jobs it is\n> installed explicitly.  Note that the StaticAnalysis job requires\n> 'make' as well.\n\nI copied them from Azure Pipelines declaration.\nI think it's better to list make explicitly in all jobs.\n\n> Also note that we have a 'linux-gcc-4.8' job as well...\n\nWill do in the re-roll.\n\n\n> > +GETTEXT_POISON)\n> > +\tsudo apt-get -q update\n> > +\tsudo apt-get -q -y install $UBUNTU_COMMON_PKGS\n> \n> The GETTEXT_POISON job currently doesn't install 'apache2', but with\n> this change it will.  If this change is intentional, then please\n> justify it in the commit message.  But I think that we shouldn't\n> include 'apache2' in $UBUNTU_COMMON_PKGS.\n\nNo, this patch shouldn't change it.\nI will remove apache2 from $UBUNTU_COMMON_PKGS\n\n\n-- \nDanh\n"},{"id":"395199","messageId":"xmqqwo6njoqz.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200410160741.GA12360@danh.dev","subject":"Re: [PATCH v4 05/12] ci: explicit install all required packages","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-10T16:21:08Z","receivedAt":"2020-04-10T16:21:17Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Danh Doan <congdanhqx@gmail.com> writes:\n\n> On 2020-04-10 17:53:22+0200, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n> ...\n>> Furthermore, this doesn't install 'make', though in other jobs it is\n>> installed explicitly.  Note that the StaticAnalysis job requires\n>> 'make' as well.\n>\n> I copied them from Azure Pipelines declaration.\n> I think it's better to list make explicitly in all jobs.\n>\n>> Also note that we have a 'linux-gcc-4.8' job as well...\n>\n> Will do in the re-roll.\n> ...\n> No, this patch shouldn't change it.\n> I will remove apache2 from $UBUNTU_COMMON_PKGS\n\nThanks both for working together to trim excess bits and add back\nmissing bits to polish it.\n"},{"id":"395204","messageId":"cover.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"pull.743.git.git.1585658913.gitgitgadget@gmail.com","subject":"[PATCH v5 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:02Z","receivedAt":"2020-04-10T17:18:24Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"Our Azure Pipeline has served us well over the course of the past year or\nso, steadily catching issues before the respective patches hit the next\nbranch.\n\nThere is a GitHub-native CI system now, though, called \"GitHub Actions\"\n[https://github.com/features/actions] which is essentially on par with Azure\nPipelines as far as our needs are concerned, and it brings a couple of\nadvantages:\n\n * It is substantially easier to set up than Azure Pipelines: all you need\n   is to add the YAML-based build definition, push to your fork on GitHub,\n   and that's it.\n * The syntax is a bit easier to read than Azure Pipelines'.\n * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent\n   jobs).\n\nWith this change, users also no longer need to open a PR at\nhttps://github.com/git/git or at https://github.com/gitgitgadget/git just to\nget the benefit of a CI build.\n\nChange in v5 from v4:\n- cleanup on dependencies installation.\n\nChange in v4 from v3:\n- Use build matrix\n- All dependencies are install by scripts\n- stop repeating environment variables\n- build failure's artifacts will be uploaded\n\n*** BLURB HERE ***\n\nJohannes Schindelin (9):\n  ci/lib: if CI type is unknown, show the environment variables\n  ci/lib: allow running in GitHub Actions\n  ci: fix the `jobname` of the `GETTEXT_POISON` job\n  ci: run gem with sudo to install asciidoctor\n  README: add a build badge for the GitHub Actions runs\n  ci: retire the Azure Pipelines definition\n  tests: when run in Bash, annotate test failures with file name/line\n    number\n  ci: add a problem matcher for GitHub Actions\n  ci: let GitHub Actions upload failed tests' directories\n\nĐoàn Trần Công Danh (3):\n  ci/lib: set TERM environment variable if not exist\n  ci: explicit install all required packages\n  ci: configure GitHub Actions for CI/PR\n\n .github/workflows/main.yml  | 230 +++++++++++++++\n .travis.yml                 |   2 +-\n README.md                   |   2 +-\n azure-pipelines.yml         | 558 ------------------------------------\n ci/git-problem-matcher.json |  16 ++\n ci/install-dependencies.sh  |  16 +-\n ci/lib.sh                   |  31 +-\n ci/print-test-failures.sh   |   7 +\n t/test-lib.sh               |  14 +-\n 9 files changed, 309 insertions(+), 567 deletions(-)\n create mode 100644 .github/workflows/main.yml\n delete mode 100644 azure-pipelines.yml\n create mode 100644 ci/git-problem-matcher.json\n\nRange-diff against v4:\n 1:  2219bf3db9 =  1:  2219bf3db9 ci/lib: if CI type is unknown, show the environment variables\n 2:  2818799a4b =  2:  2818799a4b ci/lib: allow running in GitHub Actions\n 3:  b88586c2c5 =  3:  b88586c2c5 ci/lib: set TERM environment variable if not exist\n 4:  1df60e677c =  4:  1df60e677c ci: fix the `jobname` of the `GETTEXT_POISON` job\n 5:  4f80724641 !  5:  ac7e247bb3 ci: explicit install all required packages\n    @@ Commit message\n     \n         In a later patch, we will support GitHub Action.\n     \n    -    Explicitly install all of our build dependencies.\n    -    Since GitHub Action VM hasn't install our build dependencies, yet.\n    +    Explicitly install all of our build dependencies on Linux.\n    +    Since GitHub Action's Linux VM hasn't installed our build dependencies.\n         And there're no harm to reinstall them (in Travis)\n     \n         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n    @@ ci/install-dependencies.sh\n      P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION\n      LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION\n     +UBUNTU_COMMON_PKGS=\"make libssl-dev libcurl4-openssl-dev libexpat-dev\n    -+ perl-modules liberror-perl tcl tk gettext zlib1g-dev apache2\n    -+ libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl\n    -+ libnet-smtp-ssl-perl\"\n    ++ tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl\n    ++ libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl\"\n      \n      case \"$jobname\" in\n      linux-clang|linux-gcc)\n    @@ ci/install-dependencies.sh\n      \tcase \"$jobname\" in\n      \tlinux-gcc)\n      \t\tsudo apt-get -q -y install gcc-8\n    -@@ ci/install-dependencies.sh: StaticAnalysis)\n    +@@ ci/install-dependencies.sh: osx-clang|osx-gcc)\n    + StaticAnalysis)\n    + \tsudo apt-get -q update\n    + \tsudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \\\n    +-\t\tlibexpat-dev gettext\n    ++\t\tlibexpat-dev gettext make\n      \t;;\n      Documentation)\n      \tsudo apt-get -q update\n     -\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns\n    -+\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns \\\n    -+\t\tlibcurl4-openssl-dev\n    ++\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make\n      \n      \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n      \tgem install --version 1.5.8 asciidoctor\n      \t;;\n    -+GETTEXT_POISON)\n    ++linux-gcc-4.8|GETTEXT_POISON)\n     +\tsudo apt-get -q update\n     +\tsudo apt-get -q -y install $UBUNTU_COMMON_PKGS\n     +\t;;\n 6:  795ec656c6 <  -:  ---------- ci: run gem with sudo to install asciidoctor\n -:  ---------- >  6:  2fb9f2e2f2 ci: run gem with sudo to install asciidoctor\n 7:  ec0aa20119 =  7:  40fe4f7e2c ci: configure GitHub Actions for CI/PR\n 8:  46f2b6bce6 =  8:  09735fb1de README: add a build badge for the GitHub Actions runs\n 9:  92f2623dc7 =  9:  575b3afd3c ci: retire the Azure Pipelines definition\n10:  f688fa50d3 = 10:  ce00385987 tests: when run in Bash, annotate test failures with file name/line number\n11:  715d1f732f = 11:  3caeb0b7f4 ci: add a problem matcher for GitHub Actions\n12:  0908d5ab9b = 12:  8de46ee1c6 ci: let GitHub Actions upload failed tests' directories\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395205","messageId":"2219bf3db9e247f5f4fb5d518f22709909d57a1c.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 01/12] ci/lib: if CI type is unknown, show the environment variables","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:03Z","receivedAt":"2020-04-10T17:18:25Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nThis should help with adding new CI-specific if-else arms.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex e9a5c51425..05fbcf681a 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -138,6 +138,7 @@ then\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n+\tenv >&2\n \texit 1\n fi\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395206","messageId":"b88586c2c5e4781c6a7fdfa0e2669bf37773afd2.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 03/12] ci/lib: set TERM environment variable if not exist","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:05Z","receivedAt":"2020-04-10T17:18:30Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"GitHub Action doesn't set TERM environment variable, which is required\nby \"tput\".\n\nFallback to dumb if it's not set.\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex a21c6241b0..5c20975c83 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -79,6 +79,9 @@ check_unignored_build_artifacts ()\n \t}\n }\n \n+# GitHub Action doesn't set TERM, which is required by tput\n+export TERM=${TERM:-dumb}\n+\n # Clear MAKEFLAGS that may come from the outside world.\n export MAKEFLAGS=\n \n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395207","messageId":"2818799a4b135db019ac48c59b25032f8cd291ad.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 02/12] ci/lib: allow running in GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:04Z","receivedAt":"2020-04-10T17:18:31Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nFor each CI system we support, we need a specific arm in that if/else\nconstruct in ci/lib.sh. Let's add one for GitHub Actions.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/lib.sh | 20 +++++++++++++++++++-\n 1 file changed, 19 insertions(+), 1 deletion(-)\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 05fbcf681a..a21c6241b0 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -34,7 +34,7 @@ save_good_tree () {\n # successfully before (e.g. because the branch got rebased, changing only\n # the commit messages).\n skip_good_tree () {\n-\tif test \"$TRAVIS_DEBUG_MODE\" = true\n+\tif test \"$TRAVIS_DEBUG_MODE\" = true || test true = \"$GITHUB_ACTIONS\"\n \tthen\n \t\treturn\n \tfi\n@@ -136,6 +136,24 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows_nt != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+elif test true = \"$GITHUB_ACTIONS\"\n+then\n+\tCI_TYPE=github-actions\n+\tCI_BRANCH=\"$GITHUB_REF\"\n+\tCI_COMMIT=\"$GITHUB_SHA\"\n+\tCI_OS_NAME=\"$(echo \"$RUNNER_OS\" | tr A-Z a-z)\"\n+\ttest macos != \"$CI_OS_NAME\" || CI_OS_NAME=osx\n+\tCI_REPO_SLUG=\"$GITHUB_REPOSITORY\"\n+\tCI_JOB_ID=\"$GITHUB_RUN_ID\"\n+\tCC=\"${CC:-gcc}\"\n+\n+\tcache_dir=\"$HOME/none\"\n+\n+\texport GIT_PROVE_OPTS=\"--timer --jobs 10\"\n+\texport GIT_TEST_OPTS=\"--verbose-log -x\"\n+\tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n+\ttest windows != \"$CI_OS_NAME\" ||\n+\tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395208","messageId":"ac7e247bb3a7d0e639dd91f1a8a3ccc1980b913e.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 05/12] ci: explicit install all required packages","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:07Z","receivedAt":"2020-04-10T17:18:33Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"In a later patch, we will support GitHub Action.\n\nExplicitly install all of our build dependencies on Linux.\nSince GitHub Action's Linux VM hasn't installed our build dependencies.\nAnd there're no harm to reinstall them (in Travis)\n\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/install-dependencies.sh | 14 +++++++++++---\n 1 file changed, 11 insertions(+), 3 deletions(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 497fd32ca8..3633a60a1c 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -7,12 +7,16 @@\n \n P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION\n LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION\n+UBUNTU_COMMON_PKGS=\"make libssl-dev libcurl4-openssl-dev libexpat-dev\n+ tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl\n+ libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl\"\n \n case \"$jobname\" in\n linux-clang|linux-gcc)\n \tsudo apt-add-repository -y \"ppa:ubuntu-toolchain-r/test\"\n \tsudo apt-get -q update\n-\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2\n+\tsudo apt-get -q -y install language-pack-is libsvn-perl apache2 \\\n+\t\t$UBUNTU_COMMON_PKGS\n \tcase \"$jobname\" in\n \tlinux-gcc)\n \t\tsudo apt-get -q -y install gcc-8\n@@ -59,15 +63,19 @@ osx-clang|osx-gcc)\n StaticAnalysis)\n \tsudo apt-get -q update\n \tsudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \\\n-\t\tlibexpat-dev gettext\n+\t\tlibexpat-dev gettext make\n \t;;\n Documentation)\n \tsudo apt-get -q update\n-\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns\n+\tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make\n \n \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n \tgem install --version 1.5.8 asciidoctor\n \t;;\n+linux-gcc-4.8|GETTEXT_POISON)\n+\tsudo apt-get -q update\n+\tsudo apt-get -q -y install $UBUNTU_COMMON_PKGS\n+\t;;\n esac\n \n if type p4d >/dev/null && type p4 >/dev/null\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395209","messageId":"1df60e677c0b98b010c74914ab49f32a544bc59f.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 04/12] ci: fix the `jobname` of the `GETTEXT_POISON` job","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:06Z","receivedAt":"2020-04-10T17:18:33Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIn 6cdccfce1e0f (i18n: make GETTEXT_POISON a runtime option,\n2018-11-08), the `jobname` was adjusted to have the `GIT_TEST_` prefix,\nbut that prefix makes no sense in this context.\n\nCo-authored-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .travis.yml | 2 +-\n ci/lib.sh   | 2 +-\n 2 files changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/.travis.yml b/.travis.yml\nindex 0cfc3c3428..05f3e3f8d7 100644\n--- a/.travis.yml\n+++ b/.travis.yml\n@@ -16,7 +16,7 @@ compiler:\n \n matrix:\n   include:\n-    - env: jobname=GIT_TEST_GETTEXT_POISON\n+    - env: jobname=GETTEXT_POISON\n       os: linux\n       compiler:\n       addons:\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 5c20975c83..8b39624f3c 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -211,7 +211,7 @@ osx-clang|osx-gcc)\n \t# Travis CI OS X\n \texport GIT_SKIP_TESTS=\"t9810 t9816\"\n \t;;\n-GIT_TEST_GETTEXT_POISON)\n+GETTEXT_POISON)\n \texport GIT_TEST_GETTEXT_POISON=true\n \t;;\n Linux32)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395210","messageId":"2fb9f2e2f285a2df40ddab3f954b661fcd5da588.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 06/12] ci: run gem with sudo to install asciidoctor","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:08Z","receivedAt":"2020-04-10T17:18:37Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIn a later patch, we will run Documentation job in GitHub Actions.\nThe job will run without elevated permission.\n\nRun `gem` with `sudo` to elevate permission in order to be able to\ninstall to system location.\nThis will also keep this installation in-line with other installation in\nour Linux system for CI.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n[Danh: reword commit message]\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/install-dependencies.sh | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 3633a60a1c..0229a77f7d 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -70,7 +70,7 @@ Documentation)\n \tsudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make\n \n \ttest -n \"$ALREADY_HAVE_ASCIIDOCTOR\" ||\n-\tgem install --version 1.5.8 asciidoctor\n+\tsudo gem install --version 1.5.8 asciidoctor\n \t;;\n linux-gcc-4.8|GETTEXT_POISON)\n \tsudo apt-get -q update\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395211","messageId":"40fe4f7e2c34c6997a6824ef0dc6aad7a71a4434.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 07/12] ci: configure GitHub Actions for CI/PR","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:09Z","receivedAt":"2020-04-10T17:18:38Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"This patch adds CI builds via GitHub Actions. While the underlying\ntechnology is at least _very_ similar to that of Azure Pipelines, GitHub\nActions are much easier to set up than Azure Pipelines:\n\n- no need to install a GitHub App,\n\n- no need to set up an Azure DevOps account,\n\n- all you need to do is push to your fork on GitHub.\n\nTherefore, it makes a lot of sense for us to have a working GitHub\nActions setup.\n\nWhile copy/editing `azure-pipelines.yml` into\n`.github/workflows/main.yml`, we also use the opportunity to accelerate\nthe step that sets up a minimal subset of Git for Windows' SDK in the\nWindows-build job:\n\n- we now download a `.tar.xz` stored in Azure Blobs and extract it\n  simultaneously by calling `curl` and piping the result to `tar`,\n\n- decompressing via `xz`,\n\n- all three utilities are installed together with Git for Windows\n\nAt the same time, we also make use of the matrix build feature, which\nreduces the amount of repeated text by quite a bit.\n\nAlso, we do away with the parts that try to mount a file share on which\n`prove` can store data between runs. It is just too complicated to set\nup, and most times the tree changes anyway, so there is little return on\ninvestment there.\n\nInitial-patch-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 212 +++++++++++++++++++++++++++++++++++++\n 1 file changed, 212 insertions(+)\n create mode 100644 .github/workflows/main.yml\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nnew file mode 100644\nindex 0000000000..e1ac6d23b4\n--- /dev/null\n+++ b/.github/workflows/main.yml\n@@ -0,0 +1,212 @@\n+name: CI/PR\n+\n+on: [push, pull_request]\n+\n+env:\n+  DEVELOPER: 1\n+\n+jobs:\n+  windows-build:\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: build\n+      shell: powershell\n+      env:\n+        HOME: ${{runner.workspace}}\n+        MSYSTEM: MINGW64\n+        NO_PERL: 1\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+        printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/make-test-artifacts.sh artifacts\n+        \"@\n+    - name: upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: artifacts\n+  windows-test:\n+    runs-on: windows-latest\n+    needs: [windows-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: windows-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract build artifacts\n+      shell: bash\n+      run: tar xf artifacts.tar.gz\n+    - name: test\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK\n+          printf '%s\\n' /git-sdk-64-minimal/ >>.git/info/exclude\n+\n+          ci/run-test-slice.sh ${{matrix.nr}} 10\n+        \"@\n+    - name: ci/print-test-failures.sh\n+      if: failure()\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+  vs-build:\n+    env:\n+      MSYSTEM: MINGW64\n+      NO_PERL: 1\n+      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n+    runs-on: windows-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-sdk-64-minimal\n+      shell: bash\n+      run: a=git-sdk-64-minimal && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: generate Visual Studio solution\n+      shell: powershell\n+      run: |\n+        & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          make NDEBUG=1 DEVELOPER=1 vcxproj\n+        \"@\n+        if (!$?) { exit(1) }\n+    - name: download vcpkg artifacts\n+      shell: powershell\n+      run: |\n+        $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n+        $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n+        $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n+        (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n+        Expand-Archive compat.zip -DestinationPath . -Force\n+        Remove-Item compat.zip\n+    - name: add msbuild to PATH\n+      uses: microsoft/setup-msbuild@v1.0.0\n+    - name: MSBuild\n+      run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n+    - name: bundle artifact tar\n+      shell: powershell\n+      env:\n+        MSVC: 1\n+        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+      run: |\n+        & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+        if (!$?) { exit(1) }\n+        & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n+          mkdir -p artifacts &&\n+          eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\\\"\n+        \"@\n+    - name: upload build artifacts\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: artifacts\n+  vs-test:\n+    runs-on: windows-latest\n+    needs: [vs-build]\n+    strategy:\n+      matrix:\n+        nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n+    steps:\n+    - uses: actions/checkout@v1\n+    - name: download git-64-portable\n+      shell: bash\n+      run: a=git-64-portable && mkdir -p $a && curl -# https://wingit.blob.core.windows.net/ci-artifacts/$a.tar.xz | tar -C $a -xJf -\n+    - name: download build artifacts\n+      uses: actions/download-artifact@v1\n+      with:\n+        name: vs-artifacts\n+        path: ${{github.workspace}}\n+    - name: extract build artifacts\n+      shell: bash\n+      run: tar xf artifacts.tar.gz\n+    - name: test (parallel)\n+      shell: powershell\n+      env:\n+        MSYSTEM: MINGW64\n+        NO_SVN_TESTS: 1\n+        GIT_TEST_SKIP_REBASE_P: 1\n+      run: |\n+        & git-64-portable\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n+          # Let Git ignore the SDK and the test-cache\n+          printf '%s\\n' /git-64-portable/ /test-cache/ >>.git/info/exclude\n+\n+          cd t &&\n+          PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n+          test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n+                  `$(test-tool.exe path-utils slice-tests \\\n+                          ${{matrix.nr}} 10 t[0-9]*.sh)\n+        \"@\n+  regular:\n+    strategy:\n+      matrix:\n+        vector:\n+          - jobname: linux-clang\n+            cc: clang\n+            pool: ubuntu-latest\n+          - jobname: linux-gcc\n+            cc: gcc\n+            pool: ubuntu-latest\n+          - jobname: osx-clang\n+            cc: clang\n+            pool: macos-latest\n+          - jobname: osx-gcc\n+            cc: gcc\n+            pool: macos-latest\n+          - jobname: GETTEXT_POISON\n+            cc: gcc\n+            pool: ubuntu-latest\n+    env:\n+      CC: ${{matrix.vector.cc}}\n+      jobname: ${{matrix.vector.jobname}}\n+    runs-on: ${{matrix.vector.pool}}\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/run-build-and-tests.sh\n+    - run: ci/print-test-failures.sh\n+      if: failure()\n+  dockerized:\n+    strategy:\n+      matrix:\n+        vector:\n+        - jobname: linux-musl\n+          image: alpine\n+        - jobname: Linux32\n+          image: daald/ubuntu32:xenial\n+    env:\n+      jobname: ${{matrix.vector.jobname}}\n+    runs-on: ubuntu-latest\n+    container: ${{matrix.vector.image}}\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-docker-dependencies.sh\n+    - run: ci/run-build-and-tests.sh\n+    - run: ci/print-test-failures.sh\n+      if: failure()\n+  static-analysis:\n+    env:\n+      jobname: StaticAnalysis\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/run-static-analysis.sh\n+  documentation:\n+    env:\n+      jobname: Documentation\n+    runs-on: ubuntu-latest\n+    steps:\n+    - uses: actions/checkout@v1\n+    - run: ci/install-dependencies.sh\n+    - run: ci/test-documentation.sh\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395212","messageId":"09735fb1de03391cbd1ba1d303623f5142fe5ae0.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 08/12] README: add a build badge for the GitHub Actions runs","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:10Z","receivedAt":"2020-04-10T17:18:39Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex 9d4564c8aa..e2e00ae249 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,4 @@\n+[![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n [![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395213","messageId":"ce0038598704e03becc65731a71abf596bdfbe98.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:12Z","receivedAt":"2020-04-10T17:18:44Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWhen a test fails, it is nice to see where the corresponding code lives\nin the worktree. Sadly, it seems that only Bash allows us to infer this\ninformation. Let's do it when we detect that we're running in a Bash.\n\nThis will come in handy in the next commit, where we teach the GitHub\nActions workflow to annotate failed test runs with this information.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n t/test-lib.sh | 14 +++++++++++++-\n 1 file changed, 13 insertions(+), 1 deletion(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 0ea1e5a05e..40a00983f7 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -657,6 +657,18 @@ die () {\n \tfi\n }\n \n+file_lineno () {\n+\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n+\tlocal i\n+\tfor i in ${!BASH_SOURCE[*]}\n+\tdo\n+\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n+\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n+\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n+\t\tesac\n+\tdone\n+}\n+\n GIT_EXIT_OK=\n trap 'die' EXIT\n # Disable '-x' tracing, because with some shells, notably dash, it\n@@ -702,7 +714,7 @@ test_failure_ () {\n \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n \tfi\n \ttest_failure=$(($test_failure + 1))\n-\tsay_color error \"not ok $test_count - $1\"\n+\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n \tshift\n \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395214","messageId":"8de46ee1c6e0e9cab91008c27f097f6f37ed5ca8.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 12/12] ci: let GitHub Actions upload failed tests' directories","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:14Z","receivedAt":"2020-04-10T17:18:45Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nArguably, CI builds' most important task is to not only identify\nregressions, but to make it as easy as possible to investigate what went\nwrong.\n\nIn that light, we will want to provide users with a way to inspect the\ntests' output as well as the corresponding directories.\n\nThis commit adds build steps that are only executed when tests failed,\nuploading the relevant information as build artifacts. These artifacts\ncan then be downloaded by interested parties to diagnose the failures\nmore efficiently.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n .github/workflows/main.yml | 18 ++++++++++++++++++\n ci/print-test-failures.sh  |  7 +++++++\n 2 files changed, 25 insertions(+)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex e1ac6d23b4..fd4df939b5 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -63,6 +63,12 @@ jobs:\n       shell: powershell\n       run: |\n         & .\\git-sdk-64-minimal\\usr\\bin\\bash.exe -lc ci/print-test-failures.sh\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-windows\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   vs-build:\n     env:\n       MSYSTEM: MINGW64\n@@ -176,6 +182,12 @@ jobs:\n     - run: ci/run-build-and-tests.sh\n     - run: ci/print-test-failures.sh\n       if: failure()\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-${{matrix.vector.jobname}}\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   dockerized:\n     strategy:\n       matrix:\n@@ -194,6 +206,12 @@ jobs:\n     - run: ci/run-build-and-tests.sh\n     - run: ci/print-test-failures.sh\n       if: failure()\n+    - name: Upload failed tests' directories\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n+      uses: actions/upload-artifact@v1\n+      with:\n+        name: failed-tests-${{matrix.vector.jobname}}\n+        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   static-analysis:\n     env:\n       jobname: StaticAnalysis\ndiff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh\nindex e688a26f0d..92a983a265 100755\n--- a/ci/print-test-failures.sh\n+++ b/ci/print-test-failures.sh\n@@ -46,6 +46,13 @@ do\n \t\t\tmv \"$trash_dir\" failed-test-artifacts\n \t\t\tcontinue\n \t\t\t;;\n+\t\tgithub-actions)\n+\t\t\tmkdir -p failed-test-artifacts\n+\t\t\techo \"::set-env name=FAILED_TEST_ARTIFACTS::t/failed-test-artifacts\"\n+\t\t\tcp \"${TEST_EXIT%.exit}.out\" failed-test-artifacts/\n+\t\t\ttar czf failed-test-artifacts/\"$test_name\".trash.tar.gz \"$trash_dir\"\n+\t\t\tcontinue\n+\t\t\t;;\n \t\t*)\n \t\t\techo \"Unhandled CI type: $CI_TYPE\" >&2\n \t\t\texit 1\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395216","messageId":"575b3afd3cd47dd53530df74a681f11783162e76.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 09/12] ci: retire the Azure Pipelines definition","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:11Z","receivedAt":"2020-04-10T17:18:45Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWe have GitHub Actions now. Running the same builds and tests in Azure\nPipelines would be redundant, and a waste of energy.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n README.md           |   1 -\n azure-pipelines.yml | 558 --------------------------------------------\n 2 files changed, 559 deletions(-)\n delete mode 100644 azure-pipelines.yml\n\ndiff --git a/README.md b/README.md\nindex e2e00ae249..eb8115e6b0 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,5 +1,4 @@\n [![Build status](https://github.com/git/git/workflows/CI/PR/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)\n \n Git - fast, scalable, distributed revision control system\n =========================================================\ndiff --git a/azure-pipelines.yml b/azure-pipelines.yml\ndeleted file mode 100644\nindex 11413f66f8..0000000000\n--- a/azure-pipelines.yml\n+++ /dev/null\n@@ -1,558 +0,0 @@\n-variables:\n-  Agent.Source.Git.ShallowFetchDepth: 1\n-\n-jobs:\n-- job: windows_build\n-  displayName: Windows Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        ci/make-test-artifacts.sh artifacts\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Build\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: windows_test\n-  displayName: Windows Test\n-  dependsOn: windows_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: test artifacts'\n-    inputs:\n-      artifactName: 'windows-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'\n-    inputs:\n-      artifactName: 'git-sdk-64-minimal'\n-      targetPath: '$(Build.SourcesDirectory)\\git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude\n-\n-        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {\n-          ci/print-test-failures.sh\n-          exit 1\n-        }\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'windows'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: vs_build\n-  displayName: Visual Studio Build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git-for-windows/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[1].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl,\"git-sdk-64-minimal.zip\")\n-      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force\n-      Remove-Item git-sdk-64-minimal.zip\n-\n-      # Let Git ignore the SDK and the test-cache\n-      \"/git-sdk-64-minimal/`n/test-cache/`n\" | Out-File -NoNewLine -Encoding ascii -Append \"$(Build.SourcesDirectory)\\.git\\info\\exclude\"\n-    displayName: 'Download git-sdk-64-minimal'\n-  - powershell: |\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        make NDEBUG=1 DEVELOPER=1 vcxproj\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Generate Visual Studio Solution\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      GIT_CONFIG_PARAMETERS: \"'user.name=CI' 'user.email=ci@git'\"\n-  - powershell: |\n-      $urlbase = \"https://dev.azure.com/git/git/_apis/build/builds\"\n-      $id = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1\").content | ConvertFrom-JSON).value[0].id\n-      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing \"${urlbase}/$id/artifacts\").content | ConvertFrom-JSON).value[0].resource.downloadUrl\n-      (New-Object Net.WebClient).DownloadFile($downloadUrl, \"compat.zip\")\n-      Expand-Archive compat.zip -DestinationPath . -Force\n-      Remove-Item compat.zip\n-    displayName: 'Download vcpkg artifacts'\n-  - task: MSBuild@1\n-    inputs:\n-      solution: git.sln\n-      platform: x64\n-      configuration: Release\n-      maximumCpuCount: 4\n-      msbuildArguments: /p:PlatformToolset=v142\n-  - powershell: |\n-      & compat\\vcbuild\\vcpkg_copy_dlls.bat release\n-      if (!$?) { exit(1) }\n-      & git-sdk-64-minimal\\usr\\bin\\bash.exe -lc @\"\n-        mkdir -p artifacts &&\n-        eval \\\"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\\\"\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: Bundle artifact tar\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      DEVELOPER: 1\n-      NO_PERL: 1\n-      MSVC: 1\n-      VCPKG_ROOT: $(Build.SourcesDirectory)\\compat\\vcbuild\\vcpkg\n-  - powershell: |\n-      $tag = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-tag.txt\").content\n-      $version = (Invoke-WebRequest -UseBasicParsing \"https://gitforwindows.org/latest-version.txt\").content\n-      $url = \"https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe\"\n-      (New-Object Net.WebClient).DownloadFile($url,\"PortableGit.exe\")\n-      & .\\PortableGit.exe -y -oartifacts\\PortableGit\n-      # Wait until it is unpacked\n-      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }\n-    displayName: Download & extract portable Git\n-  - task: PublishPipelineArtifact@0\n-    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)\\artifacts'\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: vs_test\n-  displayName: Visual Studio Test\n-  dependsOn: vs_build\n-  condition: succeeded()\n-  pool:\n-    vmImage: windows-latest\n-  timeoutInMinutes: 240\n-  strategy:\n-    parallel: 10\n-  steps:\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        net use s: \\\\gitfileshare.file.core.windows.net\\test-cache \"$GITFILESHAREPWD\" /user:AZURE\\gitfileshare /persistent:no\n-        cmd /c mklink /d \"$(Build.SourcesDirectory)\\test-cache\" S:\\\n-      }\n-    displayName: 'Mount test-cache'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: DownloadPipelineArtifact@0\n-    displayName: 'Download Pipeline Artifact: VS test artifacts'\n-    inputs:\n-      artifactName: 'vs-artifacts'\n-      targetPath: '$(Build.SourcesDirectory)'\n-  - powershell: |\n-      & PortableGit\\git-cmd.exe --command=usr\\bin\\bash.exe -lc @\"\n-        test -f artifacts.tar.gz || {\n-          echo No test artifacts found\\; skipping >&2\n-          exit 0\n-        }\n-        tar xf artifacts.tar.gz || exit 1\n-\n-        # Let Git ignore the SDK and the test-cache\n-        printf '%s\\n' /PortableGit/ /test-cache/ >>.git/info/exclude\n-\n-        cd t &&\n-        PATH=\\\"`$PWD/helper:`$PATH\\\" &&\n-        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \\\n-                `$(test-tool.exe path-utils slice-tests \\\n-                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)\n-      \"@\n-      if (!$?) { exit(1) }\n-    displayName: 'Test (parallel)'\n-    env:\n-      HOME: $(Build.SourcesDirectory)\n-      MSYSTEM: MINGW64\n-      NO_SVN_TESTS: 1\n-      GIT_TEST_SKIP_REBASE_P: 1\n-  - powershell: |\n-      if (\"$GITFILESHAREPWD\" -ne \"\" -and \"$GITFILESHAREPWD\" -ne \"`$`(gitfileshare.pwd)\") {\n-        cmd /c rmdir \"$(Build.SourcesDirectory)\\test-cache\"\n-      }\n-    displayName: 'Unmount test-cache'\n-    condition: true\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'vs'\n-      platform: Windows\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-vs-test-artifacts\n-\n-- job: linux_clang\n-  displayName: linux-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&\n-\n-       export CC=clang || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-clang'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux_gcc\n-  displayName: linux-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux-gcc'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_clang\n-  displayName: osx-clang\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       export CC=clang\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-clang'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: osx_gcc\n-  displayName: osx-gcc\n-  condition: succeeded()\n-  pool:\n-    vmImage: macOS-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       ci/install-dependencies.sh || exit 1\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'osx-gcc'\n-      platform: macOS\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: gettext_poison\n-  displayName: GETTEXT_POISON\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&\n-\n-       export jobname=GETTEXT_POISON || exit 1\n-\n-       ci/run-build-and-tests.sh || {\n-           ci/print-test-failures.sh\n-           exit 1\n-       }\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-build-and-tests.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'gettext-poison'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: linux32\n-  displayName: Linux32\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       res=0\n-       sudo AGENT_OS=\"$AGENT_OS\" BUILD_BUILDNUMBER=\"$BUILD_BUILDNUMBER\" BUILD_REPOSITORY_URI=\"$BUILD_REPOSITORY_URI\" BUILD_SOURCEBRANCH=\"$BUILD_SOURCEBRANCH\" BUILD_SOURCEVERSION=\"$BUILD_SOURCEVERSION\" SYSTEM_PHASENAME=\"$SYSTEM_PHASENAME\" SYSTEM_TASKDEFINITIONSURI=\"$SYSTEM_TASKDEFINITIONSURI\" SYSTEM_TEAMPROJECT=\"$SYSTEM_TEAMPROJECT\" CC=$CC MAKEFLAGS=\"$MAKEFLAGS\" jobname=Linux32 bash -lxc ci/run-docker.sh || res=1\n-\n-       sudo chmod a+r t/out/TEST-*.xml\n-       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || res=1\n-       exit $res\n-    displayName: 'jobname=Linux32 ci/run-docker.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-  - task: PublishTestResults@2\n-    displayName: 'Publish Test Results **/TEST-*.xml'\n-    inputs:\n-      mergeTestResults: true\n-      testRunTitle: 'linux32'\n-      platform: Linux\n-      publishRunAttachments: false\n-    condition: succeededOrFailed()\n-  - task: PublishBuildArtifacts@1\n-    displayName: 'Publish trash directories of failed tests'\n-    condition: failed()\n-    inputs:\n-      PathtoPublish: t/failed-test-artifacts\n-      ArtifactName: failed-test-artifacts\n-\n-- job: static_analysis\n-  displayName: StaticAnalysis\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&\n-\n-       export jobname=StaticAnalysis &&\n-\n-       ci/run-static-analysis.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/run-static-analysis.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-\n-- job: documentation\n-  displayName: Documentation\n-  condition: succeeded()\n-  pool:\n-    vmImage: ubuntu-latest\n-  steps:\n-  - bash: |\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare \"$GITFILESHAREPWD\" \"$HOME/test-cache\" || exit 1\n-\n-       sudo apt-get update &&\n-       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&\n-\n-       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&\n-       export jobname=Documentation &&\n-\n-       ci/test-documentation.sh || exit 1\n-\n-       test \"$GITFILESHAREPWD\" = '$(gitfileshare.pwd)' || sudo umount \"$HOME/test-cache\" || exit 1\n-    displayName: 'ci/test-documentation.sh'\n-    env:\n-      GITFILESHAREPWD: $(gitfileshare.pwd)\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395215","messageId":"3caeb0b7f44d6f034050e3e1a14ed700e6077659.1586538752.git.congdanhqx@gmail.com","threadId":"53143","inReplyTo":"cover.1586538752.git.congdanhqx@gmail.com","subject":"[PATCH v5 11/12] ci: add a problem matcher for GitHub Actions","fromName":"Đoàn Trần Công Danh","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:18:13Z","receivedAt":"2020-04-10T17:18:46Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nWith this patch, test failures will be annotated with a helpful,\nclickable message in GitHub Actions. For details, see\nhttps://github.com/actions/toolkit/blob/master/docs/problem-matchers.md\n\nNote: we need to set `TEST_SHELL_PATH` to Bash so that the problem\nmatcher is fed a file and line number for each test failure.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n---\n ci/git-problem-matcher.json | 16 ++++++++++++++++\n ci/lib.sh                   |  5 +++++\n 2 files changed, 21 insertions(+)\n create mode 100644 ci/git-problem-matcher.json\n\ndiff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\nnew file mode 100644\nindex 0000000000..506dfbd97f\n--- /dev/null\n+++ b/ci/git-problem-matcher.json\n@@ -0,0 +1,16 @@\n+{\n+    \"problemMatcher\": [\n+        {\n+            \"owner\": \"git-test-suite\",\n+            \"pattern\": [\n+                {\n+                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n+                    \"file\": 1,\n+                    \"line\": 2,\n+                    \"severity\": 3,\n+                    \"message\": 4\n+                }\n+            ]\n+        }\n+    ]\n+}\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 8b39624f3c..4c54540fa8 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -157,6 +157,11 @@ then\n \tMAKEFLAGS=\"$MAKEFLAGS --jobs=10\"\n \ttest windows != \"$CI_OS_NAME\" ||\n \tGIT_TEST_OPTS=\"--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS\"\n+\n+\t# https://github.com/actions/toolkit/blob/master/docs/commands.md#problem-matchers\n+\techo \"::add-matcher::ci/git-problem-matcher.json\"\n+\ttest linux-musl = \"$jobname\" ||\n+\tMAKEFLAGS=\"$MAKEFLAGS TEST_SHELL_PATH=/bin/sh\"\n else\n \techo \"Could not identify CI type\" >&2\n \tenv >&2\n-- \n2.26.0.334.g6536db25bb\n\n"},{"id":"395218","messageId":"20200410173529.GA27699@danh.dev","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004101636150.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:35:29Z","receivedAt":"2020-04-10T17:35:36Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-10 16:37:27+0200, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> Hi Junio,\n> \n> me again, just quickly, because the `t0031-reftable.sh --valgrind` run\n> just came back with this:\n> \n> -- snip --\n> [...]\n> + git gc\n> ==28394== error calling PR_SET_PTRACER, vgdb might block\n> ==28399== error calling PR_SET_PTRACER, vgdb might block\n> ==28399== error calling PR_SET_PTRACER, vgdb might block\n> ==28404== error calling PR_SET_PTRACER, vgdb might block\n> ==28404== Invalid read of size 1\n> ==28404==    at 0x4C32CF2: strlen (in\n> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)\n> ==28404==    by 0x551D9AD: strdup (strdup.c:41)\n> ==28404==    by 0x39D15A: xstrdup (wrapper.c:29)\n> ==28404==    by 0x3DA9CA: reftable_log_record_copy_from (record.c:605)\n> ==28404==    by 0x3DB844: record_copy_from (record.c:968)\n> ==28404==    by 0x3D64B3: merged_iter_next (merged.c:117)\n> ==28404==    by 0x3D656B: merged_iter_next_void (merged.c:131)\n> ==28404==    by 0x3D597D: iterator_next (iter.c:45)\n> ==28404==    by 0x3D5AD2: reftable_iterator_next_log (iter.c:71)\n> ==28404==    by 0x3DE037: stack_write_compact (stack.c:718)\n> ==28404==    by 0x3DDBEA: stack_compact_locked (stack.c:632)\n> ==28404==    by 0x3DE5AD: stack_compact_range (stack.c:847)\n> ==28404==  Address 0x0 is not stack'd, malloc'd or (recently) free'd\n> ==28404==\n> {\n>    <insert_a_suppression_name_here>\n>    Memcheck:Addr1\n>    fun:strlen\n>    fun:strdup\n>    fun:xstrdup\n>    fun:reftable_log_record_copy_from\n>    fun:record_copy_from\n>    fun:merged_iter_next\n>    fun:merged_iter_next_void\n>    fun:iterator_next\n>    fun:reftable_iterator_next_log\n>    fun:stack_write_compact\n>    fun:stack_compact_locked\n>    fun:stack_compact_range\n> }\n> ==28404==\n> ==28404== Process terminating with default action of signal 11 (SIGSEGV)\n> ==28404==  Access not within mapped region at address 0x0\n> ==28404==    at 0x4C32CF2: strlen (in\n> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)\n> ==28404==    by 0x551D9AD: strdup (strdup.c:41)\n> ==28404==    by 0x39D15A: xstrdup (wrapper.c:29)\n> ==28404==    by 0x3DA9CA: reftable_log_record_copy_from (record.c:605)\n> ==28404==    by 0x3DB844: record_copy_from (record.c:968)\n> ==28404==    by 0x3D64B3: merged_iter_next (merged.c:117)\n> ==28404==    by 0x3D656B: merged_iter_next_void (merged.c:131)\n> ==28404==    by 0x3D597D: iterator_next (iter.c:45)\n> ==28404==    by 0x3D5AD2: reftable_iterator_next_log (iter.c:71)\n> ==28404==    by 0x3DE037: stack_write_compact (stack.c:718)\n> ==28404==    by 0x3DDBEA: stack_compact_locked (stack.c:632)\n> ==28404==    by 0x3DE5AD: stack_compact_range (stack.c:847)\n> ==28404==  If you believe this happened as a result of a stack\n> ==28404==  overflow in your program's main thread (unlikely but\n> ==28404==  possible), you can try to increase the size of the\n> ==28404==  main thread stack using the --main-stacksize= flag.\n> ==28404==  The main thread stack size used in this run was 8388608.\n> error: reflog died of signal 11\n> fatal: failed to run reflog\n> error: last command exited with $?=128\n> -- snap --\n\nThe second patch from Dscho (which is only test code in sh) trigger segfault\nwith and without the first patch on top of pu.\n\nGit was built with DEVELOPER=1\n\nI merely run \"./t0031-reftable.sh -d -v -i\"\n\n-- \nDanh\n"},{"id":"395219","messageId":"20200410174141.GB27699@danh.dev","threadId":"53143","inReplyTo":"xmqq1rovl54d.fsf@gitster.c.googlers.com","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-10T17:41:41Z","receivedAt":"2020-04-10T17:41:45Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-10 08:42:10-0700, Junio C Hamano <gitster@pobox.com> wrote:\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> >> Judging from two CI runs for 'pu' ([*1*] and [*2*]), among the\n> >> topics that are cooking, there are only a few topics that these\n> >> tests are unhappy about.  Perhaps those on Windows can help these\n> >> topics to pass these tests?\n> >\n> > I would like to point out that there is only one single topic that is\n> > cause for sorrow here, and it is the reftable one.\n> \n> I first thought so, too, but vsbuild failures like the one in\n> https://github.com/git/git/runs/575116793 do not appear to be\n> caused by that topic (6a8c1d17b8 excludes reftable), so there\n> must be somebody else that is broken.\n\nExcerpt from build log:\n\n> fatal error C1083: Cannot open include file: 'config-list.h'\n\nIt's from bugreport topic.\nI've seen this failure in the past (when testing with pu),\nthen I saw it disappear.\n\nI thought it was fixed during my testing for v4.\n\n-- \nDanh\n"},{"id":"395230","messageId":"xmqq7dynjgx7.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200410153131.GM2224@szeder.dev","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-10T19:10:12Z","receivedAt":"2020-04-10T19:10:17Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"SZEDER Gábor <szeder.dev@gmail.com> writes:\n\n>> > CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n>> >\n>> >   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n>> >\n>> > would read better.\n>> \n>> I can understand where you come from, but your code is not `set -e` safe,\n>\n> It works as expected in at least in dash, Bash, BusyBox sh, ksh,\n> ksh93, mksh/lksh, yash, posh, FreeBSD /bin/sh, NetBSD /bin/sh.\n\nThanks for a clarification.  I do not use \"set -e\" myself (it is not\na good idea to rely on it in general), and was wondering if what was\nsaid up there was true, as it did not sound like a useful behaviour\nat all.  Not complaining about a non-zero exit before && or || makes\nit usable ;-)\n\n\n\n"},{"id":"395309","messageId":"nycvar.QRO.7.76.6.2004122339290.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"xmqq7dynjgx7.fsf@gitster.c.googlers.com","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-12T21:42:21Z","receivedAt":"2020-04-12T21:42:32Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 10 Apr 2020, Junio C Hamano wrote:\n\n> SZEDER Gábor <szeder.dev@gmail.com> writes:\n>\n> >> > CI_OS_NAME=osx.  This is head-scratchingly backwards, and I think\n> >> >\n> >> >   test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n> >> >\n> >> > would read better.\n> >>\n> >> I can understand where you come from, but your code is not `set -e` safe,\n> >\n> > It works as expected in at least in dash, Bash, BusyBox sh, ksh,\n> > ksh93, mksh/lksh, yash, posh, FreeBSD /bin/sh, NetBSD /bin/sh.\n>\n> Thanks for a clarification.  I do not use \"set -e\" myself (it is not\n> a good idea to rely on it in general), and was wondering if what was\n> said up there was true, as it did not sound like a useful behaviour\n> at all.  Not complaining about a non-zero exit before && or || makes\n> it usable ;-)\n\nWhile it is not in general useful to rely on `set -e`, there are\nsituations when it comes in handy for debugging. Or in copy-edited code.\n\nAs to the \"It works as expected\", this is in a Bash:\n\n\t$ test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n\n\t$ echo $?\n\t1\n\nYes, it works, but in the common case, it exits with an error (that we\nignore, unless run with `sh -e ...`).\n\nJust making sure that we're talking about the same expectation here.\n\nCiao,\nDscho\n"},{"id":"395311","messageId":"xmqqimi4cq0v.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004122339290.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-12T22:12:16Z","receivedAt":"2020-04-12T22:12:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> As to the \"It works as expected\", this is in a Bash:\n>\n> \t$ test \"$CI_OS_NAME\" = macos && CI_OS_NAME=osx\n>\n> \t$ echo $?\n> \t1\n>\n> Yes, it works, but in the common case, it exits with an error (that we\n> ignore, unless run with `sh -e ...`).\n>\n> Just making sure that we're talking about the same expectation here.\n\nMy expectation is that \"set -e\" won't prevent anything that comes\nafter \"make sure we set CI_OS_NAME to osx on macos but do not do so\non other platforms\" we see above from running.  In other words, with\na script like this:\n\n    $ cat >X <<\\EOF\n    #!/bin/sh\n    set -x -e\n    CI_OS_NAME=linux\n\n    echo different\n    test \"$CI_OS_NAME\" = macos && CI_OS_NAME=OSX\n\n    CI_OS_NAME=macos\n    echo same\n    test \"$CI_OS_NAME\" = macos && CI_OS_NAME=OSX\n\n    echo both passed\n\n    false\n\n    echo at the very end\n    EOF\n\nI would expect all \"echo\" would execute, except for the last one\nthat is not reached because of the \"false\", which is the first\n\"2.9.3 list\" whose last \"2.9.2 pipeline\"[*1*] yields a non-zero\nstatus, would stop the execution.  Two 'test' before && may yield\nsuccess or failure and they may control whether the assignment to\nCI_OS_NAME is done or skipped, but I expect that they do not affect\nhow \"set -e\" behaves.\n\n    $ bash X\n    + CI_OS_NAME=linux\n    + echo different\n    different\n    + test linux = macos\n    + CI_OS_NAME=macos\n    + echo same\n    same\n    + test macos = macos\n    + CI_OS_NAME=OSX\n    + echo both passed\n    both passed\n    + false\n\n    $ dash X\n    + CI_OS_NAME=linux\n    + echo different\n    different\n    + test linux = macos\n    + CI_OS_NAME=macos\n    + echo same\n    same\n    + test macos = macos\n    + CI_OS_NAME=OSX\n    + echo both passed\n    both passed\n    + false\n\n\n[Footnote]\n\n*1* these two words are from the shell grammar\nhttps://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09\n"},{"id":"395313","messageId":"xmqqeesscpfc.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"xmqqimi4cq0v.fsf@gitster.c.googlers.com","subject":"Re: [PATCH 2/5] ci/lib: allow running in GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-12T22:25:11Z","receivedAt":"2020-04-12T22:25:15Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> ...  Two 'test' before && may yield\n> success or failure and they may control whether the assignment to\n> CI_OS_NAME is done or skipped, but I expect that they do not affect\n> how \"set -e\" behaves.\n\nHeh, I should just have quoted from\n\n  https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09\n\nLook for \"set -e\" where three bullet points are there.  The relevant\nis the second one.\n\n2. The -e setting shall be ignored when executing the compound list\n   following the while, until, if, or elif reserved word, a pipeline\n   beginning with the ! reserved word, or any command of an AND-OR\n   list other than the last.\n\nThe test to see what the current value of CI_OS_NAME is is a command\nof an AND list that is not the last one (the last one being the\nassignment), so its failure does not allow \"set -e\" to abort the\nshell.\n"},{"id":"395555","messageId":"xmqqh7xk45l4.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200410174141.GB27699@danh.dev","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-16T00:49:59Z","receivedAt":"2020-04-16T00:50:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Danh Doan <congdanhqx@gmail.com> writes:\n\n> On 2020-04-10 08:42:10-0700, Junio C Hamano <gitster@pobox.com> wrote:\n>> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n>>  ...\n>> > I would like to point out that there is only one single topic that is\n>> > cause for sorrow here, and it is the reftable one.\n>> \n>> I first thought so, too, but vsbuild failures like the one in\n>> https://github.com/git/git/runs/575116793 do not appear to be\n>> caused by that topic (6a8c1d17b8 excludes reftable), so there\n>> must be somebody else that is broken.\n>\n> Excerpt from build log:\n>\n>> fatal error C1083: Cannot open include file: 'config-list.h'\n>\n> It's from bugreport topic.\n> I've seen this failure in the past (when testing with pu),\n> then I saw it disappear.\n>\n> I thought it was fixed during my testing for v4.\n\nIs the issue something similar to 976aaedc (msvc: add a Makefile\ntarget to pre-generate the Visual Studio solution, 2019-07-29)?\n\nIf that is the case, perhaps something like this would help?  I'll\ntentatively queue it on top of es/bugreport and merge the result to\n'pu' to see what happens.\n\n-- >8 --\nSubject: msvc: the bugreport topic depends on a generated config-list.h file\n\nFor reasons explained in 976aaedc (msvc: add a Makefile target to\npre-generate the Visual Studio solution, 2019-07-29), some build\nartifacts we consider non-source files cannot be generated in the\nVisual Studio environment, and we already have some Makefile tweaks\nto help Visual Studio to use generated command-list.h header file.\n\nAs this topic starts to depend on another such generated header file,\nconfig-list.h, let's do the same to it.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n compat/vcbuild/README | 4 ++--\n config.mak.uname      | 6 +++---\n 2 files changed, 5 insertions(+), 5 deletions(-)\n\ndiff --git a/compat/vcbuild/README b/compat/vcbuild/README\nindex 1b6dabf5a2..42292e7c09 100644\n--- a/compat/vcbuild/README\n+++ b/compat/vcbuild/README\n@@ -92,8 +92,8 @@ The Steps of Build Git with VS2008\n    the git operations.\n \n 3. Inside Git's directory run the command:\n-       make command-list.h\n-   to generate the command-list.h file needed to compile git.\n+       make command-list.h config-list.h\n+   to generate the header file needed to compile git.\n \n 4. Then either build Git with the GNU Make Makefile in the Git projects\n    root\ndiff --git a/config.mak.uname b/config.mak.uname\nindex 0ab8e00938..f880cc2792 100644\n--- a/config.mak.uname\n+++ b/config.mak.uname\n@@ -721,9 +721,9 @@ vcxproj:\n \t echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets\n \tgit add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets\n \n-\t# Add command-list.h\n-\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h\n-\tgit add -f command-list.h\n+\t# Add command-list.h and config-list.h\n+\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h\n+\tgit add -f config-list.h command-list.h\n \n \t# Add scripts\n \trm -f perl/perl.mak\n"},{"id":"395561","messageId":"xmqq1roo43sp.fsf_-_@gitster.c.googlers.com","threadId":"53143","inReplyTo":"xmqqh7xk45l4.fsf@gitster.c.googlers.com","subject":"fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-16T01:28:38Z","receivedAt":"2020-04-16T01:29:54Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Danh Doan <congdanhqx@gmail.com> writes:\n>\n>> Excerpt from build log:\n>>\n>>> fatal error C1083: Cannot open include file: 'config-list.h'\n>>\n>> It's from bugreport topic.\n>> I've seen this failure in the past (when testing with pu),\n>> then I saw it disappear.\n>>\n>> I thought it was fixed during my testing for v4.\n>\n> Is the issue something similar to 976aaedc (msvc: add a Makefile\n> target to pre-generate the Visual Studio solution, 2019-07-29)?\n>\n> If that is the case, perhaps something like this would help?  I'll\n> tentatively queue it on top of es/bugreport and merge the result to\n> 'pu' to see what happens.\n\nThe build just passed: https://github.com/git/git/runs/590781044\n\nEmily, you may need to squash in something along the line of this\nchange to the commit in your series that starts building and using\nthe config-list.h file (was it the first one?).  I've queued mine\nas a follow-up \"oops, it was wrong\" patch, but that would not be\nkosher from bisectability's point of view.\n\nBut before we see a full reroll of the topic, it would be good to\nhave a quick \"looks OK\" from somebody who does Windows (Dscho\nCC'ed).\n\nThanks.\n\n> -- >8 --\n> Subject: msvc: the bugreport topic depends on a generated config-list.h file\n>\n> For reasons explained in 976aaedc (msvc: add a Makefile target to\n> pre-generate the Visual Studio solution, 2019-07-29), some build\n> artifacts we consider non-source files cannot be generated in the\n> Visual Studio environment, and we already have some Makefile tweaks\n> to help Visual Studio to use generated command-list.h header file.\n>\n> As this topic starts to depend on another such generated header file,\n> config-list.h, let's do the same to it.\n>\n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  compat/vcbuild/README | 4 ++--\n>  config.mak.uname      | 6 +++---\n>  2 files changed, 5 insertions(+), 5 deletions(-)\n>\n> diff --git a/compat/vcbuild/README b/compat/vcbuild/README\n> index 1b6dabf5a2..42292e7c09 100644\n> --- a/compat/vcbuild/README\n> +++ b/compat/vcbuild/README\n> @@ -92,8 +92,8 @@ The Steps of Build Git with VS2008\n>     the git operations.\n>  \n>  3. Inside Git's directory run the command:\n> -       make command-list.h\n> -   to generate the command-list.h file needed to compile git.\n> +       make command-list.h config-list.h\n> +   to generate the header file needed to compile git.\n>  \n>  4. Then either build Git with the GNU Make Makefile in the Git projects\n>     root\n> diff --git a/config.mak.uname b/config.mak.uname\n> index 0ab8e00938..f880cc2792 100644\n> --- a/config.mak.uname\n> +++ b/config.mak.uname\n> @@ -721,9 +721,9 @@ vcxproj:\n>  \t echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets\n>  \tgit add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets\n>  \n> -\t# Add command-list.h\n> -\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h\n> -\tgit add -f command-list.h\n> +\t# Add command-list.h and config-list.h\n> +\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h\n> +\tgit add -f config-list.h command-list.h\n>  \n>  \t# Add scripts\n>  \trm -f perl/perl.mak\n"},{"id":"395562","messageId":"CAJoAoZk9Y9rc7ssfZ6S3pYepK6LpapoSzBAQjL+f7uHXv79HWg@mail.gmail.com","threadId":"53143","inReplyTo":"xmqq1roo43sp.fsf_-_@gitster.c.googlers.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Emily Shaffer","fromEmail":"emilyshaffer@google.com","sentAt":"2020-04-16T01:55:31Z","receivedAt":"2020-04-16T01:55:54Z","isPatch":false,"sender":{"key":"nasamuffin@google.com","avatar":"https://avatars.githubusercontent.com/u/1606826?v=4"},"body":"On Wed, Apr 15, 2020 at 6:28 PM Junio C Hamano <gitster@pobox.com> wrote:\n>\n> Junio C Hamano <gitster@pobox.com> writes:\n>\n> > Danh Doan <congdanhqx@gmail.com> writes:\n> >\n> >> Excerpt from build log:\n> >>\n> >>> fatal error C1083: Cannot open include file: 'config-list.h'\n> >>\n> >> It's from bugreport topic.\n> >> I've seen this failure in the past (when testing with pu),\n> >> then I saw it disappear.\n> >>\n> >> I thought it was fixed during my testing for v4.\n> >\n> > Is the issue something similar to 976aaedc (msvc: add a Makefile\n> > target to pre-generate the Visual Studio solution, 2019-07-29)?\n> >\n> > If that is the case, perhaps something like this would help?  I'll\n> > tentatively queue it on top of es/bugreport and merge the result to\n> > 'pu' to see what happens.\n>\n> The build just passed: https://github.com/git/git/runs/590781044\n>\n> Emily, you may need to squash in something along the line of this\n> change to the commit in your series that starts building and using\n> the config-list.h file (was it the first one?).  I've queued mine\n> as a follow-up \"oops, it was wrong\" patch, but that would not be\n> kosher from bisectability's point of view.\n\nHm, ok. I'll send a reroll squashing this in verbatim tomorrow unless\nI hear otherwise from Dscho? Looks like it's indeed the first one\n(dd763e).\nI'm curious to know how I can check this build method for myself for next time.\n\n(If I misunderstood and I should send a reroll ASAP, please let me\nknow; otherwise I already switched off for the evening.)\n\n - Emily\n"},{"id":"395564","messageId":"xmqqwo6g2k1s.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"CAJoAoZk9Y9rc7ssfZ6S3pYepK6LpapoSzBAQjL+f7uHXv79HWg@mail.gmail.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-16T03:20:31Z","receivedAt":"2020-04-16T03:20:44Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Emily Shaffer <emilyshaffer@google.com> writes:\n\n> Hm, ok. I'll send a reroll squashing this in verbatim tomorrow unless\n> I hear otherwise from Dscho? Looks like it's indeed the first one\n> (dd763e).\n> I'm curious to know how I can check this build method for myself for next time.\n>\n> (If I misunderstood and I should send a reroll ASAP, please let me\n> know; otherwise I already switched off for the evening.)\n\nNah, I do not think it is all that urgent.  I'd rather wait until we\nhear positive \"yup, that's the right way to do it\" (or \"no, you'd do\nit this way instead\" guidance) to waste an extra round.\n\nHaving said that, the topic won't touch 'next' with a known CI\nglitch whose fix ought to be straight-forward especially with\nhelp/nod from experts, and as far as I recall, there wasn't any\nother outstanding issues for this round, even though we may already\nhave plans for possible follow-up enhancements, so let's not keep it\nhanging unnecessarily longer.  Perhaps we'd all be happy if we can\nresolve it before the end of this week or early next week?\n\nThanks.\n"},{"id":"395565","messageId":"CABPp-BFM-A43GpOkfNeSt6KKsdpXzObhwajvT5qBp-ws_jstRw@mail.gmail.com","threadId":"53143","inReplyTo":"CAJoAoZk9Y9rc7ssfZ6S3pYepK6LpapoSzBAQjL+f7uHXv79HWg@mail.gmail.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2020-04-16T03:45:05Z","receivedAt":"2020-04-16T03:45:26Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"Hi Emily,\n\nOn Wed, Apr 15, 2020 at 7:01 PM Emily Shaffer <emilyshaffer@google.com> wrote:\n>\n> On Wed, Apr 15, 2020 at 6:28 PM Junio C Hamano <gitster@pobox.com> wrote:\n> >\n> > Junio C Hamano <gitster@pobox.com> writes:\n> >\n> > > Danh Doan <congdanhqx@gmail.com> writes:\n> > >\n> > >> Excerpt from build log:\n> > >>\n> > >>> fatal error C1083: Cannot open include file: 'config-list.h'\n> > >>\n> > >> It's from bugreport topic.\n> > >> I've seen this failure in the past (when testing with pu),\n> > >> then I saw it disappear.\n> > >>\n> > >> I thought it was fixed during my testing for v4.\n> > >\n> > > Is the issue something similar to 976aaedc (msvc: add a Makefile\n> > > target to pre-generate the Visual Studio solution, 2019-07-29)?\n> > >\n> > > If that is the case, perhaps something like this would help?  I'll\n> > > tentatively queue it on top of es/bugreport and merge the result to\n> > > 'pu' to see what happens.\n> >\n> > The build just passed: https://github.com/git/git/runs/590781044\n> >\n> > Emily, you may need to squash in something along the line of this\n> > change to the commit in your series that starts building and using\n> > the config-list.h file (was it the first one?).  I've queued mine\n> > as a follow-up \"oops, it was wrong\" patch, but that would not be\n> > kosher from bisectability's point of view.\n>\n> Hm, ok. I'll send a reroll squashing this in verbatim tomorrow unless\n> I hear otherwise from Dscho? Looks like it's indeed the first one\n> (dd763e).\n> I'm curious to know how I can check this build method for myself for next time.\n\nCreate a fork of github.com/git/git and open a pull request against\nit.  (I believe you could also fork github.com/gitgitgadget/git and do\na pull request against it, but I switched over to /git/git a while\nago.) Immediately upon opening the pull request, a bunch of linux,\nmac, windows, and freebsd builds will be triggered with various runs\nof the testsuite.  Has been very useful for catching issues for me\nbefore I sent them off to the list.\n\nYou can also make use of Dscho's gitgitgadget magic at that point to\ntake care of the git send-email step for you too by commenting\n'/submit' in the PR, though you don't have to do that.  It's perfectly\nfine to just open a PR for the automated testing and then close the PR\nand do the rest yourself.  But if you leave it open and have it submit\nthe patch emails for you, it'll track their status.  I kinda like\nbeing able to go to https://github.com/git/git/pulls/newren and have\nit track the state of where all my open pull requests are.  (You might\neven be able to click through some of those to see example build\nresults)\n\nDscho has done some great work with his gitgitgadget work and azure\nbuilds.  SZEDER Gábor also has a few builds triggered via Travis that\ncheck a few more things off the same PRs (static anlysis and whatnot).\nI've been very happily using them all by just opening PRs, and have\nappreciated the heads up of potential issues I would've otherwise\ncaused on various platforms otherwise.\n\n\nHope that helps,\nElijah\n"},{"id":"395566","messageId":"20200416041037.GA236872@google.com","threadId":"53143","inReplyTo":"CABPp-BFM-A43GpOkfNeSt6KKsdpXzObhwajvT5qBp-ws_jstRw@mail.gmail.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Emily Shaffer","fromEmail":"emilyshaffer@google.com","sentAt":"2020-04-16T04:10:37Z","receivedAt":"2020-04-16T04:10:47Z","isPatch":false,"sender":{"key":"nasamuffin@google.com","avatar":"https://avatars.githubusercontent.com/u/1606826?v=4"},"body":"On Wed, Apr 15, 2020 at 08:45:05PM -0700, Elijah Newren wrote:\n> \n> Hi Emily,\n> \n> On Wed, Apr 15, 2020 at 7:01 PM Emily Shaffer <emilyshaffer@google.com> wrote:\n> >\n> > On Wed, Apr 15, 2020 at 6:28 PM Junio C Hamano <gitster@pobox.com> wrote:\n> > >\n> > > Junio C Hamano <gitster@pobox.com> writes:\n> > >\n> > > > Danh Doan <congdanhqx@gmail.com> writes:\n> > > >\n> > > >> Excerpt from build log:\n> > > >>\n> > > >>> fatal error C1083: Cannot open include file: 'config-list.h'\n> > > >>\n> > > >> It's from bugreport topic.\n> > > >> I've seen this failure in the past (when testing with pu),\n> > > >> then I saw it disappear.\n> > > >>\n> > > >> I thought it was fixed during my testing for v4.\n> > > >\n> > > > Is the issue something similar to 976aaedc (msvc: add a Makefile\n> > > > target to pre-generate the Visual Studio solution, 2019-07-29)?\n> > > >\n> > > > If that is the case, perhaps something like this would help?  I'll\n> > > > tentatively queue it on top of es/bugreport and merge the result to\n> > > > 'pu' to see what happens.\n> > >\n> > > The build just passed: https://github.com/git/git/runs/590781044\n> > >\n> > > Emily, you may need to squash in something along the line of this\n> > > change to the commit in your series that starts building and using\n> > > the config-list.h file (was it the first one?).  I've queued mine\n> > > as a follow-up \"oops, it was wrong\" patch, but that would not be\n> > > kosher from bisectability's point of view.\n> >\n> > Hm, ok. I'll send a reroll squashing this in verbatim tomorrow unless\n> > I hear otherwise from Dscho? Looks like it's indeed the first one\n> > (dd763e).\n> > I'm curious to know how I can check this build method for myself for next time.\n> \n> Create a fork of github.com/git/git and open a pull request against\n> it.  (I believe you could also fork github.com/gitgitgadget/git and do\n> a pull request against it, but I switched over to /git/git a while\n> ago.) Immediately upon opening the pull request, a bunch of linux,\n> mac, windows, and freebsd builds will be triggered with various runs\n> of the testsuite.  Has been very useful for catching issues for me\n> before I sent them off to the list.\n\nI did before I sent this iteration, and it passed:\nhttps://github.com/gitgitgadget/git/pull/573\n\nThat's why I'm confused :) Did I do something differently? I don't use\nGGG to send the emails, but I do use it to run CI checks.\n\n - Emily\n"},{"id":"395571","messageId":"xmqqpnc82fka.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200416041037.GA236872@google.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-16T04:57:25Z","receivedAt":"2020-04-16T04:57:40Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Emily Shaffer <emilyshaffer@google.com> writes:\n\n> On Wed, Apr 15, 2020 at 08:45:05PM -0700, Elijah Newren wrote:\n>> \n>> Create a fork of github.com/git/git and open a pull request against\n>> it.  (I believe you could also fork github.com/gitgitgadget/git and do\n>> a pull request against it, but I switched over to /git/git a while\n>> ago.) Immediately upon opening the pull request, a bunch of linux,\n>> mac, windows, and freebsd builds will be triggered with various runs\n>> of the testsuite.  Has been very useful for catching issues for me\n>> before I sent them off to the list.\n>\n> I did before I sent this iteration, and it passed:\n> https://github.com/gitgitgadget/git/pull/573\n>\n> That's why I'm confused :) Did I do something differently? I don't use\n> GGG to send the emails, but I do use it to run CI checks.\n\nComparing the list of \"checks\" revealed by clicking \"Show all\nchecks\" there, with the list of \"Actions\" with recent tip of 'pu',\nsay, https://github.com/git/git/actions/runs/79416884, I notice that\nthe former does not have vs-build.  \n\nAlso, the former seems to be on \"Azure Pipelines\" (e.g. [*1*] which\nis \"Windows build\" among the \"checks\" on the list), while the latter\nis \"Github Actions\" (e.g. [*2*], among which exists \"VS-build\" that\nseems to be missing from the former).\n\nThe latter is coming from having the\ndd/ci-swap-azure-pipelines-with-github-actions topic and other two\ntopics that it depends on, which are right now only in 'pu'.  As\nwe'd like to advance the Github Actions CI support to 'next', I've\nbeen looking at the failures to it caused by individual topics (and\nright now, we know of two topics, one is the bugreport and the other\nis reftable) to make sure these other topics can enter 'next'.\n\nThanks.\n\n[References]\n*1* https://github.com/gitgitgadget/git/pull/573/checks?check_run_id=565642291\n*2* https://github.com/git/git/runs/590781044?check_suite_focus=true\n"},{"id":"395577","messageId":"20200416112605.GC2285@danh.dev","threadId":"53143","inReplyTo":"CABPp-BFM-A43GpOkfNeSt6KKsdpXzObhwajvT5qBp-ws_jstRw@mail.gmail.com","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-04-16T11:26:05Z","receivedAt":"2020-04-16T11:26:46Z","isPatch":false,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-04-15 20:45:05-0700, Elijah Newren <newren@gmail.com> wrote:\n> Hi Emily,\n> \n> On Wed, Apr 15, 2020 at 7:01 PM Emily Shaffer <emilyshaffer@google.com> wrote:\n> >\n> > On Wed, Apr 15, 2020 at 6:28 PM Junio C Hamano <gitster@pobox.com> wrote:\n> > >\n> > > Junio C Hamano <gitster@pobox.com> writes:\n> > >\n> > > > Danh Doan <congdanhqx@gmail.com> writes:\n> > > >\n> > > >> Excerpt from build log:\n> > > >>\n> > > >>> fatal error C1083: Cannot open include file: 'config-list.h'\n> > > >>\n> > > >> It's from bugreport topic.\n> > > >> I've seen this failure in the past (when testing with pu),\n> > > >> then I saw it disappear.\n> > > >>\n> > > >> I thought it was fixed during my testing for v4.\n> > > >\n> > > > Is the issue something similar to 976aaedc (msvc: add a Makefile\n> > > > target to pre-generate the Visual Studio solution, 2019-07-29)?\n> > > >\n> > > > If that is the case, perhaps something like this would help?  I'll\n> > > > tentatively queue it on top of es/bugreport and merge the result to\n> > > > 'pu' to see what happens.\n> > >\n> > > The build just passed: https://github.com/git/git/runs/590781044\n> > >\n> > > Emily, you may need to squash in something along the line of this\n> > > change to the commit in your series that starts building and using\n> > > the config-list.h file (was it the first one?).  I've queued mine\n> > > as a follow-up \"oops, it was wrong\" patch, but that would not be\n> > > kosher from bisectability's point of view.\n> >\n> > Hm, ok. I'll send a reroll squashing this in verbatim tomorrow unless\n> > I hear otherwise from Dscho? Looks like it's indeed the first one\n> > (dd763e).\n> > I'm curious to know how I can check this build method for myself for next time.\n> \n> Create a fork of github.com/git/git and open a pull request against\n> it.  (I believe you could also fork github.com/gitgitgadget/git and do\n> a pull request against it, but I switched over to /git/git a while\n> ago.) Immediately upon opening the pull request, a bunch of linux,\n> mac, windows, and freebsd builds will be triggered with various runs\n> of the testsuite.  Has been very useful for catching issues for me\n> before I sent them off to the list.\n\nFor the time being, open a Github PR will trigger Azure Pipelines to\ncheck various things  with both Linux, macOS, and Windows.\nThis Azure thing doesn't have that vs-build target, yet.\n\nWe're moving to Github Actions. When that topic graduate to master,\nwe can simply branch out from master and push to our fork in GitHub,\nit will run automatically. No need to create a PR on git.git anymore\n\nTo check that vs-build target for the time being by merging\ndd/ci-swap-azure-pipelines-with-github-actions\nand push to your GitHub fork.\n\n-- \nDanh\n"},{"id":"395580","messageId":"nycvar.QRO.7.76.6.2004161348530.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200416112605.GC2285@danh.dev","subject":"Re: fixing ci failure of 'pu' with the es/bugreport topic","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-16T12:05:05Z","receivedAt":"2020-04-16T12:05:31Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Emily,\n\nOn Thu, 16 Apr 2020, Danh Doan wrote:\n\n> On 2020-04-15 20:45:05-0700, Elijah Newren <newren@gmail.com> wrote:\n>\n> > On Wed, Apr 15, 2020 at 7:01 PM Emily Shaffer\n> > <emilyshaffer@google.com> wrote:\n> >\n> > > I'm curious to know how I can check this build method for myself for\n> > > next time.\n> >\n> > Create a fork of github.com/git/git and open a pull request against\n> > it.  (I believe you could also fork github.com/gitgitgadget/git and do\n> > a pull request against it, but I switched over to /git/git a while\n> > ago.) Immediately upon opening the pull request, a bunch of linux,\n> > mac, windows, and freebsd builds will be triggered with various runs\n> > of the testsuite.  Has been very useful for catching issues for me\n> > before I sent them off to the list.\n>\n> For the time being, open a Github PR will trigger Azure Pipelines to\n\nPlease spell it with an upper-case `H`: there is no `th` sound in GitHub.\n\n> check various things  with both Linux, macOS, and Windows.\n> This Azure thing doesn't have that vs-build target, yet.\n\nMore concretely, you will want to open a PR at https://github.com/git/git,\nnot at https://github.com/gitgitgadget/git.\n\nFor reasons (having to do with Junio's practice to base branches on\nolder commits, where `azure-pipelines.yml` either does not exist, or needs\nchanges to pass), the latter runs an Azure Pipeline on Pull Requests which\nis based _not_ on `azure-pipelines.yml`, but is essentially a manual\nre-implementation of it that does _not_ use YAML (but is revisioned\nseparately), with manual patches for all kinds of issues on top that have\nmade it into core Git's `master`.\n\nHowever, in your case I would strongly advise to simply use a throw-away\nbranch, merge in the GitHub workflow patches by Danh and myself (as\ndescribed in the quoted text below), and push it to your fork on GitHub.\nThat will execute a workflow run that will show up at\nhttps://github.com/nasamuffin/git/actions/new.\n\nCiao,\nDscho\n\n>\n> We're moving to Github Actions. When that topic graduate to master,\n> we can simply branch out from master and push to our fork in GitHub,\n> it will run automatically. No need to create a PR on git.git anymore\n>\n> To check that vs-build target for the time being by merging\n> dd/ci-swap-azure-pipelines-with-github-actions\n> and push to your GitHub fork.\n>\n> --\n> Danh\n>\n>\n"},{"id":"395581","messageId":"nycvar.QRO.7.76.6.2004161406480.46@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"xmqqh7xk45l4.fsf@gitster.c.googlers.com","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-04-16T12:08:52Z","receivedAt":"2020-04-16T12:09:08Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Wed, 15 Apr 2020, Junio C Hamano wrote:\n\n> Danh Doan <congdanhqx@gmail.com> writes:\n>\n> > On 2020-04-10 08:42:10-0700, Junio C Hamano <gitster@pobox.com> wrote:\n> >> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> >>  ...\n> >> > I would like to point out that there is only one single topic that is\n> >> > cause for sorrow here, and it is the reftable one.\n> >>\n> >> I first thought so, too, but vsbuild failures like the one in\n> >> https://github.com/git/git/runs/575116793 do not appear to be\n> >> caused by that topic (6a8c1d17b8 excludes reftable), so there\n> >> must be somebody else that is broken.\n> >\n> > Excerpt from build log:\n> >\n> >> fatal error C1083: Cannot open include file: 'config-list.h'\n> >\n> > It's from bugreport topic.\n> > I've seen this failure in the past (when testing with pu),\n> > then I saw it disappear.\n> >\n> > I thought it was fixed during my testing for v4.\n>\n> Is the issue something similar to 976aaedc (msvc: add a Makefile\n> target to pre-generate the Visual Studio solution, 2019-07-29)?\n>\n> If that is the case, perhaps something like this would help?  I'll\n> tentatively queue it on top of es/bugreport and merge the result to\n> 'pu' to see what happens.\n\nThis patch is morally equivalent to (albeit a bit more complete than) the\npatch I suggested in my mail to Emily that I sent on February 26th:\nhttps://lore.kernel.org/git/nycvar.QRO.7.76.6.2002261649550.46@tvgsbejvaqbjf.bet/\n\nSo yes, I am very much in favor of that patch.\n\nThanks,\nDscho\n\n>\n> -- >8 --\n> Subject: msvc: the bugreport topic depends on a generated config-list.h file\n>\n> For reasons explained in 976aaedc (msvc: add a Makefile target to\n> pre-generate the Visual Studio solution, 2019-07-29), some build\n> artifacts we consider non-source files cannot be generated in the\n> Visual Studio environment, and we already have some Makefile tweaks\n> to help Visual Studio to use generated command-list.h header file.\n>\n> As this topic starts to depend on another such generated header file,\n> config-list.h, let's do the same to it.\n>\n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  compat/vcbuild/README | 4 ++--\n>  config.mak.uname      | 6 +++---\n>  2 files changed, 5 insertions(+), 5 deletions(-)\n>\n> diff --git a/compat/vcbuild/README b/compat/vcbuild/README\n> index 1b6dabf5a2..42292e7c09 100644\n> --- a/compat/vcbuild/README\n> +++ b/compat/vcbuild/README\n> @@ -92,8 +92,8 @@ The Steps of Build Git with VS2008\n>     the git operations.\n>\n>  3. Inside Git's directory run the command:\n> -       make command-list.h\n> -   to generate the command-list.h file needed to compile git.\n> +       make command-list.h config-list.h\n> +   to generate the header file needed to compile git.\n>\n>  4. Then either build Git with the GNU Make Makefile in the Git projects\n>     root\n> diff --git a/config.mak.uname b/config.mak.uname\n> index 0ab8e00938..f880cc2792 100644\n> --- a/config.mak.uname\n> +++ b/config.mak.uname\n> @@ -721,9 +721,9 @@ vcxproj:\n>  \t echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets\n>  \tgit add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets\n>\n> -\t# Add command-list.h\n> -\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h\n> -\tgit add -f command-list.h\n> +\t# Add command-list.h and config-list.h\n> +\t$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h\n> +\tgit add -f config-list.h command-list.h\n>\n>  \t# Add scripts\n>  \trm -f perl/perl.mak\n>\n>\n"},{"id":"395597","messageId":"xmqq1ron1l2v.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2004161406480.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-04-16T15:55:52Z","receivedAt":"2020-04-16T15:56:07Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> This patch is morally equivalent to (albeit a bit more complete than) the\n> patch I suggested in my mail to Emily that I sent on February 26th:\n> https://lore.kernel.org/git/nycvar.QRO.7.76.6.2002261649550.46@tvgsbejvaqbjf.bet/\n\nAh, that was why it looked vaguely familiar.  Figures.\n\n> So yes, I am very much in favor of that patch.\n\nThanks.\n\n"},{"id":"396943","messageId":"20200504174636.GG86805@Carlos-MBP","threadId":"53143","inReplyTo":"ce0038598704e03becc65731a71abf596bdfbe98.1586538752.git.congdanhqx@gmail.com","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-04T17:46:36Z","receivedAt":"2020-05-04T17:46:40Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Sat, Apr 11, 2020 at 12:18:12AM +0700, Đoàn Trần Công Danh wrote:\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index 0ea1e5a05e..40a00983f7 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -657,6 +657,18 @@ die () {\n>  \tfi\n>  }\n>  \n> +file_lineno () {\n> +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> +\tlocal i\n> +\tfor i in ${!BASH_SOURCE[*]}\n\nthis line breaks with NetBSD's sh (and probably other POSIX complaint shells)\n\nthe Coding Guidelines mention \"no shell arrays\" and while the tests are more\nrelaxed against that rule, usually workarounds are needed, as it is shown by:\n5826b7b595 (test-lib: check Bash version for '-x' without using shell arrays,\n2019-01-03)\n\nCarlo\n"},{"id":"397014","messageId":"20200504232511.GB29599@danh.dev","threadId":"53143","inReplyTo":"20200504174636.GG86805@Carlos-MBP","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Danh Doan","fromEmail":"congdanhqx@gmail.com","sentAt":"2020-05-04T23:25:11Z","receivedAt":"2020-05-04T23:25:16Z","isPatch":true,"sender":{"key":"congdanhqx@gmail.com","avatar":"https://avatars.githubusercontent.com/u/42673067?v=4"},"body":"On 2020-05-04 10:46:36-0700, Carlo Marcelo Arenas Belón <carenas@gmail.com> wrote:\n> On Sat, Apr 11, 2020 at 12:18:12AM +0700, Đoàn Trần Công Danh wrote:\n> > diff --git a/t/test-lib.sh b/t/test-lib.sh\n> > index 0ea1e5a05e..40a00983f7 100644\n> > --- a/t/test-lib.sh\n> > +++ b/t/test-lib.sh\n> > @@ -657,6 +657,18 @@ die () {\n> >  \tfi\n> >  }\n> >  \n> > +file_lineno () {\n> > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> > +\tlocal i\n> > +\tfor i in ${!BASH_SOURCE[*]}\n> \n> this line breaks with NetBSD's sh (and probably other POSIX complaint shells)\n> \n> the Coding Guidelines mention \"no shell arrays\" and while the tests are more\n> relaxed against that rule, usually workarounds are needed, as it is shown by:\n> 5826b7b595 (test-lib: check Bash version for '-x' without using shell arrays,\n> 2019-01-03)\n\nThis function will be called in CI only, and when the the shell used\nis bash, to annotate the faulty line.\n\nWe have a test guarding it already.\nSo, I think it's fine.\n\n-- \nDanh\n"},{"id":"397026","messageId":"xmqqlfm7cj7s.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200504232511.GB29599@danh.dev","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-05T00:35:03Z","receivedAt":"2020-05-05T00:35:11Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Danh Doan <congdanhqx@gmail.com> writes:\n\n>> > +file_lineno () {\n>> > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n>> > +\tlocal i\n>> > +\tfor i in ${!BASH_SOURCE[*]}\n>> \n>> this line breaks with NetBSD's sh (and probably other POSIX complaint shells)\n>>  ...\n> This function will be called in CI only, and when the the shell used\n> is bash, to annotate the faulty line.\n>\n> We have a test guarding it already.\n\nCarlo, you said \"this line breaks\"---implying that you actually saw\nbreakage when running our tests on affected platforms.  Is that the\ncase?\n\nIt is entirely possible that some shell implementations may try to\nparse the contents of the shell function and trigger a syntax error\non that line, even before evaluationg \"are we running tests and do\nwe have BASH set?\", so I can believe \"we have a test guarding\", if\nthe mention refers to the first line of the helper function, is\ninsufficient and does break with some shells.\n\n\n\n\n"},{"id":"397028","messageId":"20200505005405.GA1218@Carlos-MBP","threadId":"53143","inReplyTo":"20200504232511.GB29599@danh.dev","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-05T00:54:05Z","receivedAt":"2020-05-05T00:55:07Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Tue, May 05, 2020 at 06:25:11AM +0700, Danh Doan wrote:\n> On 2020-05-04 10:46:36-0700, Carlo Marcelo Arenas Belón <carenas@gmail.com> wrote:\n> > On Sat, Apr 11, 2020 at 12:18:12AM +0700, Đoàn Trần Công Danh wrote:\n> > > diff --git a/t/test-lib.sh b/t/test-lib.sh\n> > > index 0ea1e5a05e..40a00983f7 100644\n> > > --- a/t/test-lib.sh\n> > > +++ b/t/test-lib.sh\n> > > @@ -657,6 +657,18 @@ die () {\n> > >  \tfi\n> > >  }\n> > >  \n> > > +file_lineno () {\n> > > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> > > +\tlocal i\n> > > +\tfor i in ${!BASH_SOURCE[*]}\n> > \n> > this line breaks with NetBSD's sh (and probably other POSIX complaint shells)\n> > \n> > the Coding Guidelines mention \"no shell arrays\" and while the tests are more\n> > relaxed against that rule, usually workarounds are needed, as it is shown by:\n> > 5826b7b595 (test-lib: check Bash version for '-x' without using shell arrays,\n> > 2019-01-03)\n> \n> This function will be called in CI only, and when the the shell used\n> is bash, to annotate the faulty line.\n\nthat part is correct, but the test is meant to be able to also run outside\nof CI (specially considering that there are several systems that are not\ncovered by it yet)\n\n> We have a test guarding it already.\n> So, I think it's fine.\n\nno; because the shell has to parse the whole script (regardless if it\nexecutes the line or not), so if you checkout master in a NetBSD machine\nand try to run the tests you get :\n\n** t0000-basic.sh ***\n./test-lib.sh: 681: Syntax error: Bad substitution\ngmake[2]: *** [Makefile:56: t0000-basic.sh] Error 2\n\nthe coding guidelines warns specifically against using arrays for this\nreason, and therefore it will be ideal that we follow such guidelines\nby rewriting the code not to use shell arrays (which is not a POSIX sh\nfeature) as it affects not only NetBSD but anyone else not running bash.\n\nbut there is an \"easy\" workaround as shown by the reference I sent, so a\nnaive and very ugly \"fix\" would be:\n\n--- >8 ---\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 1b221951a8..b6b7175dfe 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -677,6 +677,7 @@ die () {\n \n file_lineno () {\n \ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n+\teval '\n \tlocal i\n \tfor i in ${!BASH_SOURCE[*]}\n \tdo\n@@ -685,6 +686,7 @@ file_lineno () {\n \t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n \t\tesac\n \tdone\n+\t'\n }\n \n GIT_EXIT_OK=\n"},{"id":"397168","messageId":"20200506073045.GA52959@Carlos-MBP","threadId":"53143","inReplyTo":"xmqqlfm7cj7s.fsf@gitster.c.googlers.com","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-06T07:30:45Z","receivedAt":"2020-05-06T07:30:50Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Mon, May 04, 2020 at 05:35:03PM -0700, Junio C Hamano wrote:\n> Danh Doan <congdanhqx@gmail.com> writes:\n> \n> >> > +file_lineno () {\n> >> > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> >> > +\tlocal i\n> >> > +\tfor i in ${!BASH_SOURCE[*]}\n> >> \n> >> this line breaks with NetBSD's sh (and probably other POSIX complaint shells)\n> >>  ...\n> > This function will be called in CI only, and when the the shell used\n> > is bash, to annotate the faulty line.\n> >\n> > We have a test guarding it already.\n> \n> Carlo, you said \"this line breaks\"---implying that you actually saw\n> breakage when running our tests on affected platforms.  Is that the\n> case?\n\ncorrect. and as described in the followup email[1]\n\n> It is entirely possible that some shell implementations may try to\n> parse the contents of the shell function and trigger a syntax error\n> on that line, even before evaluationg \"are we running tests and do\n> we have BASH set?\", so I can believe \"we have a test guarding\", if\n> the mention refers to the first line of the helper function, is\n> insufficient and does break with some shells.\n\nit would seem that a POSIX sh version would be enough for what we\nneed and as shown after the scissors.\n\ngot away also with the IMHO unnecesary rewriting of the script path\nand hardcoding of \"t/\" as it looks cleaner.\n\nCarlo\n--- >8 ---\nSubject: [PATCH] tests: make file_lineno() POSIX sh compatible\n\n662f9cf154 (tests: when run in Bash, annotate test failures with file\nname/line number, 2020-04-11), introduces a way to report the exact\nlocation where an error was triggered.\n\nThe implementation was using bash specific syntax and was restricted\nwith a guard so it will only be used with bash, but NetBSD sh will\nstill have to parse the function and the use of arrays triggers a\nsyntax error as shown by:\n\n** t0000-basic.sh ***\n./test-lib.sh: 681: Syntax error: Bad substitution\n\nInstead of guarding the code, use a simpler version written in POSIX\nsh as per the Coding Guidelines.\n\nSigned-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>\n---\n t/test-lib.sh | 12 +++---------\n 1 file changed, 3 insertions(+), 9 deletions(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 1b221951a8..a8f8e4106b 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -676,15 +676,9 @@ die () {\n }\n \n file_lineno () {\n-\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n-\tlocal i\n-\tfor i in ${!BASH_SOURCE[*]}\n-\tdo\n-\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n-\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n-\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n-\t\tesac\n-\tdone\n+\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" || return 0\n+\n+\techo \"$0:$LINENO: ${1+$1: }\"\n }\n \n GIT_EXIT_OK=\n-- \n2.26.2.686.gfaf46a9ccd\n\n"},{"id":"397181","messageId":"nycvar.QRO.7.76.6.2005061447010.56@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200506073045.GA52959@Carlos-MBP","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-05-06T12:54:38Z","receivedAt":"2020-05-06T12:54:49Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Carlo,\n\nOn Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index 1b221951a8..a8f8e4106b 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -676,15 +676,9 @@ die () {\n>  }\n>\n>  file_lineno () {\n> -\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> -\tlocal i\n> -\tfor i in ${!BASH_SOURCE[*]}\n> -\tdo\n> -\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> -\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> -\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> -\t\tesac\n> -\tdone\n> +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" || return 0\n> +\n> +\techo \"$0:$LINENO: ${1+$1: }\"\n\nThat suppresses the error all right.\n\nUnfortunately, it completely breaks the feature. At that point, `$LINENO`\nis either unset (e.g. in `dash`) or it contains the number of the line\n_containing the `echo`. That is totally useless information at this point,\nwe want the line number of the caller.\n\nTry this, for example:\n\n```\n#!/bin/sh\n\nfile_lineno () {\n\techo \"$0:$LINENO: hello\"\n}\n\nfile_lineno\n```\n\nWhen you run this, it will print `4`. What we want is `7`.\n\nEven worse, as `$0` does _not_ contain `test-lib.sh` at this point, the\nprinted information is totally bogus.\n\nSo we will have to use that `eval` unless we find a better solution.\n\nCiao,\nDscho\n"},{"id":"397184","messageId":"20200506134659.GA75901@Carlos-MBP","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2005061447010.56@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-06T13:46:59Z","receivedAt":"2020-05-06T13:47:04Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Wed, May 06, 2020 at 02:54:38PM +0200, Johannes Schindelin wrote:\n> On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n> > diff --git a/t/test-lib.sh b/t/test-lib.sh\n> > index 1b221951a8..a8f8e4106b 100644\n> > --- a/t/test-lib.sh\n> > +++ b/t/test-lib.sh\n> > @@ -676,15 +676,9 @@ die () {\n> >  }\n> >\n> >  file_lineno () {\n> > -\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> > -\tlocal i\n> > -\tfor i in ${!BASH_SOURCE[*]}\n> > -\tdo\n> > -\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> > -\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> > -\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> > -\t\tesac\n> > -\tdone\n> > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" || return 0\n> > +\n> > +\techo \"$0:$LINENO: ${1+$1: }\"\n> \n> That suppresses the error all right.\n> \n> Unfortunately, it completely breaks the feature. At that point, `$LINENO`\n> is either unset (e.g. in `dash`) or it contains the number of the line\n> _containing the `echo`. That is totally useless information at this point,\n> we want the line number of the caller.\n\nthat seems like a bug in dash, which NetBSD sh doesn't have, as LINENO\nwouldn't be unset.\n\n> Try this, for example:\n> \n> ```\n> #!/bin/sh\n> \n> file_lineno () {\n> \techo \"$0:$LINENO: hello\"\n> }\n> \n> file_lineno\n> ```\n> \n> When you run this, it will print `4`. What we want is `7`.\n\nso you need instead :\n\n```\n#!/bin/sh\n\nfile_lineno () {\n\techo \"$0:$1: hello\"\n}\n\nfile_lineno $LINENO\n```\n\n> Even worse, as `$0` does _not_ contain `test-lib.sh` at this point, the\n> printed information is totally bogus.\n\nnot sure I understand what you mean here, at least when runnning with bash\nthe original code shows $0 correctly as t????.sh when I tried to force a\nfailure to test.\n\nCarlo\n"},{"id":"397188","messageId":"nycvar.QRO.7.76.6.2005061624050.56@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"20200506134659.GA75901@Carlos-MBP","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-05-06T14:33:47Z","receivedAt":"2020-05-06T14:33:57Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Carlo,\n\nOn Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n\n> On Wed, May 06, 2020 at 02:54:38PM +0200, Johannes Schindelin wrote:\n> > On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n> > > diff --git a/t/test-lib.sh b/t/test-lib.sh\n> > > index 1b221951a8..a8f8e4106b 100644\n> > > --- a/t/test-lib.sh\n> > > +++ b/t/test-lib.sh\n> > > @@ -676,15 +676,9 @@ die () {\n> > >  }\n> > >\n> > >  file_lineno () {\n> > > -\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> > > -\tlocal i\n> > > -\tfor i in ${!BASH_SOURCE[*]}\n> > > -\tdo\n> > > -\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> > > -\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> > > -\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> > > -\t\tesac\n> > > -\tdone\n> > > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" || return 0\n> > > +\n> > > +\techo \"$0:$LINENO: ${1+$1: }\"\n> >\n> > That suppresses the error all right.\n> >\n> > Unfortunately, it completely breaks the feature. At that point, `$LINENO`\n> > is either unset (e.g. in `dash`) or it contains the number of the line\n> > _containing the `echo`. That is totally useless information at this point,\n> > we want the line number of the caller.\n>\n> that seems like a bug in dash, which NetBSD sh doesn't have, as LINENO\n> wouldn't be unset.\n\nAnd your patch makes this a real problem as you no longer skip the `echo`\nin the non-Bash case.\n\nThat's what I wanted to point out: this needs to be fixed.\n\n> > Try this, for example:\n> >\n> > ```\n> > #!/bin/sh\n> >\n> > file_lineno () {\n> > \techo \"$0:$LINENO: hello\"\n> > }\n> >\n> > file_lineno\n> > ```\n> >\n> > When you run this, it will print `4`. What we want is `7`.\n>\n> so you need instead :\n>\n> ```\n> #!/bin/sh\n>\n> file_lineno () {\n> \techo \"$0:$1: hello\"\n> }\n>\n> file_lineno $LINENO\n\nNo.\n\nPlease understand what the intention of the current (Bash-specific) code\nis: in case that there is a failure, it needs to print out the file and\nline number of the actual statement that caused that problem.\n\nTake this example:\n\n\ttest_expect_success 'For Carlo' '\n\t\tfalse\n\t'\n\nObviously, this will fail, and it will print out an error message. What we\nwant here is that the file that contains that `test_expect_success` and\nthe actual line number of this call are printed.\n\nYour suggestion would be to clutter each and every such call with\n`$LINENO`, like so:\n\n\ttest_expect_success $LINENO 'For Carlo' '\n\nI don't think that is sensible an idea.\n\nBesides, it would _still_ not work, for parameterized functions that call\n`test_expect_success` and that are defined in `lib-<whatever>.sh`.\n\nExample:\n\n\t# in t/lib-whatever.sh\n\tsuper_repetitive_test () {\n\t\ttest_expect_success \"first $1\" '\n\t\t\t...\n\t\t'\n\n\t\ttest_expect_success \"second $1\" '\n\t\t\t...\n\t\t'\n\n\t\t...\n\n\t\ttest_expect_success \"gazillionth $1\" '\n\t\t\t...\n\t\t'\n\t}\n\n\t# in t/t1234-actual-caller.sh\n\t. lib-whatever.sh\n\n\tsuper_repetitive_test hello\n\tsuper_repetitive_test world\n\tsuper_repetitive_test good-bye\n\tsuper_repetitive_test dreams\n\nWe will not want to print out the line number of the call in\nt/lib-whatever.sh. That is what your proposal would amount to, unless you\nwant to clutter even the `super_repetitive_test` calles, which would fly\neven less.\n\n> > Even worse, as `$0` does _not_ contain `test-lib.sh` at this point,\n> > the printed information is totally bogus.\n>\n> not sure I understand what you mean here, at least when runnning with bash\n> the original code shows $0 correctly as t????.sh when I tried to force a\n> failure to test.\n\nYes, $0 shows the correct file. But since the line number that is printed\nis from a totally different file, the combination <file>:<lineno> is\ncompletely and utterly bogus. Misleading. Less than useless.\n\nCiao,\nDscho\n"},{"id":"397203","messageId":"xmqq368d81l7.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200506134659.GA75901@Carlos-MBP","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-06T16:33:56Z","receivedAt":"2020-05-06T16:34:05Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n>> Unfortunately, it completely breaks the feature. At that point, `$LINENO`\n>> is either unset (e.g. in `dash`) or it contains the number of the line\n>> _containing the `echo`. That is totally useless information at this point,\n>> we want the line number of the caller.\n>\n> that seems like a bug in dash, which NetBSD sh doesn't have, as LINENO\n> wouldn't be unset.\n\nI thought you already gave a perfectly well working eval '...' approach.\nWas it insufficient?\n\n"},{"id":"397262","messageId":"20200507061029.GA83231@Carlos-MBP","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2005061624050.56@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-07T06:10:29Z","receivedAt":"2020-05-07T06:10:35Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Wed, May 06, 2020 at 04:33:47PM +0200, Johannes Schindelin wrote:\n> On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n> > On Wed, May 06, 2020 at 02:54:38PM +0200, Johannes Schindelin wrote:\n> > > On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:\n> > > > diff --git a/t/test-lib.sh b/t/test-lib.sh\n> > > > index 1b221951a8..a8f8e4106b 100644\n> > > > --- a/t/test-lib.sh\n> > > > +++ b/t/test-lib.sh\n> > > > @@ -676,15 +676,9 @@ die () {\n> > > >  }\n> > > >\n> > > >  file_lineno () {\n> > > > -\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> > > > -\tlocal i\n> > > > -\tfor i in ${!BASH_SOURCE[*]}\n> > > > -\tdo\n> > > > -\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> > > > -\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> > > > -\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> > > > -\t\tesac\n> > > > -\tdone\n> > > > +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" || return 0\n> > > > +\n> > > > +\techo \"$0:$LINENO: ${1+$1: }\"\n> > >\n> > > That suppresses the error all right.\n> > >\n> > > Unfortunately, it completely breaks the feature. At that point, `$LINENO`\n> > > is either unset (e.g. in `dash`) or it contains the number of the line\n> > > _containing the `echo`. That is totally useless information at this point,\n> > > we want the line number of the caller.\n> >\n> > that seems like a bug in dash, which NetBSD sh doesn't have, as LINENO\n> > wouldn't be unset.\n> \n> And your patch makes this a real problem as you no longer skip the `echo`\n> in the non-Bash case.\n\nFWIW, at least NetBSD's dash (0.5.10.2) always sets LINENO\n\n> > > Try this, for example:\n> > >\n> > > ```\n> > > #!/bin/sh\n> > >\n> > > file_lineno () {\n> > > \techo \"$0:$LINENO: hello\"\n> > > }\n> > >\n> > > file_lineno\n> > > ```\n> > >\n> > > When you run this, it will print `4`. What we want is `7`.\n> >\n> > so you need instead :\n> >\n> > ```\n> > #!/bin/sh\n> >\n> > file_lineno () {\n> > \techo \"$0:$1: hello\"\n> > }\n> >\n> > file_lineno $LINENO\n> \n> No.\n> \n> Please understand what the intention of the current (Bash-specific) code\n> is: in case that there is a failure, it needs to print out the file and\n> line number of the actual statement that caused that problem.\n\nthat is what I got from the commmit message but then I was puzzled not\nto find the line inside the test case that faile but instead the one\nwhere the last test function was located.\n\neitherway, I was careless to send the previous version without checking\nmore deeply; indeed the use of LINENO in the original code was part of\nthat confusion and is therefore gone in this new one.\n\n> Take this example:\n> \n> \ttest_expect_success 'For Carlo' '\n> \t\tfalse\n> \t'\n> \n> Obviously, this will fail, and it will print out an error message. What we\n> want here is that the file that contains that `test_expect_success` and\n> the actual line number of this call are printed.\n> \n> Your suggestion would be to clutter each and every such call with\n> `$LINENO`, like so:\n> \n> \ttest_expect_success $LINENO 'For Carlo' '\n> \n> I don't think that is sensible an idea.\n> \n> Besides, it would _still_ not work, for parameterized functions that call\n> `test_expect_success` and that are defined in `lib-<whatever>.sh`.\n> \n> Example:\n> \n> \t# in t/lib-whatever.sh\n> \tsuper_repetitive_test () {\n> \t\ttest_expect_success \"first $1\" '\n> \t\t\t...\n> \t\t'\n> \n> \t\ttest_expect_success \"second $1\" '\n> \t\t\t...\n> \t\t'\n> \n> \t\t...\n> \n> \t\ttest_expect_success \"gazillionth $1\" '\n> \t\t\t...\n> \t\t'\n> \t}\n> \n> \t# in t/t1234-actual-caller.sh\n> \t. lib-whatever.sh\n> \n> \tsuper_repetitive_test hello\n> \tsuper_repetitive_test world\n> \tsuper_repetitive_test good-bye\n> \tsuper_repetitive_test dreams\n> \n> We will not want to print out the line number of the call in\n> t/lib-whatever.sh. That is what your proposal would amount to, unless you\n> want to clutter even the `super_repetitive_test` calles, which would fly\n> even less.\n\nthat was very useful to understand better the constrain that was referred\nin the commit message and that forced to build a bash specific solution.\n\nI have to admit too, I was confused by the code, but with the clear guidance\nyou provided I think the new proposed[1] version is also clearer, and goes\naway with the problem that triggered this whole discussion.\n\nCarlo\n\n[1] https://lore.kernel.org/git/20200507055118.69971-1-carenas@gmail.com/\n"},{"id":"397873","messageId":"5b373748-d986-1aec-670f-7ac1502e7052@gmail.com","threadId":"53143","inReplyTo":"ce0038598704e03becc65731a71abf596bdfbe98.1586538752.git.congdanhqx@gmail.com","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Alban Gruin","fromEmail":"alban.gruin@gmail.com","sentAt":"2020-05-15T13:16:38Z","receivedAt":"2020-05-15T13:16:52Z","isPatch":true,"sender":{"key":"alban.gruin@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6310153?v=4"},"body":"Hi,\n\nLe 10/04/2020 à 19:18, Đoàn Trần Công Danh a écrit :\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> \n> When a test fails, it is nice to see where the corresponding code lives\n> in the worktree. Sadly, it seems that only Bash allows us to infer this\n> information. Let's do it when we detect that we're running in a Bash.\n> \n> This will come in handy in the next commit, where we teach the GitHub\n> Actions workflow to annotate failed test runs with this information.\n> \n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>\n> ---\n>  t/test-lib.sh | 14 +++++++++++++-\n>  1 file changed, 13 insertions(+), 1 deletion(-)\n> \n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index 0ea1e5a05e..40a00983f7 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -657,6 +657,18 @@ die () {\n>  \tfi\n>  }\n>  \n> +file_lineno () {\n> +\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n> +\tlocal i\n> +\tfor i in ${!BASH_SOURCE[*]}\n> +\tdo\n> +\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> +\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> +\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> +\t\tesac\n> +\tdone\n> +}\n> +\n>  GIT_EXIT_OK=\n>  trap 'die' EXIT\n>  # Disable '-x' tracing, because with some shells, notably dash, it\n> @@ -702,7 +714,7 @@ test_failure_ () {\n>  \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n>  \tfi\n>  \ttest_failure=$(($test_failure + 1))\n> -\tsay_color error \"not ok $test_count - $1\"\n> +\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n>  \tshift\n>  \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n>  \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n> \n\nThis violates the TAP specification, it seems.  Without this patch, when\na test fails, `prove' shows clearly which test(s) broke, and how many\nfailed:\n\n> Test Summary Report\n> -------------------\n> t0001-init.sh (Wstat: 256 Tests: 45 Failed: 1)\n>   Failed test:  2\n>   Non-zero exit status: 1\n\nWith this patch, it shows this:\n\n> Test Summary Report\n> -------------------\n> t0001-init.sh (Wstat: 256 Tests: 44 Failed: 0)\n>   Non-zero exit status: 1\n>   Parse errors: Tests out of sequence.  Found (3) but expected (2)\n>                 Tests out of sequence.  Found (4) but expected (3)\n>                 Tests out of sequence.  Found (5) but expected (4)\n>                 Tests out of sequence.  Found (6) but expected (5)\n>                 Tests out of sequence.  Found (7) but expected (6)\n> Displayed the first 5 of 44 TAP syntax errors.\n> Re-run prove with the -p option to see them all.\n\nNot nice to see clearly which tests failed: we do not see all failed\ntests (what if a test failed after the 7th test?), and the counter\ndisplays 0.\n\nThis happens on my machine, as well as on github.\n\nCheers,\nAlban\n\n"},{"id":"397880","messageId":"20200515150041.22873-1-carenas@gmail.com","threadId":"53143","inReplyTo":"5b373748-d986-1aec-670f-7ac1502e7052@gmail.com","subject":"[RFC PATCH] t: move metadata into TAP test description","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-15T15:00:41Z","receivedAt":"2020-05-15T15:00:50Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"662f9cf154 (tests: when run in Bash, annotate test failures with file\nname/line number, 2020-04-11) adds metadata to the TAP output to help\nidentify the location of the failed test, but does it in a way that\nbreak the TAP format and therefore confuses prove.\n\nMove the metadata to the description to workaround the issue and\nchange the regex from 676eb0c1ce (ci: add a problem matcher for GitHub\nActions, 2020-04-11) to match.\n\nReported-by: Alban Gruin <alban.gruin@gmail.com>\n---\n ci/git-problem-matcher.json | 10 +++++-----\n t/test-lib.sh               |  6 +++---\n 2 files changed, 8 insertions(+), 8 deletions(-)\n\ndiff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\nindex 506dfbd97f..e10e88bba1 100644\n--- a/ci/git-problem-matcher.json\n+++ b/ci/git-problem-matcher.json\n@@ -4,11 +4,11 @@\n             \"owner\": \"git-test-suite\",\n             \"pattern\": [\n                 {\n-                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n-                    \"file\": 1,\n-                    \"line\": 2,\n-                    \"severity\": 3,\n-                    \"message\": 4\n+                    \"regexp\": \"^(.*)(error|warning|info):\\\\([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n+                    \"file\": 3,\n+                    \"line\": 4,\n+                    \"severity\": 2,\n+                    \"message\": 1\n                 }\n             ]\n         }\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex baf94546da..d5f59ab3bf 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -682,8 +682,8 @@ file_lineno () {\n \t\tfor i in ${!BASH_SOURCE[*]}\n \t\tdo\n \t\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n-\t\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n-\t\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n+\t\t\t0,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:$LINENO)\"; return;;\n+\t\t\t*,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]})\"; return;;\n \t\t\tesac\n \t\tdone\n \t'\n@@ -734,7 +734,7 @@ test_failure_ () {\n \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n \tfi\n \ttest_failure=$(($test_failure + 1))\n-\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n+\tsay_color error \"not ok $test_count - $1$(file_lineno error)\"\n \tshift\n \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n-- \n2.26.2.812.g046d49d455\n\n"},{"id":"397882","messageId":"CAPig+cTG7oPOC2EmrXw6j4J4xyeBOy4UPFoFe7p-k2+5hgaRkQ@mail.gmail.com","threadId":"53143","inReplyTo":"20200515150041.22873-1-carenas@gmail.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2020-05-15T15:08:40Z","receivedAt":"2020-05-15T15:08:54Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Fri, May 15, 2020 at 11:00 AM Carlo Marcelo Arenas Belón\n<carenas@gmail.com> wrote:\n> 662f9cf154 (tests: when run in Bash, annotate test failures with file\n> name/line number, 2020-04-11) adds metadata to the TAP output to help\n> identify the location of the failed test, but does it in a way that\n> break the TAP format and therefore confuses prove.\n>\n> Move the metadata to the description to workaround the issue and\n> change the regex from 676eb0c1ce (ci: add a problem matcher for GitHub\n> Actions, 2020-04-11) to match.\n>\n> Reported-by: Alban Gruin <alban.gruin@gmail.com>\n\nMissing sign-off.\n"},{"id":"397886","messageId":"20200515152823.GA61200@Carlos-MBP","threadId":"53143","inReplyTo":"5b373748-d986-1aec-670f-7ac1502e7052@gmail.com","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-15T15:28:23Z","receivedAt":"2020-05-15T15:28:30Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Fri, May 15, 2020 at 03:16:38PM +0200, Alban Gruin wrote:\n> \n> This happens on my machine, as well as on github.\n\ncould you point me to a failed github report?, also would the patch I posted\nearlier (better with the following on top) help?\n\nCarlo\n-- >8 --\ndiff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\nindex e10e88bba1..6d7424441b 100644\n--- a/ci/git-problem-matcher.json\n+++ b/ci/git-problem-matcher.json\n@@ -4,7 +4,7 @@\n             \"owner\": \"git-test-suite\",\n             \"pattern\": [\n                 {\n-                    \"regexp\": \"^(.*)(error|warning|info):\\\\([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n+                    \"regexp\": \"^(.*)\\\\((error|warning|info):([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n                     \"file\": 3,\n                     \"line\": 4,\n                     \"severity\": 2,\n"},{"id":"397887","messageId":"65ce572d-5afe-694d-1371-ac781bd2ab1f@gmail.com","threadId":"53143","inReplyTo":"20200515152823.GA61200@Carlos-MBP","subject":"Re: [PATCH v5 10/12] tests: when run in Bash, annotate test failures with file name/line number","fromName":"Alban Gruin","fromEmail":"alban.gruin@gmail.com","sentAt":"2020-05-15T15:33:23Z","receivedAt":"2020-05-15T15:33:27Z","isPatch":true,"sender":{"key":"alban.gruin@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6310153?v=4"},"body":"Hi Carlo,\n\nLe 15/05/2020 à 17:28, Carlo Marcelo Arenas Belón a écrit :\n> On Fri, May 15, 2020 at 03:16:38PM +0200, Alban Gruin wrote:\n>>\n>> This happens on my machine, as well as on github.\n> \n> could you point me to a failed github report?, \n> \n\nHere you go:\nhttps://github.com/agrn/git/runs/678028019?check_suite_focus=true\n\nI hope you can read it you're logged in.\n\n> also would the patch I posted\n> earlier (better with the following on top) help?\n\nYes, it does, thank you!  I have a few comments about it, I'll send them\nin a minute.\n\nCheers,\nAlban\n\n"},{"id":"397888","messageId":"880ded78-21c6-9310-6c5e-422f6a63ad47@gmail.com","threadId":"53143","inReplyTo":"20200515150041.22873-1-carenas@gmail.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Alban Gruin","fromEmail":"alban.gruin@gmail.com","sentAt":"2020-05-15T15:38:21Z","receivedAt":"2020-05-15T15:38:27Z","isPatch":true,"sender":{"key":"alban.gruin@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6310153?v=4"},"body":"Le 15/05/2020 à 17:00, Carlo Marcelo Arenas Belón a écrit :\n> 662f9cf154 (tests: when run in Bash, annotate test failures with file\n> name/line number, 2020-04-11) adds metadata to the TAP output to help\n> identify the location of the failed test, but does it in a way that\n> break the TAP format and therefore confuses prove.\n> \n> Move the metadata to the description to workaround the issue and\n> change the regex from 676eb0c1ce (ci: add a problem matcher for GitHub\n> Actions, 2020-04-11) to match.\n> \n> Reported-by: Alban Gruin <alban.gruin@gmail.com>\n> ---\n>  ci/git-problem-matcher.json | 10 +++++-----\n>  t/test-lib.sh               |  6 +++---\n>  2 files changed, 8 insertions(+), 8 deletions(-)\n> \n> diff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\n> index 506dfbd97f..e10e88bba1 100644\n> --- a/ci/git-problem-matcher.json\n> +++ b/ci/git-problem-matcher.json\n> @@ -4,11 +4,11 @@\n>              \"owner\": \"git-test-suite\",\n>              \"pattern\": [\n>                  {\n> -                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n> -                    \"file\": 1,\n> -                    \"line\": 2,\n> -                    \"severity\": 3,\n> -                    \"message\": 4\n> +                    \"regexp\": \"^(.*)(error|warning|info):\\\\([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n> +                    \"file\": 3,\n> +                    \"line\": 4,\n> +                    \"severity\": 2,\n> +                    \"message\": 1\n>                  }\n>              ]\n>          }\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index baf94546da..d5f59ab3bf 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -682,8 +682,8 @@ file_lineno () {\n>  \t\tfor i in ${!BASH_SOURCE[*]}\n>  \t\tdo\n>  \t\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> -\t\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> -\t\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> +\t\t\t0,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:$LINENO)\"; return;;\n> +\t\t\t*,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]})\"; return;;\n\nCould you add a space after the \"error:\"/\"warn:\"/\"info:\"?\n\n>  \t\t\tesac\n>  \t\tdone\n>  \t'\n> @@ -734,7 +734,7 @@ test_failure_ () {\n>  \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n>  \tfi\n>  \ttest_failure=$(($test_failure + 1))\n> -\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n> +\tsay_color error \"not ok $test_count - $1$(file_lineno error)\"\n\nCould you add a space before `$(file_lineno error)'?\n\n>  \tshift\n>  \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n>  \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n> \n\nThinking about it, I think it would make sense to put this kind of\ninformation in a diagnostic line, as we already do for the code of a\nfailed test.\n\nInstead of this:\n\n> not ok 1 - plain(error:t/./t0001-init.sh:33)\n> #\n> #               false &&\n> #               git init plain &&\n> #               check_config plain/.git false unset\n> #\n\nSomething like this:\n\n> not ok 1 - plain\n> # (error:t/./t0001-init.sh:33)\n> #\n> #               false &&\n> #               git init plain &&\n> #               check_config plain/.git false unset\n> #\n\nCheers,\nAlban\n\n"},{"id":"397889","messageId":"20200515154539.GB61200@Carlos-MBP","threadId":"53143","inReplyTo":"880ded78-21c6-9310-6c5e-422f6a63ad47@gmail.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-15T15:45:39Z","receivedAt":"2020-05-15T15:45:45Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Fri, May 15, 2020 at 05:38:21PM +0200, Alban Gruin wrote:\n> \n> Thinking about it, I think it would make sense to put this kind of\n> information in a diagnostic line, as we already do for the code of a\n> failed test.\n> \n> Instead of this:\n> \n> > not ok 1 - plain(error:t/./t0001-init.sh:33)\n> > #\n> > #               false &&\n> > #               git init plain &&\n> > #               check_config plain/.git false unset\n> > #\n> \n> Something like this:\n> \n> > not ok 1 - plain\n> > # (error:t/./t0001-init.sh:33)\n> > #\n> > #               false &&\n> > #               git init plain &&\n> > #               check_config plain/.git false unset\n> > #\n\nindeed, and that is why I mentioned this as a workaround only.\n\nto move to a format like the one you suggest, it might be better to\ndo it by also moving to TAP13[1] (which allows all that metadata)\n\nbut of course that would also require us to do more changes to the\nintegration with GitHub's problem matchers and probably a lot more\nchanges I am not even aware of.\n\nCarlo\n\n[1] http://testanything.org/tap-version-13-specification.html\n"},{"id":"397893","messageId":"xmqqpnb5m9w1.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200515150041.22873-1-carenas@gmail.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T16:38:06Z","receivedAt":"2020-05-15T16:38:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón  <carenas@gmail.com> writes:\n\n> 662f9cf154 (tests: when run in Bash, annotate test failures with file\n> name/line number, 2020-04-11) adds metadata to the TAP output to help\n> identify the location of the failed test, but does it in a way that\n> break the TAP format and therefore confuses prove.\n>\n> Move the metadata to the description to workaround the issue and\n> change the regex from 676eb0c1ce (ci: add a problem matcher for GitHub\n> Actions, 2020-04-11) to match.\n>\n> Reported-by: Alban Gruin <alban.gruin@gmail.com>\n> ---\n>  ci/git-problem-matcher.json | 10 +++++-----\n>  t/test-lib.sh               |  6 +++---\n>  2 files changed, 8 insertions(+), 8 deletions(-)\n>\n> diff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\n> index 506dfbd97f..e10e88bba1 100644\n> --- a/ci/git-problem-matcher.json\n> +++ b/ci/git-problem-matcher.json\n> @@ -4,11 +4,11 @@\n>              \"owner\": \"git-test-suite\",\n>              \"pattern\": [\n>                  {\n> -                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n> -                    \"file\": 1,\n> -                    \"line\": 2,\n> -                    \"severity\": 3,\n> -                    \"message\": 4\n> +                    \"regexp\": \"^(.*)(error|warning|info):\\\\([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n\nDo we ever run our tests in ci environments with a shell other than\nbash?  Would we still work fine without the \"error:<F>:<L>:\" suffix?\nI guess we just live with degraded output in such a case, and is\nmuch better than breaking TAP when tests are run under bash.\n\nThe tail part of this pattern (starting at error/warn/info) is tight\nenough that the overly loose (.*) for the message part may still\nmatch the \"rest of the message that has arbitrary string\" just fine,\nbut it might be less error prone to add an unusual letter (e.g. \"|\")\nin the output between \"not ok $test_count - $1\" and the output from\nthe file_lineno() helper to make sure that we won't end up eating a\nword \"error\" etc. at the end of the test title.  I dunno.\n\n> +                    \"file\": 3,\n> +                    \"line\": 4,\n> +                    \"severity\": 2,\n> +                    \"message\": 1\n>                  }\n>              ]\n>          }\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index baf94546da..d5f59ab3bf 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -682,8 +682,8 @@ file_lineno () {\n>  \t\tfor i in ${!BASH_SOURCE[*]}\n>  \t\tdo\n>  \t\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> -\t\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> -\t\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> +\t\t\t0,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:$LINENO)\"; return;;\n> +\t\t\t*,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]})\"; return;;\n>  \t\t\tesac\n>  \t\tdone\n>  \t'\n> @@ -734,7 +734,7 @@ test_failure_ () {\n>  \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n>  \tfi\n>  \ttest_failure=$(($test_failure + 1))\n> -\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n> +\tsay_color error \"not ok $test_count - $1$(file_lineno error)\"\n>  \tshift\n>  \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n>  \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n"},{"id":"397895","messageId":"xmqqlfltm9b5.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200515154539.GB61200@Carlos-MBP","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T16:50:38Z","receivedAt":"2020-05-15T16:50:44Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n> On Fri, May 15, 2020 at 05:38:21PM +0200, Alban Gruin wrote:\n>> \n>> Thinking about it, I think it would make sense to put this kind of\n>> information in a diagnostic line, as we already do for the code of a\n>> failed test.\n>> \n>> Instead of this:\n>> \n>> > not ok 1 - plain(error:t/./t0001-init.sh:33)\n>> > #\n>> > #               false &&\n>> > #               git init plain &&\n>> > #               check_config plain/.git false unset\n>> > #\n>> \n>> Something like this:\n>> \n>> > not ok 1 - plain\n>> > # (error:t/./t0001-init.sh:33)\n>> > #\n>> > #               false &&\n>> > #               git init plain &&\n>> > #               check_config plain/.git false unset\n>> > #\n>\n> indeed, and that is why I mentioned this as a workaround only.\n>\n> to move to a format like the one you suggest, it might be better to\n> do it by also moving to TAP13[1] (which allows all that metadata)\n>\n> but of course that would also require us to do more changes to the\n> integration with GitHub's problem matchers and probably a lot more\n> changes I am not even aware of.\n\nAt this late stage in the cycle, would it be a safer change to\nrevert the whole thing, I wonder, rather than piling fixes on top of\nfixes to the initial breakage?\n\n303775a2 (t/test_lib: avoid naked bash arrays in file_lineno, 2020-05-07)\n662f9cf1 (tests: when run in Bash, annotate test failures with file name/line number, 2020-04-11)\n\nI'll prepare a topic to revert these two directly on top of -rc0 and\nsee how well it goes.\n\n\n\n"},{"id":"397899","messageId":"20200515171428.GC61200@Carlos-MBP","threadId":"53143","inReplyTo":"xmqqlfltm9b5.fsf@gitster.c.googlers.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-15T17:14:28Z","receivedAt":"2020-05-15T17:14:34Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Fri, May 15, 2020 at 09:50:38AM -0700, Junio C Hamano wrote:\n> \n> At this late stage in the cycle, would it be a safer change to\n> revert the whole thing, I wonder, rather than piling fixes on top of\n> fixes to the initial breakage?\n> \n> 303775a2 (t/test_lib: avoid naked bash arrays in file_lineno, 2020-05-07)\n> 662f9cf1 (tests: when run in Bash, annotate test failures with file name/line number, 2020-04-11)\n\nwill also need:\n\n  676eb0c1ce (ci: add a problem matcher for GitHub Actions, 2020-04-11)\n\nCarlo\n"},{"id":"397900","messageId":"20200515172117.155238-1-gitster@pobox.com","threadId":"53143","inReplyTo":"xmqqlfltm9b5.fsf@gitster.c.googlers.com","subject":"[PATCH 0/2] Unbreak TAP output under bash","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T17:21:15Z","receivedAt":"2020-05-15T17:21:24Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Alban reported and Carlo diagnosed that a recent change breaks TAP\noutput under bash.  We know we can work it around but I'd rather not\nhaving to worry about the breakage this late in the cycle.  Let's\nrevert and re-attempt the enhancement it wanted to do in a way that\ndoes not break TAP in the next cycle.\n\nAs the same change broke the test under some shells that are not\nbash, fix for that change is also reverted.\n\nJunio C Hamano (2):\n  Revert \"t/test_lib: avoid naked bash arrays in file_lineno\"\n  Revert \"tests: when run in Bash, annotate test failures with file\n    name/line number\"\n\n t/test-lib.sh | 16 +---------------\n 1 file changed, 1 insertion(+), 15 deletions(-)\n\n-- \n2.27.0-rc0\n\n"},{"id":"397901","messageId":"20200515172117.155238-2-gitster@pobox.com","threadId":"53143","inReplyTo":"20200515172117.155238-1-gitster@pobox.com","subject":"[PATCH 1/2] Revert \"t/test_lib: avoid naked bash arrays in file_lineno\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T17:21:16Z","receivedAt":"2020-05-15T17:21:26Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This reverts commit 303775a25f0b4ac5d6ad2e96eb4404c24209cad8;\ninstead of trying to salvage the tap-breaking change, let's\nrevert the whole thing for now for the upcoming release.\n\nThe enhancement can be re-attempted in the next cycle.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n t/test-lib.sh | 18 ++++++++----------\n 1 file changed, 8 insertions(+), 10 deletions(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex baf94546da..1b221951a8 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -677,16 +677,14 @@ die () {\n \n file_lineno () {\n \ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n-\teval '\n-\t\tlocal i\n-\t\tfor i in ${!BASH_SOURCE[*]}\n-\t\tdo\n-\t\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n-\t\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n-\t\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n-\t\t\tesac\n-\t\tdone\n-\t'\n+\tlocal i\n+\tfor i in ${!BASH_SOURCE[*]}\n+\tdo\n+\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n+\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n+\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n+\t\tesac\n+\tdone\n }\n \n GIT_EXIT_OK=\n-- \n2.27.0-rc0\n\n"},{"id":"397902","messageId":"20200515172117.155238-3-gitster@pobox.com","threadId":"53143","inReplyTo":"20200515172117.155238-1-gitster@pobox.com","subject":"[PATCH 2/2] Revert \"tests: when run in Bash, annotate test failures with file name/line number\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T17:21:17Z","receivedAt":"2020-05-15T17:21:29Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This reverts commit 662f9cf1548cf069cb819e9e95f224657015fcf9,\nwhich broke TAP output under bash.\n\nIt can be re-attempted in a way that does not break TAP in the next\ncycle, but we do not want to worry about it at this late in the\ncurrent cycle.\n\nReported-by: Alban Gruin <alban.gruin@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n t/test-lib.sh | 14 +-------------\n 1 file changed, 1 insertion(+), 13 deletions(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 1b221951a8..d36b6ddc62 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -675,18 +675,6 @@ die () {\n \tfi\n }\n \n-file_lineno () {\n-\ttest -z \"$GIT_TEST_FRAMEWORK_SELFTEST\" && test -n \"$BASH\" || return 0\n-\tlocal i\n-\tfor i in ${!BASH_SOURCE[*]}\n-\tdo\n-\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n-\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n-\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n-\t\tesac\n-\tdone\n-}\n-\n GIT_EXIT_OK=\n trap 'die' EXIT\n # Disable '-x' tracing, because with some shells, notably dash, it\n@@ -732,7 +720,7 @@ test_failure_ () {\n \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n \tfi\n \ttest_failure=$(($test_failure + 1))\n-\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n+\tsay_color error \"not ok $test_count - $1\"\n \tshift\n \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n-- \n2.27.0-rc0\n\n"},{"id":"397903","messageId":"20200515172207.GD61200@Carlos-MBP","threadId":"53143","inReplyTo":"xmqqpnb5m9w1.fsf@gitster.c.googlers.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Carlo Marcelo Arenas Belón","fromEmail":"carenas@gmail.com","sentAt":"2020-05-15T17:22:07Z","receivedAt":"2020-05-15T17:22:11Z","isPatch":true,"sender":{"key":"carenas@gmail.com","avatar":"https://avatars.githubusercontent.com/u/76036?v=4"},"body":"On Fri, May 15, 2020 at 09:38:06AM -0700, Junio C Hamano wrote:\n> \n> Do we ever run our tests in ci environments with a shell other than\n> bash?\n\nthe alpine test uses busybox, and the cirrus-ci job uses FreeBSD's sh\nbut most of the other tests (including all windows jobs) use bash and\ntherefore can benefit from this as shown by :\n\n  https://github.com/carenas/git/commit/5517179c37904e9b8ac6408fa22643759e91538d#annotation_205089161\n\nCarlo\n"},{"id":"397905","messageId":"xmqq3681m7s4.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"20200515171428.GC61200@Carlos-MBP","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T17:23:39Z","receivedAt":"2020-05-15T17:23:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n\n> On Fri, May 15, 2020 at 09:50:38AM -0700, Junio C Hamano wrote:\n>> \n>> At this late stage in the cycle, would it be a safer change to\n>> revert the whole thing, I wonder, rather than piling fixes on top of\n>> fixes to the initial breakage?\n>> \n>> 303775a2 (t/test_lib: avoid naked bash arrays in file_lineno, 2020-05-07)\n>> 662f9cf1 (tests: when run in Bash, annotate test failures with file name/line number, 2020-04-11)\n>\n> will also need:\n>\n>   676eb0c1ce (ci: add a problem matcher for GitHub Actions, 2020-04-11)\n\nYeah, I think that is a good idea.  I suspect that leaving it there\nwon't cause problems, though---it would be just nothing is found to\nbe clicked and that's the end of it, no?\n\nWill add a revert to the series anyway.\n\nThanks.\n"},{"id":"397928","messageId":"b70e0c9d-dbea-1c72-4235-cf24b6678be6@gmail.com","threadId":"53143","inReplyTo":"20200515150041.22873-1-carenas@gmail.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Alban Gruin","fromEmail":"alban.gruin@gmail.com","sentAt":"2020-05-15T19:04:36Z","receivedAt":"2020-05-15T19:04:41Z","isPatch":true,"sender":{"key":"alban.gruin@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6310153?v=4"},"body":"Le 15/05/2020 à 17:00, Carlo Marcelo Arenas Belón a écrit :\n> 662f9cf154 (tests: when run in Bash, annotate test failures with file\n> name/line number, 2020-04-11) adds metadata to the TAP output to help\n> identify the location of the failed test, but does it in a way that\n> break the TAP format and therefore confuses prove.\n> \n> Move the metadata to the description to workaround the issue and\n> change the regex from 676eb0c1ce (ci: add a problem matcher for GitHub\n> Actions, 2020-04-11) to match.\n> \n> Reported-by: Alban Gruin <alban.gruin@gmail.com>\n> ---\n>  ci/git-problem-matcher.json | 10 +++++-----\n>  t/test-lib.sh               |  6 +++---\n>  2 files changed, 8 insertions(+), 8 deletions(-)\n> \n> diff --git a/ci/git-problem-matcher.json b/ci/git-problem-matcher.json\n> index 506dfbd97f..e10e88bba1 100644\n> --- a/ci/git-problem-matcher.json\n> +++ b/ci/git-problem-matcher.json\n> @@ -4,11 +4,11 @@\n>              \"owner\": \"git-test-suite\",\n>              \"pattern\": [\n>                  {\n> -                    \"regexp\": \"^([^ :]+\\\\.sh):(\\\\d+): (error|warning|info):\\\\s+(.*)$\",\n> -                    \"file\": 1,\n> -                    \"line\": 2,\n> -                    \"severity\": 3,\n> -                    \"message\": 4\n> +                    \"regexp\": \"^(.*)(error|warning|info):\\\\([^ :]+\\\\.sh):(\\\\d+)\\\\)$\",\n\nI missed this earlier but this regex is invalid; the last parenthesis in\nunmatched.\n\nAlban\n\n> +                    \"file\": 3,\n> +                    \"line\": 4,\n> +                    \"severity\": 2,\n> +                    \"message\": 1\n>                  }\n>              ]\n>          }\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index baf94546da..d5f59ab3bf 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -682,8 +682,8 @@ file_lineno () {\n>  \t\tfor i in ${!BASH_SOURCE[*]}\n>  \t\tdo\n>  \t\t\tcase $i,\"${BASH_SOURCE[$i]##*/}\" in\n> -\t\t\t0,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }\"; return;;\n> -\t\t\t*,t[0-9]*.sh) echo \"t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }\"; return;;\n> +\t\t\t0,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:$LINENO)\"; return;;\n> +\t\t\t*,t[0-9]*.sh) echo \"(${1+$1:}t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]})\"; return;;\n>  \t\t\tesac\n>  \t\tdone\n>  \t'\n> @@ -734,7 +734,7 @@ test_failure_ () {\n>  \t\twrite_junit_xml_testcase \"$1\" \"      $junit_insert\"\n>  \tfi\n>  \ttest_failure=$(($test_failure + 1))\n> -\tsay_color error \"$(file_lineno error)not ok $test_count - $1\"\n> +\tsay_color error \"not ok $test_count - $1$(file_lineno error)\"\n>  \tshift\n>  \tprintf '%s\\n' \"$*\" | sed -e 's/^/#\t/'\n>  \ttest \"$immediate\" = \"\" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }\n> \n\n"},{"id":"397946","messageId":"nycvar.QRO.7.76.6.2005160041380.55@tvgsbejvaqbjf.bet","threadId":"53143","inReplyTo":"xmqq3681m7s4.fsf@gitster.c.googlers.com","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2020-05-15T22:42:03Z","receivedAt":"2020-05-15T22:42:13Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 15 May 2020, Junio C Hamano wrote:\n\n> Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:\n>\n> > On Fri, May 15, 2020 at 09:50:38AM -0700, Junio C Hamano wrote:\n> >>\n> >> At this late stage in the cycle, would it be a safer change to\n> >> revert the whole thing, I wonder, rather than piling fixes on top of\n> >> fixes to the initial breakage?\n> >>\n> >> 303775a2 (t/test_lib: avoid naked bash arrays in file_lineno, 2020-05-07)\n> >> 662f9cf1 (tests: when run in Bash, annotate test failures with file name/line number, 2020-04-11)\n> >\n> > will also need:\n> >\n> >   676eb0c1ce (ci: add a problem matcher for GitHub Actions, 2020-04-11)\n>\n> Yeah, I think that is a good idea.  I suspect that leaving it there\n> won't cause problems, though---it would be just nothing is found to\n> be clicked and that's the end of it, no?\n>\n> Will add a revert to the series anyway.\n\nYes, I'm fine with reverting this, as breaking TAP is a rather bad side\neffect.\n\nCiao,\nDscho\n"},{"id":"397947","messageId":"xmqqa728957a.fsf@gitster.c.googlers.com","threadId":"53143","inReplyTo":"nycvar.QRO.7.76.6.2005160041380.55@tvgsbejvaqbjf.bet","subject":"Re: [RFC PATCH] t: move metadata into TAP test description","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-05-15T22:57:45Z","receivedAt":"2020-05-15T22:57:54Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> >> 303775a2 (t/test_lib: avoid naked bash arrays in file_lineno, 2020-05-07)\n>> >> 662f9cf1 (tests: when run in Bash, annotate test failures with file name/line number, 2020-04-11)\n>> >\n>> > will also need:\n>> >\n>> >   676eb0c1ce (ci: add a problem matcher for GitHub Actions, 2020-04-11)\n>>\n>> Yeah, I think that is a good idea.  I suspect that leaving it there\n>> won't cause problems, though---it would be just nothing is found to\n>> be clicked and that's the end of it, no?\n>>\n>> Will add a revert to the series anyway.\n>\n> Yes, I'm fine with reverting this, as breaking TAP is a rather bad side\n> effect.\n\nYup.  We can revisit it in the next cycle to find a solution that\ndoes not break TAP, either the \"a separate comment line\", \"machine\nreadable cruft at the end of the same line\", or some other approach.\n\n"}]}