mirror of
https://github.com/CarmJos/GithubReleases4J.git
synced 2026-06-04 21:18:16 +08:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dac264a09d | |||
| 63ae2f0025 | |||
| 91d3dab986 | |||
| 303dd703d6 | |||
| 6e3da70b48 | |||
| 50cddafd7a | |||
| b973167344 |
@@ -0,0 +1,9 @@
|
|||||||
|
# GithubReleases4J Javadoc
|
||||||
|
|
||||||
|
基于 [Github Pages](https://pages.github.com/) 搭建,请访问 [JavaDoc](https://CarmJos.github.io/GithubReleases4J) 。
|
||||||
|
|
||||||
|
## 如何实现?
|
||||||
|
|
||||||
|
若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions)
|
||||||
|
自动部署项目的Javadoc到 [Github Pages](https://pages.github.com/) ,
|
||||||
|
可以参考我的文章 [《自动部署Javadoc到Github Pages》](https://pages.carm.cc/doc/javadoc-in-github.html) 。
|
||||||
@@ -8,51 +8,53 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
README LANGUAGES [ [ENGLISH](README_enUS.md) | [中文](README.md) ]
|
README LANGUAGES [ [**ENGLISH**](README.md) | [中文](README_zh_CN.md) ]
|
||||||
|
|
||||||
# GithubReleases4J
|
# GithubReleases4J
|
||||||
|
|
||||||
[](https://github.com/CarmJos/GithubPM/releases)
|
[](https://github.com/CarmJos/GithubReleases4J/releases)
|
||||||
[](https://opensource.org/licenses/GPL-3.0)
|
[](https://opensource.org/licenses/GPL-3.0)
|
||||||
[](https://github.com/CarmJos/GithubPM/actions/workflows/maven.yml)
|
[](https://github.com/CarmJos/GithubReleases4J/actions/workflows/maven.yml)
|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|
|
||||||
GitHub Releases for Java , 基于 [GitHub REST API](https://docs.github.com/cn/rest/reference/releases) 实现。
|
GitHub Releases for Java , based on [GitHub REST API](https://docs.github.com/cn/rest/reference/releases) .
|
||||||
|
|
||||||
本项目对 GitHub Releases 相关的信息进行了封装,方便开发直接进行使用。
|
To provide an easy way to fetch updates and download assets.
|
||||||
|
|
||||||
## 包含功能
|
## Functions
|
||||||
|
|
||||||
- Release 的基本信息
|
- Release Info
|
||||||
- Tag版本号、标题、内容介绍等
|
- Tag Name
|
||||||
- Release 的作者信息
|
- Release Name
|
||||||
- ID 、头像、身份等
|
- Release Descriptions
|
||||||
- Release 的附件信息
|
- ...
|
||||||
- 附件的名称、类型、大小、下载链接等
|
- Release's Author Info
|
||||||
- 支持直接对附件进行下载
|
- Login ID
|
||||||
|
- AvatarURL
|
||||||
|
- ...
|
||||||
|
- Release's Assets Info
|
||||||
|
- Name
|
||||||
|
- Size
|
||||||
|
- ...
|
||||||
|
- Release's Assets Download
|
||||||
|
|
||||||
## 依赖方式
|
## Dependency Usage
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>展开查看 Maven 依赖方式</summary>
|
<summary>Maven dependency</summary>
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
|
|
||||||
<project>
|
<project>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<!--采用github依赖库,安全稳定,但需要配置 (推荐)-->
|
<!--Using github packages-->
|
||||||
<id>GithubReleases4J</id>
|
<id>GithubReleases4J</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/GithubReleases4J</url>
|
<url>https://maven.pkg.github.com/CarmJos/GithubReleases4J</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
|
||||||
<!--采用我的私人依赖库,简单方便,但可能因为变故而无法使用-->
|
|
||||||
<id>carm-repo</id>
|
|
||||||
<name>Carm's Repo</name>
|
|
||||||
<url>https://repo.carm.cc/repository/maven-public/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -70,15 +72,12 @@ GitHub Releases for Java , 基于 [GitHub REST API](https://docs.github.com/cn/r
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>展开查看 Gradle 依赖方式</summary>
|
<summary>Gradle dependency</summary>
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
repositories {
|
repositories {
|
||||||
// 采用github依赖库,安全稳定,但需要配置 (推荐)
|
// Using github packages.
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/GithubReleases4J' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/GithubReleases4J' }
|
||||||
|
|
||||||
// 采用我的私人依赖库,简单方便,但可能因为变故而无法使用
|
|
||||||
maven { url 'https://repo.carm.cc/repository/maven-public/' }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -88,69 +87,10 @@ dependencies {
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 开发示例
|
## DEMO Code
|
||||||
|
|
||||||
```java
|
Please [click here](src/test/java/GithubDemo.java) to read the demo codes.
|
||||||
import cc.carm.lib.githubreleases4j.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
## Open Source License.
|
||||||
|
|
||||||
public class demo {
|
The project using [The MIT License](https://opensource.org/licenses/MIT) .
|
||||||
|
|
||||||
public void onTest() {
|
|
||||||
|
|
||||||
List<GithubRelease> releases = GithubReleases4J.listReleases("作者名", "项目名");
|
|
||||||
//获取Releases列表
|
|
||||||
|
|
||||||
GithubRelease latestRelease = GithubReleases4J.getLatestRelease(
|
|
||||||
"作者名", "项目名",
|
|
||||||
"Token" // 如果是私有项目,可以填写一个OAuth Token来获取信息和下载构件
|
|
||||||
); // 获得最后一次的Release
|
|
||||||
|
|
||||||
if (lastRelease != null) {
|
|
||||||
|
|
||||||
List<GithubAsset> assets = latestRelease.getAssets();
|
|
||||||
// 获取该 Release 的附件列表
|
|
||||||
|
|
||||||
for (GithubAsset asset : assets) {
|
|
||||||
try {
|
|
||||||
asset.download(null); // 以默认名称下载到当前目录
|
|
||||||
} catch (IOException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GithubUser author = latestRelease.getAuthor(); //获取该Release的作者
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 支持与捐赠
|
|
||||||
|
|
||||||
若您觉得本项目做的不错,您可以 [点击这里](https://donate.carm.cc) 捐赠支持我!
|
|
||||||
|
|
||||||
## 开源协议
|
|
||||||
|
|
||||||
本项目源码采用 [GNU General Public License v3.0](https://opensource.org/licenses/GPL-3.0) 开源协议。
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>关于 GPL 协议</summary>
|
|
||||||
|
|
||||||
> GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:
|
|
||||||
>
|
|
||||||
> #### 可自由复制
|
|
||||||
> 你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
|
|
||||||
> #### 可自由分发
|
|
||||||
> 在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
|
|
||||||
> #### 可以用来盈利
|
|
||||||
> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
|
|
||||||
> #### 可自由修改
|
|
||||||
> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
|
|
||||||
>
|
|
||||||
> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
|
|
||||||
>
|
|
||||||
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
|
||||||
</details>
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
```text
|
|
||||||
_____ _ _ _ _ _____ _ _ _ _
|
|
||||||
/ ____(_) | | | | | | __ \ | | | || | | |
|
|
||||||
| | __ _| |_| |__ _ _| |__ | |__) |___| | ___ __ _ ___ ___ ___| || |_ | |
|
|
||||||
| | |_ | | __| '_ \| | | | '_ \| _ // _ \ |/ _ \/ _` / __|/ _ \/ __|__ _| | |
|
|
||||||
| |__| | | |_| | | | |_| | |_) | | \ \ __/ | __/ (_| \__ \ __/\__ \ | || |__| |
|
|
||||||
\_____|_|\__|_| |_|\__,_|_.__/|_| \_\___|_|\___|\__,_|___/\___||___/ |_| \____/
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
README LANGUAGES [ [ENGLISH](README_enUS.md) | [中文](README) ]
|
|
||||||
|
|
||||||
# GithubReleases4J
|
|
||||||
|
|
||||||
[](https://github.com/CarmJos/GithubReleases4J/releases)
|
|
||||||
[](https://opensource.org/licenses/GPL-3.0)
|
|
||||||
[](https://github.com/CarmJos/GithubReleases4J/actions/workflows/maven.yml)
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
GitHub Releases for Java , based on [GitHub REST API](https://docs.github.com/cn/rest/reference/releases) .
|
|
||||||
+118
@@ -0,0 +1,118 @@
|
|||||||
|
```text
|
||||||
|
_____ _ _ _ _ _____ _ _ _ _
|
||||||
|
/ ____(_) | | | | | | __ \ | | | || | | |
|
||||||
|
| | __ _| |_| |__ _ _| |__ | |__) |___| | ___ __ _ ___ ___ ___| || |_ | |
|
||||||
|
| | |_ | | __| '_ \| | | | '_ \| _ // _ \ |/ _ \/ _` / __|/ _ \/ __|__ _| | |
|
||||||
|
| |__| | | |_| | | | |_| | |_) | | \ \ __/ | __/ (_| \__ \ __/\__ \ | || |__| |
|
||||||
|
\_____|_|\__|_| |_|\__,_|_.__/|_| \_\___|_|\___|\__,_|___/\___||___/ |_| \____/
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
README LANGUAGES [ [ENGLISH](README.md) | [**中文**](README_zh_CN.md) ]
|
||||||
|
|
||||||
|
# GithubReleases4J
|
||||||
|
|
||||||
|
[](https://github.com/CarmJos/GithubReleases4J/releases)
|
||||||
|
[](https://opensource.org/licenses/GPL-3.0)
|
||||||
|
[](https://github.com/CarmJos/GithubReleases4J/actions/workflows/maven.yml)
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
GitHub Releases for Java , 基于 [GitHub REST API](https://docs.github.com/cn/rest/reference/releases) 实现。
|
||||||
|
|
||||||
|
本项目对 GitHub Releases 相关的信息进行了封装,方便开发直接进行使用。
|
||||||
|
|
||||||
|
## 包含功能
|
||||||
|
|
||||||
|
- Release 的基本信息
|
||||||
|
- Tag版本号、标题、内容介绍等
|
||||||
|
- Release 的作者信息
|
||||||
|
- ID 、头像、身份等
|
||||||
|
- Release 的附件信息
|
||||||
|
- 附件的名称、类型、大小、下载链接等
|
||||||
|
- 支持直接对附件进行下载
|
||||||
|
|
||||||
|
## 依赖方式
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>展开查看 Maven 依赖方式</summary>
|
||||||
|
|
||||||
|
```xml
|
||||||
|
|
||||||
|
<project>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<!--采用github依赖库,安全稳定,但需要配置 (推荐)-->
|
||||||
|
<id>GithubReleases4J</id>
|
||||||
|
<name>GitHub Packages</name>
|
||||||
|
<url>https://maven.pkg.github.com/CarmJos/GithubReleases4J</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<!--采用我的私人依赖库,简单方便,但可能因为变故而无法使用-->
|
||||||
|
<id>carm-repo</id>
|
||||||
|
<name>Carm's Repo</name>
|
||||||
|
<url>https://repo.carm.cc/repository/maven-public/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>githubreleases4j</artifactId>
|
||||||
|
<version>[LATEST RELEASE]</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>展开查看 Gradle 依赖方式</summary>
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
repositories {
|
||||||
|
// 采用github依赖库,安全稳定,但需要配置 (推荐)
|
||||||
|
maven { url 'https://maven.pkg.github.com/CarmJos/GithubReleases4J' }
|
||||||
|
|
||||||
|
// 采用我的私人依赖库,简单方便,但可能因为变故而无法使用
|
||||||
|
maven { url 'https://repo.carm.cc/repository/maven-public/' }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api "cc.carm.lib:githubreleases4j:[LATEST RELEASE]"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## 开发示例
|
||||||
|
|
||||||
|
请 [**点击这里**](src/test/java/GithubDemo.java) 查看示例代码。
|
||||||
|
|
||||||
|
## 支持与捐赠
|
||||||
|
|
||||||
|
若您觉得本项目做的不错,您可以 [点击这里](https://donate.carm.cc) 捐赠支持我!
|
||||||
|
|
||||||
|
## 开源协议
|
||||||
|
|
||||||
|
本项目源码采用 [The MIT License](https://opensource.org/licenses/MIT) 开源协议。
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>关于 MIT 协议</summary>
|
||||||
|
|
||||||
|
> MIT 协议可能是几大开源协议中最宽松的一个,核心条款是:
|
||||||
|
>
|
||||||
|
> 该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版 权和许可提示。
|
||||||
|
>
|
||||||
|
> 这意味着:
|
||||||
|
> - 你可以自由使用,复制,修改,可以用于自己的项目。
|
||||||
|
> - 可以免费分发或用来盈利。
|
||||||
|
> - 唯一的限制是必须包含许可声明。
|
||||||
|
>
|
||||||
|
> MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。
|
||||||
|
>
|
||||||
|
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
||||||
|
</details>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>githubreleases4j</artifactId>
|
<artifactId>githubreleases4j</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<name>GithubReleases4J</name>
|
<name>GithubReleases4J</name>
|
||||||
<description>Github Releases for Java</description>
|
<description>Github Releases for Java</description>
|
||||||
|
|||||||
@@ -18,59 +18,47 @@ import java.util.stream.Collectors;
|
|||||||
public class GitHubHttpUtils {
|
public class GitHubHttpUtils {
|
||||||
|
|
||||||
private GitHubHttpUtils() {
|
private GitHubHttpUtils() {
|
||||||
|
// Should not be the instance or use by other codes.
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static JSONObject getObject(@NotNull String urlString, @Nullable String token) throws IOException {
|
private static URLConnection createConnection(@NotNull String httpURL, @Nullable String token) throws IOException {
|
||||||
URL url = new URL(urlString);
|
URL url = new URL(httpURL);
|
||||||
URLConnection conn = url.openConnection();
|
|
||||||
conn.setRequestProperty("User-Agent", "GithubReleases4J");
|
|
||||||
if (token != null) {
|
|
||||||
conn.setRequestProperty("Authorization", "token " + token);
|
|
||||||
}
|
|
||||||
conn.setRequestProperty("Accept", "application/vnd.github.v3+json");
|
|
||||||
conn.connect();
|
|
||||||
|
|
||||||
InputStream in = conn.getInputStream();
|
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
|
|
||||||
String responseBody = reader.lines().collect(Collectors.joining(System.lineSeparator()));
|
|
||||||
reader.close();
|
|
||||||
return new JSONObject(responseBody);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static JSONArray getArray(@NotNull String urlString, String token) throws IOException {
|
|
||||||
URL url = new URL(urlString);
|
|
||||||
|
|
||||||
URLConnection conn = url.openConnection();
|
URLConnection conn = url.openConnection();
|
||||||
conn.setRequestProperty("User-Agent", "GithubReleases4J");
|
conn.setRequestProperty("User-Agent", "GithubReleases4J");
|
||||||
if (token != null) {
|
|
||||||
conn.setRequestProperty("Authorization", "token " + token);
|
|
||||||
}
|
|
||||||
conn.setRequestProperty("Accept", "application/vnd.github.v3+json");
|
conn.setRequestProperty("Accept", "application/vnd.github.v3+json");
|
||||||
conn.connect();
|
|
||||||
|
|
||||||
InputStream in = conn.getInputStream();
|
if (token != null) conn.setRequestProperty("Authorization", "token " + token);
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
|
return conn;
|
||||||
String responseBody = reader.lines().collect(Collectors.joining(System.lineSeparator()));
|
|
||||||
reader.close();
|
|
||||||
|
|
||||||
return new JSONArray(responseBody);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static File download(@NotNull String urlString, @Nullable String token,
|
private static String getResponse(@NotNull String httpURL, @Nullable String token) throws IOException {
|
||||||
|
URLConnection connection = createConnection(httpURL, token);
|
||||||
|
InputStream in = connection.getInputStream();
|
||||||
|
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
|
||||||
|
String response = reader.lines().collect(Collectors.joining(System.lineSeparator()));
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected static JSONObject getObject(@NotNull String httpURL, @Nullable String token) throws IOException {
|
||||||
|
return new JSONObject(getResponse(httpURL, token));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static JSONArray getArray(@NotNull String httpURL, String token) throws IOException {
|
||||||
|
return new JSONArray(getResponse(httpURL, token));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static File download(@NotNull String httpURL, @Nullable String token,
|
||||||
@NotNull String path, CopyOption... copyOptions) throws IOException {
|
@NotNull String path, CopyOption... copyOptions) throws IOException {
|
||||||
URL url = new URL(urlString);
|
|
||||||
Path target = Paths.get(path);
|
Path target = Paths.get(path);
|
||||||
|
|
||||||
URLConnection conn = url.openConnection();
|
URLConnection connection = createConnection(httpURL, token);
|
||||||
conn.setRequestProperty("User-Agent", "GithubReleases4J");
|
InputStream in = connection.getInputStream();
|
||||||
if (token != null) {
|
|
||||||
conn.setRequestProperty("Authorization", "token " + token);
|
|
||||||
}
|
|
||||||
conn.setRequestProperty("Accept", "application/vnd.github.v3+json");
|
|
||||||
|
|
||||||
InputStream in = conn.getInputStream();
|
|
||||||
|
|
||||||
Files.copy(in, target, copyOptions);
|
Files.copy(in, target, copyOptions);
|
||||||
in.close();
|
in.close();
|
||||||
|
|||||||
@@ -81,15 +81,34 @@ public class GithubAsset {
|
|||||||
return GithubReleases4J.parseDate(getContents().getString("updated_at"));
|
return GithubReleases4J.parseDate(getContents().getString("updated_at"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public File download() throws IOException {
|
/**
|
||||||
return download(null);
|
* Download this asset to current path with original name.
|
||||||
|
*
|
||||||
|
* @param options Copy options e.g. {@link java.nio.file.StandardCopyOption}
|
||||||
|
* @return Downloaded file.
|
||||||
|
* @throws IOException Throws when has any io exception
|
||||||
|
*/
|
||||||
|
public File download(@NotNull CopyOption... options) throws IOException {
|
||||||
|
return GitHubHttpUtils.download(getBrowserDownloadURL(), getSource().getAuthToken(), getName(), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public File download(@Nullable String path, CopyOption... options) throws IOException {
|
/**
|
||||||
path = path == null ? getName() : path;
|
* Download this asset with provided path and name.
|
||||||
|
*
|
||||||
|
* @param path target path with file suffix , e.g. "cache/build.zip"
|
||||||
|
* @param options Copy options e.g. {@link java.nio.file.StandardCopyOption}
|
||||||
|
* @return Downloaded file.
|
||||||
|
* @throws IOException Throws when has any io exception
|
||||||
|
*/
|
||||||
|
public File download(@NotNull String path, @NotNull CopyOption... options) throws IOException {
|
||||||
return GitHubHttpUtils.download(getBrowserDownloadURL(), getSource().getAuthToken(), path, options);
|
return GitHubHttpUtils.download(getBrowserDownloadURL(), getSource().getAuthToken(), path, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the uploader of this asset.
|
||||||
|
*
|
||||||
|
* @return The author user {@link GithubUser}
|
||||||
|
*/
|
||||||
public GithubUser getUploader() {
|
public GithubUser getUploader() {
|
||||||
return Optional.ofNullable(getContents().getJSONObject("uploader"))
|
return Optional.ofNullable(getContents().getJSONObject("uploader"))
|
||||||
.map(GithubUser::of)
|
.map(GithubUser::of)
|
||||||
|
|||||||
@@ -130,13 +130,23 @@ public class GithubRelease {
|
|||||||
return getContents().getString("discussion_url");
|
return getContents().getString("discussion_url");
|
||||||
}
|
}
|
||||||
|
|
||||||
public GithubUser getAuthor() {
|
/**
|
||||||
|
* Get the author of this release.
|
||||||
|
*
|
||||||
|
* @return The author user {@link GithubUser}
|
||||||
|
*/
|
||||||
|
public @Nullable GithubUser getAuthor() {
|
||||||
return Optional.ofNullable(getContents().getJSONObject("author"))
|
return Optional.ofNullable(getContents().getJSONObject("author"))
|
||||||
.map(GithubUser::of)
|
.map(GithubUser::of)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<GithubAsset> getAssets() {
|
/**
|
||||||
|
* Get the assets of this release.
|
||||||
|
*
|
||||||
|
* @return {@link GithubAsset}
|
||||||
|
*/
|
||||||
|
public @NotNull List<GithubAsset> getAssets() {
|
||||||
JSONArray assetsArray = getContents().getJSONArray("assets");
|
JSONArray assetsArray = getContents().getJSONArray("assets");
|
||||||
if (assetsArray == null) return new ArrayList<>();
|
if (assetsArray == null) return new ArrayList<>();
|
||||||
return IntStream.range(0, assetsArray.length())
|
return IntStream.range(0, assetsArray.length())
|
||||||
|
|||||||
@@ -14,14 +14,31 @@ import java.util.List;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GitHub Releases for Java
|
||||||
|
* <br>To provide an easy way to fetch updates and download assets.
|
||||||
|
* <br>Based on <a href="https://docs.github.com/cn/rest/reference/releases">GitHub REST API (Releases)</a> .
|
||||||
|
*
|
||||||
|
* @author CarmJos
|
||||||
|
*/
|
||||||
public class GithubReleases4J {
|
public class GithubReleases4J {
|
||||||
|
|
||||||
private GithubReleases4J() {
|
private GithubReleases4J() {
|
||||||
|
// Should not be the instance.
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GITHUB_API_URL = "https://api.github.com";
|
public static String GITHUB_API_URL = "https://api.github.com";
|
||||||
public static SimpleDateFormat GH_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
|
public static SimpleDateFormat GH_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List repository's current existing releases.
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param token OAuth Access Token
|
||||||
|
* <br> Necessary when this repository is private.
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @NotNull List<GithubRelease> listReleases(@NotNull String owner, @NotNull String repository,
|
public static @NotNull List<GithubRelease> listReleases(@NotNull String owner, @NotNull String repository,
|
||||||
@Nullable String token) {
|
@Nullable String token) {
|
||||||
try {
|
try {
|
||||||
@@ -38,10 +55,28 @@ public class GithubReleases4J {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List a public repository's current existing releases.
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @NotNull List<GithubRelease> listReleases(@NotNull String owner, @NotNull String repository) {
|
public static @NotNull List<GithubRelease> listReleases(@NotNull String owner, @NotNull String repository) {
|
||||||
return listReleases(owner, repository, null);
|
return listReleases(owner, repository, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a repository's release by the id .
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param releaseID Release ID
|
||||||
|
* @param token OAuth Access Token
|
||||||
|
* <br> Necessary when this repository is private.
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getRelease(@NotNull String owner, @NotNull String repository,
|
public static @Nullable GithubRelease getRelease(@NotNull String owner, @NotNull String repository,
|
||||||
@NotNull String releaseID, @Nullable String token) {
|
@NotNull String releaseID, @Nullable String token) {
|
||||||
|
|
||||||
@@ -57,27 +92,70 @@ public class GithubReleases4J {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a public repository's release by the id .
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param releaseID Release ID
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getRelease(@NotNull String owner, @NotNull String repository,
|
public static @Nullable GithubRelease getRelease(@NotNull String owner, @NotNull String repository,
|
||||||
@NotNull String releaseID) {
|
@NotNull String releaseID) {
|
||||||
return getRelease(owner, repository, releaseID, null);
|
return getRelease(owner, repository, releaseID, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a repository's release by the tag name .
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param tagName Release Tag Name
|
||||||
|
* @param token OAuth Access Token
|
||||||
|
* <br> Necessary when this repository is private.
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getReleaseByTag(@NotNull String owner, @NotNull String repository,
|
public static @Nullable GithubRelease getReleaseByTag(@NotNull String owner, @NotNull String repository,
|
||||||
@NotNull String tagName, @Nullable String token) {
|
@NotNull String tagName, @Nullable String token) {
|
||||||
return getRelease(owner, repository, "tags/" + tagName, token);
|
return getRelease(owner, repository, "tags/" + tagName, token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a public repository's release by the tag name .
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param tagName Release Tag Name
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getReleaseByTag(@NotNull String owner, @NotNull String repository,
|
public static @Nullable GithubRelease getReleaseByTag(@NotNull String owner, @NotNull String repository,
|
||||||
@NotNull String tagName) {
|
@NotNull String tagName) {
|
||||||
return getReleaseByTag(owner, repository, tagName, null);
|
return getReleaseByTag(owner, repository, tagName, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a repository's latest release.
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @param token OAuth Access Token
|
||||||
|
* <br> Necessary when this repository is private.
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getLatestRelease(@NotNull String owner, @NotNull String repository,
|
public static @Nullable GithubRelease getLatestRelease(@NotNull String owner, @NotNull String repository,
|
||||||
@Nullable String token) {
|
@Nullable String token) {
|
||||||
return getRelease(owner, repository, "latest", token);
|
return getRelease(owner, repository, "latest", token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a public repository's latest release.
|
||||||
|
*
|
||||||
|
* @param owner Repository's Owner
|
||||||
|
* @param repository Repository's Name
|
||||||
|
* @return {@link GithubRelease}
|
||||||
|
*/
|
||||||
public static @Nullable GithubRelease getLatestRelease(@NotNull String owner, @NotNull String repository) {
|
public static @Nullable GithubRelease getLatestRelease(@NotNull String owner, @NotNull String repository) {
|
||||||
return getLatestRelease(owner, repository, null);
|
return getLatestRelease(owner, repository, null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import cc.carm.lib.githubreleases4j.GithubAsset;
|
||||||
|
import cc.carm.lib.githubreleases4j.GithubRelease;
|
||||||
|
import cc.carm.lib.githubreleases4j.GithubReleases4J;
|
||||||
|
import cc.carm.lib.githubreleases4j.GithubUser;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GithubDemo {
|
||||||
|
|
||||||
|
public void demo() {
|
||||||
|
|
||||||
|
List<GithubRelease> releases = GithubReleases4J.listReleases("Owner", "RepoName");
|
||||||
|
// List a public repository's current existing releases.
|
||||||
|
|
||||||
|
GithubRelease latestRelease = GithubReleases4J.getLatestRelease(
|
||||||
|
"Owner", "RepoName",
|
||||||
|
"Token" // OAuth token if it is a private repository.
|
||||||
|
); // Get the latest release of the repository
|
||||||
|
|
||||||
|
if (latestRelease != null) {
|
||||||
|
|
||||||
|
List<GithubAsset> assets = latestRelease.getAssets();
|
||||||
|
// Get the Release' assets list
|
||||||
|
|
||||||
|
for (GithubAsset asset : assets) {
|
||||||
|
try {
|
||||||
|
asset.download(); // Download by the original file name.
|
||||||
|
} catch (IOException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
GithubUser uploader = asset.getUploader(); // Get the uploader of this asset.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
GithubUser author = latestRelease.getAuthor(); // Get the author of this release.
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ public class GithubReleasesTest {
|
|||||||
if (!DOWNLOAD) return;
|
if (!DOWNLOAD) return;
|
||||||
if (assets == null) return;
|
if (assets == null) return;
|
||||||
try {
|
try {
|
||||||
File file = assets.download(null);
|
File file = assets.download();
|
||||||
System.out.println("- at " + file.getAbsolutePath());
|
System.out.println("- at " + file.getAbsolutePath());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
Reference in New Issue
Block a user