Merge pull request #27 from ARTEMKOPIK/codegen-bot/comprehensive-impr… #33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |