Github 작업으로 golang 모듈 릴리스 구성

8194 단어 gotutorialbeginners
golang 모듈을 구축하고 배포하는 것은 비교적 쉽습니다. GitHub 리포지토리를 만들고 코드를 푸시해야 합니다. 그게 다야, 그렇지?

설마. 적절하게 배포된 모듈에는 태그가 지정되고 버전이 지정되어야 사람들이 명시적인 버전 관리를 통해 프로덕션 용도로 모듈을 신뢰할 수 있습니다.

버전 관리



패키지 버전을 범프할 시기와 방법을 어떻게 결정합니까? 운 좋게도 바퀴를 재발 명할 필요가 없습니다. golang 커뮤니티 내부 및 외부의 대부분의 패키지는 SemVer, TL;DR을 따릅니다.
  • 세 개의 숫자를 점으로 나눈 값이 있습니다( . ) -> 1.2.5
  • 기존 API를 손상시키는 변경 사항의 경우 첫 번째 숫자를 변경합니다
  • .
  • 새 기능을 추가하지만 기존 기능에 영향을 주지 않는 변경 사항의 경우 두 번째 기능을 변경합니다
  • .
  • 버그로 인해 기존 동작을 수정하는 변경 사항의 경우 세 번째 항목을 변경합니다.

  • 실제 응용 프로그램을 변경할 수 있는 사소한 절충점과 개인적인 취향이 있습니다. 그래도 핵심 개념은 저 3가지 정도로 단순하고, 그 토대 위에서 semantic-release 패키지가 만들어졌다.


    시맨틱 릴리스 / 시맨틱 릴리스


    📦🚀 완전히 자동화된 버전 관리 및 패키지 게시





    📦🚀 시맨틱 릴리스


    완전히 자동화된 버전 관리 및 패키지 게시











    semantic-release는 다음 버전 번호 결정, 릴리스 정보 생성 및 패키지 게시를 포함한 전체 패키지 릴리스 워크플로우를 자동화합니다.

    이것은 Semantic Versioning 사양을 엄격히 따르고 변경 사항의 영향을 소비자에게 전달하여 인간의 감정과 버전 번호 사이의 즉각적인 연결을 제거합니다.

    Trust us, this will change your workflow for the better. – egghead.io



    하이라이트


  • 전자동 릴리스
  • 시행Semantic Versioning 사양
  • 새로운 기능 및 수정 사항이 사용자에게 즉시 제공됩니다
  • .
  • 관리자와 사용자에게 새 릴리스를 알립니다
  • .
  • 형식화된 커밋 메시지 규칙을 사용하여 코드베이스의 변경 사항을 문서화합니다
  • .
  • git merges
  • 를 기반으로 다양한 배포 채널(예: npm dist-tags )에 게시
  • 귀하의 continuous integration workflow과 통합
  • 수동 릴리스와 관련된 잠재적 오류 방지
  • package managers and languages을 통해 모든 plugins 지원
  • shareable configurations을 통한 간단하고 재사용 가능한 구성

  • 어떻게 작동합니까?


    저지르다



    View on GitHub

    커밋



    적절한 커밋 규칙을 사용하는 것은 버전을 관리하고 최신 변경 로그를 쉽게 유지하는 데 중요합니다. 나는 몇 년 동안 Convetional Commit을 사용하고 있습니다. 내 관점에서 보면 가장 쉽게 채택하고 관리할 수 있으며 투자 대비 효과가 뛰어납니다.

    태그 및 릴리스



    Convetional Commit 을 사용 중이고 적절한 시맨틱 버전 관리를 원한다고 가정합니다. 이 경우 최선의 선택은 시맨틱 릴리스 패키지입니다.

    이 도구는 nodejs 환경용으로 설계된 JS로 작성되었기 때문에 처음에는 이상하게 보일 수 있습니다. 그래도 GitHub 및 GitHub 작업을 사용하여 이러한 구현 세부 정보를 추상화할 수 있습니다.

    golang을 사용한 시맨틱 버전



    패키지는 GitHub 리포지토리에 릴리스 및 태그를 생성합니다. 내go-again repository에서 예를 확인할 수 있습니다.

    GitHub 작업 구성과 .releaserc 파일이 모두 필요합니다.

    name: Release
    on:
      push:
        branches:
          - main
    
    jobs:
      release:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@master
          - name: Release
            uses: codfish/[email protected]
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    
    


    그리고 .releaserc

    branches:
      - name: "main"
    
    plugins:
      - "@semantic-release/commit-analyzer"
      - "@semantic-release/release-notes-generator"
      - "@semantic-release/GitHub"
    
    


    커밋을 리포지토리에 병합하거나 푸시할 때마다 시맨틱 버전 관리에 대한 기존 커밋에 따라 새 버전을 얻게 됩니다.
  • 수정: --> 패치
  • 위업 --> 미성년자
  • BREAKING CHANGES -> 메이저

  • 커밋type을 시맨틱 버전 범프로 변환하는 것은 commit-analyzer package을 사용하여 구성할 수 있습니다.

    좋은 웹페이지 즐겨찾기