Go, Git API를 이용해서 남의 최신 releases 정보 가져오기

2020. 9. 10. 09:25개발/GO

이 글은 api.github.com 을 이용해서

특정 repo의 releases 정보를 가져오는 작은 개발을 공유하고 있습니다.

 

사용하고 있는 패키지가 많아짐에 따라,

내가 모르는 사이에 버전이 올라가는 케이스도 많고

그 변경점을 찾아보는게 쉽지가 않은 세상입니다.

 

다행히 최근에는 많은 곳에서 git을 이용해 패키지를 관리하고

releases를 통해 버전과 변경점을 공유하고 있는데요.

예전부터 이 부분을 자동으로 가져와야겠다고 생각하다가

이번에 Go를 통해 만들기 시작했습니다.

 

api.github.com

api.github.com 에 접속하면 간단한 api.github의 사용법이 나옵니다.

각각의 url로 들어가면 정보와 또 다른 url 사용법이 나오기 때문에 하나씩 찾아들어가서 내가 원하는 정보를 찾아봐도 재미있습니다.

저는 제가 좋아하는... github.com/laravel/framework 의 정보를 가져오려고 합니다.

그리고 최신 releases 정보를 가져오기 위해 api.github.com/repos/laravel/framework/releases 를 이용하려고 합니다.

 

 

Go 에서 api 정보 가져오기

저는 Postman을 이용해서 기본 코드를 가져올 수 있었습니다.

아직 저에게는 Go가 익숙하지 않아서 기본적인 코드도 막상 짜려면 쉽지 않더라구요.

 

Postman 으로 일단 확인해 본 후,

우측 상단에 Code를 눌러서 원하는 language의 snippet을 가져올 수 있습니다.

 

Postman으로 확인하고

 

Code를 가져오고

 

Go 에서 list 관리하기

저는 하나의 repo가 아니라 여러개의 repo를 확인하고 싶었기 때문에 url을 여러개 확인할 필요가 있었습니다.

그래서 list로 관리를 하려고 했는데 처음에는 map을 사용했습니다.

(결국 나중엔 struct로 변경하기는 했습니다.)

gitList := make(map[string]string)
gitList["LARAVEL"] = "https://api.github.com/repos/laravel/framework/releases"
gitList["SOME"] = "https://api.github.com/repos/owner/repos/releases"
for index, value := range gitList {
    getApi(index, value)
}

참고로 getApi에는 postman 에서 작성한 코드가 있는 함수입니다.

 

Published 시간을 참고하여 webhook 보내기

api를  보면 published_at 항목이 있는데,

저는 이 날짜를 참고하여 최근 24시간 안에 올라온 release면 알림을 받으려고 했습니다.

 

published_at

 

24시간을 검사하기 위해서는 now를 이용했습니다.

now := time.Now()

if now.Sub(d.PublishedAt).Hours() < 24 {
	doWebHook(d)
}

 

후기

이정도로만 해도 제가 원하는 기능은 만들어볼 수 있었습니다.

그런데 좀 더 편하게 사용하기 위한 욕심이 생기는 바람에,

 

- list를 관리할 수 있는 html 페이지 추가 (이 때문에 map을  struct로 변경했습니다.)

- aws lambda 로 올릴 수 있도록 준비

 

이정도는 추가로 준비하고 있습니다.

 

기회가 되면 추가로 준비한 부분까지 공유를 해보도록 하겠습니다.

감사합니다.

'개발 > GO' 카테고리의 다른 글

Go, AWS S3에 파일 올리고 다운받기  (0) 2020.09.17