🐙

マージ後に自動タグ付け!GitHub Actionsで簡単バージョニング管理

2024/11/14に公開

※この文章はテンション高めなChatGPTが書いています。

概要:
このワークフローは、masterブランチにPRがマージされるたびに自動でタグを付ける便利な仕組みです。開発の進捗に合わせてタグを生成し、バージョン管理をシンプルにすることで、リリースの整理や確認を容易にします。このタグ付けのプロセスは日時に基づいて行われ、スムーズなバージョン管理が可能になります。

前の記事:
https://zenn.dev/workoocha/articles/4ff3df7c9b439c


詳細コード

name: Auto Tag on Merge to Master

on:
  workflow_run:
    workflows: ["Auto Merge PR on Successful PR Creation"]  # auto-merge.yml の name を指定
    types:
      - completed

jobs:
  create-tag:
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    runs-on: ubuntu-latest

    steps:
      - name: Checkout master branch
        uses: actions/checkout@v3
        with:
          ref: master
          fetch-depth: 0

      - name: Set up Git configuration
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

      - name: Fetch all tags
        run: git fetch --tags

      - name: Generate new tag
        id: new_tag
        run: |
          date_part="v$(date +"%Y%m%d")"
          last_tag=$(git tag --list "${date_part}*" | sort | tail -n 1)
          if [ -z "$last_tag" ]; then
            new_tag="${date_part}001"
          else
            seq=$(echo "$last_tag" | sed "s/^${date_part}//")
            new_seq=$(printf "%03d" $((10#$seq + 1)))
            new_tag="${date_part}${new_seq}"
          fi
          echo "::set-output name=tag::$new_tag"

      - name: Create and push tag
        run: |
          git tag ${{ steps.new_tag.outputs.tag }}
          git push origin ${{ steps.new_tag.outputs.tag }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

詳細解説:
このワークフローは「Auto Merge PR on Successful PR Creation」ワークフローの完了後に動作します。PRが成功してマージされると、自動でタグが作成され、masterブランチにプッシュされます。

  1. トリガー設定

    • 前段階の「Auto Merge PR on Successful PR Creation」が成功 (completed & success) したときに発動。
  2. ジョブ「create-tag」

    • チェックアウトmasterブランチを最新状態で取得。
    • Git設定
      • GitHub Actions用のユーザー名とメールアドレスを設定。
    • タグの生成
      • 日付に基づくバージョンを生成(例:vYYYYMMDD001)。
      • 当日生成された最後のタグから、連番をインクリメント。タグがその日に初めての場合は001からスタートし、重複しないよう自動的に番号を更新。
    • タグの作成とプッシュ
      • 生成したタグをmasterブランチにプッシュし、リモートリポジトリに自動追加。

使い方とポイント

  • バージョン管理が簡単に
    開発やデプロイのたびに、日付ごとに整理された新しいタグが自動で生成されます。
  • エラーの少ない運用
    日付とインクリメントの組み合わせでタグの重複を防ぎ、バージョニングを一貫性を保ちながら管理できます。

コードで手間いらずのバージョン管理を実現!
このタグ付けワークフローで、リリースの整理がもっと楽に。日付順にタグが整うため、リリースの進捗や履歴が一目でわかります。毎回のタグ付け作業から解放され、時間を節約しながらスムーズな開発環境を維持しましょう。

Discussion