build script
This commit is contained in:
4
app.json
4
app.json
@@ -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
114
build.py
Normal 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()
|
||||||
Reference in New Issue
Block a user