Note
ამ გვერდზე წვდომა ავტორიზაციას მოითხოვს. შეგიძლიათ სცადოთ შესვლა ან დირექტორიების შეცვლა.
ამ გვერდზე წვდომა ავტორიზაციას მოითხოვს. შეგიძლიათ სცადოთ დირექტორიების შეცვლა.
This article describes how to customize the modernization plan generated by GitHub Copilot modernization for migrating Java and .NET applications to Azure.
You can initiate a modernization session by creating a plan on the assessment report through multiselecting issues, or by clicking Migrate to Azure to create and execute a modernization plan from the sidebar. When you initiate a modernization session, GitHub Copilot generates a plan.md file (and a companion .metadata/tasks.json file) that describes the migration goal, scope, current and target architecture, and the task list. This pair of files serves as the blueprint that the modernization agent executes. You can refine the plan before execution to better fit your project's needs.
After the agent generates plan.md, it automatically opens in the Visual Studio Code editor. At this stage, you can review and customize the plan to ensure it aligns with your specific modernization goals.
Important
Customize the plan by prompting Copilot to regenerate or update the plan rather than hand-editing plan.md directly. Direct edits to plan.md don't update the companion tasks.json file that drives execution, and the two files can drift out of sync. The recommended pattern in every section below is "tell Copilot what to change, then let it regenerate."
Example plan.md file structure
The agent generates a plan.md file with the following sections. The same structure is used for Java and .NET projects.
| Section | Purpose | Customizable via prompt |
|---|---|---|
| Project header | Project name and modernization title. | Yes - adjust the title to reflect the wave or scope. |
| Technical Framework | Current language, framework, build tool, database, and key dependencies, detected from the source code. | Indirectly - correct any misdetected facts by prompting Copilot. |
| Overview | Narrative description of the modernization goal: what is changing, why, and the phased approach. Business-facing, no technical details. | Yes - clarify business intent, add or remove bullets. |
| Migration Impact Summary | A table mapping each application × original service → new Azure service, authentication method, and comments. | Yes - change target service, change authentication, add or remove rows. |
| Open Questions & Questionnaire | Clarification questions raised during plan creation and the user's answers. Drives task selection. | Yes - answer open questions, revise prior answers. |
The detailed task list isn't in plan.md. It lives in .metadata/tasks.json and is generated from your answers in the Open Questions & Questionnaire section plus the agent's analysis. To change tasks, prompt Copilot to regenerate the plan (see How to customize).
What you can customize
The modernization plan exposes four customization surfaces. Each maps to a section of plan.md and is reached through a prompt to Copilot rather than a direct edit.
1. Modernization scope
The scope determines what kinds of tasks the agent generates. The plan supports four scope types:
- Upgrade — runtime and framework version upgrades (for example, JDK 11 → 17, Spring Boot 2.x → 3.x, .NET Framework → .NET 8).
- Migration to Azure — replacing an on-premises or non-Azure service with an Azure equivalent (for example, Oracle → Azure Database for PostgreSQL, ActiveMQ → Azure Service Bus, hardcoded secrets → Azure Key Vault).
- Containerization — generating a Dockerfile and related build artifacts.
- Deployment — generating deployment files and deploying to Azure. Deployment tasks include containerization implicitly.
To customize scope, tell Copilot which scope types apply to this run. For example:
For this modernization plan, only include Upgrade and Migration to Azure tasks. Do not generate containerization or deployment tasks — those are handled by a separate pipeline.
2. Target Azure services and authentication
The Migration Impact Summary table records the target Azure service and authentication method for each migrated component. Customize these values by prompting Copilot before or after the initial plan is generated. For example:
Update the Migration Impact Summary:
- Use Azure Container Apps as the deployment target, not Azure Kubernetes Service.
- Use Managed Identity for the PostgreSQL connection. Do not use Key Vault for the DB password.
- Migrate file-based logging to Azure Monitor (Application Insights), not to console-only.
The agent regenerates both plan.md and tasks.json so the task list stays consistent with the table.
3. Questionnaire answers
When the agent has the ask_user capability available, it asks a short questionnaire to scope the plan. The three default questions are:
| Question | Default answer | Effect on the plan |
|---|---|---|
| Deployment target on Azure | No deployment | Adds (or omits) a deployment task and selects the target compute service (Azure Container Apps, Azure Kubernetes Service, Azure App Service, App Service Managed Instance, Azure Function Apps, Azure Static Web Apps). |
| Include integration testing? | No | When set to "Yes, Local Integration with Containers" or "Yes, Local Integration and Smoke Tests", adds an integration-test task after the migration tasks and before containerization. |
| Include containerization (Dockerfile generation)? | No | Adds a standalone containerization task. Skipped automatically if a deployment task is selected, because deployment covers containerization. |
If the agent didn't ask a question (for example, because ask_user was unavailable) or you want to change an earlier answer, prompt Copilot. For example:
Update the plan with these answers:
- Deployment target: Azure Container Apps
- Integration testing: Yes, Local Integration and Smoke Tests
- Containerization: handled by deployment task, no standalone containerization needed
The answers are recorded as checked items in the Open Questions & Questionnaire section and drive task selection.
4. Add, remove, or refine specific tasks
You can ask Copilot to add a task that wasn't generated, drop a task you don't want, or adjust an existing task's scope. Prompt with the intent — let Copilot pick the matching skill and pattern from its knowledge base.
Examples:
Add a task to migrate from ActiveMQ to Azure Service Bus.
Drop the integration test task — we have an existing test suite that covers this.
The Spring Boot upgrade task should target Spring Boot 3.2 specifically, not "latest".
Note
The agent only creates tasks for migrations it has a matching skill or pattern for. If you request a migration the agent can't support (for example, an internal proprietary service), it adds a warning to the scope section and the task isn't added. In that case, treat the migration as a manual step and add a Guidelines instruction (see the next section) to document it.
How to customize: prompt Copilot to regenerate
Use the following workflow:
- Review the initial
plan.mdafter the agent generates it. - Identify what you want to change - scope, target service, authentication, questionnaire answers, or specific tasks.
- Prompt Copilot with the change. Be specific: name the section and the desired outcome.
- Let Copilot regenerate
plan.mdand.metadata/tasks.jsontogether. Both files must stay aligned for execution to work. - Re-review the updated plan. Iterate until the scope, target architecture, and task list match your intent.
Example end-to-end prompt:
Update the modernization plan with these changes:
1. Add Migration to Azure scope for messaging — migrate ActiveMQ to Azure Service Bus.
2. Use Managed Identity for all Azure service connections; do not introduce Key Vault.
3. Deployment target is Azure Container Apps.
4. Include Layer 1 and Layer 2 integration tests.
5. The Spring Boot upgrade task should explicitly include the JDK 17 and Jakarta EE migration in its description, as a single task (do not split).
Copilot regenerates the plan, updates the table, records the questionnaire answers, and revises the task list accordingly.
Provide guidelines for execution
In addition to scope and tasks, provide Copilot with guidelines — methodology, conventions, tooling, and rules — that govern how the modernization is executed. Add guidelines most often as a Guidelines section in the plan or as references to local rule files.
Include any instructions that help steer how Copilot modifies code, such as:
- Constraints or prohibitions on certain migration approaches (for example, don't introduce Spring Cloud Azure starters; use the native SDKs).
- Code style or convention requirements.
- Links to internal files, documentation, or scripts the agent can access.
- Domain knowledge helpful for fixing errors or performing migrations.
- Requirements for how the agent should annotate or comment on code changes.
- Cleanup instructions for temporary artifacts created during execution.
Example:
Add these guidelines to the plan:
- Use Azure Managed Identity for every Azure service connection. Do not introduce connection strings or Key Vault secrets unless a service has no Managed Identity support.
- Follow the code conventions defined in `/docs/internal/code-style.md`.
- Provide detailed comments explaining why each code change is necessary.
- After execution, remove any temporary scripts or scratch files created during migration.