Files
agentik/.gitea/workflows/release.yml
T
SubochevAV eed1ab9a17
ci / JVM build + tests (push) Failing after 1m20s
release / Publish KMP libraries → caffeine Nexus (release) Failing after 1m13s
release / Build runnable fatjars (release) Successful in 3m39s
ci: replace forgejo-release action with direct API call to attach assets
forgejo-release@v1 calls 'tea release create' which errors with
'There already is a release for this tag' when the release is
pre-created (which release.yml needs because the trigger is
'release.published').

Workaround: do the upload ourselves via POST /api/v1/repos/.../releases/{id}/assets
with binary body. This is what forgejo-release ends up doing internally
after it successfully creates the release.
2026-09-16 22:20:37 +03:00

168 lines
6.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Триггерится при публикации релиза в Gitea. Публикует все KMP-библиотеки
# (jvm + native таргеты) в домашний Nexus-репозиторий "caffeine", а также
# собирает fatjar'ы запускаемых модулей и прикрепляет их к релизу как
# бинарные ассеты.
#
# Требуемые 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:
release:
types: [published]
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
jobs:
publish-libraries:
name: Publish KMP libraries → caffeine Nexus
runs-on: ubuntu-latest
timeout-minutes: 120
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: Publish libraries (all KMP targets, all modules)
shell: bash
env:
BINOM_REPO_USER: ${{ secrets.BINOM_REPO_USER }}
BINOM_REPO_PASSWORD: ${{ secrets.BINOM_REPO_PASSWORD }}
BINOM_REPO_URL: ${{ vars.BINOM_REPO_URL }}
run: |
# Gitea Actions (Forgejo-based) экспонирует env-переменные под
# GITHUB_-префиксом: GITHUB_REF_NAME = "v0.1.0" для tag-trigger'а.
# Внутри bash подставляем через $GITHUB_REF_NAME (а не
# ${GITEA_REF_NAME} — Forgejo этого не подставляет).
TAG="$GITHUB_REF_NAME"
echo "Publishing version: ${TAG}"
./gradlew \
"-Pversion=${TAG}" \
"-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