Skip to content

Commit 351f727

Browse files
michalharakalclaude
andcommitted
fix(bom): publish skainet-bom at sk.ainet:skainet-bom
The umbrella BOM was being emitted as `sk.ainet.core:skainet-bom` because vanniktech's auto-coordinates feature picks up `GROUP=sk.ainet.core` from the root `gradle.properties`, clobbering the per-module `group = "sk.ainet"` override. Downstream BOMs (e.g. `sk.ainet.transformers:skainet-transformers-bom`) import this with `<groupId>sk.ainet</groupId>`, so they were unresolvable from a fresh `mavenCentral()`-only project. - Use vanniktech's explicit `mavenPublishing { coordinates(...) }` so the BOM lands at `sk.ainet:skainet-bom:0.22.2` regardless of the engine-wide GROUP. - Extend `validate-published-poms.sh` to assert the BOM exists at `~/.m2/repository/sk/ainet/skainet-bom/` so the regression cannot ship again silently. - Bump VERSION_NAME to 0.22.2; update README, CHANGELOG, and Antora docs samples (java-getting-started, java-model-training, io-readers, architecture) to the new version and BOM coordinates. Fixes #584 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 6586ad9 commit 351f727

9 files changed

Lines changed: 62 additions & 11 deletions

File tree

.github/scripts/validate-published-poms.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,26 @@
1515
set -euo pipefail
1616

1717
REPO_ROOT="${HOME}/.m2/repository/sk/ainet/core"
18+
BOM_ROOT="${HOME}/.m2/repository/sk/ainet/skainet-bom"
1819

1920
if [[ ! -d "${REPO_ROOT}" ]]; then
2021
echo "ERROR: no published artifacts found under ${REPO_ROOT}" >&2
2122
echo "Did ./gradlew publishToMavenLocal run successfully?" >&2
2223
exit 1
2324
fi
2425

26+
# The umbrella BOM must publish at sk.ainet:skainet-bom — downstream
27+
# BOMs (e.g. sk.ainet.transformers:skainet-transformers-bom) import it
28+
# with that group. Catching this here prevents the 0.22.1 regression
29+
# where the BOM landed at sk.ainet.core:skainet-bom and was effectively
30+
# unresolvable by consumers following the standard BOM pattern.
31+
if [[ ! -d "${BOM_ROOT}" ]]; then
32+
echo "ERROR: skainet-bom not published at sk.ainet:skainet-bom" >&2
33+
echo "Expected directory: ${BOM_ROOT}" >&2
34+
echo "Check skainet-bom/build.gradle.kts mavenPublishing { coordinates(...) }." >&2
35+
exit 1
36+
fi
37+
2538
mapfile -t POMS < <(find "${REPO_ROOT}" -type f -name '*.pom' | sort)
2639

2740
if [[ ${#POMS[@]} -eq 0 ]]; then

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
## [Unreleased]
44

5+
## [0.22.2] - 2026-05-02
6+
7+
### Fixed
8+
9+
- **`skainet-bom` published at the wrong Maven coordinates** — the umbrella BOM was being emitted as `sk.ainet.core:skainet-bom` because the engine-wide `GROUP=sk.ainet.core` from the root `gradle.properties` clobbered the per-module `group = "sk.ainet"` override picked up by `vanniktech.maven.publish`. Downstream BOMs (e.g. `sk.ainet.transformers:skainet-transformers-bom`) import this with `<groupId>sk.ainet</groupId>`, so they were unresolvable from a fresh `mavenCentral()`-only project. Fix uses vanniktech's explicit `mavenPublishing { coordinates("sk.ainet", "skainet-bom", VERSION_NAME) }` so the BOM publishes at `sk.ainet:skainet-bom:0.22.2`. `validate-published-poms.sh` extended to assert the BOM landed at the expected path so the regression cannot ship again. (Issue #584)
10+
511
## [0.22.1] - 2026-04-30
612

713
### Added

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,18 @@ Add the core dependencies (Gradle Kotlin DSL):
1919

2020
```kotlin
2121
dependencies {
22-
implementation("sk.ainet.core:SKaiNET-lang-core:0.22.1")
23-
implementation("sk.ainet.core:SKaiNET-backend-cpu:0.22.1")
22+
// Recommended: import the umbrella BOM and drop versions on the engine modules.
23+
implementation(platform("sk.ainet:skainet-bom:0.22.2"))
24+
25+
implementation("sk.ainet.core:skainet-lang-core")
26+
implementation("sk.ainet.core:skainet-backend-cpu")
2427
}
2528
```
2629

30+
> The BOM was first correctly published to Maven Central in 0.22.2 — earlier versions
31+
> shipped at the wrong coordinates and could not be imported. Pin versions directly if
32+
> you need an older release.
33+
2734
### Hello Neural Net
2835

2936
```kotlin
@@ -137,6 +144,10 @@ SKaiNET is a modular ecosystem. While this repository contains the core engine,
137144

138145
---
139146

147+
## What's New in 0.22.2
148+
149+
- **`sk.ainet:skainet-bom` now resolves from Maven Central.** The umbrella BOM was previously published at the wrong coordinates (`sk.ainet.core:skainet-bom`), so consumers following the standard `platform(...)` import pattern — and downstream BOMs like `sk.ainet.transformers:skainet-transformers-bom` that import it transitively — got 404s from Central. Hotfix; no API or behavior changes. (Issue #584)
150+
140151
## What's New in 0.22.0
141152

142153
- **Native (FFM) CPU kernel provider — M5 milestone closed.** New `skainet-backend-native-cpu` module bundles a hand-tuned C shared library (`-O3 -ffast-math` auto-vectorized into AVX2 / NEON FMA) reachable via FFM downcalls. **4.17×–5.87× faster than Panama Vector on Q4_K matmul** at LLM-typical 1024²–4096² shapes; **1.55×–1.77× faster on FP32 SGEMM** at 256³–1024³. Auto-registers via ServiceLoader; `KernelRegistry.bestAvailable()` routes through native when the lib loads, falls through cleanly to the priority-50 Panama provider otherwise.

docs/modules/ROOT/pages/how-to/io-readers.adoc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ Add the following dependencies to your `build.gradle.kts`:
2020
[source,kotlin]
2121
----
2222
dependencies {
23-
implementation("sk.ainet:skainet-io-gguf:0.19.0")
23+
implementation(platform("sk.ainet:skainet-bom:0.22.2"))
24+
25+
implementation("sk.ainet.core:skainet-io-gguf")
2426
implementation("org.jetbrains.kotlinx:kotlinx-io-core:0.8.2")
2527
}
2628
----
@@ -30,7 +32,9 @@ dependencies {
3032
[source,kotlin]
3133
----
3234
dependencies {
33-
implementation("sk.ainet:skainet-io-onnx:0.19.0")
35+
implementation(platform("sk.ainet:skainet-bom:0.22.2"))
36+
37+
implementation("sk.ainet.core:skainet-io-onnx")
3438
implementation("org.jetbrains.kotlinx:kotlinx-io-core:0.8.2")
3539
implementation("pro.streem.pbandk:pbandk-runtime:0.16.0")
3640
}

docs/modules/ROOT/pages/how-to/java-model-training.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ This guide covers building neural networks, defining loss functions and optimize
1616
<dependency>
1717
<groupId>sk.ainet</groupId>
1818
<artifactId>skainet-bom</artifactId>
19-
<version>0.19.0</version>
19+
<version>0.22.2</version>
2020
<type>pom</type>
2121
<scope>import</scope>
2222
</dependency>

docs/modules/ROOT/pages/reference/architecture.adoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,11 @@ see the same source file (`DefaultCpuOpsJvm.transpose`).
206206
`sk.ainet.core:<module>-<target>:<version>`. KMP variants land per
207207
target (`*-jvm`, `*-android`, `*-iosarm64`, `*-macosarm64`,
208208
`*-linuxx64`, `*-linuxarm64`, `*-js`, `*-wasm-js`, `*-wasm-wasi`).
209-
* *Single BOM* — `sk.ainet.core:skainet-bom` provides a
210-
`platform()` import for downstream Gradle.
209+
* *Single BOM* — `sk.ainet:skainet-bom` provides a
210+
`platform()` import for downstream Gradle. Note the group is
211+
`sk.ainet`, not `sk.ainet.core`, so downstream BOMs (e.g.
212+
`sk.ainet.transformers:skainet-transformers-bom`) can import it
213+
under the standard umbrella group.
211214
* *Releases* — tags `0.X.Y` on the release branch trigger
212215
`.github/workflows/publish.yml` → `./gradlew publish` on macOS-latest
213216
with JDK 25.

docs/modules/ROOT/pages/tutorials/java-getting-started.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ The `skainet-bom` manages all SKaiNET module versions so you never have to keep
2929
----
3030
<project>
3131
<properties>
32-
<skainet.version>0.19.0</skainet.version>
32+
<skainet.version>0.22.2</skainet.version>
3333
</properties>
3434
3535
<dependencyManagement>
@@ -127,7 +127,7 @@ repositories {
127127
128128
dependencies {
129129
// Import BOM for version alignment
130-
implementation(platform("sk.ainet:skainet-bom:0.19.0"))
130+
implementation(platform("sk.ainet:skainet-bom:0.22.2"))
131131
132132
// Core tensor library
133133
implementation("sk.ainet:skainet-lang-core-jvm")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
GROUP=sk.ainet.core
2-
VERSION_NAME=0.22.1
2+
VERSION_NAME=0.22.2
33
POM_DESCRIPTION=SKaiNET
44

55
POM_URL=https://github.com/SKaiNET-developers/skainet/

skainet-bom/build.gradle.kts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,22 @@ plugins {
33
alias(libs.plugins.vanniktech.mavenPublish)
44
}
55

6+
// Override the engine-wide `sk.ainet.core` group: downstream BOM
7+
// consumers (e.g. sk.ainet.transformers:skainet-transformers-bom)
8+
// import this with `<groupId>sk.ainet</groupId>`. vanniktech's
9+
// auto-coordinates feature otherwise picks up GROUP=sk.ainet.core
10+
// from the root gradle.properties and would publish the BOM at the
11+
// wrong coordinates.
12+
mavenPublishing {
13+
coordinates(
14+
groupId = "sk.ainet",
15+
artifactId = "skainet-bom",
16+
version = providers.gradleProperty("VERSION_NAME").getOrElse("unspecified"),
17+
)
18+
}
19+
620
group = "sk.ainet"
7-
version = rootProject.findProperty("VERSION_NAME") ?: "0.14.0"
21+
version = providers.gradleProperty("VERSION_NAME").getOrElse("unspecified")
822

923
javaPlatform {
1024
allowDependencies()

0 commit comments

Comments
 (0)