describug
← 기록

비공개 저장소로는 배포가 안 된다

자동 빌드까지 다 만들어놓고, 정작 남이 받을 수 없다는 걸 나중에 알았습니다.

배포자동화

Summary

과제
소스는 비공개로 두고 실행파일만 내보내려 했는데, 비공개 저장소의 릴리스는 남이 받을 수 없었다.
수단
파일 보관 서비스(R2)에 올리고 사이트는 버전이 안 들어간 latest 주소만 가리키게 했다. 새 버전을 내도 사이트는 안 고친다.

DETAILED DESCRIPTION

docx2patent는 소스를 공개하지 않기로 했습니다. 대신 실행파일은 누구나 받을 수 있게 하려 했습니다.

GitHub에 태그를 하나 밀면 맥용과 윈도우용을 알아서 빌드해 릴리스에 붙이도록 해뒀습니다. 릴리스는 GitHub이 파일을 올려두는 자리입니다. 여기까지는 잘 돌았습니다.

받을 수가 없었다

그런데 비공개 저장소의 릴리스 파일은 비공개입니다. 당연한 이야기인데 생각을 못 했습니다.

주소를 그대로 줘도 받는 사람은 GitHub 로그인 화면부터 만납니다. 로그인해도 그 저장소에 초대돼 있지 않으면 못 봅니다. 빌드는 자동으로 잘 되는데, 그 결과물이 저 혼자만 닿는 곳에 쌓이고 있었습니다.

소스를 공개할 생각은 없었으니 저장소를 열 수는 없었고, 배포할 다른 자리가 필요했습니다.

사이트에 넣을 수도 없었다

그럼 사이트 저장소에 파일을 같이 넣으면 되지 않나 싶었습니다. 안 됩니다.

압축해도 맥 22MB, 윈도우 28MB입니다. GitHub은 파일 하나가 100MB를 넘으면 아예 거부하고, 그 아래여도 버전을 올릴 때마다 저장소가 그만큼씩 영구히 불어납니다. 지운다고 줄지도 않습니다 — 저장소는 지난 기록을 다 들고 있으니까요. 글자 몇 줄 고치려고 열어보는 저장소에 실행파일이 겹겹이 쌓이는 건 맞지 않았습니다.

파일은 파일 두는 곳에

도메인을 이미 Cloudflare에서 쓰고 있어서 그 회사의 파일 보관 서비스에 올리기로 했습니다. dl.describug.dev 라는 주소를 붙였습니다. 내려받는 트래픽에 요금이 안 붙는다는 점이 컸습니다.

빌드가 끝나면 GitHub이 파일을 그쪽으로 밀어 넣습니다. 두 군데에 둡니다.

  • v2.1.0/ — 버전마다 하나씩. 옛 버전을 계속 받을 수 있게 남깁니다
  • latest/ — 사이트가 가리키는 고정 자리. 새 버전이 나오면 여기를 덮어씁니다

사이트는 latest/만 봅니다. 그래서 새 버전을 내도 사이트는 한 글자도 안 고칩니다. 버전 번호와 파일 크기는 파일 목록 옆에 같이 올려두는 작은 정보 파일에서 읽어 화면에 채웁니다. 그 파일을 못 읽으면 버전·크기 표시만 빠지고 내려받기는 그대로 됩니다.

사실 전에도 알 수 있었다

이걸 처음 겪은 게 아닙니다.

기한 관리를 사무실에 나눠줄 때도 저장소를 만졌습니다. 그때는 시키는 대로 따라 했을 뿐이라 제가 저장소를 공개로 바꿨다는 것조차 몰랐습니다. 되니까 됐다고 넘어갔습니다.

그래서 이번에 "비공개면 못 받는다"를 처음 만난 것처럼 당황했습니다. 두 달 전에 이미 지나온 자리였는데, 왜 됐는지를 안 봤으니 남는 게 없었습니다.

다 만들어놓고 안 눌렀다

여기까지 해놓고 한동안 다운로드가 404였습니다.

이 구조는 태그를 밀어야 돌아가는데, 그 태그를 안 밀었습니다. 빌드는 한 번도 실행된 적이 없었고, 파일 보관함은 텅 빈 채였고, 사이트만 아무것도 없는 자리를 열심히 가리키고 있었습니다.

태그를 미니까 2분 만에 끝났습니다. 만드는 데 쓴 시간이 아까울 만큼 허무했습니다.

한 번 더 걸린 데가 있습니다. 사이트를 다시 배포할 때 **"이전 빌드 결과 재사용"**을 켜두면 전에 "그런 파일 없다"고 받았던 답이 그대로 재활용됩니다. 파일이 생긴 걸 모릅니다. 그 체크를 끄고 다시 올려야 버전 번호가 붙었습니다.

정리

  • 비공개 저장소의 릴리스는 배포 창구가 못 된다
  • 실행파일은 코드 저장소가 아니라 파일 두는 곳에 둔다
  • 사이트는 버전이 안 들어간 고정 주소만 가리키게 한다. 그래야 사이트를 안 고친다
  • 자동화는 방아쇠를 당겨야 돈다

Troubleshooting

증상
GitHub 릴리스에 올린 실행파일을 남이 받으려 하면 로그인 화면이 뜨거나 404 가 난다
원인
저장소가 비공개면 릴리스 파일도 비공개다
해결
파일은 Cloudflare R2 에 올리고 사이트는 버전이 안 들어간 latest 주소만 가리킨다. 저장소가 공개라면 GitHub 릴리스를 그대로 써도 된다
확인
로그아웃 상태(또는 다른 브라우저)에서 주소를 열어 파일이 받아지면 해결