当另一个存储库创建新版本时触发 GitHub 操作

pie*_*ipi 32 github github-webhook github-actions

我正在尝试构建一个 GitHub 工作流,该工作流将在另一个存储库创建新版本时触发。

在文档中,有一段:on.event_name.typeswhere event_namewill be release

问题是:有没有办法引用release另一个存储库的事件?

pet*_*ans 32

有没有办法引用另一个存储库的发布事件?

相当确定此功能不存在。

如果您有权访问创建发布的存储库,那么您可以调用 webhook 事件来触发on: repository_dispatch工作流在另一个存储库中运行。在这种情况下,repository-dispatch操作可以提供帮助。

如果您无权访问创建发布的存储库(我认为这里就是这种情况),那么这就是我的建议。首先,创建以下工作流程,定期检查您要跟踪的存储库的发布版本标签。如果它与您当前保存在存储库中的发布版本不同,则将提交新版本。

请注意,您必须首先准备目标文件(例如 release-versions/swagger-ui-latest.txt),以便修改后的文件检查工作。此外,您必须使用repo范围标记而不是默认的GITHUB_TOKEN。有关更多详细信息,请参阅从 GitHub 操作推送到源

name: Get latest release version
on:
  schedule:
    - cron:  '0 10 * * *'
jobs:
  get-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.REPO_SCOPED_TOKEN }}
      - name: Fetch release version
        run: |
          curl -sL https://api.github.com/repos/swagger-api/swagger-ui/releases/latest | \
          jq -r ".tag_name" > release-versions/swagger-ui-latest.txt
      - name: Check for modified files
        id: git-check
        run: echo ::set-output name=modified::$([ -z "`git status --porcelain`" ] && echo "false" || echo "true")
      - name: Commit latest release version
        if: steps.git-check.outputs.modified == 'true'
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-email@users.noreply.github.com'
          git commit -am "New release version"
          git push
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建第二个工作流,该工作流仅在看到目录发生任何更改时运行release-versions

on:
  push:
    paths:
      - 'release-versions/*'
Run Code Online (Sandbox Code Playgroud)

在此工作流程中,您可以使用保存的版本来获取您需要的资产并执行您需要的任何处理。

这是一个类似的例子,它提出一个拉取请求而不是立即提交。

  • 我想添加我的经验:而不是使用这个: `$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)` 我认为最好使用: ```$([ -z "`git status --porcelain`" ] && echo "false" || echo "true")``` 为什么?在只有文件的修改时间戳发生更改的情况下,“git diff-index”也会返回一个值。这将导致提交失败,因为没有要提交的更改。使用“git status”只会在实际内容发生更改时返回某些内容。 (4认同)
  • 可悲的是你证实了我的预感。此外,感谢您分享您的方法。 (2认同)

Eya*_*man 8

    name: Trigger automation tests
steps:
- uses: actions/github-script@v6
  with:
    github-token: ${{ secrets.PERSONAL_TOKEN }}
    script: |
      await github.rest.actions.createWorkflowDispatch({
       owner: '*****',
       repo: '*****',
       workflow_id: '*****.yml',
       ref: 'main'
      })
      
Run Code Online (Sandbox Code Playgroud)
  1. 在目标存储库中创建个人访问令牌。
  2. 将此个人访问令牌添加为两个存储库中的机密。
  3. 创建一个新的工作流程或编辑已存在的工作流程(yml 文件)。
  4. 将上述步骤添加到yml文件中。

owner = organization / personal gitHub. repo = target repository to run. workflow_id = yml file name of the target workflow. ref = which brench to run in target repository