From 3347912581ec4e08ac26ca58a8862e4300e05e4a Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Mon, 16 Jun 2025 11:00:56 +0530 Subject: [PATCH 01/24] [#19050] GP Test automation changes --- tests/e2e-test/pytest.ini | 3 +- tests/e2e-test/readme.MD | 2 +- tests/e2e-test/requirements.txt | 3 +- tests/e2e-test/tests/conftest.py | 83 +++++++++++++++---- .../tests/test_contentProcessing_gp_tc.py | 73 ++++++++-------- 5 files changed, 109 insertions(+), 55 deletions(-) diff --git a/tests/e2e-test/pytest.ini b/tests/e2e-test/pytest.ini index 76eb64fc..05b7f91c 100644 --- a/tests/e2e-test/pytest.ini +++ b/tests/e2e-test/pytest.ini @@ -3,4 +3,5 @@ log_cli = true log_cli_level = INFO log_file = logs/tests.log log_file_level = INFO -addopts = -p no:warnings +addopts = -p no:warnings --tb=short + diff --git a/tests/e2e-test/readme.MD b/tests/e2e-test/readme.MD index 941d3653..13d4aa47 100644 --- a/tests/e2e-test/readme.MD +++ b/tests/e2e-test/readme.MD @@ -24,7 +24,7 @@ Installing Playwright Pytest from Virtual Environment Run test cases -- To run test cases from your 'tests' folder : "pytest --html=report.html --self-contained-html" +- To run test cases from your 'tests/e2e-test' folder : "pytest --html=report.html --self-contained-html" Create .env file in project root level with web app url and client credentials diff --git a/tests/e2e-test/requirements.txt b/tests/e2e-test/requirements.txt index 7aad0cfb..4e488e55 100644 --- a/tests/e2e-test/requirements.txt +++ b/tests/e2e-test/requirements.txt @@ -3,4 +3,5 @@ pytest-reporter-html1 python-dotenv pytest-check pytest-html -py \ No newline at end of file +py +beautifulsoup4 \ No newline at end of file diff --git a/tests/e2e-test/tests/conftest.py b/tests/e2e-test/tests/conftest.py index d356dc40..e43ff21d 100644 --- a/tests/e2e-test/tests/conftest.py +++ b/tests/e2e-test/tests/conftest.py @@ -1,9 +1,11 @@ import os - +import atexit +import io +from bs4 import BeautifulSoup import pytest +import logging from config.constants import URL from playwright.sync_api import sync_playwright -from py.xml import html # type: ignore @pytest.fixture(scope="session") @@ -25,29 +27,74 @@ def login_logout(): # perform close the browser browser.close() +log_streams = {} @pytest.hookimpl(tryfirst=True) -def pytest_html_report_title(report): - report.title = "Automation_Content_Processing" - +def pytest_runtest_setup(item): + # Prepare StringIO for capturing logs + stream = io.StringIO() + handler = logging.StreamHandler(stream) + handler.setLevel(logging.INFO) -# Add a column for descriptions -def pytest_html_results_table_header(cells): - cells.insert(1, html.th("Description")) + logger = logging.getLogger() + logger.addHandler(handler) + # Save handler and stream + log_streams[item.nodeid] = (handler, stream) -def pytest_html_results_table_row(report, cells): - cells.insert( - 1, html.td(report.description if hasattr(report, "description") else "") - ) - -# Add logs and docstring to report @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(item, call): outcome = yield report = outcome.get_result() - report.description = str(item.function.__doc__) - os.makedirs("logs", exist_ok=True) - extra = getattr(report, "extra", []) - report.extra = extra + + handler, stream = log_streams.get(item.nodeid, (None, None)) + + if handler and stream: + # Make sure logs are flushed + handler.flush() + log_output = stream.getvalue() + + # Only remove the handler, don't close the stream yet + logger = logging.getLogger() + logger.removeHandler(handler) + + # Store the log output on the report object for HTML reporting + report.description = f"
{log_output.strip()}
" + + # Clean up references + log_streams.pop(item.nodeid, None) + else: + report.description = "" + +def pytest_collection_modifyitems(items): + for item in items: + if hasattr(item, 'callspec'): + prompt = item.callspec.params.get("prompt") + if prompt: + item._nodeid = prompt # This controls how the test name appears in the report + +def rename_duration_column(): + report_path = os.path.abspath("report.html") # or your report filename + if not os.path.exists(report_path): + print("Report file not found, skipping column rename.") + return + + with open(report_path, 'r', encoding='utf-8') as f: + soup = BeautifulSoup(f, 'html.parser') + + # Find and rename the header + headers = soup.select('table#results-table thead th') + for th in headers: + if th.text.strip() == 'Duration': + th.string = 'Execution Time' + #print("Renamed 'Duration' to 'Execution Time'") + break + else: + print("'Duration' column not found in report.") + + with open(report_path, 'w', encoding='utf-8') as f: + f.write(str(soup)) + +# Register this function to run after everything is done +atexit.register(rename_duration_column) diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index cbe99797..d831cd43 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -1,41 +1,46 @@ import logging - import pytest from pages.HomePage import HomePage - + logger = logging.getLogger(__name__) + +# Define step-wise test actions for Golden Path +golden_path_steps = [ + ("Validate home page is loaded", lambda home: home.validate_home_page()), + ("Select Invoice Schema", lambda home: home.select_schema("Invoice")), + ("Upload Invoice documents", lambda home: home.upload_files("Invoice")), + ("Refresh page till status is updated to Completed", lambda home: home.refresh()), + ("Validate extracted result for Invoice", lambda home: home.validate_invoice_extracted_result()), + ("Modify Extracted Data JSON & submit comments", lambda home: home.modify_and_submit_extracted_data()), + ("Validate process steps for Invoice", lambda home: home.validate_process_steps()), + ("Select Property Loss Damage Claim Form Schema", lambda home: home.select_schema("Property")), + ("Upload Property Loss Damage Claim Form documents", lambda home: home.upload_files("Property")), + ("Refresh page till status is updated to Completed", lambda home: home.refresh()), + ("Validate extracted result for Property Loss Damage Claim Form", lambda home: home.validate_property_extracted_result()), + ("Validate process steps for Property Loss Damage Claim Form", lambda home: home.validate_process_steps()), + ("Validate Delete files", lambda home: home.delete_files()) +] + +# Generate readable test step IDs +golden_path_ids = [f"{i+1:02d}. {desc}" for i, (desc, _) in enumerate(golden_path_steps)] + +@pytest.mark.parametrize("description, action", golden_path_steps, ids=golden_path_ids) +def test_content_processing_steps(login_logout, description, action, request): + """ + Executes Golden Path content processing steps with individual log entries. + """ + request.node._nodeid = description -@pytest.mark.testcase_id("TC001") -def test_ContentProcessing_Golden_path_test(login_logout): - """Validate Golden path test case for Content Processing Accelerator""" page = login_logout - home_page = HomePage(page) - logger.info("Step 1: Validate home page is loaded.") - home_page.validate_home_page() - logger.info("Step 2: Select Invoice Schema.") - home_page.select_schema("Invoice") - logger.info("Step 3: Upload Invoice documents.") - home_page.upload_files("Invoice") - logger.info("Step 4: Refresh page till status is updated to Completed.") - home_page.refresh() - logger.info("Step 5: Validate extracted result for Invoice.") - home_page.validate_invoice_extracted_result() - logger.info("Step 6: Modify Extracted Data JSON & submit comments.") - home_page.modify_and_submit_extracted_data() - logger.info("Step 7: Validate process steps for Invoice") - home_page.validate_process_steps() - logger.info("Step 8: Select Property Loss Damage Claim Form Schema.") - home_page.select_schema("Property") - logger.info("Step 9: Upload Property Loss Damage Claim Form documents.") - home_page.upload_files("Property") - logger.info("Step 10: Refresh page till status is updated to Completed.") - home_page.refresh() - logger.info( - "Step 11: Validate extracted result for Property Loss Damage Claim Form." - ) - home_page.validate_property_extracted_result() - logger.info("Step 12: Validate process steps for Property Loss Damage Claim Form.") - home_page.validate_process_steps() - logger.info("Step 13: Validate Delete files.") - home_page.delete_files() + home = HomePage(page) + + logger.info(f"Running test step: {description}") + try: + action(home) + except Exception as e: + logger.error(f"Step failed: {description}") + raise + + # Optionally attach to report + request.node._report_sections.append(("call", "log", f"Step passed: {description}")) From 467b57fb34010fd41ce1551eddd5bca84a747add Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Wed, 18 Jun 2025 16:42:06 +0530 Subject: [PATCH 02/24] GP Test automation - removed duplicate entries. --- .../tests/test_contentProcessing_gp_tc.py | 68 +++++++++++++------ 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index d831cd43..66dead64 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -1,28 +1,49 @@ import logging +import time import pytest from pages.HomePage import HomePage - + logger = logging.getLogger(__name__) - + # Define step-wise test actions for Golden Path golden_path_steps = [ ("Validate home page is loaded", lambda home: home.validate_home_page()), - ("Select Invoice Schema", lambda home: home.select_schema("Invoice")), + ("Select Invoice Schema", lambda home: home.select_schema("Invoice")), ("Upload Invoice documents", lambda home: home.upload_files("Invoice")), - ("Refresh page till status is updated to Completed", lambda home: home.refresh()), - ("Validate extracted result for Invoice", lambda home: home.validate_invoice_extracted_result()), - ("Modify Extracted Data JSON & submit comments", lambda home: home.modify_and_submit_extracted_data()), + ("Refreshing the page until the 'Invoice' file status is updated to 'Completed'", lambda home: home.refresh()), + ( + "Validate extracted result for Invoice", + lambda home: home.validate_invoice_extracted_result(), + ), + ( + "Modify Extracted Data JSON & submit comments", + lambda home: home.modify_and_submit_extracted_data(), + ), ("Validate process steps for Invoice", lambda home: home.validate_process_steps()), - ("Select Property Loss Damage Claim Form Schema", lambda home: home.select_schema("Property")), - ("Upload Property Loss Damage Claim Form documents", lambda home: home.upload_files("Property")), - ("Refresh page till status is updated to Completed", lambda home: home.refresh()), - ("Validate extracted result for Property Loss Damage Claim Form", lambda home: home.validate_property_extracted_result()), - ("Validate process steps for Property Loss Damage Claim Form", lambda home: home.validate_process_steps()), - ("Validate Delete files", lambda home: home.delete_files()) + ( + "Select Property Loss Damage Claim Form Schema", + lambda home: home.select_schema("Property"), + ), + ( + "Upload Property Loss Damage Claim Form documents", + lambda home: home.upload_files("Property"), + ), + ("Refreshing the page until the 'Claim Form' status is updated to 'Completed'", lambda home: home.refresh()), + ( + "Validate extracted result for Property Loss Damage Claim Form", + lambda home: home.validate_property_extracted_result(), + ), + ( + "Validate process steps for Property Loss Damage Claim Form", + lambda home: home.validate_process_steps(), + ), + ("Validate user able to delete file", lambda home: home.delete_files()), ] - + # Generate readable test step IDs -golden_path_ids = [f"{i+1:02d}. {desc}" for i, (desc, _) in enumerate(golden_path_steps)] +golden_path_ids = [ + f"{i+1:02d}. {desc}" for i, (desc, _) in enumerate(golden_path_steps) +] @pytest.mark.parametrize("description, action", golden_path_steps, ids=golden_path_ids) @@ -30,17 +51,26 @@ def test_content_processing_steps(login_logout, description, action, request): """ Executes Golden Path content processing steps with individual log entries. """ - request.node._nodeid = description page = login_logout home = HomePage(page) - + logger.info(f"Running test step: {description}") + + start_time = time.time() + try: action(home) + duration = time.time() - start_time + logger.info(f"Step passed: {description} (Duration: {duration:.2f} seconds)") + request.node._report_sections.append( + ("call", "log", f"Step passed: {description} (Duration: {duration:.2f} seconds)") + ) except Exception as e: - logger.error(f"Step failed: {description}") + duration = time.time() - start_time + logger.error(f"Step failed: {description} (Duration: {duration:.2f} seconds)") raise - - # Optionally attach to report + + request.node._nodeid = description + request.node._report_sections.append(("call", "log", f"Step passed: {description}")) From f3a394cf39352d2445744c503057f8696a2ecd08 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Wed, 18 Jun 2025 17:59:00 +0530 Subject: [PATCH 03/24] pylint error resolved --- tests/e2e-test/tests/test_contentProcessing_gp_tc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index 66dead64..307d0629 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -66,7 +66,7 @@ def test_content_processing_steps(login_logout, description, action, request): request.node._report_sections.append( ("call", "log", f"Step passed: {description} (Duration: {duration:.2f} seconds)") ) - except Exception as e: + except Exception: duration = time.time() - start_time logger.error(f"Step failed: {description} (Duration: {duration:.2f} seconds)") raise From 639f16a1a391a9429a6ec0bdf1bfdde0cb9517da Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Wed, 18 Jun 2025 18:32:07 +0530 Subject: [PATCH 04/24] linting issues --- tests/e2e-test/tests/conftest.py | 91 ++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 35 deletions(-) diff --git a/tests/e2e-test/tests/conftest.py b/tests/e2e-test/tests/conftest.py index e43ff21d..ab65ca98 100644 --- a/tests/e2e-test/tests/conftest.py +++ b/tests/e2e-test/tests/conftest.py @@ -1,37 +1,52 @@ +""" +Pytest configuration for browser-based testing with Playwright and HTML report customization. +""" + import os -import atexit import io -from bs4 import BeautifulSoup -import pytest +import atexit import logging -from config.constants import URL +from pathlib import Path + +import pytest +from bs4 import BeautifulSoup from playwright.sync_api import sync_playwright +from config.constants import URL + +# Global dictionary to store log streams for each test +LOG_STREAMS = {} + @pytest.fixture(scope="session") def login_logout(): - # perform login and browser close once in a session - with sync_playwright() as p: - browser = p.chromium.launch(headless=False, args=["--start-maximized"]) + """ + Fixture to launch the browser, log in, and yield the page object. + Closes the browser after the session ends. + """ + with sync_playwright() as playwright: + browser = playwright.chromium.launch(headless=False, args=["--start-maximized"]) context = browser.new_context(no_viewport=True) context.set_default_timeout(80000) page = context.new_page() - # Navigate to the login URL + page.goto(URL, wait_until="domcontentloaded") - # login to web url with username and password + + # Uncomment and complete the following to enable login # login_page = LoginPage(page) # load_dotenv() - # login_page.authenticate(os.getenv('user_name'), os.getenv('pass_word')) + # login_page.authenticate(os.getenv("user_name"), os.getenv("pass_word")) yield page - # perform close the browser + browser.close() -log_streams = {} @pytest.hookimpl(tryfirst=True) def pytest_runtest_setup(item): - # Prepare StringIO for capturing logs + """ + Pytest hook to set up a log capture for each test. + """ stream = io.StringIO() handler = logging.StreamHandler(stream) handler.setLevel(logging.INFO) @@ -39,62 +54,68 @@ def pytest_runtest_setup(item): logger = logging.getLogger() logger.addHandler(handler) - # Save handler and stream - log_streams[item.nodeid] = (handler, stream) + LOG_STREAMS[item.nodeid] = (handler, stream) @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(item, call): + """ + Pytest hook to add captured logs to the test report. + """ outcome = yield report = outcome.get_result() - handler, stream = log_streams.get(item.nodeid, (None, None)) + handler, stream = LOG_STREAMS.get(item.nodeid, (None, None)) if handler and stream: - # Make sure logs are flushed handler.flush() log_output = stream.getvalue() - # Only remove the handler, don't close the stream yet logger = logging.getLogger() logger.removeHandler(handler) - # Store the log output on the report object for HTML reporting report.description = f"
{log_output.strip()}
" - # Clean up references - log_streams.pop(item.nodeid, None) + LOG_STREAMS.pop(item.nodeid, None) else: report.description = "" + def pytest_collection_modifyitems(items): + """ + Modify test node IDs based on the test's parameterized 'prompt' value. + """ for item in items: - if hasattr(item, 'callspec'): + if hasattr(item, "callspec"): prompt = item.callspec.params.get("prompt") if prompt: - item._nodeid = prompt # This controls how the test name appears in the report + item._nodeid = prompt + def rename_duration_column(): - report_path = os.path.abspath("report.html") # or your report filename - if not os.path.exists(report_path): + """ + Modify the HTML report to rename 'Duration' column to 'Execution Time'. + Runs automatically after the test session. + """ + report_path = Path("report.html") + if not report_path.exists(): print("Report file not found, skipping column rename.") return - with open(report_path, 'r', encoding='utf-8') as f: - soup = BeautifulSoup(f, 'html.parser') + with report_path.open("r", encoding="utf-8") as file: + soup = BeautifulSoup(file, "html.parser") - # Find and rename the header - headers = soup.select('table#results-table thead th') + headers = soup.select("table#results-table thead th") for th in headers: - if th.text.strip() == 'Duration': - th.string = 'Execution Time' - #print("Renamed 'Duration' to 'Execution Time'") + if th.text.strip() == "Duration": + th.string = "Execution Time" break else: print("'Duration' column not found in report.") - with open(report_path, 'w', encoding='utf-8') as f: - f.write(str(soup)) + with report_path.open("w", encoding="utf-8") as file: + file.write(str(soup)) + -# Register this function to run after everything is done +# Register HTML report column modification atexit.register(rename_duration_column) From 47db719dc74b2d7be9964d117a645985a22f4167 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Thu, 19 Jun 2025 12:48:16 +0530 Subject: [PATCH 05/24] resolved comments --- tests/e2e-test/tests/conftest.py | 3 ++- .../tests/test_contentProcessing_gp_tc.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/e2e-test/tests/conftest.py b/tests/e2e-test/tests/conftest.py index ab65ca98..d57e34bb 100644 --- a/tests/e2e-test/tests/conftest.py +++ b/tests/e2e-test/tests/conftest.py @@ -7,6 +7,7 @@ import atexit import logging from pathlib import Path +from venv import logger import pytest from bs4 import BeautifulSoup @@ -99,7 +100,7 @@ def rename_duration_column(): """ report_path = Path("report.html") if not report_path.exists(): - print("Report file not found, skipping column rename.") + logger.info("Report file not found, skipping column rename.") return with report_path.open("r", encoding="utf-8") as file: diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index 307d0629..44823f5a 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -51,7 +51,8 @@ def test_content_processing_steps(login_logout, description, action, request): """ Executes Golden Path content processing steps with individual log entries. """ - + request.node._nodeid = description + page = login_logout home = HomePage(page) @@ -62,15 +63,14 @@ def test_content_processing_steps(login_logout, description, action, request): try: action(home) duration = time.time() - start_time - logger.info(f"Step passed: {description} (Duration: {duration:.2f} seconds)") - request.node._report_sections.append( - ("call", "log", f"Step passed: {description} (Duration: {duration:.2f} seconds)") - ) + message = "Step passed: %s (Duration: %.2f seconds)" % (description, duration) + logger.info(message) + request.node._report_sections.append(("call", "log", message)) + except Exception: duration = time.time() - start_time - logger.error(f"Step failed: {description} (Duration: {duration:.2f} seconds)") + logger.error("Step failed: %s (Duration: %.2f seconds)", description, duration, exc_info=True) raise - request.node._nodeid = description - + request.node._report_sections.append(("call", "log", f"Step passed: {description}")) From ab7c81b8bf3919645bf846852bbd6af2a394b148 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Thu, 19 Jun 2025 12:54:11 +0530 Subject: [PATCH 06/24] lint issues --- tests/e2e-test/tests/conftest.py | 1 - tests/e2e-test/tests/test_contentProcessing_gp_tc.py | 5 +---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/e2e-test/tests/conftest.py b/tests/e2e-test/tests/conftest.py index d57e34bb..a6459bf2 100644 --- a/tests/e2e-test/tests/conftest.py +++ b/tests/e2e-test/tests/conftest.py @@ -2,7 +2,6 @@ Pytest configuration for browser-based testing with Playwright and HTML report customization. """ -import os import io import atexit import logging diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index 44823f5a..466afc2f 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -52,14 +52,12 @@ def test_content_processing_steps(login_logout, description, action, request): Executes Golden Path content processing steps with individual log entries. """ request.node._nodeid = description - page = login_logout home = HomePage(page) logger.info(f"Running test step: {description}") start_time = time.time() - try: action(home) duration = time.time() - start_time @@ -71,6 +69,5 @@ def test_content_processing_steps(login_logout, description, action, request): duration = time.time() - start_time logger.error("Step failed: %s (Duration: %.2f seconds)", description, duration, exc_info=True) raise - - + request.node._report_sections.append(("call", "log", f"Step passed: {description}")) From dc527125bbaaaf5d5c512aa34acd7c4bdb3c3ff2 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Thu, 19 Jun 2025 12:59:41 +0530 Subject: [PATCH 07/24] Pylint issue --- tests/e2e-test/tests/test_contentProcessing_gp_tc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py index 466afc2f..7fe90c2c 100644 --- a/tests/e2e-test/tests/test_contentProcessing_gp_tc.py +++ b/tests/e2e-test/tests/test_contentProcessing_gp_tc.py @@ -69,5 +69,4 @@ def test_content_processing_steps(login_logout, description, action, request): duration = time.time() - start_time logger.error("Step failed: %s (Duration: %.2f seconds)", description, duration, exc_info=True) raise - request.node._report_sections.append(("call", "log", f"Step passed: {description}")) From 2f0b1976ccbaca56839f9e9b0ae1319c60ccdeaa Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 15:58:12 +0530 Subject: [PATCH 08/24] Bug fix(#19567) readme file changes --- docs/DeploymentGuide.md | 20 +++++++++++++++++++- docs/images/cp-api-container-app.png | Bin 0 -> 8047 bytes docs/images/cp-web-container-app.png | Bin 0 -> 7841 bytes 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 docs/images/cp-api-container-app.png create mode 100644 docs/images/cp-web-container-app.png diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 0735575f..93124c48 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -173,7 +173,25 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - This deployment will take *4-6 minutes* to provision the resources in your account and set up the solution with sample data. - If you encounter an error or timeout during deployment, changing the location may help, as there could be availability constraints for the resources. -5. Once the deployment has completed successfully, open the [Azure Portal](https://portal.azure.com/), go to the deployed resource group, find the App Service, and get the app URL from `Default domain`. + +5. Once the deployment has completed successfully: + + - open the [Azure Portal](https://portal.azure.com/) + + - Navigate to the deployed Resource Group + + - Locate the Web Container App (App Service for the frontend) + + - You can find the **Web Application URL** in the **Overview** section. For reference, please see the screenshot below. + ![](./images/cp-web-container-app.png) + + - Locate the API Container App (App Service for the backend) + + - You can find the **API Application URL** in the **Overview** section.For reference, please see the screenshot below. + ![](./images/cp-api-container-app.png) + + + > Note: Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. diff --git a/docs/images/cp-api-container-app.png b/docs/images/cp-api-container-app.png new file mode 100644 index 0000000000000000000000000000000000000000..848837b90eefb90392ffb31a7f3d0f87e29dcf00 GIT binary patch literal 8047 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 uSnR?qf0(%ne6G$G`K){j>$c003q& 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 PtPD_lq^Vr4Xc78<@;ll! literal 0 HcmV?d00001 From 99f376c4ca37a270fee677745d7d4a3d51ea48c9 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:00:01 +0530 Subject: [PATCH 09/24] readme changes --- docs/DeploymentGuide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 93124c48..7f949835 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -183,11 +183,13 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - Locate the Web Container App (App Service for the frontend) - You can find the **Web Application URL** in the **Overview** section. For reference, please see the screenshot below. + ![](./images/cp-web-container-app.png) - Locate the API Container App (App Service for the backend) - You can find the **API Application URL** in the **Overview** section.For reference, please see the screenshot below. + ![](./images/cp-api-container-app.png) From 293b9e0eb8eb9d690e1ca70de2125516042d1ac3 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:06:10 +0530 Subject: [PATCH 10/24] readme images updated --- docs/images/cp-api-container-app.png | Bin 8047 -> 12346 bytes docs/images/cp-web-container-app.png | Bin 7841 -> 11857 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/cp-api-container-app.png b/docs/images/cp-api-container-app.png index 848837b90eefb90392ffb31a7f3d0f87e29dcf00..10f4dfd7edccbf8e13e2197203982aef17ea1bd0 100644 GIT binary patch literal 12346 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 |lLdfUh^`O9z55oNrx%%md%8w=%) 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 Zrrf+*CnIf=Kp8latdyc;vABWH{{d3)Sa|>d literal 7841 zcmbt(byQSc`}WW(%ne6G$G`K){j>$c003q& zHD!foFth!|*Z$9D7Uhs*nfFrE-wrBbhp>lN-jBYU&CboA^LV;=!+;{fh{y5Fpsb#^ ztV0VS>k%|~{Pm&FsOhg)xl0}g7pjVcSdf2Pv&CR_sc*acisII@d&>W|X*R(Qt^XO~ z2>ri9wM`L%Al*DA zFR4;R8(;Qp_v+Yz7+QrVb4lo&6S`1=FIA%_*Yf6}soz>C+{Ue~n(^jr^Xln$@?Be* zTBvZY|GtFjcl?cj+btb7o%%K>+e3m(C%6>D$Ew`O5>QPXmTCA78OvNAD zQ2gY`AX^yl7g(C&^2fcGI)>gFZ;JVL8eLmS#(3~A|Gvv29%UdB6POPdPK+>56%x`1 zuaStfg4LSc8srYO!v`5@JS`HnK2Xzj=>!7oSFX%4#Dgj!> zGuZwH{TfNPOiN~ z6;>F@Zms^582Hp$$Wp$w{<))y8_@rvz~kP3W0VVqR*ZED0HnX<;kPGhc2?~J8600o zXc7`W0#LGSvlHUY)_n%bu0Yk_k~N9|yQZTI=P zLS0+;o2fmH|DZJUZrX4JC&C~5dTLV8=cm7mCj6u?Ff|4-Y)q5Xc7hLUCHD;kZscuWZ@m*cRQOLyWd|d<30OBI5*F8eD|Jb z?+$k-9HmYF8Zj{!VxvAt5#Gr36Ue;js|gUYv|qDuP;DW=j)UA z4k2u8IL7tPmhv%Cqb1?txTPj_Ml<4a#{+ruBffDDYwRp9PaRMfD&WY`O?dVG7UDgA z;ne3vbZL_bzk24Sb|RRVH5ZgPV-!6mR@!fO_gh|dwW9H&s|=vjyn$x-d)W+)&(PLH zo}W)}`^pD72@n=nOz`SS;V&HcM;mYP(PM0S zMYD^g^9AD3;@g$KkDQ}kHx++Jxb4THLu}dMBofXSSiVHBSRPF_#Z0OVM2SG8Cc^E* z!cX4est{sTkQdn>Tb`}Z_``Z)jS9(t%7vlm%=BJ!N3XRM9F2J^4BT`1?P}%(11=wY zh2JWcWa}s>D3nzH9JQ@k8P8FI9e>x#DJZ~SsCSuiRa91{;59>YB+PtUHNQ0qo1UK5 zZkluM`|_USjUAI)82{`GfStWdJNjAu3FbEUwDodm zcz%a;cdAh9kQ5oI>yKSsiVC|j!;AS2-ZJoqJP2#gqiR}PILDtM6`%<+P2?=sfO^JZ zg}u$S`1WKR$CM^6t;=jP76M=mR!(6~GdkTWxlpXFm8SrvTC|-jZDvp8S@dz%HLkst zaG}P0a5`yM$Zj%0iw?m0#)dC+>j|I%owr~fo+8QCL>IxQ@mKBFc%r~MVaifp+`2A{qGv481FjU6x zoP}SO`St79A09YRij|rdF5-IFj&)_s)o7cT{PJ~SBQTKf_@}g~Ck`F%ehMGrzxsxCWtETB%lz42~8`&Bg z8>_cTzqc?vJSn}#POh!1mY!E7fdeM99F-v@Nvi%zZ=gu5S-O$TvzCT>@%KQ^N zkd8PBXY zNP5ME3%INcXfWs-gpxUGHoE7QQ)p<&PPgD?@L}`GVj))L$Q}`LDazBxmrcdav^XNu z;;B(5v@@{4lb6zGYJ8U?GJxxhSH!+6EH_srx)i#|*2@hw8xA_5qgS!Tt$dw_wbMJK z@7l}{RcG&hp-Xf&yyIBxUIu5~V ztOmTwb<(?&J6Bp4XdN+Qf<&*_+7!-^e^G1n9# zE=6re(WYCd;d(c_Bt(?tSEJ|ArY+u9hhMH?SNrYV&SGmPV{)KR9lr~lr2xynPX{O%k^~LWJYF)}o zd!!E0IFEYoR{1Oie*N(9&dKIj*odu?t1Ev@j5tI<4lH6j+GD0+l!v)@c%U2Zu+*!O zs3?Gix>;Zkg6-X-;&#XNfhaiy2|fzP1`)gm`nr7a+dPIhdjQzVmkIA&dX6Fdm63{F z9Z^4to>r4*Bg_e3aoNZTznDplGd}jJxeQU4ZY_pVSGo+JJQBm4;xA;;5eo^>CfqWH zI1yysfW`c3LZhFQ!L}1>#{=7o-6ODDF@(dxSF>6cjROh%!dA>=*81B^Cabxe%t}Mj z@bspW3V|$CIOfK7Mabv%N9yu}8Q^W>_kqQl1E@`dGp?UYQN9(y{Y5He29ZqlH2zKo zl@mL?1WRJs(>uy}vOs=Sdwl=`!qT&iMTjL&6RZO8Ms#%I)4w>Q{Kn|e2bQZ}Z5q>D z9l_y)<>h0=HcYQ*htV?k-qJrO98hEtlmkQCaOZaWqOI$q&R-`};wkUmyIoGy2CyoH z25VEHZ0NmxKrucut7nOc%ke?r9s>B6{(keB<=p_zqnm*1mCGr@(hqN=H^rtum(yd1 z{1$I7?~nC4ozky!P&U7V&%sc2GrpZFTjDKc;r3qXMLaX!E~zMMVFeN45AzHD8msH> z=Q)S7ju-X7V}e8>7}zZBMcJ$zQM{)B2M@R0gz)SI*i@CWuy5y9p0|tQIeA)|@7MHp z5Q)Y5uU}R_8ef(rG_ln@PGpve`MBe_zG)7^O?WBqEBW|wy`%Uevq0IbfCD+jLr$%% zP>P2S%jz@5Z}Bi!Vu!3DM4iNj>fPK#Q{G4Ua$?~B=Y#y^>>b-1ijYBi%-H?&03nZS z=HjZX`&SKJ%8JQGhsXNY2Xz$}q*2QP&jPgaWpBS+9jah(i(&njTjQ+iaM?9azt^uR zt{UBO@QLM}olENtKjpa?^U~-o1zs%5VRhkCj#=7lo+m2B$Juq$UOVSm=4{OU`@ zK{UP#2-6JJp&VC$#+J%Y&?ngot)1%(!hYvCqnGaLCOb`7s}d)rWOozBlFmW#(hP%Z zab@1}LW!S5LlO2&ag^C9q0zo*9AQd88}0{omI;=X>QpW&8|AexCZL^p)C>|0(pkHTK4 zDdy1@y;RfARd3{7j3Y8&Uu#;ZIhweWX1RDLZMC`cNRZx>4)bCfI7qckYo3$f z;wYq4sCU$?X^vTdNTr>3JLLc9_A|zPya`i&+CS0XF+FjOP@)NODUv z^~~g{SQ@KEd#C7+)>bq(OB$Bx>$&sV^?b@nFHs;OBHCJLs3_)r`}S=aT~b!U-kviH zFCmo!GB?QRqhm*hvshk`5kmr_EF*Vp?b4TkD{PF=EkCm%hwKE@#_qj$<{=>gV#_O9 zS(OChexwo?;4{oFbDdF%kkUmY$}bt2nI*toTUl!p6Hezao6J6c{=!84g5+U>{qB$d z=mJ3qCqctvAc1SkHEG5ShFS$0ZZ z$mkSM+v&I+cd|-K{dSb?{H{ATBpMn=__Zj3T{_}%Uu#&Ay#y1?g$GZoZjsO>xr#~V>71Rd)AEWy&x^|>`*CQsV_uV*12{Fl?zS0)?{-wlQE)_vB6S(d;1lQ zgGJe@7-~R~+$0M+f&~|dVeb3Le zn-Cm~6yKSH;AOT9ulBmF7Tk5~D1Ba|bf5D0*jVn{kLT&>=_sqIU)t`xsE<-^U%aP8 zfWH!d>OT!FQAvD?7gGN&)xF9T(#(SEG04W-I}(>JQU}khX+@*8cWRIZ#-JJ>TV!>O z3!((P^O1tWtImvR8GI6?uF8}jDP#o9Un5#yCd=QV7~1Y=$0e#7#5SOTvbq#8U&@=9 z5Mn8%h70)^yD#K^`OsV`_xAE`ZHuJSpR5aQOr1l;tydGt#&hJUeN))io|G2EOz){4zpvl| zGBShfjo?SWS8S)nL0i}<$cQ9#x?4CdD|*|lKp%CK5FKB^rP^>Ss2Y#L!bmij!K6$c%Z*AMpXes0A=;a%RjsuQKG*GajT?!G zwFxpZtDT`RRCjaAtRZX8Ag2OnFjp8Bwj^r3gFFck_cmNPg;Y%ko5q8xT39z(h6U@F zJ&qz7UG2)g8-w=5a<9yj(&AvhM`5(|C#0*tAq(^s0q*j4@R|6t$dB&(@*>B=)=A`L z-C`woF&nD31h1x7Vrd|Y?#%lSX|ab0`k$W*2{3tT(PoR6KWj`(%=}k)TxAHr#po_z zwldHZUc)NI-AL1c38K=rce5gf5LWD+_q2!JoZ~KxlhWW4Kp>`YcQH80i-m@Uhiqc1 zSE&FB9lO+2=iaCcM!lHIQOW=Cg05+No=T!)$vl<1L%ru<%RKkH8iy+ruU=6$$PTF~ zEzv>98xt4#gE0~b-@>~wr5*bFT}N!159W-QtNm6yVJjyCNPJsl`{it4DeQ$f>7G>7 zE?8UeAlcsJl?#<^8zN#S+Si}IDd+pwEjO(0_S*7i^5C1VMlrqPu@Wb^Cs^Q zyFVDt)Xb^A(bg^D1cqX5%#hjCKVE#rvEs7r8S=;r3x>C>0}uevlyZ|4x&NK&c%dXmc`-j zdt`h&b|Za-O{reMWs*4s)&&u)zPEg-Dx#(;zUzJ=x(z$HXt4Mh2N&8r&w(K?J=blN zSv8MY?lY)r2}5Kb6NFL0pe*BGv~-q1r6NfdLYCT&#H-fC!R(!!APJdQv&jmgpqsgu zpUXn`OTYul`nePs@Rv-kE5CIWT5aYPdCa{yYqZ^kk{4{p>^hiHrTB2psq_&ClklB5 z!@8EWSTTYKvY+G_+ov}tI~&mMzgHC%yFo)sYkjmTjs=kOTi)d2<_5NreWRtOt{b}j z!Mv|Ns;WiVdhxSb|31AW4@O4isl)^MTIo*5HipL}vMC1Nob3wwP8aEekkBF1_zpj;)$(R`TBo688UnH}tJQD&PFuNtb*)o)Y-V~7)NPFC$ zjO@!>vXFr;T0%c{Mt;)smd?t|cll!4`9LD&{d1*|6URu}F@IlaD~8mifLA8(atrw| z(ucW?L#>X*4dY@R%E=@^6N4y>{AzON-9FF6Zl3>>4R2GC>#cn)?8S=bHw!U7vwe1(=s$^;phbD&7Bc|&a2>)0*S%=9g%)LW;B|?7R zM2bz$Fc}z#&*TFf9^32I7T?ZilwW*{@v=&e6?~L2@)nxN9FNh*VO?EEm2=J?!~*a! z(wVGo5o7S&yYKsJ6rMPd2mO5f@NmAaMz`MtBQ|n#bH(hI2*S?6fhdI{=dN%fiB~9h zdjy7$tOwtID#i-McxcknXO=&_HWQOYR-gWmI$}m2SM`q?GXNpYC~7LIqRUo1kXg_A z{hMA-DYmDGcJDg6QWjsJEM|RiDYSWn{JQ0nw#}k zCuIRgdyUU9fNb zLWdxA`LNHbvGJAP> zXLxekQ|NpUT9-s~D^5tT|3ebp-S~Bs;fItvRV@mUDa_0BA-2-K z8k9GcIprfxSAk79Q*y;FHD)}peQ+Dc{Zmu?;qqZ&>$z+C;{7E7pQ7V~$e=NdB=kYI zVSgumVD0n?Wc=k~EQ3yJAWn;UXlK$>`%gK87LGAuu|hf{>QmFwtS@VqRyQIlJRK`T z{+PbL;OF{w_*gjTLMHoT3x`ikV6YoD0F5anFpoT*b}guGmo4zC!q*k+zrAMcw&+3kX zTBC3`cAgmlYxr$6j#?-=&_5;=hck25vyu6l@{apP2kvR~TXH)9@eN51VaL9%d*x^d z-&NV{3z-nd$Z!s~2kL#8n4Ssl+>0C2=u7lS5fU84ZPVQG1YmM+%);^iQ`0Kq5$XuS zzw4s;b=E`rRCXr6e}1?6*#hqVOBmAZ9TQ?9qw#)k-0jddNQu+q(5K;m80kYD^aN5H z?y3ceSQH@sr;cWtLAT8LheOJ#?sqJe>5f)3JF@GS8|LuII`J5kcIX+zPt*8B>4;pJ zg@zj>W^`Sf8?4Bk&#b&-<2>pawdR^d%P`NG;k4nl2EGVtO&Yk^+ z46*;IKu$B`qqajQjNPR0FaB1)wwy85FCQn;z@0W<>+BZsERny(s7yIxq;A8u2G-$E z&+`BNo$_h7MKGdS&yCRk;*AIUf7hQ2X2wBJ@ALlxpnCmX|4yE6qgyTng|e&B>ItH) zq`?234rxYWN~N@^SC-0A|+Yqxi9D8rXJ z<}YrlrxpmFOo#6%-IzKwV6ota1C%ZNSaH!o0ii*Z|2{fc=$D}j#f{wa{31kV?_M~j PtPD_lq^Vr4Xc78<@;ll! From 32511ed551eb692c381fcc4ecfdb77523861d5d4 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:11:25 +0530 Subject: [PATCH 11/24] readme changes --- docs/DeploymentGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 7f949835..539d3cd8 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -190,7 +190,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - You can find the **API Application URL** in the **Overview** section.For reference, please see the screenshot below. - ![](./images/cp-api-container-app.png) + ![](./images/cp-api-container-app.png) > Note: Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. From 9ea89a7eabf943bf96311c07a03a9ede3c6185eb Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:33:45 +0530 Subject: [PATCH 12/24] readme changes updated --- docs/DeploymentGuide.md | 17 ++++++++--------- docs/images/cp-post-deployment.png | Bin 0 -> 182276 bytes 2 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 docs/images/cp-post-deployment.png diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 539d3cd8..9bfbdbe1 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -173,8 +173,11 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - This deployment will take *4-6 minutes* to provision the resources in your account and set up the solution with sample data. - If you encounter an error or timeout during deployment, changing the location may help, as there could be availability constraints for the resources. +5. Once the deployment has completed successfully: -5. Once the deployment has completed successfully: + > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names of the **Web and API Container Apps** for your convenience. + + ![](./images/cp-post-deployment.png) - open the [Azure Portal](https://portal.azure.com/) @@ -182,16 +185,12 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - Locate the Web Container App (App Service for the frontend) - - You can find the **Web Application URL** in the **Overview** section. For reference, please see the screenshot below. - - ![](./images/cp-web-container-app.png) - - - Locate the API Container App (App Service for the backend) + - You can find the **Web Application URL** in the **Overview** section. - - You can find the **API Application URL** in the **Overview** section.For reference, please see the screenshot below. - - ![](./images/cp-api-container-app.png) + - Locate the API Container App (App Service for the backend) + - You can find the **API Application URL** in the **Overview** section + > Note: Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. diff --git a/docs/images/cp-post-deployment.png b/docs/images/cp-post-deployment.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee498350b4a7bb332b2133dfabf25fcbbe359be GIT binary patch literal 182276 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 X=CgKi0}Uy54PKh6Iw~&@o%8;G{gfmP literal 0 HcmV?d00001 From 551e06917d9932c40bf27a54d898aa80cc090c3a Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:36:26 +0530 Subject: [PATCH 13/24] readme changes --- docs/DeploymentGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 9bfbdbe1..9e0b7e4b 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -175,7 +175,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain 5. Once the deployment has completed successfully: - > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names of the **Web and API Container Apps** for your convenience. + > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names & end points(Application URL) of the **Web and API Container Apps** for your convenience. ![](./images/cp-post-deployment.png) From d03696c9c01881ec963cbd5bb8d031f452c98e51 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:45:15 +0530 Subject: [PATCH 14/24] readme changes --- docs/DeploymentGuide.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 9e0b7e4b..98b7278e 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -175,7 +175,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain 5. Once the deployment has completed successfully: - > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names & end points(Application URL) of the **Web and API Container Apps** for your convenience. + > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names and endpoints(Application URL) of the **Web and API Container Apps** for your convenience. ![](./images/cp-post-deployment.png) @@ -186,13 +186,14 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - Locate the Web Container App (App Service for the frontend) - You can find the **Web Application URL** in the **Overview** section. - + - Locate the API Container App (App Service for the backend) - - You can find the **API Application URL** in the **Overview** section - + - You can find the **API Application URL** in the **Overview** section. + +   - > Note: Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. + > ###### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. From 1572e47d74dc69357345102097dfa8527ad62b4e Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:47:37 +0530 Subject: [PATCH 15/24] readme changes --- docs/DeploymentGuide.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 98b7278e..e50c736b 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -192,8 +192,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - You can find the **API Application URL** in the **Overview** section.   - - > ###### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. + > ##### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. From bd93d977f36780e1ed2aee4ad9a0fc3ae2b63742 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:49:01 +0530 Subject: [PATCH 16/24] readme changes --- docs/DeploymentGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index e50c736b..2ee41721 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -191,8 +191,8 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - You can find the **API Application URL** in the **Overview** section. -   - > ##### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. + + > #### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. From 68914f0f21afbfa5c4eb50450e9b2bc92e27fe35 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 16:51:28 +0530 Subject: [PATCH 17/24] readme changes --- docs/DeploymentGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 2ee41721..f7c04ec2 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -179,7 +179,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain ![](./images/cp-post-deployment.png) - - open the [Azure Portal](https://portal.azure.com/) + - Open the [Azure Portal](https://portal.azure.com/) - Navigate to the deployed Resource Group From 0fa887e009d5237098a8ab77967a85c6a582788e Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 17:09:31 +0530 Subject: [PATCH 18/24] deleted unwanted images --- docs/images/cp-api-container-app.png | Bin 12346 -> 0 bytes docs/images/cp-web-container-app.png | Bin 11857 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/cp-api-container-app.png delete mode 100644 docs/images/cp-web-container-app.png diff --git a/docs/images/cp-api-container-app.png b/docs/images/cp-api-container-app.png deleted file mode 100644 index 10f4dfd7edccbf8e13e2197203982aef17ea1bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12346 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 |lLdfUh^`O9z55oNrx%%md%8w=%) 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 Zrrf+*CnIf=Kp8latdyc;vABWH{{d3)Sa|>d From 7a1da47199c78240c2bff13a6be59dbd732a2f82 Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 20:01:51 +0530 Subject: [PATCH 19/24] readme changes --- docs/DeploymentGuide.md | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index f7c04ec2..c9875030 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -175,24 +175,13 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain 5. Once the deployment has completed successfully: - > Please refer to the screenshot below as a reference for the successful deployment, which also displays the names and endpoints(Application URL) of the **Web and API Container Apps** for your convenience. + > Please refer to the screenshot below as a reference for the successful deployment. It displays the name, endpoint (Application URL), and portal URL for both the **Web and API Container Apps** for your convenience. ![](./images/cp-post-deployment.png) - - Open the [Azure Portal](https://portal.azure.com/) + - You can find the Azure portal link in the screenshot above. Click on it to navigate to the corresponding resource group in the Azure portal. - - Navigate to the deployed Resource Group - - - Locate the Web Container App (App Service for the frontend) - - - You can find the **Web Application URL** in the **Overview** section. - - - Locate the API Container App (App Service for the backend) - - - You can find the **API Application URL** in the **Overview** section. - - - > #### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. + > ###### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. From 0c824f44651d64236f22588ab87c2f222f8aab9c Mon Sep 17 00:00:00 2001 From: Bangarraju-Microsoft Date: Fri, 20 Jun 2025 20:03:21 +0530 Subject: [PATCH 20/24] readme change --- docs/DeploymentGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index c9875030..5b9e61a6 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -181,7 +181,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - You can find the Azure portal link in the screenshot above. Click on it to navigate to the corresponding resource group in the Azure portal. - > ###### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. + > #### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. 6. If you are done trying out the application, you can delete the resources by running `azd down`. From bab12036975f0b8bfe84114e081ccffdad4d9dda Mon Sep 17 00:00:00 2001 From: Prajwal-Microsoft Date: Mon, 23 Jun 2025 10:32:39 +0530 Subject: [PATCH 21/24] docs: Update steps for DeploymentGuide.md --- docs/DeploymentGuide.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 5b9e61a6..d6212635 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -173,9 +173,8 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain - This deployment will take *4-6 minutes* to provision the resources in your account and set up the solution with sample data. - If you encounter an error or timeout during deployment, changing the location may help, as there could be availability constraints for the resources. -5. Once the deployment has completed successfully: - - > Please refer to the screenshot below as a reference for the successful deployment. It displays the name, endpoint (Application URL), and portal URL for both the **Web and API Container Apps** for your convenience. +5. Once the deployment has completed successfully: + > Please check the terminal or console output for details of the successful deployment. It will display the Name, Endpoint (Application URL), and Azure Portal URL for both the Web and API Azure Container Apps. ![](./images/cp-post-deployment.png) @@ -183,7 +182,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain > #### Important Note : Before accessing the application, ensure that all **[Post Deployment Steps](#post-deployment-steps)** are fully completed, as they are critical for the proper configuration of **Data Ingestion** and **Authentication** functionalities. -6. If you are done trying out the application, you can delete the resources by running `azd down`. +7. If you are done trying out the application, you can delete the resources by running `azd down`. ### Publishing Local Build Container to Azure Container Registry From 17d65a2350a8e06e09c4bd894620771ff47d9adc Mon Sep 17 00:00:00 2001 From: Prajwal D C Date: Wed, 25 Jun 2025 20:45:52 +0530 Subject: [PATCH 22/24] feat: Removed local build from preprovision and added as part of post deployment --- azure.yaml | 7 - docs/CustomizingAzdParameters.md | 1 - docs/DeploymentGuide.md | 24 +- .../container_app/deploy_container_app.bicep | 8 +- .../deploy_container_app_api_web.bicep | 4 - infra/deploy_container_registry.bicep | 16 ++ infra/deploy_role_assignments.bicep | 14 -- infra/main.bicep | 44 ++-- infra/main.bicepparam | 12 - infra/main.json | 229 ++++-------------- infra/main.parameters.json | 33 +++ infra/scripts/docker-build.ps1 | 162 ++++++++----- infra/scripts/docker-build.sh | 177 ++++++++------ 13 files changed, 332 insertions(+), 399 deletions(-) delete mode 100644 infra/main.bicepparam create mode 100644 infra/main.parameters.json diff --git a/azure.yaml b/azure.yaml index b5b9121e..d695029d 100644 --- a/azure.yaml +++ b/azure.yaml @@ -8,13 +8,6 @@ metadata: name: content-processinge@1.0 hooks: - preprovision: - posix: - shell: sh - run: timestamp=$(date +"%Y%m%d-%H%M%S"); logFile="azd_preprovision_$timestamp.log"; sed -i 's/\r$//' ./infra/scripts/docker-build.sh; ./infra/scripts/docker-build.sh "$AZURE_SUBSCRIPTION_ID" "$AZURE_ENV_NAME" "$AZURE_LOCATION" "$AZURE_RESOURCE_GROUP" "$USE_LOCAL_BUILD" "$AZURE_ENV_IMAGETAG" 2>&1 | tee "$logFile" - windows: - shell: pwsh - run: $timestamp = Get-Date -Format "yyyyMMdd-HHmmss"; $logFile = "azd_preprovision_$timestamp.log"; ./infra/scripts/docker-build.ps1 $env:AZURE_SUBSCRIPTION_ID $env:AZURE_ENV_NAME $env:AZURE_LOCATION $env:AZURE_RESOURCE_GROUP $env:USE_LOCAL_BUILD $env:AZURE_ENV_IMAGETAG *>&1 | Tee-Object -FilePath $logFile postprovision: posix: shell: sh diff --git a/docs/CustomizingAzdParameters.md b/docs/CustomizingAzdParameters.md index d16f28ab..2ed4c383 100644 --- a/docs/CustomizingAzdParameters.md +++ b/docs/CustomizingAzdParameters.md @@ -16,7 +16,6 @@ By default this template will use the environment name as the prefix to prevent | `AZURE_ENV_MODEL_NAME` | string | `gpt-4o` | Specifies the GPT model name (allowed values: `gpt-4o`). | `AZURE_ENV_MODEL_VERSION` | string | `2024-08-06` | Specifies the GPT model version (allowed values: `2024-08-06`). | | `AZURE_ENV_MODEL_CAPACITY` | integer | `30` | Sets the model capacity (choose based on your subscription's available GPT capacity). | -| `USE_LOCAL_BUILD` | boolean | `false` | Indicates whether to use a local container build for deployment. | | `AZURE_ENV_IMAGETAG` | boolean | `latest` | Set the Image tag Like (allowed values: latest, dev, hotfix) | | `AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID` | string | `` | Reuses an existing Log Analytics Workspace instead of provisioning a new one. | diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 0735575f..f09fb732 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -177,34 +177,24 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain 6. If you are done trying out the application, you can delete the resources by running `azd down`. -### Publishing Local Build Container to Azure Container Registry +## Post Deployment Steps +1. Optional: Publishing Local Build Container to Azure Container Registry If you need to rebuild the source code and push the updated container to the deployed Azure Container Registry, follow these steps: -1. Set the environment variable `USE_LOCAL_BUILD` to `True`: - - **Linux/macOS**: ```bash - export USE_LOCAL_BUILD=True + cd ./infra/scripts/ + ./docker-build.sh ``` - **Windows (PowerShell)**: ```powershell - $env:USE_LOCAL_BUILD = $true + cd .\infra\scripts\ + .\docker-build.ps1 ``` -2. Run the `az login` command - ```bash - az login - ``` - -3. Run the `azd up` command again to rebuild and push the updated container: - ```bash - azd up - ``` -This will rebuild the source code, package it into a container, and push it to the Azure Container Registry associated with your deployment. - -## Post Deployment Steps +This will create a new Azure Container Registry, rebuild the source code, package it into a container, and push it to the Container Registry created. 1. **Register Schema Files** diff --git a/infra/container_app/deploy_container_app.bicep b/infra/container_app/deploy_container_app.bicep index a20a6b0c..5275a843 100644 --- a/infra/container_app/deploy_container_app.bicep +++ b/infra/container_app/deploy_container_app.bicep @@ -16,7 +16,6 @@ param probes array = [] param allowedOrigins array = [] param minReplicas int = 1 param maxReplicas int = 1 -param useLocalBuild string = 'false' //Todo: Add Appconfig endpoint as Env variable @@ -34,12 +33,7 @@ resource processorContainerApp 'Microsoft.App/containerApps@2024-03-01' = { environmentId: containerEnvId workloadProfileName: 'Consumption' configuration:{ - registries: useLocalBuild == 'true' ? [ - { - server: azureContainerRegistry - identity: managedIdentityId - } - ] : null + registries: null ingress: enableIngress ? { external: true transport: 'auto' diff --git a/infra/container_app/deploy_container_app_api_web.bicep b/infra/container_app/deploy_container_app_api_web.bicep index 41272dd2..9245898f 100644 --- a/infra/container_app/deploy_container_app_api_web.bicep +++ b/infra/container_app/deploy_container_app_api_web.bicep @@ -25,7 +25,6 @@ param maxReplicaContainerWeb int = 1 // Container related params param azureContainerRegistry string param containerRegistryReaderId string -param useLocalBuild string = 'false' param imageTag string var abbrs = loadJsonContent('../abbreviations.json') @@ -88,7 +87,6 @@ module containerApp 'deploy_container_app.bicep' = { enableIngress: false minReplicas: minReplicaContainerApp maxReplicas: maxReplicaContainerApp - useLocalBuild: useLocalBuild } } @@ -112,7 +110,6 @@ module containerAppApi 'deploy_container_app.bicep' = { probes: probes minReplicas: minReplicaContainerApi maxReplicas: maxReplicaContainerApi - useLocalBuild: useLocalBuild } } @@ -154,7 +151,6 @@ module containerAppWeb 'deploy_container_app.bicep' = { ] minReplicas: minReplicaContainerWeb maxReplicas: maxReplicaContainerWeb - useLocalBuild: useLocalBuild } } diff --git a/infra/deploy_container_registry.bicep b/infra/deploy_container_registry.bicep index 021fb7b4..571e10af 100644 --- a/infra/deploy_container_registry.bicep +++ b/infra/deploy_container_registry.bicep @@ -14,6 +14,9 @@ param location string = resourceGroup().location @description('Provide a tier of your Azure Container Registry.') param acrSku string = 'Basic' + +@description('List of Principal Ids to which ACR pull role assignment is required') +param acrPullPrincipalIds array = [] resource containerRegistry 'Microsoft.ContainerRegistry/registries@2021-09-01' = { name: containerNameCleaned @@ -26,6 +29,19 @@ resource containerRegistry 'Microsoft.ContainerRegistry/registries@2021-09-01' = zoneRedundancy: 'Disabled' } } + +// Add Role assignments for required principal id's +resource acrPullRoleAssignments 'Microsoft.Authorization/roleAssignments@2022-04-01' = [for principalId in acrPullPrincipalIds: { + name: guid(principalId, 'acrpull') + scope: containerRegistry + properties: { + roleDefinitionId: subscriptionResourceId( + 'Microsoft.Authorization/roleDefinitions', + '7f951dda-4ed3-4680-a7ca-43fe172d538d' + ) + principalId: principalId + } +}] output createdAcrName string = containerNameCleaned output createdAcrId string = containerRegistry.id diff --git a/infra/deploy_role_assignments.bicep b/infra/deploy_role_assignments.bicep index a8c8e8f7..4c915418 100644 --- a/infra/deploy_role_assignments.bicep +++ b/infra/deploy_role_assignments.bicep @@ -9,8 +9,6 @@ param storagePrincipalId string // Resource ID of the Storage account param aiServiceCUId string // Resource ID of the Azure AI Content Understanding Service param aiServiceId string // Resource ID of the Azure Open AI service -param containerRegistryReaderPrincipalId string - resource appConfigDataReader 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = { scope: resourceGroup() name: '516239f1-63e1-4d78-a4de-a74fb236a071' @@ -130,15 +128,3 @@ resource cognitiveServicesUserRoleAssignment 'Microsoft.Authorization/roleAssign principalType: 'ServicePrincipal' } } - -resource acrPullRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(containerRegistryReaderPrincipalId, 'acrpull') - scope: resourceGroup() - properties: { - roleDefinitionId: subscriptionResourceId( - 'Microsoft.Authorization/roleDefinitions', - '7f951dda-4ed3-4680-a7ca-43fe172d538d' - ) // AcrPull role - principalId: containerRegistryReaderPrincipalId - } -} diff --git a/infra/main.bicep b/infra/main.bicep index b2cb538b..83501cf8 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -20,7 +20,16 @@ param secondaryLocation string = 'EastUs2' type: 'location' } }) -param contentUnderstandingLocation string +param contentUnderstandingLocation string = 'WestUS' + +@metadata({azd: { + type: 'location' + usageName: [ + 'OpenAI.GlobalStandard.gpt-4o,100' + ] + } +}) +param aiDeploymentsLocation string @minLength(1) @description('GPT model deployment type:') @@ -36,8 +45,6 @@ param gptModelName string = 'gpt-4o' @description('Version of the GPT model to deploy:') param gptModelVersion string = '2024-08-06' -//var gptModelVersion = '2024-02-15-preview' - @minValue(10) @description('Capacity of the GPT deployment:') // You can increase this, but capacity is limited per model/region, so you will get errors if you go over @@ -62,9 +69,6 @@ param minReplicaContainerWeb int = 1 @description('Maximum number of replicas to be added for Container Web App') param maxReplicaContainerWeb int = 1 -@description('Set this flag to true only if you are deplpoying from Local') -param useLocalBuild string = 'false' - @description('Optional: Existing Log Analytics Workspace Resource ID') param existingLogAnalyticsWorkspaceId string = '' @@ -76,9 +80,6 @@ var resourceGroupLocation = resourceGroup().location // Load the abbrevations file required to name the azure resources. var abbrs = loadJsonContent('./abbreviations.json') -// Convert input to lowercase -var useLocalBuildLower = toLower(useLocalBuild) - // ========== Managed Identity ========== // module managedIdentityModule 'deploy_managed_identity.bicep' = { name: 'deploy_managed_identity' @@ -111,13 +112,13 @@ module applicationInsights 'deploy_app_insights.bicep' = { } } -// ========== Container Registry ========== // -module containerRegistry 'deploy_container_registry.bicep' = { - name: 'deploy_container_registry' - params: { - environmentName: environmentName - } -} +// // ========== Container Registry ========== // +// module containerRegistry 'deploy_container_registry.bicep' = { +// name: 'deploy_container_registry' +// params: { +// environmentName: environmentName +// } +// } // ========== Storage Account ========== // module storage 'deploy_storage_account.bicep' = { @@ -134,7 +135,7 @@ module aifoundry 'deploy_ai_foundry.bicep' = { name: 'deploy_ai_foundry' params: { solutionName: solutionPrefix - solutionLocation: resourceGroupLocation + solutionLocation: aiDeploymentsLocation cuLocation: contentUnderstandingLocation deploymentType: deploymentType gptModelName: gptModelName @@ -173,7 +174,6 @@ module containerApps './container_app/deploy_container_app_api_web.bicep' = { maxReplicaContainerApi: maxReplicaContainerApi minReplicaContainerWeb: minReplicaContainerWeb maxReplicaContainerWeb: maxReplicaContainerWeb - useLocalBuild: 'false' imageTag: 'latest' } } @@ -221,7 +221,6 @@ module roleAssignments 'deploy_role_assignments.bicep' = { containerAppPrincipalId: containerApps.outputs.containerAppPrincipalId aiServiceCUId: aifoundry.outputs.aiServicesCuId aiServiceId: aifoundry.outputs.aiServicesId - containerRegistryReaderPrincipalId: containerAppEnv.outputs.containerRegistryReaderPrincipalId } } @@ -230,7 +229,7 @@ module updateContainerApp './container_app/deploy_container_app_api_web.bicep' = params: { solutionName: solutionPrefix location: secondaryLocation - azureContainerRegistry: useLocalBuildLower == 'true' ? containerRegistry.outputs.acrEndpoint : containerImageEndPoint + azureContainerRegistry: containerImageEndPoint appConfigEndPoint: appconfig.outputs.appConfigEndpoint containerAppEnvId: containerAppEnv.outputs.containerEnvId containerRegistryReaderId: containerAppEnv.outputs.containerRegistryReaderId @@ -242,7 +241,6 @@ module updateContainerApp './container_app/deploy_container_app_api_web.bicep' = maxReplicaContainerApi: maxReplicaContainerApi minReplicaContainerWeb: minReplicaContainerWeb maxReplicaContainerWeb: maxReplicaContainerWeb - useLocalBuild: useLocalBuildLower imageTag: imageTag } dependsOn: [roleAssignments] @@ -251,4 +249,8 @@ module updateContainerApp './container_app/deploy_container_app_api_web.bicep' = output CONTAINER_WEB_APP_NAME string = containerApps.outputs.containerAppWebName output CONTAINER_API_APP_NAME string = containerApps.outputs.containerAppApiName output CONTAINER_WEB_APP_FQDN string = containerApps.outputs.containweAppWebEndPoint +output CONTAINER_APP_NAME string = containerApps.outputs.containerAppName output CONTAINER_API_APP_FQDN string = containerApps.outputs.containweAppApiEndPoint +output CONTAINER_APP_USER_IDENTITY_ID string = containerAppEnv.outputs.containerRegistryReaderId +output CONTAINER_APP_USER_PRINCIPAL_ID string = containerAppEnv.outputs.containerRegistryReaderPrincipalId +output AZURE_ENV_IMAGETAG string = imageTag diff --git a/infra/main.bicepparam b/infra/main.bicepparam deleted file mode 100644 index b6a15d71..00000000 --- a/infra/main.bicepparam +++ /dev/null @@ -1,12 +0,0 @@ -using './main.bicep' - -param environmentName = readEnvironmentVariable('AZURE_ENV_NAME', 'cps') -param secondaryLocation = readEnvironmentVariable('AZURE_ENV_SECONDARY_LOCATION', 'EastUs2') -param contentUnderstandingLocation = readEnvironmentVariable('AZURE_ENV_CU_LOCATION', 'WestUS') -param deploymentType = readEnvironmentVariable('AZURE_ENV_MODEL_DEPLOYMENT_TYPE', 'GlobalStandard') -param gptModelName = readEnvironmentVariable('AZURE_ENV_MODEL_NAME', 'gpt-4o') -param gptModelVersion = readEnvironmentVariable('AZURE_ENV_MODEL_VERSION', '2024-08-06') -param gptDeploymentCapacity = int(readEnvironmentVariable('AZURE_ENV_MODEL_CAPACITY', '30')) -param useLocalBuild = readEnvironmentVariable('USE_LOCAL_BUILD', 'false') -param imageTag = readEnvironmentVariable('AZURE_ENV_IMAGETAG', 'latest') -param existingLogAnalyticsWorkspaceId = readEnvironmentVariable('AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID', '') diff --git a/infra/main.json b/infra/main.json index 4221a0bb..cda89093 100644 --- a/infra/main.json +++ b/infra/main.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "7133413659987113184" + "templateHash": "4455095207947106270" } }, "parameters": { @@ -26,6 +26,7 @@ }, "contentUnderstandingLocation": { "type": "string", + "defaultValue": "WestUS", "allowedValues": [ "WestUS", "SwedenCentral", @@ -39,6 +40,17 @@ }, "minLength": 1 }, + "aiDeploymentsLocation": { + "type": "string", + "metadata": { + "azd": { + "type": "location", + "usageName": [ + "OpenAI.GlobalStandard.gpt-4o,100" + ] + } + } + }, "deploymentType": { "type": "string", "defaultValue": "GlobalStandard", @@ -115,13 +127,6 @@ "description": "Maximum number of replicas to be added for Container Web App" } }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false", - "metadata": { - "description": "Set this flag to true only if you are deplpoying from Local" - } - }, "existingLogAnalyticsWorkspaceId": { "type": "string", "defaultValue": "", @@ -368,8 +373,7 @@ "solutionPrefix": "[format('cps-{0}', padLeft(take(variables('uniqueId'), 12), 12, '0'))]", "containerImageEndPoint": "cpscontainerreg.azurecr.io", "resourceGroupLocation": "[resourceGroup().location]", - "abbrs": "[variables('$fxv#0')]", - "useLocalBuildLower": "[toLower(parameters('useLocalBuild'))]" + "abbrs": "[variables('$fxv#0')]" }, "resources": [ { @@ -678,86 +682,6 @@ } } }, - { - "type": "Microsoft.Resources/deployments", - "apiVersion": "2022-09-01", - "name": "deploy_container_registry", - "properties": { - "expressionEvaluationOptions": { - "scope": "inner" - }, - "mode": "Incremental", - "parameters": { - "environmentName": { - "value": "[parameters('environmentName')]" - } - }, - "template": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "metadata": { - "_generator": { - "name": "bicep", - "version": "0.36.1.42791", - "templateHash": "6955709595359352278" - } - }, - "parameters": { - "environmentName": { - "type": "string" - }, - "location": { - "type": "string", - "defaultValue": "[resourceGroup().location]", - "metadata": { - "description": "Provide a location for the registry." - } - }, - "acrSku": { - "type": "string", - "defaultValue": "Basic", - "metadata": { - "description": "Provide a tier of your Azure Container Registry." - } - } - }, - "variables": { - "uniqueId": "[toLower(uniqueString(subscription().id, parameters('environmentName'), resourceGroup().location))]", - "solutionName": "[format('cps-{0}', padLeft(take(variables('uniqueId'), 12), 12, '0'))]", - "containerNameCleaned": "[replace(format('cr{0}', variables('solutionName')), '-', '')]" - }, - "resources": [ - { - "type": "Microsoft.ContainerRegistry/registries", - "apiVersion": "2021-09-01", - "name": "[variables('containerNameCleaned')]", - "location": "[parameters('location')]", - "sku": { - "name": "[parameters('acrSku')]" - }, - "properties": { - "publicNetworkAccess": "Enabled", - "zoneRedundancy": "Disabled" - } - } - ], - "outputs": { - "createdAcrName": { - "type": "string", - "value": "[variables('containerNameCleaned')]" - }, - "createdAcrId": { - "type": "string", - "value": "[resourceId('Microsoft.ContainerRegistry/registries', variables('containerNameCleaned'))]" - }, - "acrEndpoint": { - "type": "string", - "value": "[reference(resourceId('Microsoft.ContainerRegistry/registries', variables('containerNameCleaned')), '2021-09-01').loginServer]" - } - } - } - } - }, { "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", @@ -906,7 +830,7 @@ "value": "[variables('solutionPrefix')]" }, "solutionLocation": { - "value": "[variables('resourceGroupLocation')]" + "value": "[parameters('aiDeploymentsLocation')]" }, "cuLocation": { "value": "[parameters('contentUnderstandingLocation')]" @@ -1503,9 +1427,6 @@ "maxReplicaContainerWeb": { "value": "[parameters('maxReplicaContainerWeb')]" }, - "useLocalBuild": { - "value": "false" - }, "imageTag": { "value": "latest" } @@ -1517,7 +1438,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "9208787367229886695" + "templateHash": "10338800926086953929" } }, "parameters": { @@ -1590,10 +1511,6 @@ "containerRegistryReaderId": { "type": "string" }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" - }, "imageTag": { "type": "string" } @@ -1913,9 +1830,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerApp')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -1925,7 +1839,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -1973,10 +1887,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -1996,7 +1906,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -2093,9 +2003,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerApi')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -2105,7 +2012,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -2153,10 +2060,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -2176,7 +2079,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -2285,9 +2188,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerWeb')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -2297,7 +2197,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -2345,10 +2245,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -2368,7 +2264,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -2822,9 +2718,6 @@ }, "aiServiceId": { "value": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_ai_foundry'), '2022-09-01').outputs.aiServicesId.value]" - }, - "containerRegistryReaderPrincipalId": { - "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_env'), '2022-09-01').outputs.containerRegistryReaderPrincipalId.value]" } }, "template": { @@ -2834,7 +2727,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "4418232655579357592" + "templateHash": "1992580664978730799" } }, "parameters": { @@ -2861,9 +2754,6 @@ }, "aiServiceId": { "type": "string" - }, - "containerRegistryReaderPrincipalId": { - "type": "string" } }, "resources": [ @@ -2963,15 +2853,6 @@ "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'a97b65f3-24c7-4388-baec-2e87135dc908')]", "principalType": "ServicePrincipal" } - }, - { - "type": "Microsoft.Authorization/roleAssignments", - "apiVersion": "2022-04-01", - "name": "[guid(parameters('containerRegistryReaderPrincipalId'), 'acrpull')]", - "properties": { - "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')]", - "principalId": "[parameters('containerRegistryReaderPrincipalId')]" - } } ] } @@ -2979,7 +2860,6 @@ "dependsOn": [ "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_ai_foundry')]", "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_app_config_service')]", - "[resourceId('Microsoft.Resources/deployments', 'deploy_container_app_env')]", "[resourceId('Microsoft.Resources/deployments', 'deploy_container_app_api_web')]", "[resourceId('Microsoft.Resources/deployments', 'deploy_storage_account')]" ] @@ -3000,7 +2880,9 @@ "location": { "value": "[parameters('secondaryLocation')]" }, - "azureContainerRegistry": "[if(equals(variables('useLocalBuildLower'), 'true'), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_registry'), '2022-09-01').outputs.acrEndpoint.value), createObject('value', variables('containerImageEndPoint')))]", + "azureContainerRegistry": { + "value": "[variables('containerImageEndPoint')]" + }, "appConfigEndPoint": { "value": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_app_config_service'), '2022-09-01').outputs.appConfigEndpoint.value]" }, @@ -3034,9 +2916,6 @@ "maxReplicaContainerWeb": { "value": "[parameters('maxReplicaContainerWeb')]" }, - "useLocalBuild": { - "value": "[variables('useLocalBuildLower')]" - }, "imageTag": { "value": "[parameters('imageTag')]" } @@ -3048,7 +2927,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "9208787367229886695" + "templateHash": "10338800926086953929" } }, "parameters": { @@ -3121,10 +3000,6 @@ "containerRegistryReaderId": { "type": "string" }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" - }, "imageTag": { "type": "string" } @@ -3444,9 +3319,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerApp')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -3456,7 +3328,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -3504,10 +3376,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -3527,7 +3395,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -3624,9 +3492,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerApi')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -3636,7 +3501,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -3684,10 +3549,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -3707,7 +3568,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -3816,9 +3677,6 @@ }, "maxReplicas": { "value": "[parameters('maxReplicaContainerWeb')]" - }, - "useLocalBuild": { - "value": "[parameters('useLocalBuild')]" } }, "template": { @@ -3828,7 +3686,7 @@ "_generator": { "name": "bicep", "version": "0.36.1.42791", - "templateHash": "13562163699289922411" + "templateHash": "8984863566776850276" } }, "parameters": { @@ -3876,10 +3734,6 @@ "maxReplicas": { "type": "int", "defaultValue": 1 - }, - "useLocalBuild": { - "type": "string", - "defaultValue": "false" } }, "resources": [ @@ -3899,7 +3753,7 @@ "environmentId": "[parameters('containerEnvId')]", "workloadProfileName": "Consumption", "configuration": { - "registries": "[if(equals(parameters('useLocalBuild'), 'true'), createArray(createObject('server', parameters('azureContainerRegistry'), 'identity', parameters('managedIdentityId'))), null())]", + "registries": null, "ingress": "[if(parameters('enableIngress'), createObject('external', true(), 'transport', 'auto', 'allowInsecure', true(), 'corsPolicy', if(greater(length(parameters('allowedOrigins')), 0), createObject('allowedOrigins', parameters('allowedOrigins'), 'allowedMethods', createArray('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 'allowedHeaders', createArray('Authorization', 'Content-Type', '*')), null())), null())]" }, "template": { @@ -3985,7 +3839,6 @@ "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_app_config_service')]", "[resourceId('Microsoft.Resources/deployments', 'deploy_container_app_env')]", "[resourceId('Microsoft.Resources/deployments', 'deploy_container_app_api_web')]", - "[resourceId('Microsoft.Resources/deployments', 'deploy_container_registry')]", "[resourceId('Microsoft.Resources/deployments', 'deploy_role_assignments')]" ] } @@ -4003,9 +3856,25 @@ "type": "string", "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_api_web'), '2022-09-01').outputs.containweAppWebEndPoint.value]" }, + "CONTAINER_APP_NAME": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_api_web'), '2022-09-01').outputs.containerAppName.value]" + }, "CONTAINER_API_APP_FQDN": { "type": "string", "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_api_web'), '2022-09-01').outputs.containweAppApiEndPoint.value]" + }, + "CONTAINER_APP_USER_IDENTITY_ID": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_env'), '2022-09-01').outputs.containerRegistryReaderId.value]" + }, + "CONTAINER_APP_USER_PRINCIPAL_ID": { + "type": "string", + "value": "[reference(resourceId('Microsoft.Resources/deployments', 'deploy_container_app_env'), '2022-09-01').outputs.containerRegistryReaderPrincipalId.value]" + }, + "AZURE_ENV_IMAGETAG": { + "type": "string", + "value": "[parameters('imageTag')]" } } } \ No newline at end of file diff --git a/infra/main.parameters.json b/infra/main.parameters.json new file mode 100644 index 00000000..c38f5aa2 --- /dev/null +++ b/infra/main.parameters.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "environmentName": { + "value": "${AZURE_ENV_NAME}" + }, + "secondaryLocation": { + "value": "${AZURE_ENV_SECONDARY_LOCATION}" + }, + "contentUnderstandingLocation": { + "value": "${AZURE_ENV_CU_LOCATION}" + }, + "deploymentType": { + "value": "${AZURE_ENV_MODEL_DEPLOYMENT_TYPE}" + }, + "gptModelName": { + "value": "${AZURE_ENV_MODEL_NAME}" + }, + "gptModelVersion": { + "value": "${AZURE_ENV_MODEL_VERSION}" + }, + "gptDeploymentCapacity": { + "value": "${AZURE_ENV_MODEL_CAPACITY}" + }, + "imageTag": { + "value": "latest" + }, + "existingLogAnalyticsWorkspaceId": { + "value": "${AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID}" + } + } +} diff --git a/infra/scripts/docker-build.ps1 b/infra/scripts/docker-build.ps1 index 8a0816d3..00920edc 100644 --- a/infra/scripts/docker-build.ps1 +++ b/infra/scripts/docker-build.ps1 @@ -1,65 +1,13 @@ -# Define script parameters -param ( - [string]$AZURE_SUBSCRIPTION_ID, - [string]$ENV_NAME, - [string]$AZURE_LOCATION, - [string]$AZURE_RESOURCE_GROUP, - [string]$USE_LOCAL_BUILD, - [string]$AZURE_ENV_IMAGETAG -) - -# Convert USE_LOCAL_BUILD to Boolean -$USE_LOCAL_BUILD = if ($USE_LOCAL_BUILD -match "^(?i:true)$") { $true } else { $false } - -if ([string]::IsNullOrEmpty($AZURE_ENV_IMAGETAG)) { - $AZURE_ENV_IMAGETAG = "latest" -} - -# Validate required parameters -if (-not $AZURE_SUBSCRIPTION_ID -or -not $ENV_NAME -or -not $AZURE_LOCATION -or -not $AZURE_RESOURCE_GROUP) { - Write-Error "Missing required arguments. Usage: docker-build.ps1 " - exit 1 -} - -if ($USE_LOCAL_BUILD -eq $false) { - Write-Output "Local Build not enabled. Using prebuilt image." - exit 0 -} - -Write-Output "Local Build enabled. Starting build process." - -# Set Azure subscription -az account set --subscription "$AZURE_SUBSCRIPTION_ID" -if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to set Azure subscription." - exit 1 -} - -# Deploy container registry -Write-Host "Deploying container registry in location: $AZURE_LOCATION" -$OUTPUTS = az deployment group create --resource-group $AZURE_RESOURCE_GROUP --template-file "./infra/deploy_container_registry.bicep" --parameters environmentName=$ENV_NAME --query "properties.outputs" --output json | ConvertFrom-Json -# Extract ACR name and endpoint -$ACR_NAME = $OUTPUTS.createdAcrName.value -$ACR_ENDPOINT = $OUTPUTS.acrEndpoint.value - -Write-Host "Extracted ACR Name: $ACR_NAME" -Write-Host "Extracted ACR Endpoint: $ACR_ENDPOINT" - -# Store outputs in a .env file -Set-Content -Path .env -Value "ACR_NAME=$ACR_NAME`nACR_ENDPOINT=$ACR_ENDPOINT" - -# Set ACR details as environment variables in AZD -azd env set ACR_NAME $ACR_NAME -azd env set ACR_ENDPOINT $ACR_ENDPOINT - -Write-Host "Saved ACR details to AZD environment variables." +# Get all environment values +$envValues = azd env get-values --output json | ConvertFrom-Json # Define function to build and push Docker images function Build-And-Push-Image { param ( [string]$IMAGE_NAME, - [string]$BUILD_PATH + [string]$BUILD_PATH, + [string]$CONTAINER_APP_NAME ) $IMAGE_URI = "$ACR_NAME.azurecr.io/$($IMAGE_NAME):$AZURE_ENV_IMAGETAG" @@ -79,8 +27,104 @@ function Build-And-Push-Image { } Write-Host "Docker image pushed successfully: $IMAGE_URI" + + if($CONTAINER_APP_NAME) + { + Write-Host "Updating the Container app registry server & image" + az containerapp registry set --name $CONTAINER_APP_NAME --resource-group $AZURE_RESOURCE_GROUP --server "$ACR_NAME.azurecr.io" --identity $CONTAINER_APP_USER_IDENTITY_ID --only-show-errors + az containerapp update --name $CONTAINER_APP_NAME --resource-group $AZURE_RESOURCE_GROUP --image $IMAGE_URI --only-show-errors + Write-Host "Updated the registry for Container: $CONTAINER_APP_NAME" + } +} + +function Ensure-AzLogin { + try { + $accountInfo = az account show --only-show-errors | ConvertFrom-Json + Write-Host "Already logged in as: $($accountInfo.user.name)" + } catch { + Write-Host "No active Azure session found. Logging in..." + az login --only-show-errors | Out-Null + + if ($LASTEXITCODE -ne 0) { + Write-Error "Azure login failed." + exit 1 + } + + # Set Azure subscription + az account set --subscription "$AZURE_SUBSCRIPTION_ID" + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to set Azure subscription." + exit 1 + } + } } +# Validate and fetch required parameters from azd env if missing +function Get-AzdEnvValueOrDefault { + param ( + [Parameter(Mandatory = $true)] + [string]$KeyName, + + [Parameter(Mandatory = $false)] + [string]$DefaultValue = "", + + [Parameter(Mandatory = $false)] + [bool]$Required = $false + ) + + # Check if key exists + if ($envValues.PSObject.Properties.Name -contains $KeyName) { + return $envValues.$KeyName + } + + # Key doesn't exist + if ($Required) { + Write-Error "Required environment key '$KeyName' not found in azd environment." + exit 1 + } else { + return $DefaultValue + } +} + +# Read the required details from Bicep deployment output +$AZURE_SUBSCRIPTION_ID = Get-AzdEnvValueOrDefault -KeyName "AZURE_SUBSCRIPTION_ID" -Required $true +$ENV_NAME = Get-AzdEnvValueOrDefault -KeyName "AZURE_ENV_NAME" -Required $true +$CONTAINER_APP_USER_IDENTITY_ID = Get-AzdEnvValueOrDefault -KeyName "CONTAINER_APP_USER_IDENTITY_ID" -Required $true +$AZURE_RESOURCE_GROUP = Get-AzdEnvValueOrDefault -KeyName "AZURE_RESOURCE_GROUP" -Required $true +$CONTAINER_APP_USER_PRINCIPAL_ID = Get-AzdEnvValueOrDefault -KeyName "CONTAINER_APP_USER_PRINCIPAL_ID" -Required $true +$AZURE_ENV_IMAGETAG = Get-AzdEnvValueOrDefault -KeyName "AZURE_ENV_IMAGETAG" -DefaultValue "latest" +$CONTAINER_WEB_APP_NAME=Get-AzdEnvValueOrDefault -KeyName "CONTAINER_WEB_APP_NAME" -Required $true +$CONTAINER_API_APP_NAME=Get-AzdEnvValueOrDefault -KeyName "CONTAINER_API_APP_NAME" -Required $true +$CONTAINER_APP_NAME=Get-AzdEnvValueOrDefault -KeyName "CONTAINER_APP_NAME" -Required $true + +# Export the variables for later use +Write-Host "Using the following parameters:" +Write-Host "AZURE_SUBSCRIPTION_ID = $AZURE_SUBSCRIPTION_ID" +Write-Host "ENV_NAME = $ENV_NAME" +Write-Host "AZURE_RESOURCE_GROUP = $AZURE_RESOURCE_GROUP" +Write-Host "AZURE_ENV_IMAGETAG = $AZURE_ENV_IMAGETAG" + +Ensure-AzLogin + +Write-Output "Starting build process." + +# Deploy container registry +Write-Host "Deploying container registry" +$OUTPUTS = az deployment group create --resource-group $AZURE_RESOURCE_GROUP --template-file "./infra/deploy_container_registry.bicep" --parameters environmentName=$ENV_NAME acrPullPrincipalIds="['$($CONTAINER_APP_USER_PRINCIPAL_ID)']" --query "properties.outputs" --output json | ConvertFrom-Json + +# Extract ACR name and endpoint +$ACR_NAME = $OUTPUTS.createdAcrName.value +$ACR_ENDPOINT = $OUTPUTS.acrEndpoint.value + +Write-Host "Extracted ACR Name: $ACR_NAME" +Write-Host "Extracted ACR Endpoint: $ACR_ENDPOINT" + +# Set ACR details as environment variables in AZD +azd env set ACR_NAME $ACR_NAME +azd env set ACR_ENDPOINT $ACR_ENDPOINT + +Write-Host "Saved ACR details to AZD environment variables." + # Log in to Azure Container Registry Write-Host "Logging into Azure Container Registry: $ACR_NAME" az acr login -n $ACR_NAME @@ -90,8 +134,8 @@ if ($LASTEXITCODE -ne 0) { } # Build and push images -Build-And-Push-Image "contentprocessor" ".\src\ContentProcessor\" -Build-And-Push-Image "contentprocessorapi" ".\src\ContentProcessorAPI\" -Build-And-Push-Image "contentprocessorweb" ".\src\ContentProcessorWeb\" +Build-And-Push-Image "contentprocessor" ".\src\ContentProcessor\" $CONTAINER_APP_NAME +Build-And-Push-Image "contentprocessorapi" ".\src\ContentProcessorAPI\" $CONTAINER_API_APP_NAME +Build-And-Push-Image "contentprocessorweb" ".\src\ContentProcessorWeb\" $CONTAINER_WEB_APP_NAME Write-Host "All Docker images built and pushed successfully." diff --git a/infra/scripts/docker-build.sh b/infra/scripts/docker-build.sh index 3c080a9d..7302772a 100644 --- a/infra/scripts/docker-build.sh +++ b/infra/scripts/docker-build.sh @@ -1,88 +1,111 @@ #!/bin/bash -echo "In shell script" - -echo $1 -echo $2 -echo $3 -echo $4 -echo $5 -echo $6 - -# Check if the required arguments are provided -if [ "$#" -ne 6 ]; then - echo "Usage: docker-build.sh " - exit 1 -fi - -AZURE_SUBSCRIPTION_ID=$1 -ENV_NAME=$2 -AZURE_LOCATION=$3 -AZURE_RESOURCE_GROUP=$4 -USE_LOCAL_BUILD=$5 -AZURE_ENV_IMAGETAG=$6 - -USE_LOCAL_BUILD=$(echo "$USE_LOCAL_BUILD" | grep -iq "^true$" && echo "true" || echo "false") - -AZURE_ENV_IMAGETAG=${AZURE_ENV_IMAGETAG:-latest} - -if [ "$USE_LOCAL_BUILD" = "true" ]; then - echo "Local Build enabled. Starting build process." - az account set --subscription "$AZURE_SUBSCRIPTION_ID" - - # Deploy container registry - echo "Deploying container registry in location: $AZURE_LOCATION" - OUTPUTS=$(az deployment group create --resource-group "$AZURE_RESOURCE_GROUP" \ - --template-file "./infra/deploy_container_registry.bicep" \ - --parameters environmentName="$ENV_NAME" --query "properties.outputs" --output json) - - ACR_NAME=$(echo "$OUTPUTS" | jq -r '.createdAcrName.value') - ACR_ENDPOINT=$(echo "$OUTPUTS" | jq -r '.acrEndpoint.value') - - echo "Extracted ACR Name: $ACR_NAME" - echo "Extracted ACR Endpoint: $ACR_ENDPOINT" - - # Store outputs in a .env file - echo -e "ACR_NAME=$ACR_NAME\nACR_ENDPOINT=$ACR_ENDPOINT" > .env +set -e - # Set AZD environment variables - azd env set ACR_NAME "$ACR_NAME" - azd env set ACR_ENDPOINT "$ACR_ENDPOINT" +# Get all environment values +echo "Fetching environment values from azd..." +ENV_VALUES_JSON=$(azd env get-values --output json) - echo "Saved ACR details to AZD environment variables." - echo "Deployed container registry in location." +get_azd_env_value_or_default() { + local key="$1" + local default="$2" + local required="${3:-false}" - # Construct full image names - CONTENTPROCESSOR_IMAGE_URI="$ACR_NAME.azurecr.io/contentprocessor:$AZURE_ENV_IMAGETAG" - CONTENTPROCESSORAPI_IMAGE_URI="$ACR_NAME.azurecr.io/contentprocessorapi:$AZURE_ENV_IMAGETAG" - CONTENTPROCESSORWEB_IMAGE_URI="$ACR_NAME.azurecr.io/contentprocessorweb:$AZURE_ENV_IMAGETAG" + value=$(azd env get-value "$key" 2>/dev/null || echo "") - # Azure login - echo "Logging into Azure Container Registry: $ACR_NAME" - if ! az acr login -n "$ACR_NAME"; then - echo "Failed to log in to ACR" - exit 1 + if [ -z "$value" ]; then + if [ "$required" = true ]; then + echo "❌ Required environment key '$key' not found." >&2 + exit 1 + else + value="$default" + fi fi - # Build and push Docker images - for service in "ContentProcessor" "ContentProcessorAPI" "ContentProcessorWeb"; do - IMAGE_VAR_NAME="${service^^}_IMAGE_URI" - IMAGE_URI=${!IMAGE_VAR_NAME} + echo "$value" +} +# Required env variables +AZURE_SUBSCRIPTION_ID=$(get_azd_env_value_or_default "AZURE_SUBSCRIPTION_ID" "" true) +ENV_NAME=$(get_azd_env_value_or_default "AZURE_ENV_NAME" "" true) +CONTAINER_APP_USER_IDENTITY_ID=$(get_azd_env_value_or_default "CONTAINER_APP_USER_IDENTITY_ID" "" true) +AZURE_RESOURCE_GROUP=$(get_azd_env_value_or_default "AZURE_RESOURCE_GROUP" "" true) +CONTAINER_APP_USER_PRINCIPAL_ID=$(get_azd_env_value_or_default "CONTAINER_APP_USER_PRINCIPAL_ID" "" true) +AZURE_ENV_IMAGETAG=$(get_azd_env_value_or_default "AZURE_ENV_IMAGETAG" "latest" false) +CONTAINER_WEB_APP_NAME=$(get_azd_env_value_or_default "CONTAINER_WEB_APP_NAME" "" true) +CONTAINER_API_APP_NAME=$(get_azd_env_value_or_default "CONTAINER_API_APP_NAME" "" true) +CONTAINER_APP_NAME=$(get_azd_env_value_or_default "CONTAINER_APP_NAME" "" true) + + +echo "Using the following parameters:" +echo "AZURE_SUBSCRIPTION_ID = $AZURE_SUBSCRIPTION_ID" +echo "ENV_NAME = $ENV_NAME" +echo "AZURE_RESOURCE_GROUP = $AZURE_RESOURCE_GROUP" +echo "AZURE_ENV_IMAGETAG = $AZURE_ENV_IMAGETAG" + +# Ensure Azure login +echo "Checking Azure login status..." +if ! az account show --only-show-errors &>/dev/null; then + echo "No active Azure session found. Logging in..." + az login --only-show-errors + az account set --subscription "$AZURE_SUBSCRIPTION_ID" +fi - echo "Building Docker image: $IMAGE_URI" - if ! docker build "./src/$service/." --no-cache -t "$IMAGE_URI"; then - echo "Failed to build Docker image" - exit 1 - fi +# Deploy container registry +echo "Deploying container registry..." +DEPLOY_OUTPUT=$(az deployment group create \ + --resource-group "$AZURE_RESOURCE_GROUP" \ + --template-file "./infra/deploy_container_registry.bicep" \ + --parameters environmentName="$ENV_NAME" acrPullPrincipalIds="['$CONTAINER_APP_USER_PRINCIPAL_ID']" \ + --query "properties.outputs" \ + --output json) + +ACR_NAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.createdAcrName.value') +ACR_ENDPOINT=$(echo "$DEPLOY_OUTPUT" | jq -r '.acrEndpoint.value') + +echo "Extracted ACR Name: $ACR_NAME" +echo "Extracted ACR Endpoint: $ACR_ENDPOINT" + +azd env set ACR_NAME "$ACR_NAME" +azd env set ACR_ENDPOINT "$ACR_ENDPOINT" + +echo "Logging into ACR..." +az acr login -n "$ACR_NAME" + +# Build and push function +build_and_push_image() { + IMAGE_NAME="$1" + BUILD_PATH="$2" + CONTAINER_APP="$3" + + IMAGE_URI="$ACR_NAME.azurecr.io/$IMAGE_NAME:$AZURE_ENV_IMAGETAG" + echo "Building image: $IMAGE_URI" + docker build "$BUILD_PATH" --no-cache -t "$IMAGE_URI" + + echo "Pushing image: $IMAGE_URI" + docker push "$IMAGE_URI" + + if [ -n "$CONTAINER_APP" ]; then + echo "Updating container app: $CONTAINER_APP" + az containerapp registry set \ + --name "$CONTAINER_APP" \ + --resource-group "$AZURE_RESOURCE_GROUP" \ + --server "$ACR_NAME.azurecr.io" \ + --identity "$CONTAINER_APP_USER_IDENTITY_ID" \ + --only-show-errors + + az containerapp update \ + --name "$CONTAINER_APP" \ + --resource-group "$AZURE_RESOURCE_GROUP" \ + --image "$IMAGE_URI" \ + --only-show-errors + + echo "Updated registry for container app: $CONTAINER_APP" + fi +} - echo "Pushing Docker image to ACR: $IMAGE_URI" - if ! docker push "$IMAGE_URI"; then - echo "Failed to push Docker image" - exit 1 - fi +# Build and push all images +build_and_push_image "contentprocessor" "./src/ContentProcessor/" "$CONTAINER_APP_NAME" +build_and_push_image "contentprocessorapi" "./src/ContentProcessorAPI/" "$CONTAINER_API_APP_NAME" +build_and_push_image "contentprocessorweb" "./src/ContentProcessorWeb/" "$CONTAINER_WEB_APP_NAME" - echo "Docker image pushed successfully: $IMAGE_URI" - done -else - echo "Local Build not enabled. Using prebuilt image." -fi +echo "All Docker images built and pushed successfully." From 46bfe0f907abff04d8f723c3016d9be09c8ff842 Mon Sep 17 00:00:00 2001 From: Prajwal D C Date: Wed, 25 Jun 2025 22:16:55 +0530 Subject: [PATCH 23/24] docs: Fomating deployment guide --- docs/DeploymentGuide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index f09fb732..8848e80a 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -180,7 +180,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain ## Post Deployment Steps 1. Optional: Publishing Local Build Container to Azure Container Registry -If you need to rebuild the source code and push the updated container to the deployed Azure Container Registry, follow these steps: + If you need to rebuild the source code and push the updated container to the deployed Azure Container Registry, follow these steps: - **Linux/macOS**: ```bash @@ -194,9 +194,9 @@ If you need to rebuild the source code and push the updated container to the dep .\docker-build.ps1 ``` -This will create a new Azure Container Registry, rebuild the source code, package it into a container, and push it to the Container Registry created. + This will create a new Azure Container Registry, rebuild the source code, package it into a container, and push it to the Container Registry created. -1. **Register Schema Files** +2. **Register Schema Files** > Want to customize the schemas for your own documents? [Learn more about adding your own schemas here.](./CustomizeSchemaData.md) @@ -226,7 +226,7 @@ This will create a new Azure Container Registry, rebuild the source code, packag - **Verify Results** ![schema file registration](./images/SchemaFileRegistration.png) -2. **Import Sample Data** +3. **Import Sample Data** - Grab the Schema IDs for Invoice and Property Damage Claim Form's Schema from first step - Move to the folder location to samples in ContentProcessorApi - [/src/ContentProcessorApi/samples/](/src/ContentProcessorApi/samples/) - Execute the script with Schema IDs From 80ffee3dede72a8ac4e1a5bd0cbfe28b997dae54 Mon Sep 17 00:00:00 2001 From: Prajwal-Microsoft Date: Wed, 25 Jun 2025 21:12:35 +0000 Subject: [PATCH 24/24] fix: Relativ path issues fixed --- infra/scripts/docker-build.ps1 | 17 +++++++++++++---- infra/scripts/docker-build.sh | 13 +++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) mode change 100644 => 100755 infra/scripts/docker-build.sh diff --git a/infra/scripts/docker-build.ps1 b/infra/scripts/docker-build.ps1 index 00920edc..4af1ab6c 100644 --- a/infra/scripts/docker-build.ps1 +++ b/infra/scripts/docker-build.ps1 @@ -2,6 +2,15 @@ # Get all environment values $envValues = azd env get-values --output json | ConvertFrom-Json +# Full path to this script's folder +$ScriptDir = $PSScriptRoot + +# Resolve relative paths based on the script location +$TemplateFile = Join-Path $ScriptDir "..\deploy_container_registry.bicep" +$ContentProcessorPath = Join-Path $ScriptDir "..\..\src\ContentProcessor" +$ContentApiPath = Join-Path $ScriptDir "..\..\src\ContentProcessorAPI" +$ContentWebPath = Join-Path $ScriptDir "..\..\src\ContentProcessorWeb" + # Define function to build and push Docker images function Build-And-Push-Image { param ( @@ -110,7 +119,7 @@ Write-Output "Starting build process." # Deploy container registry Write-Host "Deploying container registry" -$OUTPUTS = az deployment group create --resource-group $AZURE_RESOURCE_GROUP --template-file "./infra/deploy_container_registry.bicep" --parameters environmentName=$ENV_NAME acrPullPrincipalIds="['$($CONTAINER_APP_USER_PRINCIPAL_ID)']" --query "properties.outputs" --output json | ConvertFrom-Json +$OUTPUTS = az deployment group create --resource-group $AZURE_RESOURCE_GROUP --template-file "$TemplateFile" --parameters environmentName=$ENV_NAME acrPullPrincipalIds="['$($CONTAINER_APP_USER_PRINCIPAL_ID)']" --query "properties.outputs" --output json | ConvertFrom-Json # Extract ACR name and endpoint $ACR_NAME = $OUTPUTS.createdAcrName.value @@ -134,8 +143,8 @@ if ($LASTEXITCODE -ne 0) { } # Build and push images -Build-And-Push-Image "contentprocessor" ".\src\ContentProcessor\" $CONTAINER_APP_NAME -Build-And-Push-Image "contentprocessorapi" ".\src\ContentProcessorAPI\" $CONTAINER_API_APP_NAME -Build-And-Push-Image "contentprocessorweb" ".\src\ContentProcessorWeb\" $CONTAINER_WEB_APP_NAME +Build-And-Push-Image "contentprocessor" "$ContentProcessorPath" $CONTAINER_APP_NAME +Build-And-Push-Image "contentprocessorapi" "$ContentApiPath" $CONTAINER_API_APP_NAME +Build-And-Push-Image "contentprocessorweb" "$ContentWebPath" $CONTAINER_WEB_APP_NAME Write-Host "All Docker images built and pushed successfully." diff --git a/infra/scripts/docker-build.sh b/infra/scripts/docker-build.sh old mode 100644 new mode 100755 index 7302772a..9e9e8cbc --- a/infra/scripts/docker-build.sh +++ b/infra/scripts/docker-build.sh @@ -6,6 +6,9 @@ set -e echo "Fetching environment values from azd..." ENV_VALUES_JSON=$(azd env get-values --output json) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TEMPLATE_FILE="$SCRIPT_DIR/../deploy_container_registry.bicep" + get_azd_env_value_or_default() { local key="$1" local default="$2" @@ -54,7 +57,7 @@ fi echo "Deploying container registry..." DEPLOY_OUTPUT=$(az deployment group create \ --resource-group "$AZURE_RESOURCE_GROUP" \ - --template-file "./infra/deploy_container_registry.bicep" \ + --template-file "$TEMPLATE_FILE" \ --parameters environmentName="$ENV_NAME" acrPullPrincipalIds="['$CONTAINER_APP_USER_PRINCIPAL_ID']" \ --query "properties.outputs" \ --output json) @@ -104,8 +107,10 @@ build_and_push_image() { } # Build and push all images -build_and_push_image "contentprocessor" "./src/ContentProcessor/" "$CONTAINER_APP_NAME" -build_and_push_image "contentprocessorapi" "./src/ContentProcessorAPI/" "$CONTAINER_API_APP_NAME" -build_and_push_image "contentprocessorweb" "./src/ContentProcessorWeb/" "$CONTAINER_WEB_APP_NAME" +build_and_push_image "contentprocessor" "$SCRIPT_DIR/../../src/ContentProcessor/" "$CONTAINER_APP_NAME" + +build_and_push_image "contentprocessorapi" "$SCRIPT_DIR/../../src/ContentProcessorAPI/" "$CONTAINER_API_APP_NAME" + +build_and_push_image "contentprocessorweb" "$SCRIPT_DIR/../../src/ContentProcessorWeb/" "$CONTAINER_WEB_APP_NAME" echo "All Docker images built and pushed successfully."