Skip to content
Report library
Purpose / Development

Azure Upgrade Skill Security Audit

What the author says it does (original text)

Assess and upgrade Azure workloads between plans, tiers, or SKUs, or modernize Azure SDK dependencies in source code. WHEN: upgrade Consumption to Flex Consumption, upgrade Azure Functions plan, change hosting plan, function app SKU, migrate App Service to Container Apps, modernize legacy Azure Java SDKs (com.microsoft.azure to com.azure), migrate Azure Cache for Redis (ACR/ACRE) to Azure Managed

Independent security check

Do not install or run it yet

Files checked
31
Risks found
6
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.Risks found: 3
High risk

The script automatically makes a project-supplied wrapper executable and runs it

Source references: 2
What we found

The script prefers mvnw from the project directory. If it is not executable, the script applies chmod and then invokes it as a subprocess. That wrapper belongs to the repository being migrated and is not audited code from this Skill.

Why this matters

A tampered or untrusted repository wrapper could execute arbitrary commands with the user's privileges, read local credentials, alter files, or contact external services.

If the user runs the BOM automation on a project containing mvnw, the script prefers that repository-supplied wrapper. If it is not executable, it adds execute bits for user, group, and others, then runs it as a subprocess. Because the wrapper belongs to the project being migrated, it can execute repository-controlled code and download components. The user can require wrapper/config review, prohibit chmod, and select a trusted Maven using --mvn.

references/languages/java/scripts/upgrade_bom.py:143In the codeOpen original file
    else:        wrapper = os.path.join(project_dir, "mvnw")        if os.path.isfile(wrapper):            if not os.access(wrapper, os.X_OK):                # Wrapper exists but isn't executable (common after fresh clones                # on filesystems that don't preserve the +x bit). Try to fix it.                try:                    mode = os.stat(wrapper).st_mode                    os.chmod(wrapper, mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)                    print(f"[upgrade_bom] Added executable bit to {wrapper}.")                except OSError as exc:                    print(                        f"[upgrade_bom] WARNING: mvnw exists at {wrapper} but is not "                        f"executable and chmod failed ({exc}); falling back to 'mvn'.",                        file=sys.stderr,                    )                    return "mvn"            if os.access(wrapper, os.X_OK):                return wrapper    return "mvn"
Show 1 other places
references/languages/java/scripts/upgrade_bom.py:185In the codeOpen original file
def _run_maven_recipe(mvn_cmd: str, project_dir: str, recipe: str, options: str) -> int:    """Run an OpenRewrite recipe via the rewrite-maven-plugin."""    cmd = [        mvn_cmd, "-U",        f"{MVN_REWRITE_PLUGIN}:run",        f"-Drewrite.recipeArtifactCoordinates={MVN_REWRITE_ARTIFACT_COORDS}",        f"-Drewrite.activeRecipes={recipe}",        f"-Drewrite.options={options}",    ]    print(f"[upgrade_bom] Running: {' '.join(cmd)}")    return subprocess.run(cmd, cwd=project_dir).returncode
High risk

The migration executes remotely resolved build plugins without pinned versions

Source references: 4
What we found

The Gradle injection explicitly uses latest.release for org.openrewrite.rewrite and resolves through Maven Central; the Maven plugin coordinate is also unversioned. The script then executes rewriteRun or the plugin goal.

Why this matters

Different code may be downloaded and executed on each run. If an upstream account, repository, or latest release is compromised or becomes destructive, that code runs with the user's privileges and can rewrite the project.

When the user runs the Gradle automation, the script temporarily injects the OpenRewrite plugin at latest.release, enables Maven Central, and executes rewriteRun. This resolves and runs whatever remote release is current rather than an audited fixed version. The Maven path likewise invokes a plugin coordinate without a version. A normal repository does not remove update or supply-chain risk; the user can require an audited pinned version or run in an isolated environment without credentials.

references/languages/java/scripts/upgrade_bom.py:53In the codeOpen original file
# Maven constantsMVN_REWRITE_PLUGIN = "org.openrewrite.maven:rewrite-maven-plugin"MVN_REWRITE_ARTIFACT_COORDS = "org.openrewrite:rewrite-maven"MVN_UPGRADE_RECIPE = "org.openrewrite.maven.UpgradeDependencyVersion"MVN_ADD_MANAGED_RECIPE = "org.openrewrite.maven.AddManagedDependency"MVN_REMOVE_REDUNDANT_RECIPE = "org.openrewrite.maven.RemoveRedundantDependencyVersions"
Show 3 other places
references/languages/java/scripts/upgrade_bom.py:348In the codeOpen original file
    kotlin = _is_kotlin_dsl(build_file)    if kotlin:        plugin_line = '    id("org.openrewrite.rewrite") version "latest.release"'    else:        plugin_line = '    id "org.openrewrite.rewrite" version "latest.release"'    rewrite_block_kt = textwrap.dedent("""\        rewrite {            activeRecipe("com.azure.UpgradeBom")        }        repositories {            mavenCentral()        }    """)
references/languages/java/scripts/upgrade_bom.py:354In the codeOpen original file
    rewrite_block_kt = textwrap.dedent("""\        rewrite {            activeRecipe("com.azure.UpgradeBom")        }        repositories {            mavenCentral()        }    """)
references/languages/java/scripts/upgrade_bom.py:430In the codeOpen original file
def _run_gradle_openrewrite(gradle_cmd: str, project_dir: str) -> int:    cmd = [gradle_cmd, "rewriteRun"]    print(f"[upgrade_bom] Running: {' '.join(cmd)}")    return subprocess.run(cmd, cwd=project_dir).returncode
Medium risk

Redis requests are redirected to external Skills that are neither included in this audit nor pinned to a commit

Source references: 4
What we found

This Skill contains no Redis migration implementation; it directs the user to two GitHub repositories and their README installation instructions. The repository URLs are not pinned to a commit or integrity value, so installed content can change over time.

Why this matters

If installed and run, the external Skill's instructions, scripts, and permission behavior are outside the supplied source review. A compromised or changed repository could execute unexpected commands or alter Azure resources.

This Skill does not itself install or execute Redis migration code, but for Redis requests it directs the user to two external GitHub repositories and their README installation instructions. The URLs identify repositories without a commit hash, version tag, or checksum, so content installed later may change and is outside this supplied audit. The user can ask for a pinned release or commit, checksums, and reviewable installation contents before installing.

references/services/redis/redis-to-amr.md:6In the instructionsOpen original file
There are **two distinct migration paths** to AMR, depending on the source SKU. Each path is owned by a dedicated, versioned skill maintained by the Azure Managed Redis team. The `azure-upgrade` skill does **not** ship the SKU specs, pricing scripts, ARM automation, or template-transformation logic needed for either migration — it routes the user to the correct dedicated skill.
Show 3 other places
references/services/redis/redis-to-amr.md:68In the instructionsOpen original file
1. **Do not attempt the migration from this skill.** Neither SKU specs nor migration automation are inlined here.2. **Determine the source** using the disambiguation signals above. If unclear, ask the user (or inspect the script/resource).3. **Point the user to the correct dedicated skill** with its repo URL. The repo READMEs include install instructions for GitHub Copilot, Claude Code, and other compatible hosts.4. After installation, the user's agent will match the dedicated skill on its trigger phrases (e.g. *"migrate my P2 cache to AMR"*, *"convert my Bicep Redis template"*, *"migrate my Enterprise_E10 cache"*, *"update my ACRE ARM template for AMR"*).5. If the user has **both** ACR and ACRE resources, recommend installing **both** skills and running them on the relevant resources separately.
references/services/redis/redis-to-amr.md:98In the instructionsOpen original file
- AMR Migration Skill (ACR → AMR): https://github.com/AzureManagedRedis/amr-migration-skill- ACRE → AMR Migration Skill: https://github.com/AzureManagedRedis/acre-to-amr-migration-skill- Azure Managed Redis docs: https://learn.microsoft.com/en-us/azure/redis/managed-redis/
references/services/redis/redis-to-amr.md:3In the instructionsOpen original file
> **Target for both paths**: Azure Managed Redis (AMR) — M, B, X (Flash), A series> **Source determines which dedicated skill to install** — see decision table below.There are **two distinct migration paths** to AMR, depending on the source SKU. Each path is owned by a dedicated, versioned skill maintained by the Azure Managed Redis team. The `azure-upgrade` skill does **not** ship the SKU specs, pricing scripts, ARM automation, or template-transformation logic needed for either migration — it routes the user to the correct dedicated skill.
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
High risk

Application secrets may be printed, written into reports, or exposed in process arguments

Source references: 4
What we found

The flow retrieves every Function App setting and echoes the result; the assessment template also asks for each setting's Value in a workspace report. When downloading a deployment package, it passes the AzureWebJobsStorage connection string as a command-line argument to Azure CLI. App settings can contain connection strings, keys, or tokens.

Why this matters

Terminal history, agent transcripts, generated Markdown, CI logs, or another local process could obtain credentials usable against storage or other Azure services.

When the user runs the Functions migration, the commands retrieve and print all app settings, while the report format asks for each setting's Value. Settings may contain secrets, tokens, or connection strings, exposing them in terminal logs or workspace files. The package-download flow also passes AzureWebJobsStorage as a CLI argument, which process inspection or command auditing may capture. The user can require names-only inventories, value redaction, and identity-based access instead of connection strings.

references/services/functions/automation.md:109In the instructionsOpen original file
# Get all app settings as JSONapp_settings=$(az functionapp config appsettings list --name $appName --resource-group $rgName)echo "$app_settings"```
Show 3 other places
references/services/functions/assessment.md:59In the instructionsOpen original file
## 3. App Settings Inventory| Setting | Value | Migrate? | Notes ||---------|-------|----------|-------|| | | Yes / No / Convert | |
references/services/functions/automation.md:212In the instructionsOpen original file
echo "Getting the storage account connection string..."storageConnection=$(az functionapp config appsettings list --name $appName --resource-group $rgName \    --query "[?name=='AzureWebJobsStorage'].value" -o tsv)echo "Getting the package name..."packageName=$(az storage blob list --connection-string $storageConnection --container-name scm-releases \    --query "[0].name" -o tsv)echo "Downloading package: $packageName"az storage blob download --connection-string $storageConnection --container-name scm-releases \    --name $packageName --file $packageName```
references/services/functions/automation.md:220In the instructionsOpen original file
echo "Downloading package: $packageName"az storage blob download --connection-string $storageConnection --container-name scm-releases \    --name $packageName --file $packageName```
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Gradle cleanup can truncate a build file when its marker collides with existing content

Source references: 5
What we found

The cleanup function removes the first fixed marker plus the following line, then discards everything from the second marker onward before overwriting the original build file. It does not verify that those markers were created by the current run.

Why this matters

If build.gradle already contains the marker—from a failed earlier run, copied comments, or malicious repository content—the cleanup can delete legitimate configuration through end-of-file and leave the build broken or data unrecoverable.

After the script injects the Gradle plugin, cleanup identifies content using a fixed text marker. It deletes the first marker plus the next line, discards everything from the second marker onward, and overwrites the build file. If the project already contains that marker, the count can collide and remove genuine configuration; the code does not verify that markers came from this run. The user can require a backup/commit first and inspect the complete diff afterward.

references/languages/java/scripts/upgrade_bom.py:63In the codeOpen original file
GRADLE_REMOVE_REDUNDANT_RECIPE = "org.openrewrite.gradle.RemoveRedundantDependencyVersions"REWRITE_YML_NAME = "rewrite.yml"GRADLE_PLUGIN_MARKER = "// --- openrewrite-upgrade-bom-plugin (auto-added, safe to remove) ---"
Show 4 other places
references/languages/java/scripts/upgrade_bom.py:410In the codeOpen original file
        line = lines[i]        if GRADLE_PLUGIN_MARKER in line:            marker_count += 1            if marker_count == 1:                # First marker (inside plugins {}): skip the marker line and                # the following injected plugin id line.                i += 2                continue            else:                # Second marker (at end of file): skip the marker and every                # remaining line — they're the injected rewrite {} and                # repositories {} blocks.                break        cleaned.append(line)
references/languages/java/scripts/upgrade_bom.py:425In the codeOpen original file
    with open(build_file, "w", encoding="utf-8") as f:        f.writelines(cleaned)    print(f"[upgrade_bom] Cleaned up OpenRewrite plugin from {build_file}")
references/languages/java/scripts/upgrade_bom.py:372In the codeOpen original file
        # `plugins {`, so don't add another one before the marker.        content = (            content[:insert_pos]            + "\n"            + GRADLE_PLUGIN_MARKER            + "\n"            + plugin_line            + content[insert_pos:]        )    else:        # No plugins block — prepend one        content = (            "plugins {\n"            + GRADLE_PLUGIN_MARKER            + "\n"            + plugin_line            + "\n}\n\n"            + content        )    content += GRADLE_PLUGIN_MARKER + "\n"    content += rewrite_block_kt if kotlin else rewrite_block_groovy
references/languages/java/scripts/upgrade_bom.py:408In the codeOpen original file
    i = 0    while i < len(lines):        line = lines[i]        if GRADLE_PLUGIN_MARKER in line:            marker_count += 1            if marker_count == 1:                # First marker (inside plugins {}): skip the marker line and                # the following injected plugin id line.                i += 2                continue            else:                # Second marker (at end of file): skip the marker and every                # remaining line — they're the injected rewrite {} and                # repositories {} blocks.                break        cleaned.append(line)        i += 1    with open(build_file, "w", encoding="utf-8") as f:        f.writelines(cleaned)    print(f"[upgrade_bom] Cleaned up OpenRewrite plugin from {build_file}")
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.No risks found
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 1
High risk

Triggers in the old and new Function Apps can run simultaneously and duplicate business effects

Source references: 4
What we found

The flow keeps the original app running while explicitly stating that triggers start processing immediately after deployment. Its own risk table calls for separate resources, draining, or schedule offsets for queues, Service Bus, Cosmos DB, blobs, and timers.

Why this matters

Both apps may duplicate or compete for work, causing repeated payments, notifications, writes, jobs, or lost messages, depending on the functions' business logic.

After the user deploys code to the new Function App, its triggers begin processing immediately, while the workflow recommends keeping the original app running for rollback. If both use the same queue, topic, container, lease, or timer, they can duplicate consumption, messages, or business-data changes. The source lists mitigations such as separate containers, consumer groups, queues, and offset schedules. The user should require a per-trigger cutover plan before deployment and can keep new triggers disabled initially.

references/services/functions/consumption-to-flex.md:124In the instructionsOpen original file
After user selects an option, execute the corresponding deployment method from [automation.md](automation.md) — Step 5.> ⚠️ After deployment, triggers immediately start processing. Review mitigation strategies for your trigger types.
Show 3 other places
references/services/functions/consumption-to-flex.md:128In the instructionsOpen original file
**After successful deployment, inform the user:**> Code deployed! Next steps to consider:>> - The original app is still running — keep it as rollback for a few days> - Update any clients/pipelines to point to the new URL> - Enable HTTPS-only and managed identity on the new app for better security> - When confident, you can delete the original app
references/services/functions/consumption-to-flex.md:155In the instructionsOpen original file
| Trigger Type | Risk | Mitigation ||-------------|------|------------|| Azure Blob storage | High | Create separate container for event-based trigger in new app || Azure Cosmos DB | High | Create dedicated lease container for new app; set `StartFromBeginning: false` || Azure Event Grid | Medium | Recreate event subscriptions; ensure idempotent functions || Azure Event Hubs | Medium | Create new consumer group for new app || Azure Service Bus | High | Create new topic/queue; update senders; drain original before shutdown || Azure Storage Queue | High | Create new queue; update senders; drain original before shutdown || HTTP | Low | Update clients to target new app URL || Timer | Low | Offset schedules during cutover to avoid simultaneous execution |
references/services/functions/consumption-to-flex.md:147In the instructionsOpen original file
### Phase 7: Cleanup (Optional)- Keep the original app for a few days/weeks as rollback- Consumption plan charges only for actual usage — low cost to keep idle- When confident, delete using the command in [automation.md](automation.md) — Step 7

Inside this skill

7 instruction sections

This Skill covers Azure Functions plan migration, Java SDK source modernization, and routing for Redis migrations. Its top-level flow requires assessment first, confirmation of the target SKU, and explicit confirmation before deleting or stopping the original app.

View source
SKILL.md:29In the instructionsOpen original file
1. Follow phases sequentially — do not skip2. Generate an assessment before any upgrade operations3. Load the scenario reference and follow its rules4. Use `mcp_azure_mcp_get_azure_bestpractices` and `mcp_azure_mcp_documentation` MCP tools5. Destructive actions require `ask_user` — [global-rules](references/global-rules.md)6. Always confirm the target plan/SKU with the user before proceeding7. Never delete or stop the original app without explicit user confirmation8. All automation scripts must be idempotent and resumable
references/global-rules.md:16In the instructionsOpen original file
Always use `ask_user` before:- Selecting target Azure subscription- Selecting target Azure region/location- Creating new Azure resources- Stopping or deleting the original app/service- Modifying custom domains or network restrictions- Any irreversible configuration change

The Functions flow creates a new Flex Consumption app alongside the old one, migrates settings, identities, domains, and access restrictions, and then deploys code using a user-selected method; the original app normally remains running for rollback.

View source
references/services/functions/automation.md:249In the instructionsOpen original file
The command automatically:- Assesses your source app for Flex Consumption compatibility- Creates a new function app in the Flex Consumption plan- Migrates app settings, identity assignments, storage mounts, CORS, custom domains, and access restrictions
references/services/functions/automation.md:301In the instructionsOpen original file
### ask_user: Choose Deployment MethodPresent these options to the user:> Your new Flex Consumption app `<NEW_APP_NAME>` has been created and configured. Now we need to deploy your function code. How would you like to proceed?>> 1. **Update CI/CD pipeline** — I'll help you update your Azure Pipelines or GitHub Actions workflow to target the new app> 2. **Deploy from local project** — I'll run `func azure functionapp publish <NEW_APP_NAME>` from your project directory  > 3. **Deploy existing package** — I'll deploy the package we downloaded earlier from the original app

The Java flow is an autonomous repository rewrite: it creates a migration branch, modifies build and source files, runs compilation and tests, and commits each step.

View source
references/languages/java/README.md:7In the instructionsOpen original file
Upgrade all `com.microsoft.azure.*` to `com.azure.*` equivalents in one autonomous session.You are an expert Azure SDK migration agent. Generate a unique run identifier at the start (format: `azure-sdk-upgrade-YYYYMMDD-HHMMSS`) and use it throughout all phases.
references/languages/java/rules/execution-guidelines.md:7In the instructionsOpen original file
- **Uninterrupted run**: Complete each phase fully without pausing for user input.- **Git**: If git is available, create a new branch `java-upgrade/{RUN_ID}` before starting the migration. Commit changes per step on this branch. If git is not available, log a warning and proceed — files remain uncommitted in the working directory. Use `N/A` for `<current_branch>` and `<current_commit_id>` placeholders.

The BOM automation script fetches the current BOM version from GitHub and then invokes Maven or Gradle OpenRewrite recipes that directly modify project build files.

View source
references/languages/java/scripts/upgrade_bom.py:80In the codeOpen original file
def _get_latest_bom_version() -> str:    try:        with urllib.request.urlopen(BOM_POM_URL, timeout=HTTP_TIMEOUT_SECONDS) as response:            pom_xml = response.read()    except urllib.error.URLError as exc:
references/languages/java/scripts/upgrade_bom.py:430In the codeOpen original file
def _run_gradle_openrewrite(gradle_cmd: str, project_dir: str) -> int:    cmd = [gradle_cmd, "rewriteRun"]    print(f"[upgrade_bom] Running: {' '.join(cmd)}")    return subprocess.run(cmd, cwd=project_dir).returncode
Start here · InstructionsSKILL.md
azure-upgrade
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 40
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records31 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/languages/java/scripts/upgrade_bom.pyFull text included
  • references/global-rules.mdFull text included
  • references/languages/java/README.mdFull text included
  • references/languages/java/templates/PLAN_TEMPLATE.mdFull text included
  • references/languages/java/templates/PROGRESS_TEMPLATE.mdFull text included
  • references/languages/java/templates/SUMMARY_TEMPLATE.mdFull text included
  • references/services/functions/assessment.mdFull text included
  • references/services/functions/automation.mdFull text included
  • references/services/functions/consumption-to-flex.mdFull text included
  • references/services/redis/redis-to-amr.mdFull text included
  • references/workflow-details.mdFull text included
  • references/languages/java/bom-migration/bom-gradle-settings.mdFull text included
  • references/languages/java/bom-migration/bom-gradle-toml.mdFull text included
  • references/languages/java/bom-migration/bom-gradle.mdFull text included
  • references/languages/java/bom-migration/bom-maven.mdFull text included
  • references/languages/java/bom-migration/bom-migration.mdFull text included
  • references/languages/java/bom-migration/bom-validation.mdFull text included
  • references/languages/java/INSTRUCTION.mdFull text included
  • references/languages/java/package-specific/com.microsoft.azure.eventprocessorhost.mdFull text included
  • references/languages/java/package-specific/com.microsoft.azure.management.mdFull text included
  • references/languages/java/rules/efficiency.mdFull text included
  • references/languages/java/rules/execution-guidelines.mdFull text included
  • references/languages/java/rules/review-code-changes.mdFull text included
  • references/languages/java/rules/troubleshooting.mdFull text included
  • references/languages/java/rules/upgrade-strategy.mdFull text included
  • references/languages/java/rules/upgrade-success-criteria.mdFull text included
  • references/languages/java/workflow/phase-1-precheck.mdFull text included
  • references/languages/java/workflow/phase-2-plan.mdFull text included
  • references/languages/java/workflow/phase-3-execute.mdFull text included
  • references/languages/java/workflow/phase-4-summarize.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/global-rules.mdSupporting file
  • references/languages/java/INSTRUCTION.mdSupporting file
  • references/languages/java/README.mdSupporting file
  • references/languages/java/bom-migration/bom-gradle-settings.mdSupporting file
  • references/languages/java/bom-migration/bom-gradle-toml.mdSupporting file
  • references/languages/java/bom-migration/bom-gradle.mdSupporting file
  • references/languages/java/bom-migration/bom-maven.mdSupporting file
  • references/languages/java/bom-migration/bom-migration.mdSupporting file
  • references/languages/java/bom-migration/bom-validation.mdSupporting file
  • references/languages/java/package-specific/com.microsoft.azure.eventprocessorhost.mdSupporting file
  • references/languages/java/package-specific/com.microsoft.azure.management.mdSupporting file
  • references/languages/java/rules/efficiency.mdSupporting file
  • references/languages/java/rules/execution-guidelines.mdSupporting file
  • references/languages/java/rules/review-code-changes.mdSupporting file
  • references/languages/java/rules/troubleshooting.mdSupporting file
  • references/languages/java/rules/upgrade-strategy.mdSupporting file
  • references/languages/java/rules/upgrade-success-criteria.mdSupporting file
  • references/languages/java/scripts/upgrade_bom.pyScript
  • references/languages/java/templates/PLAN_TEMPLATE.mdSupporting file
  • references/languages/java/templates/PROGRESS_TEMPLATE.mdSupporting file
  • references/languages/java/templates/SUMMARY_TEMPLATE.mdSupporting file
  • references/languages/java/workflow/phase-1-precheck.mdSupporting file
  • references/languages/java/workflow/phase-2-plan.mdSupporting file
  • references/languages/java/workflow/phase-3-execute.mdSupporting file
  • references/languages/java/workflow/phase-4-summarize.mdSupporting file
  • references/services/functions/assessment.mdSupporting file
  • references/services/functions/automation.mdSupporting file
  • references/services/functions/consumption-to-flex.mdSupporting file
  • references/services/redis/redis-to-amr.mdSupporting file
  • references/workflow-details.mdSupporting file

Operations mentioned in code and instructions

Connect to websites
references/languages/java/scripts/upgrade_bom.py:45In the codeOpen original file
ARTIFACT_ID = "azure-sdk-bom"BOM_POM_URL = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/main/sdk/boms/azure-sdk-bom/pom.xml"POM_NAMESPACE = {"m": "http://maven.apache.org/POM/4.0.0"}
references/languages/java/scripts/upgrade_bom.py:46In the codeOpen original file
BOM_POM_URL = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/main/sdk/boms/azure-sdk-bom/pom.xml"POM_NAMESPACE = {"m": "http://maven.apache.org/POM/4.0.0"}MIN_BOM_VERSION = "1.3.0"
references/languages/java/scripts/upgrade_bom.py:169In the codeOpen original file
        return False    ns = {"m": "http://maven.apache.org/POM/4.0.0"}    for dep in tree.findall(".//m:dependencyManagement/m:dependencies/m:dependency", ns):
Run commands
references/languages/java/scripts/upgrade_bom.py:36In the codeOpen original file
import statimport subprocessimport sys
references/languages/java/scripts/upgrade_bom.py:195In the codeOpen original file
    print(f"[upgrade_bom] Running: {' '.join(cmd)}")    return subprocess.run(cmd, cwd=project_dir).returncode
references/languages/java/scripts/upgrade_bom.py:433In the codeOpen original file
    print(f"[upgrade_bom] Running: {' '.join(cmd)}")    return subprocess.run(cmd, cwd=project_dir).returncode
Read keys or account settings
references/languages/java/package-specific/com.microsoft.azure.management.md:19In the instructionsOpen original file
Treat **any** of the following shapes in the legacy code as file-based authentication that must be replaced (not migrated). Triggers include `AZURE_AUTH_LOCATION`, `.authenticate(File)`, `ApplicationTokenCredentials.fromFile`, or any code path that reads `clientId` / `clientSecret` / `tenant` from disk and feeds them into a credential builder.
references/languages/java/package-specific/com.microsoft.azure.management.md:21In the instructionsOpen original file
> **Important:** Reading `clientId`, `clientSecret`, or `tenantId` from **environment variables** (e.g., `System.getenv("AZURE_CLIENT_ID")`) does **not** constitute file-based authentication and should **not** be flagged by this rule. Only flag patterns that source credentials from files on disk.
references/languages/java/package-specific/com.microsoft.azure.management.md:25In the instructionsOpen original file
// Shape A: direct File overloadAzure azure = Azure.authenticate(new File(System.getenv("AZURE_AUTH_LOCATION")))                   .withDefaultSubscription();
Read files
references/languages/java/scripts/upgrade_bom.py:82In the codeOpen original file
    try:        with urllib.request.urlopen(BOM_POM_URL, timeout=HTTP_TIMEOUT_SECONDS) as response:            pom_xml = response.read()
references/languages/java/scripts/upgrade_bom.py:286In the codeOpen original file
    try:        with open(build_file, "r", encoding="utf-8") as f:            content = f.read()
references/languages/java/scripts/upgrade_bom.py:331In the codeOpen original file
    with open(yml_path, "w", encoding="utf-8") as f:        f.write(yml_content)
Change files
references/languages/java/scripts/upgrade_bom.py:332In the codeOpen original file
    with open(yml_path, "w", encoding="utf-8") as f:        f.write(yml_content)    print(f"[upgrade_bom] Created {yml_path}")
references/languages/java/scripts/upgrade_bom.py:395In the codeOpen original file
    with open(build_file, "w", encoding="utf-8") as f:        f.write(content)    print(f"[upgrade_bom] Injected OpenRewrite plugin into {build_file}")
Lines read
3,461
File checksum (to compare versions)
d21557f3479fdf4ecbda08b5d8795ee8ac1d7fd907dfcc5a8e0a3dd248603273