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()