Создавайте проверки во всех рабочих процессах, запускаемых одной фиксацией, используя octokit

У меня есть проект с Github Actions, который реализует несколько рабочих процессов, которые могут быть запущены одним событием push (в зависимости от фильтра пути).

Таким образом, push с одной фиксацией может запускать несколько рабочих процессов, пока все хорошо.

В каждом рабочем процессе, который я выполняю actions/github-script для создания динамических проверок выполнения со следующим шагом:

      - uses: actions/github-script@v4
  with:
    github-token: ${{ inputs.github-token }}
    script: |
      const date = new Date();
      const check = await github.checks.create({
        owner: "${{ steps.vars.outputs.owner }}",
        repo: "${{ steps.vars.outputs.repo }}",
        name: "Custom Script",
        started_at: date.toISOString(),
        completed_at: date.toISOString(),
        head_sha: "${{ inputs.sha }}",
        external_id: "${{ github.run_id }}",
        status: "completed",
        conclusion: "success",
        output: {
          title: "Some funny title",
          summary: "Build successful",
          text: "Image pushed to https://${{ inputs.region }}.console.aws.amazon.com/ecr/repositories/private/${{ inputs.customer-id }}/modix/base/${{ inputs.image }}"
        }
      });

Он работает как чудо, когда запускается один рабочий процесс, но как только push запускает несколько рабочих процессов, только первый запущенный показывает добавленную проверку. все остальные, кроме первого, не показывают чек, но тоже нет ошибки?

Прежде чем я попробовал LouisBrunner/checks-actionи у него была та же проблема, поэтому я создал проблему: https://github.com/LouisBrunner/checks-action/issues/26 . Но теперь, когда он также терпит неудачу при прямом использовании octokit с действием github-script, кажется, что проблема где-то в другом месте ...

кроме того, вот полный вывод отладки действия, которое не может добавить проверку:

      ##[debug]Evaluating condition for step: 'Run zolex/release-base-action@master'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: Run zolex/release-base-action@master
##[debug]Loading inputs
##[debug]Evaluating: secrets.AWS_PROD_ACCESS_KEY_ID
##[debug]Evaluating Index:
##[debug]..Evaluating secrets:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'AWS_PROD_ACCESS_KEY_ID'
##[debug]=> '***'
##[debug]Result: '***'
##[debug]Evaluating: secrets.AWS_PROD_SECRET_ACCESS_KEY
##[debug]Evaluating Index:
##[debug]..Evaluating secrets:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'AWS_PROD_SECRET_ACCESS_KEY'
##[debug]=> '***'
##[debug]Result: '***'
##[debug]Evaluating: github.token
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'token'
##[debug]=> '***'
##[debug]Result: '***'
##[debug]Evaluating: github.repository_owner
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'repository_owner'
##[debug]=> 'modix'
##[debug]Result: 'modix'
##[debug]Evaluating: github.repository
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'repository'
##[debug]=> 'modix/base'
##[debug]Result: 'modix/base'
##[debug]Evaluating: github.sha
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'sha'
##[debug]=> 'c2130ceb48b633e2bb37d37a32717ab67bd103ac'
##[debug]Result: 'c2130ceb48b633e2bb37d37a32717ab67bd103ac'
##[debug]Loading env
Run zolex/release-base-action@master
##[debug]Starting: run
##[debug]Loading inputs
##[debug]Evaluating: format('echo ::set-output name=owner::$(echo "{0}" | awk -F / ''{{print $1}}'')
##[debug]echo ::set-output name=repo::$(echo "{1}" | awk -F / ''{{print $2}}'')
##[debug]', inputs.repository, inputs.repository)
##[debug]Evaluating format:
##[debug]..Evaluating String:
##[debug]..=> 'echo ::set-output name=owner::$(echo "{0}" | awk -F / ''{{print $1}}'')
##[debug]echo ::set-output name=repo::$(echo "{1}" | awk -F / ''{{print $2}}'')
##[debug]'
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'repository'
##[debug]..=> 'modix/base'
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'repository'
##[debug]..=> 'modix/base'
##[debug]=> 'echo ::set-output name=owner::$(echo "modix/base" | awk -F / ''{print $1}'')
##[debug]echo ::set-output name=repo::$(echo "modix/base" | awk -F / ''{print $2}'')
##[debug]'
##[debug]Result: 'echo ::set-output name=owner::$(echo "modix/base" | awk -F / ''{print $1}'')
##[debug]echo ::set-output name=repo::$(echo "modix/base" | awk -F / ''{print $2}'')
##[debug]'
##[debug]Loading env
Run echo ::set-output name=owner::$(echo "modix/base" | awk -F / '{print $1}')
##[debug]/usr/bin/sh -e /home/runner/work/_temp/697126af-5c82-4390-b8c6-c52462148360.sh
::set-output name=owner::modix
##[debug]steps.vars.outputs.owner='modix'
::set-output name=repo::base
##[debug]steps.vars.outputs.repo='base'
##[debug]Finished: run
##[debug]Starting: run
##[debug]Loading inputs
##[debug]Evaluating: inputs.github-token
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'github-token'
##[debug]=> '***'
##[debug]Result: '***'
##[debug]Evaluating: format('const date = new Date();
##[debug]const check = await github.checks.create({{
##[debug]  owner: "{0}",
##[debug]  repo: "{1}",
##[debug]  name: "Custom Script",
##[debug]  started_at: date.toISOString(),
##[debug]  completed_at: date.toISOString(),
##[debug]  head_sha: "{2}",
##[debug]  external_id: "{3}",
##[debug]  status: "completed",
##[debug]  conclusion: "success",
##[debug]  output: {{
##[debug]    title: "Some funny title",
##[debug]    summary: "Build status: {4}",
##[debug]    text: "Image pushed to [{5}](https://{6}.console.aws.amazon.com/ecr/repositories/private/{7}/modix/base/{8})"
##[debug]  }}
##[debug]}});
##[debug]', steps.vars.outputs.owner, steps.vars.outputs.repo, inputs.sha, github.run_id, job.status, env.IMAGE_TAG, inputs.region, inputs.customer-id, inputs.image)
##[debug]Evaluating format:
##[debug]..Evaluating String:
##[debug]..=> 'const date = new Date();
##[debug]const check = await github.checks.create({{
##[debug]  owner: "{0}",
##[debug]  repo: "{1}",
##[debug]  name: "Custom Script",
##[debug]  started_at: date.toISOString(),
##[debug]  completed_at: date.toISOString(),
##[debug]  head_sha: "{2}",
##[debug]  external_id: "{3}",
##[debug]  status: "completed",
##[debug]  conclusion: "success",
##[debug]  output: {{
##[debug]    title: "Some funny title",
##[debug]    summary: "Build status: {4}",
##[debug]    text: "Image pushed to [{5}](https://{6}.console.aws.amazon.com/ecr/repositories/private/{7}/modix/base/{8})"
##[debug]  }}
##[debug]}});
##[debug]'
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating steps:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'vars'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'outputs'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'owner'
##[debug]..=> 'modix'
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating steps:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'vars'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'outputs'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'repo'
##[debug]..=> 'base'
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'sha'
##[debug]..=> 'c2130ceb48b633e2bb37d37a32717ab67bd103ac'
##[debug]..Evaluating Index:
##[debug]....Evaluating github:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'run_id'
##[debug]..=> '1233669730'
##[debug]..Evaluating Index:
##[debug]....Evaluating job:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'status'
##[debug]..=> 'success'
##[debug]..Evaluating Index:
##[debug]....Evaluating env:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'IMAGE_TAG'
##[debug]..=> null
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'region'
##[debug]..=> 'eu-central-1'
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'customer-id'
##[debug]..=> '245309753215'
##[debug]..Evaluating Index:
##[debug]....Evaluating inputs:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'image'
##[debug]..=> 'nginx'
##[debug]=> 'const date = new Date();
##[debug]const check = await github.checks.create({
##[debug]  owner: "modix",
##[debug]  repo: "base",
##[debug]  name: "Custom Script",
##[debug]  started_at: date.toISOString(),
##[debug]  completed_at: date.toISOString(),
##[debug]  head_sha: "c2130ceb48b633e2bb37d37a32717ab67bd103ac",
##[debug]  external_id: "1233669730",
##[debug]  status: "completed",
##[debug]  conclusion: "success",
##[debug]  output: {
##[debug]    title: "Some funny title",
##[debug]    summary: "Build status: success",
##[debug]    text: "Image pushed to [](https://eu-central-1.console.aws.amazon.com/ecr/repositories/private/245309753215/modix/base/nginx)"
##[debug]  }
##[debug]});
##[debug]'
##[debug]Result: 'const date = new Date();
##[debug]const check = await github.checks.create({
##[debug]  owner: "modix",
##[debug]  repo: "base",
##[debug]  name: "Custom Script",
##[debug]  started_at: date.toISOString(),
##[debug]  completed_at: date.toISOString(),
##[debug]  head_sha: "c2130ceb48b633e2bb37d37a32717ab67bd103ac",
##[debug]  external_id: "1233669730",
##[debug]  status: "completed",
##[debug]  conclusion: "success",
##[debug]  output: {
##[debug]    title: "Some funny title",
##[debug]    summary: "Build status: success",
##[debug]    text: "Image pushed to [](https://eu-central-1.console.aws.amazon.com/ecr/repositories/private/245309753215/modix/base/nginx)"
##[debug]  }
##[debug]});
##[debug]'
##[debug]Loading env
Run actions/github-script@v4
  with:
    github-token: ***
    debug: true
    script: const date = new Date();
  const check = await github.checks.create({
    owner: "modix",
    repo: "base",
    name: "Custom Script",
    started_at: date.toISOString(),
    completed_at: date.toISOString(),
    head_sha: "c2130ceb48b633e2bb37d37a32717ab67bd103ac",
    external_id: "1233669730",
    status: "completed",
    conclusion: "success",
    output: {
      title: "Some funny title",
      summary: "Build status: success",
      text: "Image pushed to [](https://eu-central-1.console.aws.amazon.com/ecr/repositories/private/245309753215/modix/base/nginx)"
    }
  });
  
    user-agent: actions/github-script
    result-encoding: json

::set-output name=result::
##[debug]=''
##[debug]Node Action run completed with exit code 0
##[debug]Finished: run
##[debug]Finishing: Run zolex/release-base-action@master

2 ответа

Решение

К сожалению, я обнаружил, что просто невозможно прикрепить чек к конкретному рабочему процессу или пакету чеков. Проблема известна уже больше года, но пока не нашли решения. Смотрите в этой ветке .

От имени крупной автомобильной компании я отправил запрос функции в официальной форме обратной связи на github.

PS: Если эта функция будет реализована в будущем, я собираюсь создать и принять еще один ответ здесь.

Попробуйте установить Custom Scriptна что-то другое для каждого создаваемого вами цикла проверки. Я думаю, что несколько проверок с одинаковыми именами свернуты, и будет отображаться только последний. Причина в том, что таким образом вы можете переопределить статус фиксации, используя то же имя.

Другие вопросы по тегам