Skip to content

Commit ea9bcd5

Browse files
committed
init
0 parents  commit ea9bcd5

8 files changed

Lines changed: 28634 additions & 0 deletions

File tree

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
node_modules/
2+
*.apk
3+
*.aab
4+
test
5+
*.pem
6+
*.p8
7+
*.key
8+
.env

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# RuStore Publish Action
2+
3+
GitHub Action для загрузки APK/AAB в RuStore.
4+
5+
## Возможности
6+
7+
- Загрузка APK и AAB файлов
8+
- Автоматическое переиспользование существующего черновика
9+
- Скриншоты, описание и прочие материалы наследуются от предыдущего релиза
10+
- При ошибке загрузки черновик сохраняется для повторной попытки
11+
12+
## Получение API ключа
13+
14+
1. Откройте [RuStore Console](https://console.rustore.ru/)
15+
2. Перейдите на страницу вашего приложения
16+
3. В меню слева выберите **"API RuStore"**
17+
4. Нажмите **"Создать ключ"**
18+
5. Сохраните:
19+
- **Key ID** — отображается в консоли
20+
- **Приватный ключ** — скачается автоматически (уже в base64 формате)
21+
22+
## Использование
23+
24+
```yaml
25+
name: Deploy to RuStore
26+
27+
on:
28+
release:
29+
types: [published]
30+
31+
jobs:
32+
deploy:
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v4
36+
37+
- name: Upload to RuStore
38+
uses: your-username/rustore-action@v1
39+
with:
40+
key_id: ${{ secrets.RUSTORE_KEY_ID }}
41+
private_key: ${{ secrets.RUSTORE_PRIVATE_KEY }}
42+
application_id: 'com.example.myapp'
43+
file: 'app/build/outputs/apk/release/app-release.apk'
44+
whats_new: 'Исправления ошибок и улучшения'
45+
```
46+
47+
## Параметры
48+
49+
| Параметр | Обязательный | По умолчанию | Описание |
50+
|----------|--------------|--------------|----------|
51+
| `key_id` | Да | — | Key ID из RuStore Console |
52+
| `private_key` | Да | — | Приватный ключ (base64) |
53+
| `application_id` | Да | — | Package name приложения |
54+
| `file` | Да | — | Путь к APK или AAB файлу |
55+
| `whats_new` | Да | — | Описание изменений (1-5000 символов) |
56+
| `publish_type` | Нет | `MANUAL` | Тип публикации: `MANUAL`, `INSTANTLY`, `DELAYED` |
57+
| `mobile_services` | Нет | `Unknown` | Тип сервисов: `HMS` или `Unknown` (только для APK) |
58+
| `priority_update` | Нет | `0` | Приоритет обновления (0-10) |
59+
| `submit` | Нет | `true` | Отправить на модерацию после загрузки |
60+
61+
## Выходные параметры
62+
63+
| Параметр | Описание |
64+
|----------|----------|
65+
| `version_id` | ID созданной версии |
66+
| `status` | Статус: `submitted` или `draft` |
67+
68+
## Примеры
69+
70+
### Загрузка без отправки на модерацию
71+
72+
```yaml
73+
- uses: your-username/rustore-action@v1
74+
with:
75+
key_id: ${{ secrets.RUSTORE_KEY_ID }}
76+
private_key: ${{ secrets.RUSTORE_PRIVATE_KEY }}
77+
application_id: 'com.example.myapp'
78+
file: 'app-release.apk'
79+
whats_new: 'Новая версия'
80+
submit: 'false'
81+
```
82+
83+
### Загрузка AAB с мгновенной публикацией
84+
85+
```yaml
86+
- uses: your-username/rustore-action@v1
87+
with:
88+
key_id: ${{ secrets.RUSTORE_KEY_ID }}
89+
private_key: ${{ secrets.RUSTORE_PRIVATE_KEY }}
90+
application_id: 'com.example.myapp'
91+
file: 'app-release.aab'
92+
whats_new: 'Важное обновление безопасности'
93+
publish_type: 'INSTANTLY'
94+
priority_update: '5'
95+
```
96+
97+
### Использование выходных параметров
98+
99+
```yaml
100+
- name: Upload to RuStore
101+
id: rustore
102+
uses: your-username/rustore-action@v1
103+
with:
104+
key_id: ${{ secrets.RUSTORE_KEY_ID }}
105+
private_key: ${{ secrets.RUSTORE_PRIVATE_KEY }}
106+
application_id: 'com.example.myapp'
107+
file: 'app-release.apk'
108+
whats_new: 'Обновление'
109+
110+
- name: Print version ID
111+
run: echo "Version ID: ${{ steps.rustore.outputs.version_id }}"
112+
```
113+
114+
## Настройка секретов
115+
116+
1. Перейдите в репозиторий → **Settings** → **Secrets and variables** → **Actions**
117+
2. Добавьте секреты:
118+
- `RUSTORE_KEY_ID` — Key ID из консоли
119+
- `RUSTORE_PRIVATE_KEY` — содержимое файла приватного ключа
120+
121+
## Поведение при ошибках
122+
123+
- **Черновик уже существует** — используется существующий черновик
124+
- **Ошибка загрузки файла** — черновик сохраняется, ошибка выводится в лог
125+
- **versionCode меньше предыдущего** — ошибка RuStore, нужно увеличить versionCode в приложении
126+
127+
## Лицензия
128+
129+
MIT

action.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: 'RuStore Publish'
2+
description: 'Upload APK or AAB to RuStore'
3+
author: 'Your Name'
4+
5+
branding:
6+
icon: 'upload-cloud'
7+
color: 'blue'
8+
9+
inputs:
10+
key_id:
11+
description: 'RuStore API Key ID (company ID)'
12+
required: true
13+
private_key:
14+
description: 'RuStore private key in base64 PKCS#8 format'
15+
required: true
16+
application_id:
17+
description: 'Application package name (e.g., com.example.app)'
18+
required: true
19+
file:
20+
description: 'Path to APK or AAB file'
21+
required: true
22+
whats_new:
23+
description: 'Release notes (what is new in this version). Required by RuStore API (1-5000 chars)'
24+
required: true
25+
publish_type:
26+
description: 'Publish type: MANUAL, INSTANTLY, or DELAYED'
27+
required: false
28+
default: 'MANUAL'
29+
mobile_services:
30+
description: 'Mobile services type: HMS or Unknown (only for APK)'
31+
required: false
32+
default: 'Unknown'
33+
priority_update:
34+
description: 'Priority update level (0-10, 0 = no priority)'
35+
required: false
36+
default: '0'
37+
submit:
38+
description: 'Submit for review after upload (true/false)'
39+
required: false
40+
default: 'true'
41+
42+
outputs:
43+
version_id:
44+
description: 'Created version ID'
45+
status:
46+
description: 'Publication status (submitted/draft)'
47+
48+
runs:
49+
using: 'node20'
50+
main: 'dist/index.js'

0 commit comments

Comments
 (0)