GitHub Actions를 사용하여 Pull Request를 master에 병합하면 자동으로 태그를 친다.

소개



Git 태그를 매번 수동으로 하고 있었지만, 먼지도 쌓이면 산이 되어 시간 삭감을 위해 자동화했습니다. 어떤 CI 서비스를 사용해도 구현은 가능했습니다만, GitHub Actions를 사용하면 자주 흔한 환경 변수의 설정 없이 간단하게 도입할 수 있었으므로 소개합니다. 비슷한 기사도 이미 있지만 개인 메모로 남기기 때문에 양해 바랍니다.

실현하고 싶은 것


  • Pull Request를 병합하면 릴리스 태그를 치고 싶습니다.
  • 병합하지 않고 닫으면 아무 것도하지 않습니다

  • 태그명은 release-%Y%m%d%H%M 의 서식으로 하고 싶다. 이 근처는 기호로.
  • 물론 일본 시간으로!


  • 설정 방법



    대상 GitHub 리포지토리에서 다음 내용의 파일을 .github/workflows/release_tag.yml 에 배치하고 커밋하고 끝입니다!
    name: Release Tag
    on:
      pull_request:
        branches:
          - master
        types: [closed]
    jobs:
      build:
        name: Create Release
        runs-on: ubuntu-latest
        if: github.event.pull_request.merged == true
        steps:
          - name: Checkout code
            uses: actions/checkout@v2
          - name: Set current date
            id: current_date
            env:
              TZ: 'Asia/Tokyo'
            run: echo "current_date=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
          - name: Create release
            id: create_release
            uses: actions/create-release@v1
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            with:
              tag_name: release-${{ env.current_date }}
              release_name: release-${{ env.current_date }}
              draft: false
              prerelease: false
    

    이후 Pull Request가 병합되면 다음과 같이 태그가 지정됩니다!



    보충



    워크플로 트리거 설정



    다음은 "master 브랜치에 대한 풀 요청을 닫으면 실행"을 설정합니다. types 에서 액티비티 유형(무엇을 트리거로 발화할 것인가)을 선택할 수 있습니다만, closed 사실은 여기서 merged 가 선택하고 있으면 좋지만, 왜 안 되는군요.
    on:
      pull_request:
        branches:
          - master
        types: [closed]
    

    Pull Request를 병합했을 때만 발화시킨다


    types: [closed] 뿐이라면 병합하지 않고 닫은 것만으로도 발화해 버리므로, 이하를 설정하는 것으로 Pull Request 를 병합했을 때만 작업이 실행되도록(듯이) 합니다.
    if: github.event.pull_request.merged == true
    

    날짜와 시간을 포함한 릴리스 태그 이름 만들기


    release-202102192100 같이 날짜와 시간을 포함한 릴리스 태그명을 이하로 작성해 환경 변수에 등록하고 있습니다. 포인트는 타임 존 설정입니다. 이것이 없으면 UTC가되어 버리므로 잊지 마세요 ~! (처음에는 눈치 채지 못했지만 ...
          - name: Set current date
            id: current_date
            env:
              TZ: 'Asia/Tokyo'
            run: echo "current_date=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
    

    출시 태그를 등록하도록 허용



    공식적으로 제공되는 actions/create-release@v1 액션을 이용하면 간단합니다. tag_name
          - name: Create release
            id: create_release
            uses: actions/create-release@v1
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            with:
              tag_name: release-${{ env.current_date }}
              release_name: release-${{ env.current_date }}
              draft: false
              prerelease: false
    

    링크


  • actions/create-release: An Action to create releases via the GitHub Release API
  • actions/checkout: Action for checking out a repo
  • 좋은 웹페이지 즐겨찾기