В процессе разработки React Native приложений может быть неудобно каждый раз вручную выполнять процесс сборки. Однако, с использованием инструментов GitHub Actions и отправки полученной сборки в Telegram, можно значительно упростить этот процесс. В данной статье мы рассмотрим, как автоматизировать сборку React Native приложения на этапе разработки и передавать полученные сборки тестировщикам через Telegram, обеспечивая более удобное и эффективное развертывание мобильных приложений.

1. Создать внутри репозитория Secrets

Открываем репозиторий своего проекта в Github,переходим по следующему пути Settings → Secrets and variables → Actions → New repository secret. И создаем следуюущие записи

KEYSTORE_B64

# Генерирует из файла хранилища ключей (*.keystore, *.jks)
# текстовый документ (*.txt), который содержит base64
# представление хранилища ключей, именно его и надо записать
# в secret
openssl base64 < playstore.keystore | tr -d '\n' | tee playstore_base64_encoded.txt

KEYSTORE_PASSWORD - Пароль для хранилища ключей

KEY_ALIAS - Псевдоним ключа подписи

KEY_PASSWORD - Пароль ключа подписи

TELEGRAM_CHAT_ID - ID чата с ботом телеграм

TELEGRAM_TOKEN - Токен бота телеграм для отправки файлов и сообщений

ENV_FILE (optional) - Если в проекте используется библиотека react-native-dotenv либо подобная, то необходимо добавить в этот secret содержимое файла .env

2. Создать новый action

Создаем yml файл описывающий наш action /.github/workflows/build_apk.yml со следующим содержимым

on:
    push:
        branches:
            - main
    pull_request:
        branches:
            - main

jobs:
    apk:
        name: Generate APK
        runs-on: ubuntu-latest
        steps:
            - name: Checkout
              uses: actions/checkout@v3
            - name: Setup JDK
              uses: actions/setup-java@v3
              with:
                  distribution: temurin
                  # Нужно выбрать нужную версию java
                  java-version: '17'
            - name: Setup Node
              uses: actions/setup-node@v4
              with:
                  # Нужно выбрать нужную версию Node
                  node-version: '19'
            - name: NPM install
              run: npm i
	    # Если используется .env
            - name: Create .env
              run: echo "${{secrets.ENV_FILE}}" > .env
            - name: Create keystore file
              run: echo "${{secrets.KEYSTORE_B64}}" | base64 -d > android/app/signing-key.keystore
            - name: Set execution flag for gradlew
              run: chmod +x android/gradlew
            - name: Build APK
              env:
                  KEY_ALIAS: ${{secrets.KEY_ALIAS}}
                  KEY_PASSWORD: ${{secrets.KEY_PASSWORD}}
                  KEYSTORE_PASSWORD: ${{secrets.KEYSTORE_PASSWORD}}
              run: cd android && ./gradlew assembleRelease && cd ../
            - name: Upload APK
              uses: actions/upload-artifact@v3
              with:
                  name: apk
                  path: android/app/build/outputs/apk/release/app-release.apk
            - name: Send to telegram
              run: curl -s -X POST https://api.telegram.org/bot${{secrets.TELEGRAM_TOKEN}}/sendDocument -F chat_id=${{secrets.TELEGRAM_CHAT_ID}} -F document=@android/app/build/outputs/apk/release/app-release.apk -F caption="${{github.event.head_commit.message}}"
            - name: Delete keystore file
              run: rm android/app/signing-key.keystore
	    # Если используется .env
            - name: Delete .env
              run: rm .env

3. Изменить build.gradle

Изменить файл /app/build.gradle по примеру ниже

android {
		// ...
		defaultConfig {
			// ...
		}
		signingConfigs {
				release {
						storeFile file("signing-key.keystore")
						storePassword System.getenv("KEYSTORE_PASSWORD")
						keyAlias System.getenv("KEY_ALIAS")
						keyPassword System.getenv("KEY_PASSWORD")
				}
		}
		buildTypes {
				release {
						// ...
						signingConfig signingConfigs.release
				}
		}
}

Поделиться:

Facebook Twitter Vkontakte