【问题标题】:How do I view the logs of a run?如何查看运行日志?
【发布时间】:2022-08-05 09:06:36
【问题描述】:

根据GitHub CLI docs for gh run view,我应该可以使用以下命令查询运行日志:

gh run view --log <run-id>

例如,要在 vitejs/vite 存储库中获取 run 2796702959 的完整日志:

gh run view -R vitejs/vite --log 2796702959

但是该命令什么也不返回。启用调试不会显示任何错误:

GH_DEBUG=true gh run view -R vitejs/vite --log 2796702959
⣾* Request at 2022-08-04 19:55:51.795659 -0500 CDT m=+0.012528935
* Request to https://api.github.com/repos/vitejs/vite/actions/runs/2796702959
⣻* Request took 283.249521ms
* Request at 2022-08-04 19:55:52.08233 -0500 CDT m=+0.299195200
* Request to https://api.github.com/repos/vitejs/vite/actions/runs/2796702959/jobs
⣾% 

我如何实际获取运行日志?

    标签: github github-api github-cli


    【解决方案1】:

    gh v2.11.3 开始,该特定命令有问题(cli/cli#5011)。

    一种解决方法是使用 Bash 脚本通过 gh api 直接调用 API:

    #!/usr/bin/env bash -e
    
    REPO_NAME=${1?Missing repo name argument} # example: vitejs/vite
    JOB_ID=${2?Missing job ID argument}
    
    ZIPFILE=$(mktemp)
    TMPDIR=$(mktemp -d)
    
    Color_Off='\033[0m'
    BBlack='\033[1;30m'
    On_Cyan='\033[46m'
    
    function downloadLogs() {
      echo "downloading logs for job $JOB_ID ..."
      gh api /repos/$REPO_NAME/actions/runs/$JOB_ID/logs > $ZIPFILE
      echo "unzipping logs ..."
      unzip -d $TMPDIR $ZIPFILE
      rm -f $ZIPFILE
    }
    
    function dumpLogs() {
      find $TMPDIR -type f -maxdepth 1 -print0 |
        while IFS= read -r -d $'\0' file; do
          echo
          basefile=$(basename "$file")
          echo -e "${BBlack}${On_Cyan} $basefile ${Color_Off}"
          echo
    
          cat "$file"
        done
    }
    
    downloadLogs
    dumpLogs
    

    用法:

    ./gh-logs.sh <repo-name> <job-id>
    

    例子:

    ./gh-logs.sh vitejs/vite 2796702959 | less -R
    

    【讨论】: