Files
dsk-version-management/dashboard/sidebar.py
2023-08-11 17:25:19 +09:00

79 lines
4.0 KiB
Python

import json, time
import streamlit as st
from streamlit_js_eval import streamlit_js_eval
from settings import *
def set_extended_description(edited_df):
json_edited_df = json.loads(edited_df.to_json(orient='records'))
extended_description_value = []
for idx, changed_idx in enumerate(st.session_state['data_editor']['edited_rows']):
if idx == 0:
extended_description_value.append(json_edited_df[changed_idx]['name'])
else:
extended_description_value.append('\n' + json_edited_df[changed_idx]['name'])
if 'candidate_version' in st.session_state['data_editor']['edited_rows'][changed_idx]:
extended_description_value.append(f"candidate: {st.session_state['data_editor']['edited_rows'][changed_idx]['candidate_version']}")
if 'release_version' in st.session_state['data_editor']['edited_rows'][changed_idx]:
extended_description_value.append(f"release: {st.session_state['data_editor']['edited_rows'][changed_idx]['release_version']}")
if 'product_version' in st.session_state['data_editor']['edited_rows'][changed_idx]:
extended_description_value.append(f"product: {st.session_state['data_editor']['edited_rows'][changed_idx]['product_version']}")
return '\n'.join(extended_description_value)
def set_version_json(edited_df):
data = {'datasaker': get_datasaker(),'service': json.loads(edited_df.to_json(orient='records'))}
with open('version.json', 'w') as file:
json.dump(data, file, indent=4)
def show_sidebar(df, edited_df):
with st.sidebar:
st.subheader('Git Push')
with st.expander('Git Push'):
commit_message = st.text_input('Commit Message', value='Update version.json')
extended_description = st.text_area('Extended description', value=set_extended_description(edited_df), height=200)
if st.button(key='push', label='Commit changes'):
if commit_message:
if diff_remote_head():
if df.equals(edited_df):
st.warning('No changes have been made', icon='⚠️')
else:
set_version_json(edited_df)
git_push(commit_message, extended_description)
st.success('Success', icon='')
time.sleep(1)
streamlit_js_eval(js_expressions='parent.window.location.reload()')
else:
st.error('Updates were rejected because the tip of your current branch is behind', icon='🚨')
st.divider()
st.subheader('Draft a new release')
with st.expander('Draft a new release'):
tags = [tag.name for tag in get_tags()]
tags.insert(0, "")
new_tag = st.text_input('Create a new tag')
if new_tag:
if new_tag in tags:
st.warning('Existing tag', icon='⚠️')
else:
tags.insert(0, new_tag)
selected_tag = st.selectbox('Choose a tag', tags)
release_title = st.text_input('Release title', value=selected_tag)
release_describe = st.text_area('Describe this release', value='## Production에 변경된 Version')
if st.button(key='release', label='Publish release'):
response = publish_release(selected_tag, release_title, release_describe)
if response.status_code == 201:
st.success('Release created successfully', icon='')
git_pull()
streamlit_js_eval(js_expressions='parent.window.location.reload()')
else:
st.error(f'Failed to create release. Status code: {response.status_code}', icon='🚨')
st.error(f'Response: {response.text}', icon='🚨')
st.divider()