1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/env python3
- import configparser
- import os
- import ydb
- dir = os.path.dirname(__file__)
- config = configparser.ConfigParser()
- config_file_path = f"{dir}/../config/ydb_qa_db.ini"
- config.read(config_file_path)
- build_preset = os.environ.get("build_preset")
- branch = os.environ.get("branch_to_compare")
- DATABASE_ENDPOINT = config["QA_DB"]["DATABASE_ENDPOINT"]
- DATABASE_PATH = config["QA_DB"]["DATABASE_PATH"]
- def get_build_size(time_of_current_commit):
- if "CI_YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS" not in os.environ:
- print(
- "Error: Env variable CI_YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS is missing, skipping"
- )
- return 0
- else:
- # Do not set up 'real' variable from gh workflows because it interfere with ydb tests
- # So, set up it locally
- os.environ["YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS"] = os.environ[
- "CI_YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS"
- ]
- sql = f"""
- --!syntax_v1
- select git_commit_time,github_sha,size_bytes,size_stripped_bytes,build_preset from binary_size
- where
- github_workflow like "Postcommit%" and
- github_ref_name="{branch}" and
- build_preset="{build_preset}" and
- git_commit_time <= DateTime::FromSeconds({time_of_current_commit})
- order by git_commit_time desc
- limit 1;
- """
- with ydb.Driver(
- endpoint=DATABASE_ENDPOINT,
- database=DATABASE_PATH,
- credentials=ydb.credentials_from_env_variables(),
- ) as driver:
- driver.wait(timeout=10, fail_fast=True)
- session = ydb.retry_operation_sync(
- lambda: driver.table_client.session().create()
- )
- with session.transaction() as transaction:
- result = transaction.execute(sql, commit_tx=True)
- if result[0].rows:
- for row in result[0].rows:
- main_data = {}
- for field in row:
- main_data[field] = (
- row[field]
- if type(row[field]) != bytes
- else row[field].decode("utf-8")
- )
- else:
- print(
- f"Error: Cant get binary size in db with params: github_workflow like 'Postcommit%', github_ref_name='{branch}', build_preset='{build_preset}, git_commit_time <= DateTime::FromSeconds({time_of_current_commit})'"
- )
- return 0
- return {
- "github_sha": main_data["github_sha"],
- "git_commit_time": str(main_data["git_commit_time"]),
- "size_bytes": str(main_data["size_bytes"]),
- "size_stripped_bytes": str(main_data["size_stripped_bytes"]),
- }
- if __name__ == "__main__":
- get_build_size()
|