Skip to content

Commit 4ffcd43

Browse files
Use public json api to check the most recent version
1 parent 0b860b9 commit 4ffcd43

File tree

4 files changed

+96
-1165
lines changed

4 files changed

+96
-1165
lines changed
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
package io.github.manamiproject.manami.app.versioning
22

3-
import io.github.manamiproject.modb.core.extensions.EMPTY
43
import io.github.manamiproject.modb.core.httpclient.DefaultHttpClient
54
import io.github.manamiproject.modb.core.httpclient.HttpClient
5+
import io.github.manamiproject.modb.core.json.Json
6+
import io.github.manamiproject.modb.core.logging.LoggerDelegate
67
import kotlinx.coroutines.runBlocking
78
import java.net.URI
89

910
internal class GithubVersionProvider(
10-
private val uri: URI = URI("https://github.com/manami-project/manami/releases/latest"),
11+
private val uri: URI = URI("https://api.github.com/repos/manami-project/manami/releases/latest"),
1112
private val httpClient: HttpClient = DefaultHttpClient.instance,
1213
): VersionProvider {
1314

1415
override fun version(): SemanticVersion {
15-
val response = runBlocking { httpClient.get(uri.toURL()) }
16-
check(response.isOk()) { "Unable to check latest version, because response code wasn't 200." }
16+
return runBlocking {
17+
val response = httpClient.get(uri.toURL())
18+
check(response.isOk()) { "Unable to check latest version, because response code wasn't 200." }
1719

18-
val title = Regex("<title>.*?</title>").find(response.bodyAsText)?.value ?: EMPTY
19-
val rawVersion = Regex("([0-9]+\\.?){3}").find(title)?.value ?: EMPTY
20-
return SemanticVersion(rawVersion)
20+
val version = Json.parseJson<GithubResponse>(response.bodyAsText)!!.name
21+
SemanticVersion(version)
22+
}
2123
}
22-
}
24+
}
25+
26+
private data class GithubResponse(
27+
val name: String,
28+
)

manami-app/src/test/kotlin/io/github/manamiproject/manami/app/versioning/GithubVersionProviderTest.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal class GithubVersionProviderTest {
1919
override suspend fun get(url: URL, headers: Map<String, Collection<String>>): HttpResponse {
2020
return HttpResponse(
2121
code = 200,
22-
body = loadTestResource<String>("versioning_tests/github_versioning_tests/latest_version_page.html").toByteArray(),
22+
body = loadTestResource<String>("versioning_tests/github_versioning_tests/latest_version.json").toByteArray(),
2323
)
2424
}
2525
}
@@ -32,19 +32,16 @@ internal class GithubVersionProviderTest {
3232
val result = versionProvider.version()
3333

3434
// then
35-
assertThat(result).isEqualTo(SemanticVersion("3.2.2"))
35+
assertThat(result).isEqualTo(SemanticVersion("3.12.18"))
3636
}
3737

3838
@Test
3939
fun `throws exception if version cannot be extracted`() {
4040
// given
4141
val otherBody = """
42-
<html>
43-
<head>
44-
<title>Latest Release</title>
45-
</head>
46-
<bod>Some content</body>
47-
</html>
42+
{
43+
"name": "value"
44+
}
4845
""".trimIndent()
4946

5047
val testHttpClient = object: HttpClient by TestHttpClient {
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"url": "https://api.github.com/repos/manami-project/manami/releases/192017444",
3+
"assets_url": "https://api.github.com/repos/manami-project/manami/releases/192017444/assets",
4+
"upload_url": "https://uploads.github.com/repos/manami-project/manami/releases/192017444/assets{?name,label}",
5+
"html_url": "https://github.com/manami-project/manami/releases/tag/3.12.18",
6+
"id": 192017444,
7+
"author": {
8+
"login": "manami-project",
9+
"id": 13179375,
10+
"node_id": "MDQ6VXNlcjEzMTc5Mzc1",
11+
"avatar_url": "https://avatars.githubusercontent.com/u/13179375?v=4",
12+
"gravatar_id": "",
13+
"url": "https://api.github.com/users/manami-project",
14+
"html_url": "https://github.com/manami-project",
15+
"followers_url": "https://api.github.com/users/manami-project/followers",
16+
"following_url": "https://api.github.com/users/manami-project/following{/other_user}",
17+
"gists_url": "https://api.github.com/users/manami-project/gists{/gist_id}",
18+
"starred_url": "https://api.github.com/users/manami-project/starred{/owner}{/repo}",
19+
"subscriptions_url": "https://api.github.com/users/manami-project/subscriptions",
20+
"organizations_url": "https://api.github.com/users/manami-project/orgs",
21+
"repos_url": "https://api.github.com/users/manami-project/repos",
22+
"events_url": "https://api.github.com/users/manami-project/events{/privacy}",
23+
"received_events_url": "https://api.github.com/users/manami-project/received_events",
24+
"type": "User",
25+
"user_view_type": "public",
26+
"site_admin": false
27+
},
28+
"node_id": "RE_kwDOAkwnnM4LcfQk",
29+
"tag_name": "3.12.18",
30+
"target_commitish": "master",
31+
"name": "3.12.18",
32+
"draft": false,
33+
"prerelease": false,
34+
"created_at": "2024-12-22T14:46:24Z",
35+
"published_at": "2024-12-22T14:47:44Z",
36+
"assets": [
37+
{
38+
"url": "https://api.github.com/repos/manami-project/manami/releases/assets/215119838",
39+
"id": 215119838,
40+
"node_id": "RA_kwDOAkwnnM4M0nfe",
41+
"name": "manami.jar",
42+
"label": "",
43+
"uploader": {
44+
"login": "github-actions[bot]",
45+
"id": 41898282,
46+
"node_id": "MDM6Qm90NDE4OTgyODI=",
47+
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
48+
"gravatar_id": "",
49+
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
50+
"html_url": "https://github.com/apps/github-actions",
51+
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
52+
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
53+
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
54+
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
55+
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
56+
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
57+
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
58+
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
59+
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
60+
"type": "Bot",
61+
"user_view_type": "public",
62+
"site_admin": false
63+
},
64+
"content_type": "application/java-archive",
65+
"state": "uploaded",
66+
"size": 140905813,
67+
"download_count": 13,
68+
"created_at": "2024-12-22T14:50:56Z",
69+
"updated_at": "2024-12-22T14:51:00Z",
70+
"browser_download_url": "https://github.com/manami-project/manami/releases/download/3.12.18/manami.jar"
71+
}
72+
],
73+
"tarball_url": "https://api.github.com/repos/manami-project/manami/tarball/3.12.18",
74+
"zipball_url": "https://api.github.com/repos/manami-project/manami/zipball/3.12.18",
75+
"body": "## What's Changed\r\n* Update dependency org.jetbrains.kotlinx.kover to v0.9.0 by @renovate in https://github.com/manami-project/manami/pull/710\r\n* Update dependency org.apache.commons:commons-text to v1.13.0 by @renovate in https://github.com/manami-project/manami/pull/711\r\n* Update dependency io.github.manamiproject:modb-core to v16.5.0 by @renovate in https://github.com/manami-project/manami/pull/712\r\n* Update dependency io.github.manamiproject:modb-serde to v5.2.14 by @renovate in https://github.com/manami-project/manami/pull/721\r\n* Update dependency io.github.manamiproject:modb-anidb to v6.0.9 by @renovate in https://github.com/manami-project/manami/pull/713\r\n* Update dependency io.github.manamiproject:modb-anilist to v7.0.9 by @renovate in https://github.com/manami-project/manami/pull/714\r\n* Update dependency io.github.manamiproject:modb-notify to v6.0.8 by @renovate in https://github.com/manami-project/manami/pull/720\r\n* Update dependency io.github.manamiproject:modb-myanimelist to v7.0.9 by @renovate in https://github.com/manami-project/manami/pull/719\r\n* Update dependency io.github.manamiproject:modb-livechart to v4.0.9 by @renovate in https://github.com/manami-project/manami/pull/718\r\n* Update dependency io.github.manamiproject:modb-anime-planet to v6.1.4 by @renovate in https://github.com/manami-project/manami/pull/715\r\n* Update dependency io.github.manamiproject:modb-anisearch to v4.0.9 by @renovate in https://github.com/manami-project/manami/pull/716\r\n* Update dependency io.github.manamiproject:modb-kitsu to v6.0.9 by @renovate in https://github.com/manami-project/manami/pull/717\r\n* Update dependency io.github.manamiproject:modb-test to v1.6.29 by @renovate in https://github.com/manami-project/manami/pull/722\r\n* Update codecov/codecov-action action to v5.1.2 by @renovate in https://github.com/manami-project/manami/pull/723\r\n* Update dependency ch.qos.logback:logback-classic to v1.5.13 by @renovate in https://github.com/manami-project/manami/pull/724\r\n* Update dependency ch.qos.logback:logback-classic to v1.5.14 by @renovate in https://github.com/manami-project/manami/pull/725\r\n* Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm to v1.10.0 by @renovate in https://github.com/manami-project/manami/pull/726\r\n* Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm to v1.10.1 by @renovate in https://github.com/manami-project/manami/pull/727\r\n* Update dependency gradle to v8.12 by @renovate in https://github.com/manami-project/manami/pull/728\r\n* Update dependency io.github.manamiproject:modb-test to v1.6.30 by @renovate in https://github.com/manami-project/manami/pull/729\r\n* Update dependency io.github.manamiproject:modb-core to v16.5.1 by @renovate in https://github.com/manami-project/manami/pull/730\r\n* Update dependency ch.qos.logback:logback-classic to v1.5.15 by @renovate in https://github.com/manami-project/manami/pull/731\r\n* Update dependency io.github.manamiproject:modb-anidb to v6.0.10 by @renovate in https://github.com/manami-project/manami/pull/732\r\n* Update dependency io.github.manamiproject:modb-anilist to v7.0.10 by @renovate in https://github.com/manami-project/manami/pull/733\r\n* Update dependency io.github.manamiproject:modb-anime-planet to v6.1.5 by @renovate in https://github.com/manami-project/manami/pull/734\r\n* Update dependency io.github.manamiproject:modb-anisearch to v4.0.10 by @renovate in https://github.com/manami-project/manami/pull/735\r\n* Update dependency io.github.manamiproject:modb-kitsu to v6.0.10 by @renovate in https://github.com/manami-project/manami/pull/736\r\n* Update dependency io.github.manamiproject:modb-livechart to v4.0.10 by @renovate in https://github.com/manami-project/manami/pull/737\r\n* Update dependency io.github.manamiproject:modb-serde to v5.2.15 - autoclosed by @renovate in https://github.com/manami-project/manami/pull/740\r\n* Update dependency io.github.manamiproject:modb-notify to v6.0.9 by @renovate in https://github.com/manami-project/manami/pull/739\r\n* Update dependency io.github.manamiproject:modb-myanimelist to v7.0.10 by @renovate in https://github.com/manami-project/manami/pull/738\r\n\r\n\r\n**Full Changelog**: https://github.com/manami-project/manami/compare/3.12.17...3.12.18",
76+
"mentions_count": 1
77+
}

0 commit comments

Comments
 (0)