GitHub Actions를 사용하여 Launchpad에 연결하는 방법

7115 단어 pythonciyaru
3년 전 Yaru 프로젝트가 시작된 이후로 우리는 항상 작은 문제가 있었습니다. 버그 추적을 위한 두 개의 다른 위치였습니다.
우리의 메인 리포지토리는 GitHub 에서 호스팅되지만 yaru-theme 패키지를 처리하는 Launchpad 페이지도 있습니다.

TLDR



Whiththis python script 및 GitHub 작업을 통해 한 버그 추적 시스템에서 다른 버그 추적 시스템으로 버그를 미러링했습니다.

전체 이야기



문제, 요구, 아이디어를 보고하는 데 시간을 할애하는 사용자에게 얼마나 감사한지 이루 말할 수 없지만 실제로 Launchpad에 대한 응답은 지금까지 최고가 아니었으며 이러한 보고서를 처리한 Ubuntu Desktop 팀에 감사드립니다. .

몇 주 전에 GitHub 리포지토리에서 Launchpad 버그를 자동으로 미러링하는 것이 해결책이 될 수 있다고 생각했고 CI로 이를 처리하기로 결정했습니다.

이상적으로 우리의 솔루션에는 다음이 포함됩니다.
  • 매일 점검을 수행하십시오.
  • Launchpad에서 열려 있는 모든 버그 목록을 가져옵니다.
  • 새로운 버그가 발견되면 ID, 제목 및 원본 보고서 링크를 사용하여 GitHub 버그를 만듭니다.

  • 업스트림을 추적할 몇 가지 GitHub 작업이 이미 있습니다. 주기적으로 실행되고 우리가 처리할 새로운 콘텐츠가 있을 때 PR을 생성하도록 구성됩니다. 이 구성은 첫 번째 점에서 유망해 보였습니다.

    launchpad는 서버와 상호 작용할 수 있는 멋진 Python 라이브러리인 Launchpadlib을 제공합니다.

    launchpadlib is an open-source Python library that lets you treat the HTTP resources published by Launchpad's web service as Python objects responding to a standard set of commands. With launchpadlib you can integrate your applications into Launchpad without knowing a lot about HTTP client programming.



    이 라이브러리를 가지고 노는 것은 꽤 재미있었고 그것을 배우는 가장 좋은 방법은 listed examples 을 통해서였습니다. 예를 들어, Bughugger 주어진 응용 프로그램의 버그 목록을 가져오는 방법을 알려준 것에 감사드립니다.

    import os
    from launchpadlib.launchpad import Launchpad
    
    HOME = os.path.expanduser("~")
    CACHEDIR = os.path.join(HOME, ".launchpadlib", "cache")
    
    lp = Launchpad.login_anonymously(
        "Yaru LP bug checker", "production", CACHEDIR, version="devel"
    )
    
    ubuntu = lp.distributions["ubuntu"]
    archive = ubuntu.main_archive
    packages = archive.getPublishedSources(source_name="yaru")
    package = ubuntu.getSourcePackage(name=packages[0].source_package_name)
    
    bug_tasks = package.searchTasks()
    for task in bug_tasks:
        print(task)
    


    그런 다음 작업에서 세 개의 필드를 추출합니다.
  • 아이디: task.id
  • 제목: task.title
  • 링크: "https://bugs.launchpad.net/ubuntu/+source/yaru-theme/+bug/" + str(task.id)

  • 세 번째 요점은 실제로 두 가지 다른 단계로 구성됩니다.
  • 새로운 문제를 식별합니다.
  • 문제를 만듭니다.

  • 두 점 모두 HUB 을 사용하여 해결되었습니다.

    hub is a command line tool that wraps git in order to extend it with extra features and commands that make working with GitHub easier.



    GitHub는 매일 사용하는 자체 CLI tool를 제공하지만 HUB를 사용하게 된 점은 다음과 같습니다.

    hub can also be used to make shell scripts that directly interact with the GitHub API.



    문제 만들기



    마지막 단계부터 시작하겠습니다. HUB로 문제를 만드는 것은 간단합니다.

    hub issue create -m <title> -m <message> -l Launchpad
    


    여기에서 -m 플래그를 두 번 사용하여 제목을 설정했습니다.

    LP#[ID] [TITLE]



    문제의 본문:

    Reported first on Launchpad at https://bugs.launchpad.net/ubuntu/+source/yaru-theme/+bug/[ID]



    그런 다음 버그 관리를 더 쉽게 해주는 Launchpad 레이블( -l )을 추가했으며 다음 단계에 매우 유용했습니다.

    새로운 버그만 생성



    HUB는 저장소의 모든 버그를 나열할 수 있지만 - 작성 당시 Yaru에는 1,000개 이상의 버그가 있습니다(44개만 열려 있음 😀). 그런 다음 모든 버그를 한 번에 가져오려면 시간이 걸립니다. 다행히도 HUB는 레이블로 필터링할 수 있습니다!

    hub issue --state all --label Launchpad
    


    출력을 구문 분석하는 것은 Python으로 쉽습니다. 나머지는 모두 합치기 위한 약간의 접착제 논리입니다.

    결과



    나는 최종 결과에 만족한다. 이제 사용자 기반 요청에 더 잘 응답할 수 있으며 python script 작성하는 것이 즐거웠고 GitHub Action에 대해 새로운 것을 배웠습니다.

    좋은 웹페이지 즐겨찾기