GitHub 작업을 사용하여 PyPI에 패키지 게시 및 릴리스 버전 자동화

태그 수동 생성, 패키지 게시 및 GitHub 릴리스 생성은 시간이 많이 걸리는 반복 작업입니다. 버전 생성은 릴리스를 생성하고 패키지를 PyPI 라이브러리에 게시하는 데 동일한 버전을 사용해야 함을 의미합니다. 이 기사에서는 이 프로세스를 자동화할 것입니다. 이러한 작업을 자동화하려면 다음 단계를 따르십시오.

1. PyPI에서 API 토큰 생성



API 토큰은 PyPI user account setting에서 만들 수 있습니다. 토큰을 생성하면 API 키 섹션에 나열됩니다.



2. GitHub 비밀에 API 키 추가



이제 동일한 것을 GitHub 리포지토리 비밀에 추가해야 합니다. 이를 추가하려면 저장소 설정으로 이동한 다음 Secrets > actions > New repository secret를 클릭해야 합니다. 암호의 이름을 PYPI_API_TOKEN 로 추가합니다.



3. GitHub 워크플로에 YML 파일 추가



저장소에서 .github/workflows/release_to_pypi.yml 파일을 생성합니다. 이 파일에서 패키지 게시를 위한 구성 코드를 작성해야 합니다. 시작하려면 릴리스 파일에 다음 코드를 작성하십시오.

name: Publish ${package_name} to PyPI / GitHub

on:
  push:
    tags:
      - "v*"


이름 키는 작업의 이름을 나타냅니다. 두 번째 청크on 키는 이 조건이 실행되어야 하는 조건을 나타냅니다. 위의 경우 문자v로 시작하는 태그가 GitHub에 푸시될 때마다 이 작업이 실행됩니다.

이제 이 작업에 대한 작업을 추가하고

jobs:
  build-n-publish:
    name: Build and publish to PyPI
    runs-on: ubuntu-latest

    steps:
      - name: Checkout source
        uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.x"

      - name: Build source and wheel distributions
        run: |
          python -m pip install --upgrade build twine
          python -m build
          twine check --strict dist/*
      - name: Publish distribution to PyPI
        uses: pypa/gh-action-pypi-publish@master
        with:
          user: __token__
          password: ${{ secrets.PYPI_API_TOKEN }}

      - name: Create GitHub Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: false
          prerelease: false

      - name: Get Asset name
        run: |
          export PKG=$(ls dist/ | grep tar)
          set -- $PKG
          echo "name=$1" >> $GITHUB_ENV
      - name: Upload Release Asset (sdist) to GitHub
        id: upload-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: dist/${{ env.name }}
          asset_name: ${{ env.name }}
          asset_content_type: application/zip


이러한 모든 것은 패키지를 PyPI 라이브러리에 게시하고 GitHub 버전을 릴리스하기 위한 기본 사항입니다. 이 코드를 복사하여 release_to_pypi.yml 라이브러리에 붙여넣기만 하면 됩니다.

I only want to address two things here, the first one is, in the password key(password: ${{ secrets.PYPI_API_TOKEN }}), the secrets we created in previous step is going to use. Make sure the name of the secret creating in the GitHub repository matched to the name of the above variable. Another things is, the GITHUB_TOKEN key (GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}), this secret is provided by GitHub actions, you don't need to create your own token.



패키지를 PyPI에만 게시하려는 경우(GitHub에서 릴리스하지 않으려면 위 코드에서 마지막 두 섹션, 즉

 - name: Create GitHub Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: false
          prerelease: false

      - name: Get Asset name
        run: |
          export PKG=$(ls dist/ | grep tar)
          set -- $PKG
          echo "name=$1" >> $GITHUB_ENV
      - name: Upload Release Asset (sdist) to GitHub
        id: upload-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: dist/${{ env.name }}
          asset_name: ${{ env.name }}
          asset_content_type: application/zip


4. 작동 여부 테스트



마지막으로 작업 흐름이 작동하는지 여부를 테스트할 때입니다. 이를 테스트하려면 먼저 git를 사용하여 버전을 생성하고,

git tag -a "v0.0.1-beta" -m "beta version testing"
git push --tags


tag를 GitHub에 푸시한 후 아래와 같이 GitHub 작업을 트리거해야 합니다.



축하합니다! 이 자동화를 성공적으로 통합했습니다.

이 블로그가 마음에 드시면 제 YouTube 채널을 구독하여 지원해 주세요.

좋은 웹페이지 즐겨찾기