跳至主要內容

供應商

SDKMAN! 的獨特之處在於它賦予 SDK 供應商在我們的平台上發布其候選版本的權力。我們提供了一個安全的 API,可用於管理 SDKMAN! 上發布版本的所有方面。這些方面包括發布新版本、將現有版本設置為預設(穩定)以及在 SDKMAN! CLI 廣播和 Twitter 消息來源上公告發布。

操作

API 是一個簡單的 JSON REST API,允許三個基本操作

  • 發布新的候選版本
  • 設定候選版本的預設值
  • 廣播發布訊息

存取

這是一個安全的 API,需要適當的憑證才能執行上述操作。有興趣在 SDKMAN! 上提供其 SDK 的供應商將根據具體情況獲得存取權限。如果您想在 SDKMAN! 上發布您的版本,請遵循供應商入職流程 wiki 頁面,然後 聯絡我們 獲取有關設定憑證的幫助。

端點

呼叫 API 最簡單的方法是使用 curl。當然,也可以使用任何其他客戶端來執行 API 操作。

發布新的候選版本

這將在 SDKMAN! 上執行次要版本發布。它只會新增新的候選版本,但不會將其設為該候選版本的預設版本。此端點支援 POSTDELETE HTTP 方法。POST 端點是冪等的。

curl -X POST \
-H "Consumer-Key: CONSUMER_KEY" \
-H "Consumer-Token: CONSUMER_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"candidate": "groovy", "version": "2.4.2", "url": "https://groovy.jfrog.io/artifactory/dist-release-local/groovy-zips/apache-groovy-binary-2.4.6.zip"}' \
https://vendors.sdkman.io/release

多平台二進制發行版

我們支援通用和多平台二進制發行版。通用二進制檔可以在所有平台上運行,因此您只需要將單個 SDK 歸檔文件發布到我們的 API。多平台 API 是專門為目標平台編譯的,需要為每個目標平台發布一個歸檔文件。我們目前支援以下平台

  • LINUX_64
  • LINUX_ARM64
  • LINUX_32
  • LINUX_ARM32SF
  • LINUX_ARM32HF
  • MAC_OSX
  • MAC_ARM64
  • WINDOWS_64

要指示目標平台,有效負載中應包含帶有關聯平台的 platform 鍵。如果未包含 platform,我們假設值為 UNIVERSAL

多供應商候選版本

對於希望發布到多供應商候選版本(如 Java 或 JMC)的供應商,我們要求 JSON 有效負載中存在供應商字串。這將產生一個由 $version-$vendor 組成的新版本,因此在本例中,它在 SDKMAN! 上將顯示為 11.0.10-zulu

校驗和

可以為每個已發布的二進制檔在有效負載中提供一個可選的 checksums 映射。支援的校驗和演算法為

  • MD5
  • SHA-1
  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

範例有效負載

一個範例有效負載演示了 Azul 以 zulu 的身份發布的 LINUX_64 多平台 Java 二進制檔,其中包含兩個校驗和,如下所示

{
"candidate": "java",
"version": "11.0.10",
"vendor": "zulu",
"url": "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-linux_x64.tar.gz",
"platform": "LINUX_64",
"checksums": {
"MD5": "93c9d427af64f2da8c00c9219360815b",
"SHA-256": "0bd85593bae021314378f3b146cfe36a6c9b0afd964d897c34201034ace3e785"
}
}

將現有版本設定為候選版本的預設版本

在為現有候選版本呼叫此端點時,它會將其設為該候選版本的預設版本。這會將次要版本發布變為主要版本發布!

curl -X PUT \
-H "Consumer-Key: CONSUMER_KEY" \
-H "Consumer-Token: CONSUMER_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"candidate": "groovy", "version": "2.3.8"}' \
https://vendors.sdkman.io/default

廣播結構化訊息

這將導致在社群媒體和 SDKMAN! CLI 上發布結構化訊息公告。結果將如下所示:grails 3.0.0 可供下載。https://git.io/release。網址可以指向 github 發布頁面或版本的變更日誌。此訊息將會發布到 SDKMAN! CLI 的廣播頻道,以及 @sdkman_ X 消息來源。

curl -X POST \
-H "Consumer-Key: CONSUMER_KEY" \
-H "Consumer-Token: CONSUMER_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"candidate": "grails", "version": "3.0.0", "url": "https://git.io/release"}' \
https://vendors.sdkman.io/announce/struct

Gradle SDK 供應商插件

如果您不喜歡使用 cURL(或 HttpClient),可以考慮使用我們的 Gradle 插件。該插件允許將發布作為 CI 構建的副作用完成!它公開了幾個有用的任務,例如

  • sdkReleaseVersion
  • sdkDefaultVersion
  • sdkAnnounceVersion

它還公開了一些便利的任務,將上述任務合併成單個任務

  • sdkMajorRelease:執行發布、預設和結構化公告
  • sdkMinorRelease:執行發布和結構化公告,預設

有關此插件的更多詳細資訊,以及如何配置它,請參閱項目的 Github 頁面

Maven SDK 供應商插件

如果您不喜歡使用 cURL(或 HttpClient)或 Gradle,可以考慮使用我們的 Maven 插件。該插件允許將發布作為 CI 構建的副作用完成!它公開了幾個有用的目標,例如

  • release
  • default
  • announce

它還公開了一些便利的目標,將上述目標合併成單個目標

  • major-release:執行發布、預設和結構化公告
  • minor-release:執行發布和結構化公告,預設

有關此插件的更多詳細資訊,以及如何配置它,請參閱項目的 Github 頁面