跳至主要内容

供应商

SDKMAN! 的独特之处在于,它使 SDK 供应商能够在其平台上发布候选版本。我们提供了一个安全的 API,可用于管理 SDKMAN! 上发布的所有方面。这些方面包括**发布**新版本、将现有版本设置为**默认**(稳定版)以及在 SDKMAN! CLI 广播和 Twitter 订阅源上**宣布**该版本。

操作

该 API 是一个简单的 JSON REST API,允许三种基本操作

  • 发布新的候选版本
  • 设置候选版本的默认值
  • 广播发布消息

访问

这是一个安全的 API,需要相应的凭据才能执行上述操作。将根据具体情况向有兴趣在其 SDK 在 SDKMAN! 上提供的供应商授予访问权限。如果您想在 SDKMAN! 上发布您的版本,请按照供应商入职wiki 页面,然后联系我们以获取有关设置凭据的帮助。

端点

调用 API 最简单的方法是使用curl。当然,任何其他客户端都可以用于执行 API 操作。

发布新的候选版本

这将在 SDKMAN! 上执行一个次要版本发布。它只会添加新的候选版本,但不会将其设置为该候选版本的默认版本。此端点支持POSTDELETEHTTP 方法。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 available for download. https://git.io/release。该 url 可以指向 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 页面