pub.dev의 스크린샷과 자동 게시
pub.dev의 스크린샷과 자동 게시 (Screenshots and automated publishing for pub.dev)
오늘부터 pub.dev에서 사용할 수 있는 몇 가지 새 기능이 있어요. 패키지에 스크린샷을 선언해서 더 시각적인 검색을 가능하게 할 수 있고, 게시 흐름도 GitHub Actions로 완전히 자동화할 수 있어요.
출처: 원문
본문
오늘부터 pub.dev에서 사용할 수 있는 몇 가지 새 기능이 있어요. 이제 패키지에 스크린샷을 선언해서 검색을 더 시각적으로 접근할 수 있게 하고, 게시 흐름도 GitHub Actions로 완전히 자동화할 수 있어요.
pub.dev에 스크린샷 추가하기
pub.dev의 핵심 목표 중 하나는 주어진 목적에 맞는 올바른 패키지를 쉽게 찾게 만드는 거예요. 위젯이나 다른 시각적 구성 요소를 검색할 때 이미지는 중요한 역할을 해요. 우리는 이제 패키지 검색 결과에 스크린샷을 보여줘서 패키지를 그 어느 때보다 쉽게 찾을 수 있게 하고 있어요.
패키지 검색과 패키지 페이지의 스크린샷
스크린샷의 썸네일이 이제 검색 결과에 나타나고, 스크린샷이 있는 패키지만 나열하도록 검색을 필터링할 수도 있어요.
has:screenshot으로 필터링된 pub.dev 검색 결과, 결과 옆에 패키지 스크린샷 썸네일이 표시됨.
스크린샷 썸네일은 패키지 페이지에도 표시되고, 썸네일을 클릭하면 모든 스크린샷이 있는 이미지 캐러셀(image carousel)이 열려요.
패키지 페이지에 스크린샷을 표시하는 이미지 캐러셀.
pubspec.yaml에서 스크린샷 선언하기
패키지에 스크린샷을 추가하는 건 정말 간단해요. pubspec.yaml의 screenshots 필드 아래에 설명(description)과 경로(path)와 함께 파일을 선언하면 돼요. 아래는 animations 패키지의 예시예요.
name: animations
...
screenshots:
- description: 'Examples of the container transform pattern.'
path: example/screenshots/container_transform_lineup.png
- description: 'Examples of the fade pattern.'
path: example/screenshots/fade_lineup.png
...
자세한 내용은 dart.dev/tools/pub/pubspec#screenshots를 참고하세요.
pub.dev 자동 게시
수천 명의 Dart 커뮤니티 구성원이 모든 Dart와 Flutter 개발자를 위해 패키지를 pub.dev에 게시해요. 전통적으로 이들 패키지 게시자는 로컬 터미널 명령인 dart pub publish를 실행하고 Google 계정으로 인증해서 pub.dev에 게시했어요. 내부적으로는 refresh token이 개발 머신의 설정 파일에 저장되어, 다시 인증하지 않고도 새 버전을 게시할 수 있게 해줬어요. 이 흐름은 단순하고 이해하기 쉬우지만 수동 단계를 꽤 많이 요구해요. 우리는 기쁘게도 GitHub Action에서 직접 새 pub.dev 버전 게시를 가능하게 하는 새로운 자동 게시 흐름을 소개해요. 여기에는 여러 이점이 있어요.
- 각 릴리스가 GitHub에서 일관된 릴리스 태그로 자동 태그됨.
- 새 버전 게시를 위한 검토·승인 흐름을 구성하기 쉬움.
- 게시 과정이 GitHub가 서명한 토큰으로 인증되어, 디스크에 자격 증명을 저장할 필요가 없음.
testpkg 1.1.5에 대한 성공적인 dart pub publish 명령을 보여주는 GitHub Actions의 "Publish to pub.dev" 실행.
자동 게시를 안전하게 만들기
현재 일부 사용자는 refresh token이 들어 있는 pub-credentials.json 설정 파일을 GitHub Actions의 비밀 환경 변수에 저장하는 방법을 쓰고 있어요. 이렇게 하면 설정 파일을 복구해서 패키지의 새 버전을 게시하는 데 사용하는 GitHub Action 워크플로를 작성할 수 있어요. 이 흐름이 기술적으로는 작동하지만, 도구가 이걸 염두에 두고 설계된 게 아니고 이 흐름에는 여러 단점이 있어요.
pub-credentials.json파일은 저자가 게시 권한이 있는 어떤 패키지든 게시하는 데 사용될 수 있어. 구성된 흐름에서 게시된 그 패키지 하나만이 아님.- 유출되면
pub-credentials.json이pub-credentials.json파일을 만든 사용자를 사칭해서 새 버전과 새 패키지를 게시하는 데 사용될 수 있음. pub-credentials.json에서 refresh token을 폐기하는 UI를 찾기가 쉽지 않음.
실제로 패키지가 게시될 때 저자가 CI 작업 안에서 파일을 추출해서 우연히 저자의 pub-credentials.json 파일을 포함해 버린 일이 한 번 이상 있었어요. 패키지를 그것을 업데이트하는 데 필요한 자격 증명과 함께 게시하는 건 꽤 심각한 보안 취약점이고, 결국 우리는 dart pub publish에 누출 감지(leak detection)를 구현했어요.
우리의 새로운 자동 게시 지원은 이런 문제들을 완화해서, 다음 중 하나를 사용해 pub.dev에 인증할 수 있게 해줘요.
- GitHub Actions가 서명한 임시 OIDC 토큰.
- Google Cloud Build 같은 대부분의 GCP 리소스나 Azure, AWS 같은 다른 클라우드 환경에서 사용할 수 있는 GCP 서비스 계정.
이 흐름들은 우연히 유출되면 쉽게 악용될 수 있는 장기 비밀 토큰에 의존하지 않고 자동 게시를 가능하게 해요. 게시 흐름을 커스텀 머신에 배포한다면 물론 내보낸 서비스 계정 키에 의존할 수 있지만, 그런 키를 제대로 보호하는 데 큰 주의를 기울여야 해요.
안전한 게시 활성화
몇 단계만 거치면 GitHub에서 자동 게시를 활성화할 수 있어요. 자세한 내용은 dart.dev/go/automated-publishing을 참고하세요.
더 알아보기
- pubspec screenshots 문서 — 스크린샷 선언 방법
- dart.dev/go/automated-publishing — GitHub 자동 게시 활성화