GitHub Action で基本的なことをやるための研究

私もついに GitHub Actions をやるときが来た。私は Azure DevOps 好きなのだが、GitHub Action でやった方がよさそうなケースが出てきたのでその調査をする。

やりたいことは単純で、プルリクエスト作成の自動化と、外部からのAction起動だ。
最初の要件はきっと、1. GitHub のボット用のアカウントを使って、ブランチを作り変更して、プッシュする（多分その権限設定）及び、プルリクエストはきっとTOKEN が使えると思うのでそれを使って GitHub の REST API を使うとかそんな感じだろう。

* [Migrating from Azure Pipelines to GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/migrating-from-azure-pipelines-to-github-actions)

これを読む限りでは、ベースが同じなので、たまにちょっと違うという感じなので、とっつきやすそう。

# git の操作を自動化する

最初に bot で使えるE-mailアドレスがあるっぽい。`action@github.com` のようだ。 `

* [GitHub Actions bot email address?](https://github.community/t/github-actions-bot-email-address/17204)

```
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git commit -m "Add URL" -a
```

みたいだ。他にもあるみたいなのでそちらも試してみたい。

と、、、考えていたが、タスクを使ったらくっそ簡単に出来たｗ

# タスクを使ったら一瞬で出来た
https://github.com/marketplace/actions/create-pull-request
ページに行って詳細見たら一発で終了。ブランチすら作る必要なかったし、クレデンシャルも特に気にする必要なかった。やっぱ、Azure Pipeline と同じくこの Task というか、Actions の仕組み最高。

## Build.ID の取得

https://stackoverflow.com/questions/54310050/how-to-version-build-artifacts-using-github-actions

```yaml
# This is a basic workflow that is manually triggered

name: Manual workflow

# Controls when the action will run. Workflow runs when manually triggered using the UI
# or API.
on:
  workflow_dispatch:
    # Inputs the workflow accepts.
    inputs:
      majorVersion:
        # Friendly description to be shown in the UI instead of 'name'
        description: 'Major Version e.g. 3.0'
        required: true
      targetVersion:
        description: 'Target Version e.g. 3.0.151471'

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "greet"
  createPR:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    - uses: actions/checkout@v2
      with:
        ref: main
    - id: createBranch
      run: |
        git config --local user.email "action@github.com"
        git config --local user.name "GitHub Action"
        
        ./update-version.sh ${{ github.event.inputs.majorVersion }} ${{ github.event.inputs.targetVersion }}
        git add .
        git commit -m "Update Version ${{ github.event.inputs.targetVersion }}"
    - name: Create PullRequest
      id: createPullRequest
      uses: peter-evans/create-pull-request@v3
      with:
        title: Update to verison ${{ github.event.inputs.targetVersion }}
        body: |
          - Update ${{ github.event.inputs.majorVesion}} to ${{ github.event.inputs.targetVersion }}
        branch: action/release.${{ github.event.inputs.targetVersion }}
        labels: |
          automated pr
        reviewers: tsuyoshiushio
    - name: Check outputs
      run: |
          echo "Pull Request Number - ${{ steps.createPullRequest.outputs.pull-request-number }}"
          echo "Pull Request URL - ${{ steps.createPullRequest.outputs.pull-request-url }}"          
```

ブログをするのもはばかられるぐらい簡単だった。明日はアップデートで、RESTAPIのコールやけど、やったことあるから多分すぐ出来そう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470/c00b9b72-bc55-c919-3b26-e64c0bb201da.png)