Skip to content

Merge pull request #27 from ARTEMKOPIK/codegen-bot/comprehensive-impr… #33

Merge pull request #27 from ARTEMKOPIK/codegen-bot/comprehensive-impr…

Merge pull request #27 from ARTEMKOPIK/codegen-bot/comprehensive-impr… #33

Workflow file for this run

name: Auto Release
on:
push:
branches: [main]
paths-ignore:
- '*.md'
jobs:
# 1. Проверка кода
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Generate Gradle Wrapper
run: gradle wrapper
- name: Lint check
run: ./gradlew lint || true
- name: Build check
run: ./gradlew assembleDebug
# 2. Сборка и релиз
release:
needs: check
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Generate Gradle Wrapper
run: gradle wrapper
- name: Get current version and increment
id: version
run: |
CURRENT=$(grep 'versionName = ' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/')
echo "Current version: $CURRENT"
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
VERSION_CODE="${MAJOR}${MINOR}${PATCH}"
echo "New version: $NEW_VERSION"
echo "VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_OUTPUT
- name: Update version in build.gradle.kts
run: |
sed -i "s/versionName = \".*\"/versionName = \"${{ steps.version.outputs.VERSION }}\"/" app/build.gradle.kts
sed -i "s/versionCode = [0-9]*/versionCode = ${{ steps.version.outputs.VERSION_CODE }}/" app/build.gradle.kts
- name: Generate changelog from commits
id: changelog
run: |
# Получаем последний тег
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$LAST_TAG" ]; then
# Если тегов нет, берём последние 10 коммитов
COMMITS=$(git log -10 --pretty=format:"- %s" --no-merges)
else
# Коммиты с последнего тега
COMMITS=$(git log ${LAST_TAG}..HEAD --pretty=format:"- %s" --no-merges)
fi
# Категоризируем коммиты
FEATURES=$(echo "$COMMITS" | grep -iE "^- (feat|add|new)" || true)
FIXES=$(echo "$COMMITS" | grep -iE "^- (fix|bug|исправ)" || true)
OTHER=$(echo "$COMMITS" | grep -viE "^- (feat|add|new|fix|bug|исправ|chore|ci|docs)" || true)
CHANGELOG=""
if [ -n "$FEATURES" ]; then
CHANGELOG="${CHANGELOG}### ✨ Новое\n${FEATURES}\n\n"
fi
if [ -n "$FIXES" ]; then
CHANGELOG="${CHANGELOG}### 🐛 Исправления\n${FIXES}\n\n"
fi
if [ -n "$OTHER" ]; then
CHANGELOG="${CHANGELOG}### 📝 Другое\n${OTHER}\n\n"
fi
if [ -z "$CHANGELOG" ]; then
CHANGELOG="Обновление до версии ${{ steps.version.outputs.VERSION }}"
fi
echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
echo -e "$CHANGELOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Update CHANGELOG.md
run: |
DATE=$(date +%Y-%m-%d)
NEW_ENTRY="## [${{ steps.version.outputs.VERSION }}] - $DATE\n\n${{ steps.changelog.outputs.CHANGELOG }}"
# Вставляем после первой строки с "# Changelog"
sed -i "/^# Changelog/a\\
\\
$NEW_ENTRY" CHANGELOG.md || echo "$NEW_ENTRY" > CHANGELOG.md
- name: Build Release APK
env:
CRASH_BOT_TOKEN: ${{ secrets.CRASH_BOT_TOKEN }}
CRASH_CHAT_ID: ${{ secrets.CRASH_CHAT_ID }}
run: ./gradlew assembleRelease
- name: Sign APK
uses: r0adkll/sign-android-release@v1
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.KEY_ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
BUILD_TOOLS_VERSION: "34.0.0"
- name: Rename APK
run: |
mv ${{ steps.sign_app.outputs.signedReleaseFile }} app/build/outputs/apk/release/AutoClicker-${{ steps.version.outputs.VERSION }}.apk
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.VERSION }}
name: "AutoClicker v${{ steps.version.outputs.VERSION }}"
body: ${{ steps.changelog.outputs.CHANGELOG }}
files: app/build/outputs/apk/release/AutoClicker-${{ steps.version.outputs.VERSION }}.apk
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit version and changelog update
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add app/build.gradle.kts CHANGELOG.md
git diff --staged --quiet || git commit -m "chore: release v${{ steps.version.outputs.VERSION }} [skip ci]"
git push
- name: Send Telegram notification
if: success()
run: |
if [ -n "${{ secrets.CRASH_BOT_TOKEN }}" ] && [ -n "${{ secrets.CRASH_CHAT_ID }}" ]; then
MESSAGE="🚀 *AutoClicker v${{ steps.version.outputs.VERSION }}*%0A%0A✅ Релиз опубликован!%0A%0A📥 [Скачать APK](https://github.com/ARTEMKOPIK/AutoClicker/releases/download/v${{ steps.version.outputs.VERSION }}/AutoClicker-${{ steps.version.outputs.VERSION }}.apk)"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.CRASH_BOT_TOKEN }}/sendMessage" \
-d "chat_id=${{ secrets.CRASH_CHAT_ID }}" \
-d "text=$MESSAGE" \
-d "parse_mode=Markdown" \
-d "disable_web_page_preview=true"
fi
- name: Send failure notification
if: failure()
run: |
if [ -n "${{ secrets.CRASH_BOT_TOKEN }}" ] && [ -n "${{ secrets.CRASH_CHAT_ID }}" ]; then
MESSAGE="❌ *AutoClicker Build Failed*%0A%0AСборка версии не удалась.%0A%0A🔗 [Посмотреть логи](https://github.com/ARTEMKOPIK/AutoClicker/actions)"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.CRASH_BOT_TOKEN }}/sendMessage" \
-d "chat_id=${{ secrets.CRASH_CHAT_ID }}" \
-d "text=$MESSAGE" \
-d "parse_mode=Markdown"
fi