import json, time import streamlit as st from streamlit_js_eval import streamlit_js_eval from settings import * from logger import logger if 'push_button_disabled' not in st.session_state: st.session_state.push_button_disabled = True if 'release_button_disabled' not in st.session_state: st.session_state.release_button_disabled = True 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'): selected_user_name = st.selectbox('User Name', get_user_name_list(), key='git_user_name') set_git_config(selected_user_name, get_user_email(selected_user_name)) 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 selected_user_name and commit_message: st.session_state.push_button_disabled = False else: st.session_state.push_button_disabled = True if st.button(key='push', label='Commit changes', disabled=st.session_state.push_button_disabled): if selected_user_name and commit_message: if diff_remote_head(): if df.equals(edited_df): logger.warning(f'Git Push - No changes have been made | {selected_user_name}') st.warning('No changes have been made', icon='⚠️') else: st.snow() time.sleep(1) set_version_json(edited_df) git_push(commit_message, extended_description) logger.info(f'Git Push - Success | {selected_user_name}') st.success('Success', icon='✅') time.sleep(1) streamlit_js_eval(js_expressions='parent.window.location.reload()') else: logger.error(f'Git Push - Updates were rejected because the tip of your current branch is behind | {selected_user_name}') 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 selected_tag and release_title and release_describe: st.session_state.release_button_disabled = False else: st.session_state.release_button_disabled = True if st.button(key='release', label='Publish release', disabled=st.session_state.release_button_disabled): if selected_tag and release_title and release_describe: st.snow() response = publish_release(selected_tag, release_title, release_describe) if response.status_code == 201: logger.info(f'Publish Release - Release created successfully') st.success('Release created successfully', icon='✅') git_pull() streamlit_js_eval(js_expressions='parent.window.location.reload()') else: logger.error(f'Publish Release - Failed to create release. Status code: {response.status_code}') logger.error(f'Response: {response.text}') st.error(f'Failed to create release. Status code: {response.status_code}\n\n Response: {response.text}', icon='🚨') st.divider()