# Триггерится при публикации релиза в 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