build script

This commit is contained in:
2023-11-20 06:43:59 +03:00
parent 69ffe8753a
commit 098eba64a6
2 changed files with 116 additions and 2 deletions

View File

@@ -12,7 +12,7 @@
], ],
"name": "Assemblr", "name": "Assemblr",
"slug": "Assemblr", "slug": "Assemblr",
"version": "1.0.0", "version": "1.1.7",
"orientation": "portrait", "orientation": "portrait",
"icon": "./src/assets/icon.png", "icon": "./src/assets/icon.png",
"userInterfaceStyle": "light", "userInterfaceStyle": "light",
@@ -46,4 +46,4 @@
} }
} }
} }
} }

114
build.py Normal file
View File

@@ -0,0 +1,114 @@
import os
import subprocess
import sys
import requests
from pathlib import Path
import json
import time
APP_PATH = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else os.path.dirname(__file__)
class ApplicationApi:
def __init__(self, api_url: str, api_key: str, application_name: str):
self.api_url = api_url
self.api_key = api_key
self.application_name = application_name
def method(self, http_method: str, method: str, data=None, files=None) -> dict:
url = self.api_url + f'/{self.application_name}/{method}'
headers = {'Authorization': self.api_key}
return requests.request(http_method, url, headers=headers, data=data, files=files).json()
def get_current_version(self):
response = self.method('GET', 'version')
return response.get('latest_version')
def upload(self, version: str, file_path: str):
data = {'version': version}
files = {'file': file_path}
return self.method('POST', 'upload', data=data, files=files)
def find_latest_modified_file(path, file_extension='*.py'):
""" Находит файл с самой поздней датой изменения в указанной директории. """
app_path = Path(path)
files = app_path.glob(file_extension)
max_time_file = max(files, key=lambda file: file.stat().st_atime, default=None)
return max_time_file
def parse_version(version_str):
"""Преобразует строку версии в кортеж чисел."""
return tuple(map(int, version_str.split('.')))
def is_valid_version(new_version, current_version):
"""Проверяет, является ли новая версия больше текущей."""
return parse_version(new_version) > parse_version(current_version)
def prompt_new_version(current_version, app_name):
print(f"Current version of {app_name} is \"{current_version}\".")
print("Please specify the new version (greater than current) in the format: major.minor.patch (e.g., 1.2.3)")
while True:
new_version = input("New version: ")
if new_version and is_valid_version(new_version, current_version):
return new_version
else:
print("Invalid version, it must be greater than the current version. Please try again.")
def update_version_in_expo(version: str):
file_path = os.path.join(APP_PATH, 'app.json')
with open(file_path, 'r+') as config_file:
data = json.loads(config_file.read())
data['expo']['version'] = version
config_file.seek(0)
config_file.write(json.dumps(data, indent=2, ensure_ascii=False))
def main():
API_URL = 'http://192.168.1.101:5000/application'
API_KEY = 'AF9A20DD9264C134CDA0ADACED834368'
APPLICATION_NAME = 'assemblr'
BUILD_COMMAND = 'eas build -p android --profile preview --local'
application_api = ApplicationApi(api_url=API_URL, api_key=API_KEY, application_name=APPLICATION_NAME)
current_version = application_api.get_current_version()
new_version = prompt_new_version(current_version, APPLICATION_NAME)
update_version_in_expo(new_version)
print('Starting building...')
subprocess.run(BUILD_COMMAND, shell=True, text=True, capture_output=False)
print('Build ended successfully.')
apk_file = find_latest_modified_file(APP_PATH, '*.apk')
if not apk_file:
print(f'Failed to find the update APK file in the directory: {APP_PATH}')
return
# Получение времени последней модификации файла
last_modified_time = apk_file.stat().st_atime
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(last_modified_time))
print(f'The APK file "{apk_file.name}" was last modified on: {formatted_time}')
# Запрос подтверждения у пользователя
user_confirmation = input("Are you sure you want to upload this update? (yes/no): ")
if user_confirmation.lower() != 'yes':
print("Upload cancelled.")
return
upload_response = application_api.upload(new_version, str(apk_file))
error = upload_response.get('error')
if error:
print(f"Error occurred while trying to upload the update: {error}")
return
filename = upload_response.get('filename')
version = upload_response.get('version')
print(f"Update version '{version}' successfully uploaded. File name: '{filename}'.")
if __name__ == '__main__':
main()