0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

github Actions で自動 PR open や close

Posted at

はしがき

うちの会社から、gitlab -> github への platform を移行しました。
なので、gitlab から使っていた CI を全部 github に migration する必要があります。

先日アップロードしたことを活用して、branch を自動で作成や削除をします。

作業の段階はいかになります。

  1. 毎日、master branch への merge 向けの branch や PR を作成
  2. 毎日、master branch への merge 向けの branch や PR を削除

CICD とは?

Red Hat には以下に紹介されています。

CI/CD (継続的インテグレーションおよび継続的デリバリー/デプロイメントの略) は、ソフトウェア開発ライフサイクルを最適化し、加速することを目的としています。

継続的インテグレーション(continuous integration)はコードの変更共有ソースコードリポジトリ自動的かつ頻繁に取り込む手法

継続的デリバリーまたはデプロイメント (CD) は 2 つの部分からなるプロセスで、コード変更の統合、テスト、デリバリーを指します。

build, テスト、デプロイ... などを自動化することで、アプリケーションのエラーをよく発見したり、開発を高速化します。

github actions とは?

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. 

「CICD を通じて自動的にある作業(build, PR 生成, 配布 ...etc)を行う」と認識しました。

gitlab のように、ある yaml file の作成で、段階を分けて、コードを実行できそうです。

また、schedule を実装するとき、github actions は UTC なので、UTC で設定する必要があります。

やり方

このやり方は gitlab の加入前提で行います。

  1. github repository を作る
  2. github setting
  3. PR 作成 yaml file を生成や commit
  4. PR 削除 yaml file を生成や commit
  5. 結果

github repository を作る

image.png

dashboard 上の + をクリックして、New repository を作ります。

スクショのように oraganization を作って、repository を作っても構いません。

image.png

ほかのユーザーから見えるように public で設定しました。
これで作ります。

github setting

image.png

image.png

setting > Actions > general に遷移します。

image.png

Workflow で repository を Read and write できるように設定します。
PR もつくる予定なので、checkbox もチェックしておきます。

organization の repository から変更できない場合

image.png

このように変更できない場合があります。

organization の setting を変更する必要があります。

image.png

上のスクショのように organization の setting > Actions > General に入って、設定を変更してください。

Pair GitHub Packages with Actions to simplify package management, including version updates, fast distribution with our global CDN, and dependency resolution, using your existing GITHUB_TOKEN.

github は GITHUB_TOKEN という token が使えるので、特に token を作る必要はありません。

PR 作成 yaml file を生成や commit

.github/workflows から、以下のコードを活用して、yaml file を作ってください。

name: Create Daily Release Branch

on:
  schedule:
    - cron: '0 9 * * *' 

jobs:
  build:
    name: build
    runs-on: ubuntu-latest

    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v4
      
      - name: Set daily branch name
        id: set_branch_name
        run: |
          BRANCH_NAME="release/$(date --date 'tomorrow' +%Y-%m-%d)"
          echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT

      - name: Git Setting
        run: |
          git config --global user.email "youremail@gmail.com"
          git config --global user.name "Ci Schedule Bot"

      - name: Create release branch and pr
        id: create_pr
        run: |
          git fetch origin main
          git checkout -b ${{ steps.set_branch_name.outputs.branch_name }} origin/main
          git commit --allow-empty -m "Release/${{ steps.set_branch_name.outputs.branch_name }}"
          git push origin ${{ steps.set_branch_name.outputs.branch_name }}
          pr_url=$(gh pr create -B main -t ${{ steps.set_branch_name.outputs.branch_name }} -b ${{ steps.set_branch_name.outputs.branch_name }})
          echo pr_url

毎日、18時(UTC 9時 -> JST 18時)に「明日」の pr 生成します。
gh を使うので、git の url 設定は必要ありません。また、gh pr create は pr の url を return しますので、actions 上から確認もできます。

PR 削除 yaml file を生成や commit

.github/workflows から、以下のコードを活用して、yaml file を作ってください。

name: Close Daily Release Branch

on:
  schedule:
    - cron: '0 0 * * *' 

jobs:
  build:
    name: build
    runs-on: ubuntu-latest

    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v4
      
      - name: Set daily branch name
        id: set_branch_name
        run: |
          BRANCH_NAME="release/$(date --date 'yesterday' +%Y-%m-%d)"
          echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT

      - name: Git Setting
        run: |
          git config --global user.email "youremail@gmail.com"
          git config --global user.name "Ci Schedule Bot"
          git remote set-url origin "https://github.com/yourgithublink.git"

      - name: Close release branch and pr
        run: |
          git fetch origin ${{ steps.set_branch_name.outputs.branch_name }}
          git push -d origin ${{ steps.set_branch_name.outputs.branch_name }}

毎日、9時(UTC 0時 -> JST 9時)に「昨日」の pr 削除します。

branch 削除には git を使うので、github link の設定が必要です。

結果

branch actions pr
スクリーンショット 2024-06-04 11.37.42.png スクリーンショット 2024-06-04 11.35.22.png スクリーンショット 2024-06-04 11.35.37.png

確認が遅れていて、結果だけですが、うまく生成されて、branch の削除(pr close)もできました。

まとめ

すでに実装されているコードがあって、すぐできまいた。

自分の repository から、確認するときは、すぐ確認できるように、設定しました。

参考したページ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?