Subject: [PATCH v4 00/12] ci: replace our Azure Pipeline by GitHub Actions

From: Đoàn Trần Công Danh <[email-masked]>
Date: Wed, 8 Apr 2020 11:05:31 +0700

Our Azure Pipeline has served us well over the course of the past year or
so, steadily catching issues before the respective patches hit the next
branch.

There is a GitHub-native CI system now, though, called "GitHub Actions"
[https://github.com/features/actions] which is essentially on par with Azure
Pipelines as far as our needs are concerned, and it brings a couple of
advantages:

 * It is substantially easier to set up than Azure Pipelines: all you need
   is to add the YAML-based build definition, push to your fork on GitHub,
   and that's it.
 * The syntax is a bit easier to read than Azure Pipelines'.
 * We get more concurrent jobs (Azure Pipelines is limited to 10 concurrent
   jobs).

With this change, users also no longer need to open a PR at
https://github.com/git/git or at https://github.com/gitgitgadget/git just to
get the benefit of a CI build.

Sample run on top of dd/ci-musl-libc with dd/test-with-busybox merged:
https://github.com/sgn/git/actions/runs/73179413

Sample run when this series applied into git-for-windows
https://github.com/git-for-windows/git/runs/568625109

Change from v3:
- Use build matrix
- All dependencies are install by scripts
- stop repeating environment variables
- build failure's artifacts will be uploaded

Johannes Schindelin (9):
  ci/lib: if CI type is unknown, show the environment variables
  ci/lib: allow running in GitHub Actions
  ci: fix the `jobname` of the `GETTEXT_POISON` job
  ci: run gem with sudo to install asciidoctor
  README: add a build badge for the GitHub Actions runs
  ci: retire the Azure Pipelines definition
  tests: when run in Bash, annotate test failures with file name/line
    number
  ci: add a problem matcher for GitHub Actions
  ci: let GitHub Actions upload failed tests' directories

Đoàn Trần Công Danh (3):
  ci/lib: set TERM environment variable if not exist
  ci: explicit install all required packages
  ci: configure GitHub Actions for CI/PR

 .github/workflows/main.yml  | 230 +++++++++++++++
 .travis.yml                 |   2 +-
 README.md                   |   2 +-
 azure-pipelines.yml         | 558 ------------------------------------
 ci/git-problem-matcher.json |  16 ++
 ci/install-dependencies.sh  |  16 +-
 ci/lib.sh                   |  31 +-
 ci/print-test-failures.sh   |   7 +
 t/test-lib.sh               |  14 +-
 9 files changed, 310 insertions(+), 566 deletions(-)
 create mode 100644 .github/workflows/main.yml
 delete mode 100644 azure-pipelines.yml
 create mode 100644 ci/git-problem-matcher.json

Range-diff against v3:
 1:  3f9f1c6335 =  1:  2219bf3db9 ci/lib: if CI type is unknown, show the environment variables
 2:  7a4f646bc1 =  2:  2818799a4b ci/lib: allow running in GitHub Actions
 3:  9a03c0844c =  3:  b88586c2c5 ci/lib: set TERM environment variable if not exist
 4:  7308199e24 <  -:  ---------- ci: configure GitHub Actions for CI/PR
 -:  ---------- >  4:  1df60e677c ci: fix the `jobname` of the `GETTEXT_POISON` job
 -:  ---------- >  5:  4f80724641 ci: explicit install all required packages
 -:  ---------- >  6:  795ec656c6 ci: run gem with sudo to install asciidoctor
 -:  ---------- >  7:  ec0aa20119 ci: configure GitHub Actions for CI/PR
 5:  365ba5e831 =  8:  46f2b6bce6 README: add a build badge for the GitHub Actions runs
 6:  53094612d3 !  9:  92f2623dc7 ci: retire the Azure Pipelines definition
    @@ Commit message
         Pipelines would be redundant, and a waste of energy.
     
         Signed-off-by: Johannes Schindelin <[email-masked]>
    -    [Danh: fix apply conflicts]
         Signed-off-by: Đoàn Trần Công Danh <[email-masked]>
     
      ## README.md ##
    @@ azure-pipelines.yml (deleted)
     -      PathtoPublish: t/failed-test-artifacts
     -      ArtifactName: failed-test-artifacts
     -
    --- job: linux_musl
    --  displayName: linux-musl
    --  condition: succeeded()
    --  pool:
    --    vmImage: ubuntu-latest
    --  steps:
    --  - bash: |
    --       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
    --
    --       res=0
    --       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
    --
    --       sudo chmod a+r t/out/TEST-*.xml
    --       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts
    --
    --       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || res=1
    --       exit $res
    --    displayName: 'jobname=linux-musl ci/run-docker.sh'
    --    env:
    --      GITFILESHAREPWD: $(gitfileshare.pwd)
    --  - task: PublishTestResults@2
    --    displayName: 'Publish Test Results **/TEST-*.xml'
    --    inputs:
    --      mergeTestResults: true
    --      testRunTitle: 'musl'
    --      platform: Linux
    --      publishRunAttachments: false
    --    condition: succeededOrFailed()
    --  - task: PublishBuildArtifacts@1
    --    displayName: 'Publish trash directories of failed tests'
    --    condition: failed()
    --    inputs:
    --      PathtoPublish: t/failed-test-artifacts
    --      ArtifactName: failed-test-artifacts
    --
     -- job: static_analysis
     -  displayName: StaticAnalysis
     -  condition: succeeded()
 -:  ---------- > 10:  f688fa50d3 tests: when run in Bash, annotate test failures with file name/line number
 -:  ---------- > 11:  715d1f732f ci: add a problem matcher for GitHub Actions
 -:  ---------- > 12:  0908d5ab9b ci: let GitHub Actions upload failed tests' directories
-- 
2.26.0.334.g6536db25bb