Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7a0b32d
Separate API test workflow infrastructure from AL uptake
t-prda Sep 25, 2026
564bc06
Remove relocated auth source-pattern checks from workflow tests
t-prda Sep 25, 2026
6e1d8bb
Keep clean-codeunit lanes opt-in until authentication uptake
t-prda Sep 25, 2026
1d81466
Merge current main baseline while preserving scoped API test exclusions
t-prda Sep 30, 2026
156bca0
Do not classify ordinary API HTTP500 failures as platform races
t-prda Oct 2, 2026
decc121
Do not classify ordinary API HTTP500 failures as platform races
t-prda Oct 2, 2026
a439380
Move API test credential cleanup to supported PipelineFinalize hook
t-prda Oct 2, 2026
dd6207b
Simplify finalizer maintenance by retaining committed wrappers
t-prda Oct 2, 2026
331ae4b
Merge current main with simplified supported API credential finalizer
t-prda Oct 2, 2026
dcc0733
Merge main baseline containing upstream CLEAN27 warning cleanup
t-prda Oct 2, 2026
7003849
Document tenant info object return contract
t-prda Oct 4, 2026
69df417
Merge captured main to unblock stacked API validation
t-prda Oct 4, 2026
304e5b1
Enable reviewed Expense APIs and consolidate unique Expense regressions
t-prda Oct 5, 2026
5c21bd3
Enable remaining general API authentication tests
t-prda Oct 5, 2026
4316269
Enable remaining Expense HTTP API tests with existing clean isolation
t-prda Oct 5, 2026
f709ef3
Inherit complete Expense API re-enablement
t-prda Oct 5, 2026
88881be
Merge captured main after workflow squash to restore Expense-only review
t-prda Oct 5, 2026
7c87fa2
Inherit captured main and clean Expense-first ancestry
t-prda Oct 5, 2026
3070e7a
Defer general API clean-isolation tests until authenticated uptake
t-prda Oct 5, 2026
98df7b3
Enable deferred general API methods with authenticated uptake
t-prda Oct 5, 2026
bd3bbc0
Reuse existing API exclusion manifests for Expense-first sequencing
t-prda Oct 5, 2026
c4953dc
Remove temporary method exclusions within existing API manifests
t-prda Oct 5, 2026
0c81129
Add isolated paired SQL database-name reset diagnostic
t-prda Oct 6, 2026
ae6513a
Match SQL pilot action shells to baseline PowerShell 7
t-prda Oct 6, 2026
d7dd4dd
Allow bounded control-only SQL reset diagnostic repetitions
t-prda Oct 7, 2026
fcc1776
Run isolated W1 and DE API warmup diagnostic trials
t-prda Oct 7, 2026
b234da1
Allow bounded companies readiness probe retries only
t-prda Oct 7, 2026
8a7ebc7
Preserve nested clean test results separately from warmup
t-prda Oct 7, 2026
fbd7ec4
Add isolated method-exclusion and evidence-gated SQL retry experiments
t-prda Oct 7, 2026
0227094
Schedule balanced 300-trial SQL API comparison (AB#646383)
t-prda Oct 7, 2026
06da094
Isolate ten original control trials on published SQL platform fix (AB…
t-prda Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/AL-Go-Settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://raw.githubusercontent.com/microsoft/AL-Go/91b96c2b294be6f823277dafe6f03350abfb9d23/Actions/.Modules/settings.schema.json",
"type": "PTE",
"templateUrl": "https://github.com/microsoft/AL-Go-PTE@preview",
"bcContainerHelperVersion": "preview",
"bcContainerHelperVersion": "6.1.19-preview2811389",
"runs-on": "windows-latest",
"cacheImageName": "",
"UsePsSession": true,
Expand All @@ -15,6 +15,7 @@
"repoVersion": "30.0",
"memoryLimit": "16G",
"numberOfTenantsForTesting": 4,
"enableCleanTestCodeunitExecution": true,
"maxTestAppReruns": 2,
"failOn": "newWarning",
"workspaceCompilation": {
Expand Down
501 changes: 72 additions & 429 deletions .github/workflows/CICD.yaml

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions .github/workflows/PullRequestHandler.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:

Initialization:
needs: [ PregateCheck ]
if: (!failure() && !cancelled())
if: (!failure() && !cancelled()) && github.head_ref != 'features/646383-sql-api-warmup-experiment' && github.head_ref != 'features/646383-sql-api-two-arm-experiment' && github.head_ref != 'features/646383-sql-api-300-trial-comparison' && github.head_ref != 'features/653457-sql-platform-fix-uptake'
runs-on: [ windows-latest ]
outputs:
projects: ${{ steps.determineProjectsToBuild.outputs.ProjectsJson }}
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:

Build1:
needs: [ Initialization, CustomJob-VerifyAppChanges ]
if: (!failure()) && (!cancelled()) && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0
if: (!failure()) && (!cancelled()) && needs.Initialization.result == 'success' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0
strategy:
matrix:
include: ${{ fromJson(needs.Initialization.outputs.buildOrderJson)[0].buildDimensions }}
Expand All @@ -119,7 +119,7 @@ jobs:

Build:
needs: [ Initialization, Build1, CustomJob-VerifyAppChanges ]
if: (!failure()) && (!cancelled()) && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && fromJson(needs.Initialization.outputs.buildOrderJson)[1].projectsCount > 0
if: (!failure()) && (!cancelled()) && needs.Initialization.result == 'success' && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && fromJson(needs.Initialization.outputs.buildOrderJson)[1].projectsCount > 0
strategy:
matrix:
include: ${{ fromJson(needs.Initialization.outputs.buildOrderJson)[1].buildDimensions }}
Expand Down
117 changes: 117 additions & 0 deletions .github/workflows/SqlApiComparisonBatch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: 'SQL platform uptake pair - DO NOT MERGE'

on:
workflow_call:
inputs:
matrix:
required: true
type: string
authorization:
required: true
type: string

permissions:
actions: read
contents: read
id-token: write
packages: read

jobs:
Pilot:
name: Trial ${{ matrix.experiment }}/${{ matrix.country }}/${{ matrix.trial }}
if: github.repository == 'microsoft/BCApps' && github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/features/653457-sql-platform-fix-uptake' && github.run_attempt == 1 && inputs.authorization == 'AB653457-fixed-platform-original-control-10'
strategy:
fail-fast: false
max-parallel: 2
matrix: ${{ fromJSON(inputs.matrix) }}
runs-on: GitHub-BCAppsPL
timeout-minutes: 120
defaults:
run:
shell: pwsh
env:
ALGoOrgSettings: ${{ vars.ALGoOrgSettings }}
ALGoRepoSettings: ${{ vars.ALGoRepoSettings }}
BC_SQL_PILOT_ARM: control
BC_SQL_API_EXPERIMENT: ${{ matrix.experiment }}
BC_SQL_PILOT_COUNTRY: ${{ matrix.country }}
BC_SQL_PILOT_TRIAL: ${{ matrix.trial }}
BC_SQL_UPTAKE_AUTHORIZATION: ${{ inputs.authorization }}
BuildMode: IntegrationTests
steps:
- name: Checkout experiment
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
lfs: true
fetch-depth: 0

- name: Verify baseline PowerShell 7 host
run: |
if ($PSVersionTable.PSEdition -ne 'Core' -or $PSVersionTable.PSVersion.Major -ne 7) {
throw 'The pinned baseline executes on PowerShell 7; this pilot must use the same shell.'
}
$output = Join-Path $env:GITHUB_WORKSPACE 'sql-reset-pilot-output'
New-Item -ItemType Directory $output -Force | Out-Null
@{
edition = $PSVersionTable.PSEdition
version = $PSVersionTable.PSVersion.ToString()
executable = (Get-Process -Id $PID).Path
utc = [DateTime]::UtcNow.ToString('o')
} | ConvertTo-Json | Tee-Object -FilePath (Join-Path $output 'shell-preflight.json')

- name: Validate provenance and download exact compiled PR2 packages
id: packages
env:
GH_TOKEN: ${{ github.token }}
run: |
& .\build\scripts\SqlResetPilot\Prepare.ps1

- name: Read pinned country Integration settings
uses: microsoft/AL-Go/Actions/ReadSettings@91b96c2b294be6f823277dafe6f03350abfb9d23
with:
shell: pwsh
project: build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}
buildMode: IntegrationTests

- name: Read normal disposable CI license and package secrets
id: secrets
uses: microsoft/AL-Go/Actions/ReadSecrets@91b96c2b294be6f823277dafe6f03350abfb9d23
with:
shell: pwsh
gitHubSecrets: ${{ toJson(secrets) }}
getSecrets: 'licenseFileUrl,gitHubPackagesContext,applicationInsightsConnectionString,appDependencySecrets'

- name: Execute original pipeline with bounded clean-test prefix
uses: microsoft/AL-Go/Actions/RunPipeline@91b96c2b294be6f823277dafe6f03350abfb9d23
env:
Secrets: '${{ steps.secrets.outputs.Secrets }}'
with:
shell: pwsh
project: build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}
buildMode: IntegrationTests
artifact: ${{ steps.packages.outputs.artifact }}
installAppsJson: ${{ steps.packages.outputs.apps }}
installTestAppsJson: ${{ steps.packages.outputs.tests }}

- name: Export diagnostics and tear down only owned disposable container
if: always()
run: |
& .\build\scripts\SqlResetPilot\Finalize.ps1

- name: Preserve raw outcomes (including failures)
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: sql-platform-uptake-${{ matrix.experiment }}-${{ matrix.country }}-${{ matrix.trial }}-${{ github.run_id }}
retention-days: 14
include-hidden-files: true
if-no-files-found: error
path: |
sql-reset-pilot-output/**
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/TestResults*.xml
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/ContainerEventLog.evtx
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/BuildOutput.txt
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/.buildartifacts/**/*.xml
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/.buildartifacts/**/*.log
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/.buildartifacts/**/*.evtx
build/projects/Test Apps ${{ matrix.country }} Uptake${{ matrix.trial }}${{ matrix.experiment }}/.buildartifacts/**/BuildOutput.txt
2 changes: 1 addition & 1 deletion build/Packages.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"_comment": "Used to fetch app baselines from BC artifacts"
},
"BCPlatform": {
"Version": "30.0.55665.0",
"Version": "30.0.56092.0",
"Source": "BCPlatform",
"_comment": "The BC platform version, fetched from the platform CDN"
}
Expand Down
21 changes: 21 additions & 0 deletions build/scripts/NewBcContainer.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,28 @@ if ($platformVersion) {
$parameters.platformArtifactUrl = "$platformUrl/platform"
}

if ($env:BC_SQL_PILOT_ARM) {
& (Join-Path $PSScriptRoot 'SqlResetPilot\ContainerPreflight.ps1') -Parameters $parameters
}
New-BcContainer @parameters
if ($env:BC_SQL_PILOT_ARM) {
$runtime = Invoke-ScriptInBcContainer -containerName $parameters.ContainerName -scriptblock {
$commands = @('Get-NAVTenant', 'Dismount-NAVTenant', 'Mount-NAVTenant', 'Test-NAVDatabase', 'Copy-NAVDatabase', 'Remove-NAVDatabase')
@{
commands = @($commands | ForEach-Object {
$command = Get-Command $_ -ErrorAction Stop
@{ name = $command.Name; version = [string]$command.Version; parameters = @($command.Parameters.Keys) }
})
nst = @(Get-Process 'Microsoft.Dynamics.Nav.Server' | ForEach-Object {
@{ pid = $_.Id; version = $_.FileVersion }
})
}
}
$runtime | ConvertTo-Json -Depth 6 | Set-Content (Join-Path $env:BC_SQL_PILOT_OUTPUT 'runtime-preflight.json')
if (@($runtime.nst).Count -ne 1 -or $runtime.nst[0].version -notmatch '^30\.0\.56092\.0(?:\s|$)') {
throw 'Installed NST is not the predeclared 30.0.56092.0 runtime.'
}
}

if ($parameters.auth -in @('UserPassword', 'NavUserPassword')) {
if (-not $parameters.credential) {
Expand Down
Loading
Loading