Skip to content

[LogicApps] Add Logic Apps Standard preview extension - #10467

Draft
Riley Evans (rllyy97) wants to merge 11 commits into
Azure:mainfrom
rllyy97:rileyevans-microsoft-logicapp-upstream-contribution
Draft

Riley Evans (rllyy97) wants to merge 11 commits into
Azure:mainfrom
rllyy97:rileyevans-microsoft-logicapp-upstream-contribution

Conversation

@rllyy97

@rllyy97 Riley Evans (rllyy97) commented Oct 13, 2026 •

Copy link
Copy Markdown

This checklist is used to make sure that common guidelines for a pull request are followed.

Related command

az logicapp developer workflow additions: project, workflow, context,
dependency, runtime, connector, connection, identity, run,
trigger history, test, and deployment package.

This is the complete new Logic Apps Standard preview extension, including
the original 38-command extension and reviewed improvements through the
historical 0.1.26 SDK-testing baseline: 59 extension leaves, 21 additions.
The existing 13 GA app-management/app-settings/ZIP-deployment leaves remain
core-owned and are not overridden.

Preview - for evaluation and development. Commands, parameters, and output
formats may change between releases. Production readiness has not been
established; use non-production resources for evaluation. Some commands modify
deployed workflows, connections, and identities; preview does not mean sandboxed
or read-only. Preview status applies only to this extension's new commands, not
the existing core-owned az logicapp app-management, app-settings, and
ZIP-deployment commands, which are not overridden.

General Guidelines

  • Have you run azdev style <YOUR_EXT> locally? (pip install azdev required)
  • Have you run python scripts/ci/test_index.py -q locally? (pip install azdev required)
  • My extension version conforms to the Extension version schema

For new extensions:

About Extension Publish

There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

The unpublished preview remains 1.0.0b1, with a Python 3-only wheel,
Python >=3.10 and minimum CLI 2.67.0. No release/index publication is requested.
Upstream root guides, the extension index and unrelated configuration/ownership
are unchanged. Relevant documentation is extension-local and sanitized.

Contribution and rationale

Rohitha Hewawasam authored the original extension, baseline
4e50f12d52b13c25de0d90a6955f1fff2d5523f1. The initial complete migration used
3dcef94c0e6856f8e2a3f74e44b7f6b903fa5446; the complete reviewed synchronization
used 1eaa335d635e62a41607b4c7d06acd4b96e49dfb (historical 0.1.23).
The context-planning follow-up used 085b3ee3c54628acc85a87ee7e93e60268d50c4a.
The current separately authorized SDK/default-port follow-up accounts for every
path in the reviewed tracked-only delta through
ea68b867939845e7d7492e4d261eb77ff0d41d3e (historical 0.1.26), not an
intermediate SDK snapshot. Original attribution and mandatory Copilot co-author
trailers are preserved.

Current public head: 8bad80f5f2347e23de432ea952c845e025d28326, from
rllyy97:rileyevans-microsoft-logicapp-upstream-contribution to official main.
The earlier 4172afb4cec33f84c5b65351c435e3c46af9abc9 Windows/context head,
its green CI and development-repository reviews do not qualify this new head.
Upstream preview packaging, service registration, Windows dependency strategy,
portable GA controls, style/helper extraction and lifecycle safeguards are
preserved rather than overwritten by historical packaging.

Included surface Contract and boundary
Original developer workflow Local projects/authoring, packaging, explicit dependencies, owned runtime lifecycle, connector catalogs, connections/ACLs/identity, invocation/inspection and saved shortcuts remain included. Core app/settings/ZIP deployment stays additive.
Discovery and replacement Bounded list/show/export, full-document workflow set, not a partial merge, and guarded delete. Strong ETags, confirmation, completed shared runtime validation and explicit nontransactional VFS acknowledgement remain required.
Individual state and doctor Deployed FlowState preserves the settings snapshot but is not transactional. Local live state changes remain unsupported. Doctor reports conservative unknowns; it does not install, repair or run business tests.
Execution controls Bounded wait/cancel, directly selected trigger history resubmit, genuine one-action run resubmit --action with completed source, literal runtime eligibility and stable evidence. No trigger fallback, auto-enabling, invented identities or mutation retries.
Transport and ownership Bounded strict JSON/raw reads, deadline/uncertainty preservation, rejection of every nonempty mutation acknowledgement and bearer preservation against netrc substitution. Strong revision-bound compensation and complete tenant/principal/ACL/continuation evidence retain ambiguous resources rather than authorize cleanup.
Saved targets and defaults AZURE_CONFIG_DIR isolation; explicit path, otherwise named/active local context, otherwise current directory. Explicit cloud authoring is refused even with a path; explicit paths bypass implicit active contexts. Relative reports anchor to the selected project without implicit directories. Omitted context-create ports normalize to 7071 at the actual CLI boundary; explicit/stored port validation stays strict.
Managed connections Canonical connection managed create separates connection --name and site --logic-app-name; deprecated legacy semantics remain. OAuth failure may retain resources. Deletion rechecks principal, tenant and complete ACL ownership before and after unlink.
Runtime ownership PID/birth identities remain mandatory. Exited Windows process objects and only proven pre-existing stale-parent subtrees are distinguished. Explicit cleanup-pending recovery requires all recorded processes/consumers gone, an idle port and exact locked receipt snapshots.
Read-only planning Successful default planning exits 0; --strict retains blocked exit 4. Both remain notExecuted, zero business tests and immutable SDK gates. XML metadata inspection does not evaluate MSBuild or restore dependencies.
Source-only SDK scaffolding test create emits source/configuration, pins SDK 1.0.3/engine 1.165.50/MSTest 4.0.2/net8.0 and selects .NET 8.0.426 latestPatch. Existing output is refused. The starter is ignored/inconclusive until authored, never a fabricated passing test.
Explicit native SDK execution test run requires SDK-terms and project-trust acknowledgements on every invocation; restore is separately opt-in. Private home/cache/temp/configuration and an environment allowlist do not sandbox arbitrary build/test code or prove denied egress, SDK invocation, useful assertions, telemetry-off or coverage.
Native results and cleanup Closed sanitized JSON derives bounded consistent native TRX counts. Raw TRX remains sensitive/local. Empty/skipped suites are not passes. Failures, timeout and identity-checked cleanup are distinct; any retained process receipt blocks retries without being parsed into signalling authorization.
Deployment boundaries Dedicated native test/state directories and raw TRX are excluded. Colocation with host/workflow/runtime content is refused rather than omitting runtime files; ordinary runtime DLLs remain included. Trusted code can write elsewhere: inspect the manifest.
Historical report compatibility Foundation schema 1 retains 0.1.17-0.1.21/public 1.0.0b1. Schema 2 retains 0.1.22/0.1.23/0.1.24/0.1.25/0.1.26/public 1.0.0b1. Native reports explicitly retain both 0.1.25 and 0.1.26 plus public producers. Exact old/new public schema-2 input.options and report.invalid whole rows remain readable after version changes; mixed text, unknown producers/fields and invalid counters remain rejected. Saved approval/provenance never authorizes a new execution.
Windows dependencies Windows alone selects psutil>=5.9.0,<7.1.2, preserving x86/x64 publisher-wheel installs without a compiler; non-Windows retains psutil>=5.9.0. WOW64 reports AMD64, so architecture markers are insufficient. This deliberately forgoes later fixes pending a qualified x86 delivery strategy; no global 7.2.2 pin.

Ownership

Only the originally requested ownership line was added; unrelated ownership is preserved:

/src/logicapp/ [REDACTED:email_address] [REDACTED:email_address] [REDACTED:email_address] [REDACTED:email_address] [REDACTED:email_address]

The source retains exactly the five user-supplied email identities. Effective
ownership requires repository write access and eligible verified-account
emails, not EMU identities. These qualifications have not been verified;
no collaborators, access or authentication settings were changed.

Validation evidence

Isolated actual current Windows CLI 2.91.0 x86/x64 distributions used Python
3.14.7; minimum CLI 2.67.0 x64 used Python 3.12.7. Development used Python
3.12.12/CLI 2.91.0/azdev 0.2.13. Signed, release-hash-verified MSI payloads
were extracted without installation/registration/shared-system changes.
Configuration, extensions and temporary/cache paths were private. Source and
exact-installed suites ran serially, with production origins enforced.

Exact check or exercised contract Result
azdev style logicapp Passed pylint/flake8 on final source, no broad exclusions.
azdev linter logicapp Passed command/help/argument/custom pylint rules.
azdev verify license Passed repository license-header verification.
python scripts\ci\validate_external_source_urls.py --cached Passed all staged changes.
python scripts\ci\test_index.py -q Nine tests completed successfully, two CI-only broad-network skips; index unchanged.
python scripts\ci\service_name.py Passed with all 59 extension leaves loaded and the existing required service registration.
azdev test logicapp --series --discover --no-exitfirst --pytest-args -q All 892 source tests passed in the isolated development environment.
Current x86 exact-installed, current x64 source/exact-installed, minimum x64 source/exact-installed full suites Five serial runs each passed 892 tests / 2,463 subtests.
Current x86 source full suite 891 passed / 2,463 subtests passed; one unchanged native Azurite-shim fixture failed during teardown with Windows executable cleanup access denied. This full run is not green. Evidence was retained, not replaced by repeated full runs.
Focused SDK/report/feedback/actual-parser regressions 99 tests / 279 subtests passed.
Reviewed production/report parity Every reviewed module accounted for, explicit upstream adaptations retained; 2,737 native-report shape/type/record mutations agreed after normalizing only intended producer mappings.
Genuine SDK assertions Source API and each of three exact-installed CLIs passed four synthetic SDK assertions. Installed counts: five selected, four executed/passed, one skipped. These counts are not business/connector coverage or SDK-call attestation.
Actual separate CLI processes 46 cases: omitted-port local/cloud contexts, refusal, source-only create/no clobber, context-relative default planning, approvals, query/table, native/history inspection, genuine failed/empty/build-failure/timeout, retained-receipt refusal and deployment/colocation boundaries.
Historical report inspection Original 0.1.25/0.1.26 native reports and pre-context public 1.0.0b1 foundation JSON inspected without input rewriting in each installed CLI. Exact catalogs and future-version retention regressions pass.
Native ownership after test-hook removal All six stock-first/dependency-first probes passed across three environments: actual pointer/PE width, CIM/birth identity, cross-architecture children, listener ownership, unknown/mismatched refusal, verified stops and held-handle exit timestamps. CLI core can preload psutil 6.1.0; installing 7.1.1 does not replace a cached import.
Package and publisher bytes All 32 production files match source/wheel/three fresh installs; all 30 installed psutil files match independently hash-verified publisher wheels. Thirty platform-marker cases preserve both Windows targets/non-Windows range.
python setup.py bdist_wheel --python-tag py3 --bdist-dir $buildDirectory --dist-dir $outputDirectory from src\logicapp Python 3-only wheel/package contract passed. SHA256 7f4c60255cfea5411ca19e07358ac33fb36966a065770035ed22b5c6012028ac.
python -m azure.cli extension add --source $wheel --yes Fresh private installs in all three environments resolved dependencies from previously verified local publisher wheels without compiler/dependency suppression. Earlier ordinary online architecture installs passed; this is not claimed as a second unrestricted online install.
azdev scan --confidence-level MEDIUM --directory-path src\logicapp --recursive --continue-on-failure No detected secrets, no custom exclusions. Five generated binary artifacts emitted UTF-8 decode warnings; their binary content was not parsed.
python -m pip check, git diff --check, tracked privacy and relocated local Markdown links Passed; no private URLs, machine/session paths, raw logs, trial artifacts or SDK binaries included.
GA/additivity All 59 extension leaves and 13 core-owned GA leaves preserved, stock same-version help/ownership, no overrides, required/repeated flags and JSON/table/query/nonzero behavior covered.
Exact-head upstream Azure Pipelines Main build 362009 and breaking-change build 362010 both succeeded on a verified merge containing 8bad80f5f2347e23de432ea952c845e025d28326. All five Linux Python 3.10-3.14 jobs each passed 886 tests, six Windows-only skips and 2,463 subtests.

SDK trials used approved synthetic source and a copied isolated package cache,
SDK 1.0.3/engine 1.165.50/MSTest 4.0.2 and .NET SDK 8.0.426, explicit invocation
acknowledgements and separately requested restore. No retained process receipts
or exact-path native fixture processes remained after the completed trials.
Temporary test import bootstraps in the owned MSI extractions were removed
before native CLI/ownership probes; no production API, clock or process
observation was patched.

The recorded x86 source teardown error does not establish its root cause or
universal native filesystem stability. A later fresh exact-path inspection
found no fixture process and only that completed fixture directory was cleaned;
no process was signalled. Earlier Windows sharing/context replacement/loopback
variability remains historical evidence, not erased by subsequent passes.
No ownership guard, deadline, exclusion or unrelated CI/index selection was weakened.

Upstream main build 362009
and breaking-change build 362010
completed successfully. Their merge 746f4d25e8aac804cb67b963046e92da404436dc
has verified parents ebea488892f255360e25bc481fc3f01fd5990334 and exact SDK
head 8bad80f5f2347e23de432ea952c845e025d28326.
The actual logs show Python 3.10.19, 3.11.14, 3.12.12, 3.13.11 and 3.14.2:
each passed 886 tests, skipped six Windows-only tests and passed 2,463 subtests.
Style/linter logs confirm 59 extension commands and accepted service metadata;
license, index, external URLs, init, policy, credential and high/medium scans
also succeeded. No failed or succeeded-with-issues task/job records were hidden.
The public head has 23 successful checks, one configured skip and none unfinished.
These Linux unit/build results do not imply native Linux SDK or live connector
execution; the synthetic native SDK trials above are separate Windows evidence.

Deliberate limitations and draft gates

Native SDK/build/test code is trusted code, not sandboxed. No SDK binary
redistribution, live Azure mutation, denied egress, complete connector/workflow
coverage or production readiness is claimed. The SDK typed top-level-output
cast failure remains documented; workflow semantics are not rewritten to hide it.
Human safety review is still required.

The current native results are not a complete Windows Python 3.10-3.14,
minimum-x86, macOS or native Linux SDK matrix. Prior-head upstream CI
(23 successful checks, one configured skip) and its five Linux Python 3.10-3.14
jobs (859 passed, six Windows-only skips, 2,389 subtests each) are historical,
not evidence for this SDK head. New exact-head CI has now completed independently
as documented above.
CODEOWNERS eligibility remains unverified.

Earlier multi-use-case trials demonstrated processing only: Response actions
were Skipped, actual callback HTTP responses remain unqualified, workflow show
encountered a host-key prerequisite and export was not exercised. Doctor retains
unknowns. Nested static validation, agent bootstrap and callback-response
improvements are not implemented. VFS/settings/ARM operations are not transactions.

Exact-head CI is now green. This remains draft/WIP pending completed-clean
automated AI review, every inline/full-summary finding genuinely addressed and
resolved, and the stated qualification gates.
Public automated review remains unavailable under the already observed reviewer
permission refusal; no retry workaround, duplicate maintainer ping or ready-state
bypass was used. Empty comments or workflow success never substitutes for a
completed clean review. The user authorizes marking the PR ready for peer review
only after the required latest-head validation/review gates clear; that
authorization does not close the current blockers. Maintainer/human safety
review remains required. No merge or release is authorized.

Riley Evans (rllyy97) and others added 4 commits October 12, 2026 16:59
Preserve the original extension authored by Rohitha Hewawasam and the validated staging improvements through 3087a62f999debb4b0dec771b9424f62903959b2. Adapt packaging, extension-local documentation, portable GA additivity controls, and upstream qualification without changing core Logic Apps commands.

Original author baseline: 4e50f12d52b13c25de0d90a6955f1fff2d5523f1

Co-authored-by: Rohitha Hewawasam <rohithah@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The isolated installed wheel passed 14 GA additivity and real parser/formatter tests with 15 subtests on Azure CLI 2.67.0 and Python 3.12.7. This targeted control does not claim a full minimum-CLI suite or platform matrix.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The serial installed-wheel suite passed 762 tests and 1,697 subtests on Azure CLI 2.67.0 and Python 3.12.7, with production import origins enforced. Retain explicit interpreter/platform and native-variability limitations.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate validated db3389f47272a2d0cd6298c702f5153102a24fe9 without replacing upstream adaptations. Managed cleanup requires the selected site's complete system principal and tenant, shares creation's ActiveDirectory matcher, and refreshes evidence after unlink; uncertain and cross-tenant policies/resources remain retained.

Current and minimum CLI source/installed suites each passed 767 tests and 1,749 subtests serially. Record actual upstream qualification and retain native, cloud, platform, ownership-access and SDK limitations.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@microsoft-github-policy-service microsoft-github-policy-service Bot added the customer-reported Issues that are reported by GitHub users external to the Azure organization. label Oct 13, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Thank you for your contribution Riley Evans (@rllyy97)! We will review the pull request and get back to you soon.

@x-engineering-agent

Copy link
Copy Markdown

Automated sensitive-information remediation ran on this pull request.

  • Detected categories: azure sas token, credential, email address
  • Replaced with typed [REDACTED:category] placeholders in: PR description
  • Comment/review owners notified because X Engineering Agent cannot edit another user's text: none

X Engineering Agent does not modify source files. The PR creator must remove or replace each suspected value at the linked line:

If a credential was exposed, rotate or revoke it immediately. Detected values are never copied into this comment.

✅ Confirm the finding · ❌ Dispute the finding

GitHub only supports a fixed reaction set, so 👍 represents ✅ and 👎 represents ❌. The bot-created reactions are only poll choices.

@rllyy97

Copy link
Copy Markdown
Author

Regarding the automated sensitive-information report: I inspected all four cited source locations at head 4d660eccf4621c04e2dd342b28e15c60008b2578. These four matches are synthetic regression-test inputs, not usable credentials or Azure SAS tokens.

Reported location Purpose and evidence
test_context_management.py:307 test_invalid_names_and_secret_shaped_inputs_never_write_or_echo_values passes a deliberately fake account-key-shaped input, expects ValidationError, checks the sentinel is not echoed, and verifies no store was created.
test_managed_lifecycle_regressions.py:1079 test_provider_write_errors_are_sanitized_and_do_not_compensate_arm_state injects mocked provider exceptions containing an intentionally invalid URL and fake query-signature sentinel; it checks errors omit the sentinel and retained ARM state is not unsafely compensated. No real signed URL is used.
test_runtime_doctor.py:87 test_missing_malformed_and_nonobject_files_are_findings_without_values uses a fixed dummy content sentinel in temporary malformed files and asserts that the read-only diagnostic report never prints it.
test_testing_foundation_regressions.py:21 A fixed dummy SECRET sentinel supports privacy/export assertions. The fixture patches process execution, network access and saved-context lookup to fail if attempted; it is not a live credential.

Removing or replacing these structured synthetic inputs with generic redaction placeholders would weaken the rejection and non-disclosure tests. No source change or credential rotation is indicated for these four findings. I have not reversed the bot's PR-description email redaction or changed the requested CODEOWNERS source line.

This explanation addresses only the four cited sensitivity matches. The PR remains draft/WIP: a completed official Copilot review of the public head is still outstanding, and green GitHub checks/CLA do not establish the untested Python/platform/live-Azure/SDK qualifications.

@yonzhan

Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Integrate the complete reviewed 0.1.23 baseline while retaining upstream preview packaging, minimum CLI, helper extraction, portable GA controls, ownership and sanitized extension-local documentation. Add explicit historical public report compatibility and preserve it across future package versions. Repair Linux Windows-API fixture isolation and the synthetic credential scanner false positive without weakening assertions or ownership guards.

Current/minimum CLI source and exact-installed suites each passed 853 tests and 2332 subtests serially. Official azdev source tests, style, linter, license, URL/index/privacy checks passed. Keep full Python/platform/live-cloud qualification and public review as separate draft gates.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@rllyy97

Copy link
Copy Markdown
Author

NoriZC The complete reviewed synchronization is now at 19b07a16329538e0d260477c68fe949d827e595e, with the PR still draft. Current-head GitHub style, linter, version calculation/output and CLA checks passed. Local current/minimum CLI source and exact-installed suites each passed 853 tests / 2,332 subtests; the updated description records the scope and remaining qualification limits.

Could an authorized maintainer start the Azure Pipelines checks for this new head? The public build list for this PR still contains only the October 13 runs against the earlier merge commit; build 360558 does not qualify the synchronized head.

Our requested exact-head official Copilot review is also outstanding. The single request for this head failed with rllyy97 does not have the correct permissions to execute RequestReviewsByLogin. If available under repository policy, please request it while retaining draft status; otherwise please confirm that review blocker. No completed public AI review is being inferred from green CI or an absence of comments. No ready transition, permission change or merge is requested.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@x-engineering-agent

Copy link
Copy Markdown

❌ Finding disputed by Riley Evans (@rllyy97).

Nothing blocks automation any more, so it will continue.

X Engineering Agent never restores redacted text because doing so could publish a value again.

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Use synthetic process state for native exit probes in the Windows ownership unit fixture and add a no-native-access regression. Preserve production process guards and document exact CI and qualification limits.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Riley Evans (rllyy97) and others added 3 commits October 16, 2026 11:53
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Bound psutil only on Windows before publisher Win32 wheels were removed. Qualify normal installs, native process ownership and serial source/wheel suites on both current architectures and minimum CLI without changing cleanup guards.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Port the reviewed context-only defaults and project-relative reports while preserving closed historical public catalogs, core ownership, preview packaging and blocked SDK execution. Qualify source and exact wheels on current Windows x86 and minimum x64, focused current x64, and actual separate CLI processes. Record the unrelated existing Knack default-port defect without changing its validator.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Port the complete reviewed ea68b867939845e7d7492e4d261eb77ff0d41d3e source-only scaffold, opt-in native execution, sanitized report and deployment-boundary changes. Fix the actual-parser omitted-port default while preserving strict stored/explicit ports, official preview packaging, Windows x86/x64 dependency delivery and all historical report catalogs. Retain the read-only foundation and core-owned GA commands.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

customer-reported Issues that are reported by GitHub users external to the Azure organization.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants