Add version management dashboard
This commit is contained in:
78
dashboard/sidebar.py
Normal file
78
dashboard/sidebar.py
Normal file
@@ -0,0 +1,78 @@
|
||||
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', expanded=True):
|
||||
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()
|
||||
Reference in New Issue
Block a user