2
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?

画像のように、リポジトリに変更をpushしたときにバージョン情報を自動で更新するワークフローを記述することについて考えます。
image.png

workflowファイルについて

GitHub Actionsでは、.github/workflows以下にyml形式で振る舞いを定義することができます。
プロジェクトに変更があったときはもちろんのこと、cronのように定刻に指定したアクションを実行させることもできます。
今回は要件に沿って、developブランチにmerge or pushがあった場合に、後述のLinuxコマンドを実行する というようにしました。

name: version update
on:
  push:
    branches:
      - develop

permissions:
  contents: write

jobs:
  version-update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: |
          VERSION="4.0.$GITHUB_RUN_NUMBER"
          echo "current version: $VERSION"

          find . -name "*.csproj" | while read CSPROJ; do
            sed -i "s|<Version>.*</Version>|<Version>$VERSION</Version>|" "$CSPROJ"
            git add $CSPROJ
          done

          git config --global user.name "$GITHUB_ACTOR"
          git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
          git commit -m "バージョン情報更新: $VERSION"
          git push

順を追って説明していきます。

ワークフローにラベルをつける

name: version update

※単にActionsの画面で開発者が識別するためだけのラベルであることに注意してください。(1敗)
ワークフロー自体の名称を設定したい場合、ymlのファイル名自体を変更します。
これは後のgithub.run_numberの部分でまた説明します。

プロジェクト上のmainブランチにpush or mergeがあった場合にjobsを実行する

on:
  push:
    branches:
      - main

単にpushを指定すればmerge時にも走ります。

ランタイムに書き込み権限を与える

permissions:
  contents: write

これに気づかず多くの時間を浪費しました。 😭
jobがリポジトリに何らかの書き込みを伴うアクションの場合、明示的に書き込み権限を与えなければならないようです。

実際にバージョン情報を書き換える

      - run: |
          VERSION="4.0.$GITHUB_RUN_NUMBER"
          echo "current version: $VERSION"

          find . -name "*.csproj" | while read CSPROJ; do
            sed -i "s|<Version>.*</Version>|<Version>$VERSION</Version>|" "$CSPROJ"
            git add $CSPROJ
          done

          git config --global user.name "$GITHUB_ACTOR"
          git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
          git commit -m "バージョン情報更新: $VERSION"
          git push

今回ワークフローを追加するプロジェクトはC#.NETで記述されています。
C#のバージョンは、プロジェクト内にある.csprojファイル内にタグとして書かれています。
これを書き換えることを目指します。

GITHUB_RUN_NUMBER

今までにワークフローが回った回数を持つ定数です。
色々調べましたが、リセット等の動作はできないようです。
ただこのカウントはファイル名依存なので、ワークフローの名前を変更すれば1からカウントできます。
(つまり、ブランチごとにワークフローを用意してそれぞれ異なるナンバリングをするというようなことも可能です)
参考:

$GITHUB_ACTOR

Authorのユーザー名が入ります。

GITHUB_ACTOR@users.noreply.github.com

あまり知られていません(?)が、GitのAuthorメールアドレスは隠すことができます。
これを実現するためにGitHubの全てのアカウントに割り当てられているアドレスを利用します。特に設定なしで用いることができます。

2
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
2
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?