swsnu / swppfall2020

28 stars 17 forks source link

[Project] github wiki revision history logger 깃헙 액션 공유 #190

Open chullino opened 4 years ago

chullino commented 4 years ago

안녕하세요, team16 팀원입니다.

Git Revision History를 작성하는 과정에서, 히스토리 로그를 찍는 action을 만들었고, 소소한.. 결과를 공유하고자 합니다. revision 작성자 및 시간 로그를 찍을 수 있고, 예시는 다음과 같습니다. Revision History 헤드라인 바로 밑에처럼, 링크 형식으로 나오고 해당 링크를 누르면 최신 커밋으로 이동합니다. 위가 최신, 아래가 과거입니다. (그 아래 링크가 아닌 건 과거 버전의 액션입니다...)


스크린샷 2020-10-28 오전 2 45 20

물론, 프로젝트 요구사항처럼 Rev. 1.0 YYYY-MM-DD - initial version 나오지는 않지만, 최신 작성자 및 시간이 확인된다는 점... 정도에 개인적으로 만족하고 있습니다.... 이건 각자 작성해주셔야 할 듯 싶습니다...

사용법은 다음과 같습니다.

(1) wiki에 Design and Planning, Requirements and Specification 마크다운을 생성합니다.(명칭은 완전히 같아야 합니다. 띄어쓰기, 대소문자 및 복수단수 표현형 주의해주세요. 없으면 에러납니다.) (2) 깃헙 액션 페이지에 들어가셔서, 액션 생성하기를 누르시고, 아래의 스크립트를 넣어주시고, 커밋합니다. (3) 그러면, 웹상에서 깃위키 페이지 Design and Planning를 수정할 때, 혹은 Requirements and Specification를 수정할 때, 위 사진처럼 해당 위키 마크다운 파일 2번째 줄에 자동으로 logging됩니다. 언제나 두번째 줄이 최신, 그 아래가 과거 로그입니다.

주의사항은 두 가지 인데요.

(1) 프로젝트 요구사항처럼 Rev. 1.0 YYYY-MM-DD - initial version를 작성하시고, 에딧 완료를 누르시면, (위키가 업데이트되었기 때문에 깃헙 액션이 트리거되어 두 번째 줄에) 로그가 찍히게 되어서 안예쁘고 정리가 안된 느낌을 줄 수 있습니다. 요구사항 처럼 버저닝 하시려면, 액션을 잠시 껐다가 버저닝 하시면 좋을 듯 싶습니다.

(2) 위키를 웹에서 접근해 수정할 때에만 로그가 찍힐 것입니다. 위키를 클론해서 작성하시는 분들이 있다면, 푸시 하셨을 때 (아마도) 작동하지 않을(?)수도 있습니다. 저도 해보지는 않아서 잘 모르겠습니다.

액션 잠시 디스에이블 하는 법은 아래와 같다고 합니다.


스크린샷 2020-10-28 오전 3 01 27
name: Update Revision Dates

on: gollum

jobs:
  updateWikiRevision:
    if: github.actor != 'actions-user'

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          repository: ${{github.repository}}.wiki

      - name: dump github context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: |
          echo "$GITHUB_CONTEXT"

      - name: check wiki repo content
        run: |
          ls -al

      - name: check the most rescent wiki git logs
        run: |
          git log -1 --stat

      - name : create revision history markdown string
        env:
          REPO: ${{github.repository}}
          PAGENAME: ${{github.event.pages[0].page_name}}
        run: |
          git log -1 --stat > log.txt
          cat log.txt | grep "Author" | awk '{print "[author["$2"] updated wiki at "}' > author.txt
          cat log.txt | grep "Date"   | awk '{print "date["$6" "$2" "$3" "$4" "$5"]]"}' > date.txt
          cat log.txt | grep "commit" | awk -v repo="$REPO" -v pagename="$PAGENAME" '{print "(https://github.com/"repo"/wiki/"pagename"/"$2")<br/>"}' > link.txt
          paste -d'\0' author.txt date.txt link.txt > mdstring.txt

      - name: write new revision history
        run: |
          awk 'NR>2{while((getline a < "mdstring.txt") > 0){print a}}1' Design-and-Planning.md > Design-and-Planning-revised.md
          awk 'NR>2{while((getline a < "mdstring.txt") > 0){print a}}1' Requirements-and-Specification.md > Requirements-and-Specification-revised.md

      - if: github.event.pages[0].page_name == 'Design-and-Planning'
        name: if log inlcudes Design-and-Planning.md change, then update.
        run: |
          cat log.txt | awk '{if(NR>=7) print $1}' | grep "Design-and-Planning.md" > condition.txt
          if [[ $(wc -l <condition.txt) -ge 1 ]]; then mv Design-and-Planning-revised.md Design-and-Planning.md;fi

      - if: github.event.pages[0].page_name == 'Requirements-and-Specification'
        name: if log inlcudes Requirements-and-Specification.md change, then update.
        run: |
          cat log.txt | awk '{if(NR>=7) print $1}' | grep "Requirements-and-Specification.md" > condition.txt
          if [[ $(wc -l <condition.txt) -ge 1 ]]; then mv Requirements-and-Specification-revised.md Requirements-and-Specification.md;fi

      - name : cleanup temporary file
        run: |
          rm log.txt
          rm author.txt
          rm date.txt
          rm link.txt
          rm mdstring.txt
          rm -f rm condition.txt
          rm -f Design-and-Planning-revised.md
          rm -f Requirements-and-Specification-revised.md

      - name: commit changes
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add .
          git commit -m "update revision history"

      - name: Push to wiki repo
        uses: ad-m/github-push-action@master
        with:
          repository: ${{github.repository}}.wiki    # specify the wiki repo and push the update.
          github_token: ${{ secrets.GITHUB_TOKEN }}

(깃헙 액션이 처음이라...) 마스터 브랜치 커밋 로그를 어지럽힌 점에 대해 팀원 분들께 사과의 말씀을 올리며, 이만 마치겠습니다..!