Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
27b38b5
test: add vsc use test cases for sample (#15044)
hellyzh Dec 24, 2025
6bcafa9
Update (#15039)
qinqingxu Dec 24, 2025
75b2cf9
feat: add api plugin 2.4 into manifest pacakge (#15045)
Alive-Fish Dec 24, 2025
419b7a7
test: update group for DA cases (#15051)
ayachensiyuan Dec 25, 2025
ab4ee0c
test: add feature DA provision local (#15053)
ayachensiyuan Dec 25, 2025
7bdd567
feat: enable embedded knowledge (#14992)
HuihuiWu-Microsoft Dec 25, 2025
3344620
test: fix some DA cases failed (#15055)
ayachensiyuan Dec 25, 2025
764f535
test: add DA EK cases (#15056)
ayachensiyuan Dec 26, 2025
1eff1df
test: fix failed case due to DA EK added (#15057)
ayachensiyuan Dec 26, 2025
affc777
test: fix failed case due to DA EK added (#15058)
ayachensiyuan Dec 26, 2025
e6757bb
test: update test cases (#15060)
hellyzh Dec 26, 2025
2a185e9
test:fix general teams agent playground validation (#15059)
alisa-1020 Dec 26, 2025
44b8d5d
Update to support upload to new storage account (#15061)
qinqingxu Dec 26, 2025
38ca9c4
test: add case 'Error Message of legacy DA projects'
luyajun0205 Dec 29, 2025
c5f9243
Replace with the new test tenant and new account. (#15062)
qinqingxu Dec 29, 2025
5027933
test: Fix clean up issue (#15064)
qinqingxu Dec 29, 2025
bec72a0
Merge pull request #15066 from OfficeDev/yajun-da-error-message
luyajun0205 Dec 30, 2025
0af8df3
Replace new app service (#15067)
qinqingxu Dec 30, 2025
33395cf
test:add feature test case Check AGENT_SCOPE value after create a new…
alisa-1020 Dec 30, 2025
f65aba4
test: add vsc use test cases (#15069)
hellyzh Dec 30, 2025
b1a8c77
Update (#15070)
qinqingxu Dec 30, 2025
46dd768
test: add feature check the debug order (#15072)
ayachensiyuan Dec 31, 2025
4501c58
test: update vsc use test cases (#15073)
hellyzh Dec 31, 2025
22b108b
test: fix ek problem (#15074)
ayachensiyuan Dec 31, 2025
8d30958
test: add vscuse case for DA mcp (#15075)
Annefch Dec 31, 2025
19d02d0
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
314ecb2
Localized file check-in by OneLocBuild Task: Build definition ID 2343…
azure-pipelines[bot] Jan 4, 2026
e3f6104
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
83c93a1
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
766e184
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
7e9814a
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
d43a801
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
20afe43
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
680b653
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202512…
csigs Jan 4, 2026
354a0ad
test:update case owner (#15079)
alisa-1020 Jan 4, 2026
277226e
fix: remaining work of removing isNewProjectTypeEnabled (#15078)
Alive-Fish Jan 4, 2026
f0b02b1
test:add validate manifest test case (#15081)
alisa-1020 Jan 4, 2026
f6f7b31
test: split local and remote debug test cases (#15082)
hellyzh Jan 4, 2026
36e8554
Cherry-pick PR #14936: Fix developer portal link to app-package-edito…
Copilot Jan 5, 2026
231aaf5
feat: support broker authentication for VSC and CLI (#14925)
HuihuiWu-Microsoft Jan 5, 2026
e27a8d0
fix: da scope duplication (#15084)
tecton Jan 5, 2026
45918f8
Localized file check-in by OneLocBuild Task: Build definition ID 2343…
azure-pipelines[bot] Jan 5, 2026
b211c9f
fix(e2e): Fix sample E2E test failures (#15076)
qfai Jan 5, 2026
f76ea1b
fix: rag templates prompt issue (#15087)
qinzhouxu Jan 5, 2026
5572a82
test:add validate manifest for declrative test case (#15088)
alisa-1020 Jan 5, 2026
08acb70
Cherry-pick PR #15046: Simplify error message for missing environment…
Copilot Jan 6, 2026
8e9324e
fix: limit issue report url length (#15089)
tecton Jan 6, 2026
ba75ce9
test: add vsc use test cases (#15090)
hellyzh Jan 6, 2026
f01668e
test: add vscuse sample reddit link unfurling and feature show chang…
ayachensiyuan Jan 7, 2026
9790fe7
test: move unused samples (#15077)
qinqingxu Jan 7, 2026
20916f4
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202601…
csigs Jan 7, 2026
bd84650
test: update 'Sample One Productivity Hub' sample cases
luyajun0205 Jan 7, 2026
9ede010
test:add report a issue test case (#15096)
alisa-1020 Jan 7, 2026
f44eabb
test:add coffee agent sample test case (#15095)
alisa-1020 Jan 7, 2026
dbdf89d
Merge pull request #15097 from OfficeDev/yajun-fix
luyajun0205 Jan 7, 2026
60190ae
test: deprecate sample Npm-Search-Connector (#15100)
Annefch Jan 7, 2026
27f4f18
fix: provision fail due to incompatible properties (#15098)
HuihuiWu-Microsoft Jan 7, 2026
33fdbbe
test: add feature cases related to app yml file
luyajun0205 Jan 7, 2026
4d7cca7
Merge pull request #15103 from OfficeDev/yajun-work
luyajun0205 Jan 7, 2026
3ccd1f7
feat: enable multiselect for local MCP when creating DA (#15027)
rodamore Jan 7, 2026
4748bef
refactor: remove feature flags (#15043)
tecton Jan 7, 2026
8cb2794
test: update vscuse test case
luyajun0205 Jan 8, 2026
d6499a3
Merge pull request #15108 from OfficeDev/yajun-fix
luyajun0205 Jan 8, 2026
2523f5f
fix: mock keytar for e2e test (#15102)
HuihuiWu-Microsoft Jan 8, 2026
0180a00
refactor: init copilot-instructions and add OOP for manifests (#15099)
Alive-Fish Jan 8, 2026
305610d
test: add feature check sample gallery & fix bot sso create issue (#1…
ayachensiyuan Jan 8, 2026
031f9a0
test: add vscuse case for sample Data-Analyst-Agent (#15110)
Annefch Jan 8, 2026
6d56161
test: update vsc use test cases (#15111)
hellyzh Jan 8, 2026
2b249be
test:add test case for open_developePortal publish (#15112)
alisa-1020 Jan 8, 2026
ade2dd8
test: add large notification bot case (#15114)
ayachensiyuan Jan 9, 2026
5aa2874
test: add vsc use test cases (#15115)
hellyzh Jan 9, 2026
e75c65c
fix: leave parameters of tools for local MCP server (#15109)
Alive-Fish Jan 12, 2026
b2d16a5
test: add 'graph-rsc-helper' sample
luyajun0205 Jan 12, 2026
06521f8
Merge pull request #15118 from OfficeDev/yajun-work
luyajun0205 Jan 12, 2026
dfd0982
test:add modify playground mock data test case (#15119)
alisa-1020 Jan 12, 2026
3446e1b
test: add more environment variable (#15116)
qinqingxu Jan 12, 2026
bf4c184
fix: da templates prerequisites checking (#15120)
qinzhouxu Jan 13, 2026
3e05ead
Juno: check in to juno/hb_fd34cb3d-1ea5-4a7c-8a66-721a44a97af3_202601…
csigs Jan 13, 2026
121aa2a
test: fix missing pictures (#15127)
ayachensiyuan Jan 13, 2026
470deda
feat(cli): generate config files for local testing (#14962)
tecton Jan 13, 2026
cf138c9
test: update vscuse test cases
luyajun0205 Jan 13, 2026
b24dbba
test: update vsc use test cases (#15131)
hellyzh Jan 13, 2026
87da903
test: update vscuse test case
luyajun0205 Jan 13, 2026
4ba3eed
fix: e2e test (#15130)
tecton Jan 13, 2026
193e6ce
Merge pull request #15132 from OfficeDev/yajun-fix
luyajun0205 Jan 13, 2026
fb67669
test: suppport specify vscuse python version (#15133)
qinqingxu Jan 13, 2026
246e6d1
fix: hide mcp notification (#15140)
Alive-Fish Jan 14, 2026
ced0940
test: fix da ui change & add UI feature case (#15136)
ayachensiyuan Jan 14, 2026
8c855c5
fix: da templates configurations naming (#15142)
qinzhouxu Jan 14, 2026
c7248f5
fix: deprecate spfx-productivity-dashboard sample (#15138)
qfai Jan 14, 2026
5b4d13b
test: add update app Feature case (#15144)
Annefch Jan 14, 2026
3c606d1
fix: resolve eslint restrict-template-expressions errors in dotnetChe…
qfai Jan 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
91 changes: 91 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Coding Style Guidelines

When generating or editing code in this repository:

- **Line Endings**: Use LF (Unix-style) line endings for all source code files. Exception: Use CRLF for localization files under `**/package.nls.*.json` only.
- **Indentation**: Use 2 spaces for TypeScript/JavaScript files
- **Quotes**: Use double quotes for strings in TypeScript/JavaScript

---

# Architecture Overview
The toolkit follows a **layered architecture** with clear separation of concerns:

┌─────────────────────────────────────────────────────────────────────┐
│ VS Code Extension Layer │
│ (packages/vscode-extension) │
│ - UI Commands, Handlers, TreeView, CodeLens Providers │
└──────────────────────────────┬──────────────────────────────────────┘
┌──────────────────────────────▼──────────────────────────────────────┐
│ FX-Core Layer │
│ (packages/fx-core) │
│ - Project Generation, Lifecycle, Drivers, Manifest Utilities │
└──────────────────────────────┬──────────────────────────────────────┘
┌──────────────────────────────▼──────────────────────────────────────┐
│ API Layer │
│ (packages/api) │
│ - Type Definitions, Interfaces, Question Models │
└──────────────────────────────┬──────────────────────────────────────┘
┌──────────────────────────────▼──────────────────────────────────────┐
│ Manifest Layer │
│ (packages/manifest) │
│ - App Manifest Types, Converters, OOP Wrappers │
│ - Three manifest types: Teams, Declarative Agent, API Plugin │
└─────────────────────────────────────────────────────────────────────┘

---

# Package-Specific Instructions

Detailed instructions for individual packages are available in `.github/instructions/`:

| Package | Instructions File | Key Exports |
|---------|-------------------|-------------|
| `@microsoft/app-manifest` (packages/manifest) | `.github/instructions/manifest.instructions.md` | `TeamsManifest`, `DeclarativeAgentManifest`, `APIPluginManifest`, `AppManifestUtils`, Wrappers |

> **Note**: When working with a specific package, read the corresponding instructions file for detailed documentation about the package's architecture, APIs, and patterns

---

# Manifest Package Quick Reference

The manifest package (`packages/manifest`) provides TypeScript types for Microsoft 365 app manifests:

| Manifest Type | Purpose | Wrapper | Latest Type |
|---------------|---------|---------|-------------|
| **Teams Manifest** | Core M365 apps (bots, tabs, extensions) | `TeamsManifestWrapper` | `TeamsManifestLatest` |
| **Declarative Agent** | AI agents with instructions & actions | `DeclarativeAgentManifestWrapper` | `DeclarativeAgentManifestLatest` |
| **API Plugin** | REST API plugin capabilities | `PluginManifestWrapper` | `APIPluginManifestLatest` |

**Key utilities:**
- `AppManifestUtils` - Read/write/validate manifests
- `*Converter` classes - JSON ↔ typed object conversion
- Wrappers provide fluent APIs for manipulation

**Deprecated types** (use generated types instead):
- `TeamsAppManifest` → use `TeamsManifest`
- `DeclarativeCopilotManifestSchema` → use `DeclarativeAgentManifest`
- `PluginManifestSchema` → use `APIPluginManifest`
- `ManifestUtil` → use `AppManifestUtils`

---

# Unit Testing Guidelines

When fixing unit tests for a package:

1. **Navigate to the package directory** before running tests
2. **Run the full test suite** to identify failures:
```bash
npm run test:unit
```
3. **For large test suites or targeted debugging**, run specific test files directly:
```bash
npx nyc mocha --no-timeouts --require ts-node/register <path_to_test_file_or_folder>
```
4. **Fix errors iteratively** - run tests after each fix to verify

> **Tip**: When there are many failing tests, start with the specific file causing issues to reduce feedback loop time.
222 changes: 222 additions & 0 deletions .github/instructions/manifest.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
---
description: Instructions for @microsoft/app-manifest package - TypeScript type definitions and converters for Microsoft 365 App manifests
applyTo: 'packages/manifest/**,packages/**manifest*,packages/**Manifest*'
---

# Package: `@microsoft/app-manifest` (packages/manifest)

## Overview

This package provides **TypeScript type definitions, converters, and OOP wrappers** for Microsoft 365 App manifests. It automatically generates strongly-typed interfaces from official Microsoft JSON schemas and provides utilities for manifest manipulation, validation, and I/O.

## Three Manifest Types

| Manifest Type | Purpose | Version Field | Latest Type Alias |
|---------------|---------|---------------|-------------------|
| **Teams Manifest** | Core app manifest for M365 apps (bots, tabs, extensions) | `manifestVersion` | `TeamsManifestLatest` |
| **Declarative Agent Manifest** | AI agent instructions, knowledge sources, actions | `version` | `DeclarativeAgentManifestLatest` |
| **API Plugin Manifest** | Plugin capabilities, REST API operations | `schema_version` | `APIPluginManifestLatest` |

> **Note**: Check `src/json-schemas/` for available versions. The `*Latest` type aliases always point to the most recent stable version.

## How It Works

### Schema-Driven Code Generation
1. **Schema Collection**: JSON schemas are stored in `src/json-schemas/` organized by manifest type and version
2. **Code Generation**: Run `npm run convert` to execute `convert.js`, which uses `quicktype-core-jayzhang` to generate TypeScript types from JSON schemas
3. **Generated Types**: Output goes to `src/generated-types/` with type interfaces and `Convert` classes for each version
4. **Discriminated Unions**: All versions are combined into union types (`TeamsManifest`, `DeclarativeAgentManifest`, `APIPluginManifest`)

### Directory Structure
```
src/
├── json-schemas/ # Source JSON schemas (SOURCE OF TRUTH for versions)
│ ├── teams/ # Teams manifest schemas (v1.0-v1.24, devPreview)
│ └── copilot/
│ ├── declarative-agent/ # Declarative agent schemas (v1.0-v1.6)
│ └── plugin/ # API plugin schemas (v2.1-v2.4)
├── generated-types/ # Auto-generated TypeScript types
│ ├── index.ts # Union types, converters, AppManifestUtils
│ ├── teams/ # TeamsManifestV{version}.ts files
│ └── copilot/
│ ├── declarative-agent/ # DeclarativeAgentManifestV{version}.ts files
│ └── plugin/ # ApiPluginManifestV{version}.ts files
├── wrappers/ # OOP wrappers with fluent APIs
│ ├── index.ts # Exports all wrappers and related types/constants
│ ├── BaseManifest.ts # Abstract base class with common functionality
│ ├── TeamsManifestWrapper.ts # Wrapper for Teams manifests
│ ├── PluginManifestWrapper.ts # Wrapper for API Plugin manifests
│ └── DeclarativeAgentManifestWrapper.ts # Wrapper for Declarative Agent manifests
├── manifest.ts # @deprecated - Legacy Teams manifest types
├── declarativeCopilotManifest.ts # @deprecated - Legacy declarative agent types
├── pluginManifest.ts # @deprecated - Legacy plugin types
└── index.ts # Main entry point, re-exports
```

## Key APIs

### Union Types (from `generated-types/index.ts`)
```typescript
// Union of all supported versions for each manifest type
type TeamsManifest = TeamsManifestV1D0 | TeamsManifestV1D1 | ... | TeamsManifestVDevPreview;
type DeclarativeAgentManifest = DeclarativeAgentManifestV1D0 | ...;
type APIPluginManifest = APIPluginManifestV2D1 | ...;
type AppManifest = TeamsManifest | DeclarativeAgentManifest | APIPluginManifest;
```

### Converters (from `generated-types/index.ts`)
```typescript
// Parse JSON to typed manifest
TeamsManifestConverter.jsonToManifest(json: string): TeamsManifest
DeclarativeAgentManifestConverter.jsonToManifest(json: string): DeclarativeAgentManifest
ApiPluginManifestConverter.jsonToManifest(json: string): APIPluginManifest

// Serialize manifest to JSON
TeamsManifestConverter.manifestToJson(manifest: TeamsManifest): string
DeclarativeAgentManifestConverter.manifestToJson(manifest: DeclarativeAgentManifest): string
ApiPluginManifestConverter.manifestToJson(manifest: APIPluginManifest): string
```

### AppManifestUtils (from `generated-types/index.ts`)
```typescript
// Read manifests from file
AppManifestUtils.readTeamsManifest(filePath): Promise<TeamsManifest>
AppManifestUtils.readDeclarativeAgentManifest(filePath): Promise<DeclarativeAgentManifest>
AppManifestUtils.readApiPluginManifest(filePath): Promise<APIPluginManifest>

// Read with validation
AppManifestUtils.readAndValidateTeamsManifest(filePath): Promise<[TeamsManifest, string[]]>
AppManifestUtils.readAndValidateDeclarativeAgentManifest(filePath): Promise<[DeclarativeAgentManifest, string[]]>
AppManifestUtils.readAndValidateApiPluginManifest(filePath): Promise<[APIPluginManifest, string[]]>

// Write manifests
AppManifestUtils.writeTeamsManifest(filePath, manifest): Promise<void>
AppManifestUtils.writeDeclarativeAgentManifest(filePath, manifest): Promise<void>
AppManifestUtils.writeApiPluginManifest(filePath, manifest): Promise<void>

// Validation
AppManifestUtils.validateAgainstSchema(manifest, schema?): Promise<string[]>
AppManifestUtils.fetchSchema(schemaUrl): Promise<JSONSchemaType<AppManifest>>
```

## OOP Manifest Wrappers

For convenient manifest manipulation, the package provides **OOP wrappers** with fluent APIs in `src/wrappers/`:

### Available Wrappers

| Wrapper Class | Purpose | Exported Enums |
|---------------|---------|----------------|
| `TeamsManifestWrapper` | Teams app manifests | `DefaultInstallScope`, `StaticTabScope`, `ConfigurableTabScope`, `ComposeExtensionTypeEnum` |
| `DeclarativeAgentManifestWrapper` | Declarative agent manifests | `CapabilityName` |
| `PluginManifestWrapper` | API plugin manifests | `RuntimeType` |

### Design Patterns

All wrappers follow consistent patterns:

#### 1. Static Factory Methods
```typescript
SomeWrapper.read(filePath) // Async read from file
SomeWrapper.readSync(filePath) // Sync read from file
SomeWrapper.fromJSON(json) // Create from JSON string
SomeWrapper.create(init) // Create new with required fields
```

#### 2. Fluent Setters (return `this` for chaining)
```typescript
manifest
.setName("My App")
.setDescription("Short", "Full")
.setVersion("1.0.0");
```

#### 3. Collection Operations
```typescript
manifest.addBot(botId, scopes) // Add item
manifest.removeBot(botId) // Remove by identifier
manifest.hasBot(botId) // Check existence
manifest.getBot(botId) // Get single item
```

#### 4. Common Properties
```typescript
manifest.data // Read-only raw manifest data
manifest.filePath // Original file path (if loaded from file)
manifest.isDirty // Whether manifest has unsaved changes
manifest.save() // Save to file
manifest.validate() // Validate against JSON schema
manifest.toJSON() // Serialize to JSON string
manifest.clone() // Deep clone
```

### Usage Examples

```typescript
import {
TeamsManifestWrapper,
DeclarativeAgentManifestWrapper,
PluginManifestWrapper,
DefaultInstallScope,
CapabilityName,
} from "@microsoft/app-manifest";

// Teams Manifest
const teamsManifest = await TeamsManifestWrapper.read("manifest.json");
teamsManifest
.setName("My Teams App")
.setDefaultInstallScope(DefaultInstallScope.personal)
.addBot("bot-id", ["personal", "team"])
.addStaticTab("home", "Home", "https://example.com/tab")
.addDeclarativeAgent("agent1", "declarativeAgent.json");
await teamsManifest.save();

// Declarative Agent Manifest
const agentManifest = await DeclarativeAgentManifestWrapper.read("agent.json");
agentManifest
.setName("My Agent")
.setInstructions("You are a helpful assistant.")
.addCapability(CapabilityName.WebSearch);
await agentManifest.save();

// API Plugin Manifest
const pluginManifest = await PluginManifestWrapper.read("plugin.json");
pluginManifest
.setNameForHuman("My Plugin")
.addFunction({ name: "getData", description: "Gets data" });
await pluginManifest.save();
```

## Adding a New Schema Version

1. Add the new schema JSON file to the appropriate folder in `src/json-schemas/`
2. Run `npm run convert` to regenerate types
3. Update `src/generated-types/index.ts` to:
- Import the new version module
- Add to the union type
- Add converter mapping in the appropriate `ConverterMap`
4. If this is a new "latest" version, update the `*Latest` type alias

## Extending Wrappers

To add a new wrapper:
1. Create a new class in `src/wrappers/` (extend `BaseManifest<T>` if the manifest type satisfies `Record<string, unknown>`)
2. Define internal types derived from the latest manifest version
3. Implement required methods: `validate()`, `toJSON()`, `clone()`
4. Add static factory methods: `read()`, `readSync()`, `fromJSON()`, `create()`
5. Add getters, setters, and collection operations as needed
6. Export any schema-derived const enums from the wrapper
7. Export from `src/wrappers/index.ts`

## Deprecated Types

The following manually-written type definitions are **deprecated** and should be replaced with auto-generated types:

| Deprecated | Replacement |
|------------|-------------|
| `TeamsAppManifest` (manifest.ts) | `TeamsManifest` or `TeamsManifestLatest` |
| `DeclarativeCopilotManifestSchema` (declarativeCopilotManifest.ts) | `DeclarativeAgentManifest` or `DeclarativeAgentManifestLatest` |
| `PluginManifestSchema` (pluginManifest.ts) | `APIPluginManifest` or `APIPluginManifestLatest` |
| `ManifestUtil` (index.ts) | `AppManifestUtils` |

These legacy types remain for backward compatibility but will be removed in a future major version.
25 changes: 14 additions & 11 deletions .github/workflows/rerun.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,20 @@ jobs:
defaults:
run:
working-directory: packages/tests
env:
M365_ACCOUNT_PASSWORD: ${{ matrix.m365_user.name == 'M365_USERNAME_With_Copilot' && secrets.TEST_TENANT_M365_ACCOUNT_PASSWORD || secrets.TEST_M365_PASSWORD }}
M365_DISPLAY_NAME: "test"
CLEAN_CLIENT_ID: ${{ secrets.TEST_CLEAN_CLIENT_ID }}
CLEAN_CLIENT_SECRET: ${{ secrets.TEST_CLEAN_CLIENT_SECRET }}
CLEAN_TENANT_ID: ${{ secrets.TEST_CLEAN_TENANT_ID }}
AZURE_TENANT_ID: ${{ matrix.m365_user.name == 'M365_USERNAME_With_Copilot' && secrets.TEST_TENANT_TENANT_ID || secrets.TEST_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.TEST_SUBSCRIPTION_ID }}
AZURE_ACCOUNT_NAME: ${{ secrets.TEST_USER_NAME }}
AZURE_ACCOUNT_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }}
MAIL_API_KEY: ${{ secrets.MAIL_API_KEY }}
TEST_TENANT_M365_ACCOUNT_NAME: ${{ secrets.TEST_TENANT_M365_ACCOUNT_NAME }}
strategy:
fail-fast: false
matrix:
m365_user:
- { name: "M365_USERNAME_1", value: "[email protected]" }
Expand All @@ -124,17 +137,7 @@ jobs:
- { name: "M365_USERNAME_admin_15", value: "[email protected]"}
- { name: "M365_USERNAME_admin_16", value: "[email protected]"}
- { name: "M365_USERNAME_admin_17", value: "[email protected]"}
env:
M365_ACCOUNT_PASSWORD: ${{ secrets.TEST_M365_PASSWORD }}
M365_DISPLAY_NAME: "test"
CLEAN_CLIENT_ID: ${{ secrets.TEST_CLEAN_CLIENT_ID }}
CLEAN_CLIENT_SECRET: ${{ secrets.TEST_CLEAN_CLIENT_SECRET }}
CLEAN_TENANT_ID: ${{ secrets.TEST_CLEAN_TENANT_ID }}
AZURE_TENANT_ID: ${{ secrets.TEST_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.TEST_SUBSCRIPTION_ID }}
AZURE_ACCOUNT_NAME: ${{ secrets.TEST_USER_NAME }}
AZURE_ACCOUNT_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }}
MAIL_API_KEY: ${{ secrets.MAIL_API_KEY }}
- { name: "M365_USERNAME_With_Copilot", value: "[email protected]"}
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
Loading
Loading