Skip to content
This repository was archived by the owner on Nov 13, 2025. It is now read-only.

Commit 7a24296

Browse files
Dev (#22)
- Rename Kalibak to Kraken - Add `Imprint` endpoints and tests - Start working on dokka documentation
1 parent 708f444 commit 7a24296

37 files changed

+442
-128
lines changed

.github/workflows/docs.yaml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Deploy dokka to Github Pages
2+
3+
on:
4+
push:
5+
tags:
6+
- '[0-9]+.[0-9]+.[0-9]+'
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: 'pages'
16+
cancel-in-progress: false
17+
18+
jobs:
19+
deploy:
20+
environment:
21+
name: github-pages
22+
url: ${{ steps.deployment.outputs.page_url }}
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v4
26+
27+
- uses: actions/setup-java@v4
28+
with:
29+
distribution: 'temurin'
30+
java-version: '17'
31+
- uses: actions/cache@v4
32+
with:
33+
path: |
34+
~/.gradle/caches
35+
~/.gradle/wrapper
36+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
37+
restore-keys: |
38+
${{ runner.os }}-gradle-
39+
- name: Generate Dokka documentation
40+
run: ./gradlew dokkaHtml
41+
42+
- uses: actions/configure-pages@v5
43+
- uses: actions/upload-pages-artifact@v3
44+
with:
45+
path: build/dokka/html
46+
- uses: actions/deploy-pages@v4
47+
id: deployment

README.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Kalibak
1+
# Kraken
22

33
![Java Version](https://img.shields.io/badge/Temurin-17-green?style=flat-square&logo=eclipse-adoptium)
44
![Kotlin Version](https://img.shields.io/badge/Kotlin-2.1.0-green?style=flat-square&logo=kotlin)
@@ -7,43 +7,43 @@
77
[![Gradle](https://img.shields.io/badge/Gradle-8.11.1-informational?style=flat-square&logo=gradle)](https://github.com/gradle/gradle)
88
[![Ktlint](https://img.shields.io/badge/Ktlint-1.5.0-informational?style=flat-square)](https://github.com/pinterest/ktlint)
99

10-
[![Github - Version](https://img.shields.io/github/v/tag/Buried-In-Code/Kalibak?logo=Github&label=Version&style=flat-square)](https://github.com/Buried-In-Code/Kalibak/tags)
11-
[![Github - License](https://img.shields.io/github/license/Buried-In-Code/Kalibak?logo=Github&label=License&style=flat-square)](https://opensource.org/licenses/MIT)
12-
[![Github - Contributors](https://img.shields.io/github/contributors/Buried-In-Code/Kalibak?logo=Github&label=Contributors&style=flat-square)](https://github.com/Buried-In-Code/Kalibak/graphs/contributors)
10+
[![Github - Version](https://img.shields.io/github/v/tag/Buried-In-Code/Kraken?logo=Github&label=Version&style=flat-square)](https://github.com/Buried-In-Code/Kraken/tags)
11+
[![Github - License](https://img.shields.io/github/license/Buried-In-Code/Kraken?logo=Github&label=License&style=flat-square)](https://opensource.org/licenses/MIT)
12+
[![Github - Contributors](https://img.shields.io/github/contributors/Buried-In-Code/Kraken?logo=Github&label=Contributors&style=flat-square)](https://github.com/Buried-In-Code/Kraken/graphs/contributors)
1313

14-
[![Github Action - Testing](https://img.shields.io/github/actions/workflow/status/Buried-In-Code/Kalibak/testing.yaml?branch=main&logo=githubactions&label=Testing&style=flat-square)](https://github.com/Buried-In-Code/Kalibak/actions/workflows/testing.yaml)
14+
[![Github Action - Testing](https://img.shields.io/github/actions/workflow/status/Buried-In-Code/Kraken/testing.yaml?branch=main&logo=githubactions&label=Testing&style=flat-square)](https://github.com/Buried-In-Code/Kraken/actions/workflows/testing.yaml)
1515

1616
A Java/Kotlin wrapper for the [Metron](https://metron.cloud) API.
1717

1818
## Getting started
1919

20-
To get started with Kalibak, add the [JitPack](https://jitpack.io) repository to your `build.gradle.kts`.
20+
To get started with Kraken, add the [JitPack](https://jitpack.io) repository to your `build.gradle.kts`.
2121

2222
```kts
2323
repositories {
2424
maven("https://jitpack.io")
2525
}
2626
```
2727

28-
Then, add Kalibak as a dependency.
28+
Then, add Kraken as a dependency.
2929

3030
```kts
3131
dependencies {
32-
implementation("com.github.Buried-In-Code:Kalibak:0.2.3")
32+
implementation("com.github.Buried-In-Code:Kraken:0.2.3")
3333
}
3434
```
3535

3636
### Usage
3737

3838
```kt
39-
import github.buriedincode.kalibak.Metron
40-
import github.buriedincode.kalibak.SQLiteCache
41-
import github.buriedincode.kalibak.AuthenticationException
42-
import github.buriedincode.kalibak.ServiceException
39+
import github.buriedincode.kraken.Metron
40+
import github.buriedincode.kraken.SQLiteCache
41+
import github.buriedincode.kraken.AuthenticationException
42+
import github.buriedincode.kraken.ServiceException
4343

4444
fun main() {
4545
try {
46-
val session = Metron("Username", "Password", cache=SQLiteCache())
46+
val session = Metron(username="Username", password="Password", cache=SQLiteCache())
4747

4848
// Get all Marvel comics for the week of 2021-06-07
4949
val thisWeek = session.listIssues(params = mapOf(
@@ -69,8 +69,6 @@ fun main() {
6969
}
7070
```
7171

72-
For a complete list of available query parameters, refer to [Metron's API docs](https://metron.cloud/docs/).
73-
7472
## Socials
7573

7674
[![Social - Fosstodon](https://img.shields.io/badge/%40BuriedInCode-teal?label=Fosstodon&logo=mastodon&style=for-the-badge)](https://fosstodon.org/@BuriedInCode)\

build.gradle.kts

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
2+
import java.net.HttpURLConnection
3+
import java.net.URL
4+
import java.nio.file.Files
5+
import java.nio.file.StandardOpenOption
26

37
plugins {
48
`java-library`
59
alias(libs.plugins.kotlin.jvm)
610
alias(libs.plugins.kotlinx.serialization)
11+
alias(libs.plugins.dokka)
712
alias(libs.plugins.ktlint)
813
alias(libs.plugins.versions)
914
`maven-publish`
@@ -76,8 +81,84 @@ tasks.withType<DependencyUpdatesTask> {
7681

7782
publishing {
7883
publications {
79-
create<MavenPublication>("kalibak") {
84+
create<MavenPublication>("kraken") {
8085
from(components["java"])
8186
}
8287
}
8388
}
89+
90+
tasks.register("processReadme") {
91+
group = "documentation"
92+
description = "Processes the README.md file to inline SVG badges."
93+
94+
doLast {
95+
val linkedBadgePattern = """\[\!\[(.*?)\]\((.*?)\)\]\((.*?)\)""".toRegex() // [![alt](url)](link)
96+
val badgePattern = """\!\[(.*?)\]\((.*?)\)""".toRegex() // ![alt](url)
97+
98+
val inputPath = project.rootDir.toPath().resolve("README.md")
99+
val outputPath = project.buildDir.toPath().resolve("Processed-README.md")
100+
101+
if (!Files.exists(inputPath)) {
102+
throw IllegalStateException("${inputPath.toAbsolutePath()} not found.")
103+
}
104+
105+
var content = Files.readAllLines(inputPath).joinToString("\n")
106+
content = content.replaceFirst("# Kraken", "# Module Kraken")
107+
108+
fun fetchSvg(url: String): String? {
109+
return try {
110+
val connection = URL(url).openConnection() as HttpURLConnection
111+
connection.requestMethod = "GET"
112+
connection.connect()
113+
114+
if (connection.responseCode == 200 && connection.contentType.contains("image/svg+xml")) {
115+
connection.inputStream.bufferedReader().use { it.readText() }
116+
} else {
117+
println("Warning: $url is not an SVG badge")
118+
null
119+
}
120+
} catch (e: Exception) {
121+
println("Error fetching $url: ${e.message}")
122+
null
123+
}
124+
}
125+
126+
fun processContent(pattern: Regex, replaceFunction: (MatchResult) -> String): String {
127+
return pattern.replace(content) { match ->
128+
replaceFunction(match)
129+
}
130+
}
131+
132+
content = processContent(linkedBadgePattern) { match ->
133+
val altText = match.groupValues[1]
134+
val badgeUrl = match.groupValues[2]
135+
val linkUrl = match.groupValues[3]
136+
val svgContent = fetchSvg(badgeUrl)
137+
if (svgContent != null) {
138+
"""<a href="$linkUrl" target="_blank">$svgContent</a>"""
139+
} else {
140+
"""<a href="$linkUrl" target="_blank"><img alt="$altText" src="$badgeUrl" /></a>"""
141+
}
142+
}
143+
144+
content = processContent(badgePattern) { match ->
145+
val altText = match.groupValues[1]
146+
val badgeUrl = match.groupValues[2]
147+
val svgContent = fetchSvg(badgeUrl)
148+
svgContent ?: """<img alt="$altText" src="$badgeUrl" />"""
149+
}
150+
151+
Files.createDirectories(outputPath.parent)
152+
Files.writeString(outputPath, content, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)
153+
println("Processing complete. Output written to ${outputPath.toAbsolutePath()}")
154+
}
155+
}
156+
157+
tasks.dokkaHtml {
158+
dependsOn("processReadme")
159+
dokkaSourceSets {
160+
configureEach {
161+
includes.from(project.buildDir.toPath().resolve("Processed-README.md"))
162+
}
163+
}
164+
}

cache.sqlite

0 Bytes
Binary file not shown.

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ junit = "5.11.4"
33
kotlin = "2.1.0"
44

55
[plugins]
6+
dokka = { id = "org.jetbrains.dokka", version = "2.0.0" }
67
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
78
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
89
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "12.1.2" }

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

settings.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@ plugins {
22
id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0"
33
}
44

5-
rootProject.name = "Kalibak"
6-
include("lib")
5+
rootProject.name = "Kraken"

src/main/kotlin/github/buriedincode/kalibak/Exceptions.kt renamed to src/main/kotlin/github/buriedincode/kraken/Exceptions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package github.buriedincode.kalibak
1+
package github.buriedincode.kraken
22

33
open class ServiceException(message: String? = null, cause: Throwable? = null) : Exception(message, cause)
44

src/main/kotlin/github/buriedincode/kalibak/Metron.kt renamed to src/main/kotlin/github/buriedincode/kraken/Metron.kt

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
package github.buriedincode.kalibak
2-
3-
import github.buriedincode.kalibak.log
4-
import github.buriedincode.kalibak.schemas.Arc
5-
import github.buriedincode.kalibak.schemas.BaseResource
6-
import github.buriedincode.kalibak.schemas.BasicIssue
7-
import github.buriedincode.kalibak.schemas.BasicSeries
8-
import github.buriedincode.kalibak.schemas.Character
9-
import github.buriedincode.kalibak.schemas.Creator
10-
import github.buriedincode.kalibak.schemas.GenericItem
11-
import github.buriedincode.kalibak.schemas.Issue
12-
import github.buriedincode.kalibak.schemas.ListResponse
13-
import github.buriedincode.kalibak.schemas.Publisher
14-
import github.buriedincode.kalibak.schemas.Series
15-
import github.buriedincode.kalibak.schemas.Team
16-
import github.buriedincode.kalibak.schemas.Universe
1+
package github.buriedincode.kraken
2+
3+
import github.buriedincode.kraken.schemas.Arc
4+
import github.buriedincode.kraken.schemas.BaseResource
5+
import github.buriedincode.kraken.schemas.BasicIssue
6+
import github.buriedincode.kraken.schemas.BasicSeries
7+
import github.buriedincode.kraken.schemas.Character
8+
import github.buriedincode.kraken.schemas.Creator
9+
import github.buriedincode.kraken.schemas.GenericItem
10+
import github.buriedincode.kraken.schemas.Imprint
11+
import github.buriedincode.kraken.schemas.Issue
12+
import github.buriedincode.kraken.schemas.ListResponse
13+
import github.buriedincode.kraken.schemas.Publisher
14+
import github.buriedincode.kraken.schemas.Series
15+
import github.buriedincode.kraken.schemas.Team
16+
import github.buriedincode.kraken.schemas.Universe
1717
import io.github.oshai.kotlinlogging.KotlinLogging
1818
import io.github.oshai.kotlinlogging.Level
1919
import kotlinx.serialization.ExperimentalSerializationApi
@@ -74,7 +74,7 @@ class Metron(
7474
.newBuilder()
7575
.uri(uri)
7676
.setHeader("Accept", "application/json")
77-
.setHeader("User-Agent", "Kalibak/$VERSION (${System.getProperty("os.name")}/${System.getProperty("os.version")}; Kotlin/${KotlinVersion.CURRENT})")
77+
.setHeader("User-Agent", "Kraken/$VERSION (${System.getProperty("os.name")}/${System.getProperty("os.version")}; Kotlin/${KotlinVersion.CURRENT})")
7878
.setHeader("Authorization", this.authorization)
7979
.GET()
8080
.build()
@@ -180,6 +180,14 @@ class Metron(
180180
@Throws(ServiceException::class, AuthenticationException::class, RateLimitException::class)
181181
fun getCreator(id: Long): Creator = this.fetchItem<Creator>(endpoint = "/creator/$id")
182182

183+
@Throws(ServiceException::class, AuthenticationException::class, RateLimitException::class)
184+
fun listImprints(params: Map<String, String> = emptyMap()): List<BaseResource> {
185+
return fetchList<BaseResource>(endpoint = "/imprint", params = params)
186+
}
187+
188+
@Throws(ServiceException::class, AuthenticationException::class, RateLimitException::class)
189+
fun getImprint(id: Long): Imprint = fetchItem<Imprint>(endpoint = "/imprint/$id")
190+
183191
@Throws(ServiceException::class, AuthenticationException::class, RateLimitException::class)
184192
fun listIssues(params: Map<String, String> = emptyMap()): List<BasicIssue> {
185193
return this.fetchList<BasicIssue>(endpoint = "/issue", params = params)

0 commit comments

Comments
 (0)