Discourse의 최신 버전 번호를 안정적이고 프로그래매틱하게 가져오는 방법?

많은 오픈소스 프로젝트에서 그랬듯이, 저는 GitHub 릴리스를 찾고 있었습니다. 저와 같은 생각을 한 사람이 있었고, 그 역시 Discourse에 GitHub 릴리스가(더 이상) 없다는 사실을 발견했습니다.

다음 시도는 GitHub의 git 태그를 사용하는 것이었습니다. 이는 차선책이 될 수 있었죠. 오늘 기준으로 GitHub의 최신 태그는 v3.6.0.beta2입니다. 제 Discourse 인스턴스의 관리자 페이지를 살펴보니, 저는 v3.6.0.beta3을 실행하고 있었습니다. 이는 최신 Discourse 릴리스가 GitHub에 태그되어 있을 뿐만 아니라, Discourse 자체(소프트웨어)가 새로운 릴리스가 있는지 파악하는 수단으로 GitHub 태그를 사용하지 않는다는 것을 의미합니다.

제 설치가 Docker에서 실행되고 있다는 것을 기억해 내고, 저는 Discourse 이미지가 호스팅되는 Docker Hub로 그 토끼굴을 따라가 보기로 했습니다. 그곳에서는 몇 가지 네이밍 규칙이 태그로 사용되고 있지만(예: 2.0.20251113-0018-web-only-stable), Discourse가 공개적으로 사용하는 v.X.Y.Z 형식과 일치하는 것은 없어 보였습니다.


이 문제를 해결할 방법에 대한 추천이 있는 분이 계신가요?

표시되는 버전은 하드코딩된 상수인 Discourse::VERSION::String으로 정의됩니다:

beta3-latest를 실행 중인 것으로 보입니다. 이는 beta3 개발 과정에서 한 버전 정도 차이가 나는 것을 의미합니다. beta3의 최종 버전은 아직 출시되지 않았으므로, 해당 태그는 출시된 최신 베타 버전을 나타냅니다. 하지만 아마도 latest를 사용 중일 텐데, 이는 베타 릴리스를 기반으로 하지 않습니다.

새로운 버전 관리 전략에 관한 주제를 읽어보셨나요?

저는 아무것도 사용하지 않았습니다. Discourse가 업데이트가 있을 때 알려주면, UI에서 버튼을 클릭하여 설치합니다. Discourse가 이 정보를 어디서 가져오는지 알아보고 있습니다.

감사합니다. 그 부분을 발견하긴 했지만, 그렇게 하려면 정기적으로 git clone을 실행하고 해당 파일을 검사해야 해서 부담이 큽니다.

첫 번째 링크는 최신 버전(들)을 가져오는 데 도움이 되지 않습니다(사실 이제는 가져올 것이 더 많아진 것 같습니다)만, 두 번째 링크는 알아두면 좋습니다. 버전 관리 체계가 완전히 바뀔 것 같습니다. 링크를 공유해 주셔서 감사합니다.

새 베타 버전이 릴리스되면 알림이 한 번 전송된다는 설명이 도움이 될 것 같아서 알려드립니다. 포럼이 "latest"를 기반으로 하고 있을 때, 3.6.0.beta3 릴리스 알림을 받은 후 업데이트를 수행하면 3.6.0.beta4-latest가 설치됩니다.

프로그래밍 언어(또는 curl을 사용하여)로 최신 버전을 확인할 수 있는 URL이 필요합니다. 일반적으로 이러한 URL은 피드(feed) 형식이며, JSON, XML, YAML 등 구조화된 언어로 된 응답을 반환합니다.

Discourse 코드에 포함된 버전 확인을 사용할 수 있습니다.

https://api.discourse.org/api/version_check?installed_version=X

여기서 X는 정보를 얻고 싶은 브랜치에서 알려진 버전입니다.

최신 5개의 베타 버전 번호만 얻고 싶다면, 다음과 같이 오래된 버전을 간단히 사용하면 됩니다.
https://api.discourse.org/api/version_check?installed_version=3.1.0.beta1

최신 안정판(stable)을 원한다면 installed_version 매개변수를 생략하세요.
https://api.discourse.org/api/version_check

또는 https://github.com/discourse/discourse/blob/main/lib/version.rb를 가져와서 STRING = 줄을 찾아보세요.

STRING = "3.6.0.beta3-latest"

(베타의 경우 https://github.com/discourse/discourse/blob/beta/lib/version.rb, 안정판의 경우 https://github.com/discourse/discourse/blob/stable/lib/version.rb를 사용하세요)

이거요. 제가 찾던 바로 그거였는데 구글 검색 실력이 부족했네요. 감사합니다!

이 API는 최신 버전을 v3.6.0 beta 2(GitHub 태그 기준)로 표시하는데, 제 포럼에서는 beta 3를 실행 중입니다. 어떻게 이런 일이 발생하는지 이해가 안 되지만, 이건 별개의 문제입니다. :laughing:

도움 주셔서 감사합니다.

api.discourse.org에서 제공되는 데이터는 GitHub 태그에서 가져온 것이므로, 둘 중 하나를 사용해도 됩니다. 항상 동일한 결과가 반환됩니다.

beta3의 사전 릴리스 버전(pre-release version)을 실행 중이기 때문입니다.

-latest 접미사는 Discourse의 latest 브랜치에서 사전 릴리스 버전임을 나타내는 지표이며, 특정 커밋(commit)에 대응하지 않습니다.