Skip to content

Update gradle-publish.yml #40

Update gradle-publish.yml

Update gradle-publish.yml #40

name: Build and Release with Semantic Version
on:
push:
branches:
- dev
- main
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
# ------------------------------------------------
# 1. Клонуємо репозиторій
# ------------------------------------------------
- name: Checkout
uses: actions/checkout@v3
# ------------------------------------------------
# 2. Встановлюємо Java (для Gradle)
# ------------------------------------------------
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
# ------------------------------------------------
# 3. Semantic Versioning (PaulHatch/semantic-version)
# ------------------------------------------------
- name: Determine Version
id: version
uses: PaulHatch/[email protected]
with:
tag_prefix: v
major_pattern: /BREAKING CHANGE|feat!/ # Патерн для основного збільшення версії
minor_pattern: /feat:/ # Патерн для незначного збільшення версії
default_version: '0.1.0'
search_commit_body: true
bump_version: true # Автоматичне збільшення версії
# ------------------------------------------------
# 4. Формуємо тег і назву JAR (залежно від гілки)
# ------------------------------------------------
- name: Prepare Tag Variables
id: prepare_tag
run: |
BRANCH_NAME="${GITHUB_REF_NAME}" # "dev" або "main"
RAW_VERSION="${{ steps.version.outputs.version }}" # Напр.: "1.2.3"
TAG_PREFIX="v" # Префікс для тегу, який визначили вище.
if [ "$BRANCH_NAME" = "dev" ]; then
# Пререліз для dev
NEW_TAG="${TAG_PREFIX}${RAW_VERSION}-dev"
IS_PRERELEASE="true"
JAR_NAME="BirthDay-${RAW_VERSION}-dev.jar"
RELEASE_NAME="Dev Release BirthDay ${RAW_VERSION}"
else
# Стабільна версія (main)
NEW_TAG="${TAG_PREFIX}${RAW_VERSION}"
IS_PRERELEASE="false"
JAR_NAME="BirthDay-${RAW_VERSION}.jar"
RELEASE_NAME="Release BirthDay ${RAW_VERSION}"
fi
echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT
echo "is_prerelease=$IS_PRERELEASE" >> $GITHUB_OUTPUT
echo "jar_name=$JAR_NAME" >> $GITHUB_OUTPUT
echo "release_name=$RELEASE_NAME" >> $GITHUB_OUTPUT
# ------------------------------------------------
# 5. Збираємо проєкт (Gradle)
# ------------------------------------------------
- name: Build with Gradle
run: ./gradlew shadowJar
# ------------------------------------------------
# 6. Перейменовуємо JAR
# ------------------------------------------------
- name: Rename JAR
run: |
FILE=$(find build/libs -name '*.jar' | head -n 1)
if [ -z "$FILE" ]; then
echo "No JAR file found!"
exit 1
fi
mv "$FILE" "build/libs/${{ steps.prepare_tag.outputs.jar_name }}"
echo "Renamed to ${{ steps.prepare_tag.outputs.jar_name }}"
# ------------------------------------------------
# 7. Створюємо і пушимо тег
# ------------------------------------------------
- name: Create and Push Tag
run: |
NEW_TAG="${{ steps.prepare_tag.outputs.new_tag }}"
echo "Creating and pushing tag: $NEW_TAG"
# Перевіряємо чи існує вже тег
git fetch --tags
if git rev-parse "$NEW_TAG" >/dev/null 2>&1; then
echo "Tag $NEW_TAG already exists, deleting..."
git tag -d "$NEW_TAG"
git push origin --delete "$NEW_TAG"
fi
git config user.name "github-actions"
git config user.email "[email protected]"
git tag "$NEW_TAG" -m "Auto-bumped to $NEW_TAG"
git push origin "$NEW_TAG"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ------------------------------------------------
# 8. Створюємо GitHub Release
# ------------------------------------------------
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: ${{ steps.prepare_tag.outputs.new_tag }}
release_name: ${{ steps.prepare_tag.outputs.release_name }}
body: |
**Автоматичний реліз** з гілки `${{ github.ref_name }}`
Версія: `${{ steps.version.outputs.version }}`
(за версією semantic-version): `${{ steps.version.outputs.version_type }}`
JAR: `${{ steps.prepare_tag.outputs.jar_name }}`
draft: false
prerelease: ${{ steps.prepare_tag.outputs.is_prerelease }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ------------------------------------------------
# 9. Завантажуємо JAR у реліз
# ------------------------------------------------
- name: Upload Plugin JAR
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: build/libs/${{ steps.prepare_tag.outputs.jar_name }}
asset_name: ${{ steps.prepare_tag.outputs.jar_name }}
asset_content_type: application/java-archive
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}