ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Github Action] 배포 자동화 (feat. ChatGPT)
    Programming 2023. 1. 11. 02:24
    반응형

    요약:

    ChatGPT 엄청나다.

     

     

    배포를 자주 하다보니 귀찮은 게 생겼다.

    귀찮은 것: 앱을 배포할 때마다 PR을 만들고, tag만들고, branch 만들고 하는 것들

     

    자동화를 해놓으면 좋겠다고 생각해서 여러가지 찾아보다가, ChatGPT를 써보기로 했다.

     

     

    질문을 했다.

     

    금방 코드를 짜서 보여준다. 그런데 이상한 부분이 있었다. GITHUB_TOKEN을 요청할필요가 따로 없지 않나??

    그래서 질문했다.

     

     

    필요없었으면 처음부터 없어도 좋았을텐데 좀 아쉬웠다. 보다보니 PR도 같이 관리되면 좋을 겉 같아 질문을 다시했다.

     

     

    한글은 중간중간 잘려서 불편했다. 하지만 적당히 알아들을 수 있어서 괜찮았다.

    package.json에 있는 버전도 같이 통합 관리 되면 좋을 것같아 추가로 요청을 해봤다.

     

     

     

    수정해주세요?.. 수정한 전체 코드를 보여주면 좋을텐데.. 다 물어보고 한번에 합쳐달라고 부탁하려고 생각하게 되었다.

     

    그리고 보니, current_version을 만들고, 또 같은 변수를 사용하는 부분이 눈에 거슬렸다.

     

     

    바꿔달라고 하면 잘 바꿔준다. 

    아쉬운건 처음부터 바뀌어서 제안했으면 좋을텐데...

     

     

    이때부터 다른 부분들도 다 의심하게 되었다.

    이때 살짝 느낀게.. 미래엔 개발은 기계가 하고 리뷰를 인간이 하도록 발전할 수도 있겠다라는 생각이 들었다.

     

    암튼 추가 요구사항을 넣어봤다.

     

     

     

    위에 보다시피 버전을 올리는 로직도 좀 개선이 필요해보였다. 

     

     

    전체코드를 보여달라고 하니 보여주다가 중간에 짤리는 현상이 발생했다. 

    영어로 설명해달라고하니, 더 길게 표시가 되었지만 아래가 잘렸다.

     

    이런 경우가 많아서, 특정 부분 이후부터 다시 설명해달라고 했다.

     

     

     

     

    package.json을 업데이트하면서 ios, android 와 물려있는 버전들도 같이 업데이트하면 좋겠다라고 생각이 들었다.

    물어보니,... 앗 역시 물어보셨군요! 하는 느낌으로 답을 해주었다.

     

     

    위처럼 yarn, fastlane, ruby등을 설치하면, 원하는 동작을 할 수 있을 것 같았다. 그런데 이런 작업들은 리소스가 좀 많이 들 것 같았다.

    그리고 mac도 사용해야하니 과금도 걱정이 되었다.

     

     

     

    잘 설명을 해주어서, 그럼 뺀 것에 대해 검토요청을 했다.

     

     

    GPT 답변: 누가 짰는데 너무 잘 만들었지! 근데 너 잘 확인해. 너 이상한 개발자 같아. 라는 느낌으로 받아들여졌다.

     

     

     

     

    잘 확인하란다..

     

     

    아까 이상한 부분에 대해 무슨 뜻인지 더 물어봤다..

     

     

    테스트를 잘 하란다.. 하려고 commit을 하려고 했는데 message 좀 부탁하려고 헀는데 너무 많이 사용했다고 한다.. 아쉽게 여기서 마무리..

     

    암튼, 결론 코드는 아래와 같다.

    테스트는 아직 안해봤다.

     

    느낀점:

    AI가 결국 세상에 크게 녹아들것이라는 것이라 생각이 들었다.

    AI를 잘 쓰는 개발자와 잘 못쓰는 개발자의 퍼포먼스 차이는 점점 커질 것이므로, 잘 활용하는 방법을 더 공부해야 할 것 같다

     

     

    Release.yml

    name: Release
    
    on:
      pull_request:
        types: [labeled, unlabeled]
    
    jobs:
      create-release:
        runs-on: ubuntu-latest
        if: github.event.pull_request.labels.map(label => label.name).includes('version')
        steps:
          - name: Extract current version
            run: |
              CURRENT_VERSION=$(grep -oE '"version".*' package.json | cut -f4 -d'"')
              echo "CURRENT_VERSION=${CURRENT_VERSION}"
              echo ::set-env name=CURRENT_VERSION::${CURRENT_VERSION}
          - name: Create next version branch
            run: |
              CURRENT_NUMBER=$(echo ${CURRENT_VERSION} | awk -F. '{print $NF}')
              MAJOR=$(echo ${CURRENT_VERSION} | awk -F. '{print $1}')
              MINOR=$(echo ${CURRENT_VERSION} | awk -F. '{print $2}')
              if [ $CURRENT_NUMBER -eq 9 ]
              then 
                  MINOR=$(($MINOR + 1))
                  CURRENT_NUMBER=0
              else
                  CURRENT_NUMBER=$(($CURRENT_NUMBER + 1))
              fi
              NEXT_VERSION="$MAJOR.$MINOR.$CURRENT_NUMBER"
              echo "NEXT_VERSION=${NEXT_VERSION}"
              git branch release/${NEXT_VERSION}
          - name: Update package.json version
            run: |
              jq '.version = "${NEXT_VERSION}"' package.json > package.tmp.json
              mv package.tmp.json package.json
              git add package.json
              git commit -m "Release version ${NEXT_VERSION}"    
              git push origin release/${NEXT_VERSION}
          - name: Checkout to master
            run: git checkout master
          - name: Create tag
            run: |
              git tag v${NEXT_VERSION}
              git push origin v${NEXT_VERSION}
          - name: Create pull request
            uses: peter-evans/create-pull-request@v3
            with:
              title: '[Release] ${NEXT_VERSION}'
              head: release/${NEXT_VERSION}
              base: master
              labels: version

     

     

     

    반응형

    댓글

Designed by Tistory.