ci: release.yml — оставляем только публикацию KMP-библиотек в Nexus
ci / JVM build + tests (push) Failing after 1m24s
release / Publish KMP libraries → caffeine Nexus (release) Successful in 1m43s

Удалён job build-fatjars + upload-artifact + Attach-to-release-API.
Сборка и прикрепление fatjar-ов делается локально (./gradlew
:<module>:shadowJar) и через Gitea UI/API руками. CICD занимается
только тем, что умеет: публикует библиотеки в Nexus caffeine.
This commit is contained in:
SubochevAV
2026-09-16 23:41:45 +03:00
parent 9196102f68
commit 7a47131f6f
+14 -106
View File
@@ -1,14 +1,16 @@
# Триггерится при публикации релиза в Gitea. Публикует все KMP-библиотеки
# (jvm + native таргеты) в домашний Nexus-репозиторий "caffeine", а также
# собирает fatjar'ы запускаемых модулей и прикрепляет их к релизу как
# бинарные ассеты.
# (jvm + native таргеты) в домашний Nexus-репозиторий "caffeine".
#
# Fatjar-ы запускаемых модулей (:standalone, :agentik-cli, :agentik-tui)
# НЕ собираются и НЕ крепятся к релизу здесь. Сборка артефактов
# выполняется локально из исходников (или руками через `./gradlew
# :<module>:shadowJar`) и загружается в релиз через Gitea UI / API
# отдельно от этого workflow.
#
# Требуемые Gitea Action Variables:
# BINOM_REPO_URL — например http://192.168.76.117/repository/caffeine/
# Требуемые Gitea Action Secrets:
# BINOM_REPO_USER, BINOM_REPO_PASSWORD — креды Nexus с правами на публикацию.
# RELEASE_TOKEN — Gitea API-токен с правами на запись в релиз (используется
# forgejo-release action для прикрепления fatjar'ов к release).
name: release
on:
@@ -56,112 +58,18 @@ jobs:
# GITHUB_-префиксом: GITHUB_REF_NAME = "v0.1.0" для tag-trigger'а.
# Внутри bash подставляем через $GITHUB_REF_NAME (а не
# ${GITEA_REF_NAME} — Forgejo этого не подставляет).
#
# Версия = имя тега (с trim'ом опционального префикса 'v'), чтобы
# тег "1" публиковался как pw.binom.agentik:<module>:1. CICD не
# хардкодит версию — берёт её из тега каждый раз.
TAG="$GITHUB_REF_NAME"
echo "Publishing version: ${TAG}"
VERSION="${TAG#v}"
echo "Publishing version: ${VERSION}"
./gradlew \
"-Pversion=${TAG}" \
"-Pversion=${VERSION}" \
"-Pbinom.repo.url=${BINOM_REPO_URL}" \
"-Pbinom.repo.user=${BINOM_REPO_USER}" \
"-Pbinom.repo.password=${BINOM_REPO_PASSWORD}" \
publish \
-Dorg.gradle.jvmargs=-Xmx4096M \
--no-daemon --no-watch-fs --stacktrace
build-fatjars:
name: Build runnable fatjars
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'adopt'
- name: Gradle cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle
key: ${{ runner.os }}-gradle-agentik-${{ hashFiles('**/*.gradle.kts', '**/gradle/libs.versions.toml', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-agentik-
- name: Build :standalone shadowJar
shell: bash
run: |
./gradlew :standalone:shadowJar \
-Pdisable-javadoc=true \
-Dorg.gradle.jvmargs=-Xmx4096M \
--no-daemon --no-watch-fs --stacktrace
- name: Build :agentik-cli shadowJar
shell: bash
run: |
./gradlew :agentik-cli:shadowJar \
-Pdisable-javadoc=true \
-Dorg.gradle.jvmargs=-Xmx4096M \
--no-daemon --no-watch-fs --stacktrace
- name: Build :agentik-tui shadowJar
shell: bash
run: |
./gradlew :agentik-tui:shadowJar \
-Pdisable-javadoc=true \
-Dorg.gradle.jvmargs=-Xmx4096M \
--no-daemon --no-watch-fs --stacktrace
- name: Upload fatjars as release assets
uses: actions/upload-artifact@v3
with:
name: agentik-fatjars
path: |
standalone/build/libs/standalone-*-all.jar
agentik-cli/build/libs/agentik-cli-*-all.jar
agentik-tui/build/libs/agentik-tui-*-all.jar
if-no-files-found: error
retention-days: 90
# Ассеты прикрепляются через прямой Gitea API-вызов: forgejo-release
# action всегда пытается tea release create с теми же tag+title,
# что уже опубликованный релиз, и валится с
# "There already is a release for this tag".
#
# Тонкость: redirect-тело от PUT на /releases/{id}/assets для
# бинарной загрузки обычно пустое. Используем POST (по текущему
# контракту Gitea API для ассетов).
- name: Attach fatjars to release via API
if: startsWith(github.ref, 'refs/tags/')
shell: bash
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
run: |
TAG="$GITHUB_REF_NAME"
# strip leading "v" if present (artifact filename doesn't include it)
VERSION="${TAG#v}"
REL_ID=$(curl -sS -H "Authorization: token $RELEASE_TOKEN" \
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/tags/$TAG" \
| jq -r .id)
echo "release id: $REL_ID tag: $TAG version: $VERSION"
for f in \
"standalone/build/libs/standalone-${VERSION}-all.jar" \
"agentik-cli/build/libs/agentik-cli-${VERSION}-all.jar" \
"agentik-tui/build/libs/agentik-tui-${VERSION}-all.jar"
do
if [ -f "$f" ]; then
fname=$(basename "$f")
curl -sS -X POST \
-H "Authorization: token $RELEASE_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary "@$f" \
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$REL_ID/assets?name=$fname" \
-w " upload: $fname -> HTTP %{http_code}\n"
else
echo " skip missing: $f"
fi
done