如何使用文件和拉取请求自动创建新分支?

Posted

技术标签:

【中文标题】如何使用文件和拉取请求自动创建新分支?【英文标题】:How can I automate creating a new branch using a file and then a pull request? 【发布时间】:2021-12-30 08:11:09 【问题描述】:

我有一个静态博客设置,每次我想要一篇新文章时,我都必须提交并推送一个 .md 文件。这是一个组的一部分,所以我想知道是否有一种方法可以在每次将新的 .md 文件保存到谷歌驱动器文件夹时自动提交和推送部分。

第一部分由 IFTTT 覆盖,每次上传新文件时,都会在 github 上创建一个新问题,其中包含正文中文件的链接。

但是,我不知道如何创建现在将下载文件、创建新分支、提交并将文件推送到该分支并最终设置拉取请求以供我批准的操作。

如果您知道任何其他自动化此过程的方法,我愿意接受建议!

谢谢!


编辑1:

我不确定如何完成此操作(包括在我写 的地方生成一个随机数。这是我目前所拥有的:

name: Pull request on issue

on:
  issues:
  
jobs:
  create:
    runs-on: ubuntu-latest
    steps:
      - name: create branch
        uses: peterjgrainger/action-create-branch@v2.0.1
        with:
          # The branch to create
          branch: post-<random-number>
      - name: download file
        run: wget $ github.event.issue.body  -O source/_posts/
      - name: commit and push new file
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git add .
          git commit -m "New post"
          git push -u origin post-<random-number>
      - name: create pull request towards the main branch
        uses: peter-evans/create-pull-request@v3.10.1
        with:
          token: $ secrets.GH_TOKEN 
          commit-message: Auto Pull Request
          title: New post pr
          body: Auto-created Pull Request
          branch: post-<random-number> # The branch where you commit
          base: master # Don't forget to specify the right base branch here

编辑2:

name: Pull request on issue

on:
  issues:
    inputs:
      secret:
        required: true
        description: "Github PAT"
  
jobs:
  create:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2.3.4
      - name: Generate random number
        id: random
        run: echo "::set-output name=value::$(echo $RANDOM)"
      - name: create branch
        uses: peterjgrainger/action-create-branch@v2.0.1
        with:
          # The branch to create
          branch: post-$ steps.random.outputs.value 
      - name: download file
        run: wget $ github.event.issue.body  -O source/_posts/
      - name: commit and push new file
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git add .
          git commit -m "New post"
          git push -u origin post-$ steps.random.outputs.value 
      - name: create pull request towards the main branch
        uses: peter-evans/create-pull-request@v3.10.1
        with:
          token: $ secrets.GH_TOKEN 
          commit-message: Auto Pull Request
          title: New post pr
          body: Auto-created Pull Request
          branch: post-$ steps.random.outputs.value  # The branch where you commit
          base: master # Don't forget to specify the right base branch here

感谢@GuiFalourd,这就是我目前所拥有的。

不幸的是,当我运行它时,我收到以下错误:

Run peterjgrainger/action-create-branch@v2.0.1
Error: No token defined in the environment variables

它指的是哪个令牌?这是指你提到的私人行动吗?不过,存储库是公开的。

再次感谢您的帮助!

【问题讨论】:

是否可以通过命令行下载文件?如果是,则仅使用 git 命令即可完成其余过程。然后,如果您想创建一个执行相同操作的操作,您可以创建一个 composite 操作来收集所有这些命令行。 您的问题应该显示您自己的研究以及您遇到的问题。也就是说,创建问题时可以触发操作,请参见此处:docs.github.com/en/actions/learn-github-actions/… 【参考方案1】:

可以使用输出变量来更新您的工作流程以添加随机数。我还认为您需要将 actions/checkout 操作添加到您的存储库中才能访问下载的文件。

更新后的工作流文件如下所示

name: Pull request on issue

on:
  issues:
  
jobs:
  create:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2.3.4
      - name: Generate random number
        id: random
        run: echo "::set-output name=value::$(echo $RANDOM)"
      - name: Example how to use the output
        run: echo "$ steps.random.outputs.value "
      - name: create branch
        uses: peterjgrainger/action-create-branch@v2.0.1
        with:
          # The branch to create
          branch: post-$ steps.random.outputs.value 
      - name: download file
        run: wget $ github.event.issue.body  -O source/_posts/
      - name: commit and push new file
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git add .
          git commit -m "New post"
          git push -u origin post-$ steps.random.outputs.value 
      - name: create pull request towards the main branch
        uses: peter-evans/create-pull-request@v3.10.1
        with:
          token: $ secrets.GH_TOKEN 
          commit-message: Auto Pull Request
          title: New post pr
          body: Auto-created Pull Request
          branch: post-$ steps.random.outputs.value  # The branch where you commit
          base: master # Don't forget to specify the right base branch here

您还可以创建一个composite 操作,该操作可以重现您正在使用的所有步骤,例如使用以下内容:

action action.yml 看起来像这样。

name: 'Action Name'
description: 'Runs a composite step action'
inputs:
  secret:
    required: true
    description: "Github PAT"

runs:
  using: "composite"
  steps:
      - name: Checkout
        uses: actions/checkout@v2.3.4
      - name: Generate random number
        id: random
        run: echo "::set-output name=value::$(echo $RANDOM)"
        shell: bash
      - name: Example how to use the output
        run: echo "$ steps.random.outputs.value "
        shell: bash
      - name: create branch
        uses: peterjgrainger/action-create-branch@v2.0.1
        with:
          # The branch to create
          branch: post-$ steps.random.outputs.value 
      - name: download file
        run: wget $ github.event.issue.body  -O source/_posts/
      - name: commit and push new file
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git add .
          git commit -m "New post"
          git push -u origin post-$ steps.random.outputs.value 
        shell: bash
      - name: create pull request towards the main branch
        uses: peter-evans/create-pull-request@v3.10.1
        with:
          token: $ inputs.secret 
          commit-message: Auto Pull Request
          title: New post pr
          body: Auto-created Pull Request
          branch: post-$ steps.random.outputs.value 
          base: master

如果您想将某些值动态化(例如,您不能在操作中直接使用秘密),请在操作中添加一些其他 inputs

编辑

要在同一存储库中本地使用此操作文件(如果您不希望它公开),您需要创建一个 .github/actions/&lt;action-name&gt; 文件夹,并在其中添加此 action.yml 文件。

然后,要在您的工作流作业中使用它,您需要将您的 workflow.yml 更新为此实现:

name: Pull request on issue

on:
  issues:
  
jobs:
  create:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2.3.4 # Necessary to access local action
      - name: Local Action Call
        uses: ./.github/actions/<action-name>
        with:
          secret: $ secrets.GH_TOKEN 

更新&lt;action-name&gt; 以获得您选择的文件夹名称。

我用here 和this action,yml file 类似的东西(调用本地操作)创建了一个工作流示例


请注意,Github Marketplace 上还有许多操作可以执行git commit push 操作。

【讨论】:

太棒了!非常感谢你的帮助。我在测试动作时遇到了一些问题。你能检查我的edit2吗? 这里的问题是您没有正确使用该操作。我已经更新了我的答案,以解释如何在本地使用它。

以上是关于如何使用文件和拉取请求自动创建新分支?的主要内容,如果未能解决你的问题,请参考以下文章

jgitflow 和拉取请求

markdown 功能分支和拉取请求:演练

github如何上传和拉取文件??(windows篇)

如何在 Azure DevOps 中自动触发构建拉取请求?

如何从我没有修改的拉取请求中删除文件

如何通过 Bitbucket 中的拉取请求变基