Azure / Azure/azure-functions-agents-runtime

Add post-main ACA deployment, attestation, and qualification pipeline

Open
#166 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
9
Forks
7
Avg merge
1d 21h
Merged PRs (30d)
20

Description

> Please provide us with the following information:
> ---------------------------------------------------------------

### This issue is for a: (mark with an `x`)
```
- [ ] bug report -> please search issues before submitting
- [x] feature request
- [ ] documentation issue or request
- [ ] regression (a behavior that used to work and stopped in a new release)
```

### Minimal steps to reproduce
> 1. Merge an ACA runtime change to `main` or `release/*`.
> 2. Build one immutable runtime wheel and record source SHA, version, and wheel SHA-256.
> 3. Build Linux Python 3.13 and 3.14 Flex Function fixture packages with the exact wheel and locked dependencies vendored under `.python_packages`.
> 4. Deploy each package to its protected test Function App using Flex One Deploy/config-zip.
> 5. Externally attest the deployed package/runtime, then run cold-start, public agent turn, lifecycle, backing-loss, N=5, and leak-cleanup qualification.

### Any log messages given by the failure
> N/A. Today the deployed qualification uses long-lived predeployed apps and therefore cannot prove that a remote app is running the current `main` artifact or expected Python minor.

### Expected/desired behavior
> The official `main`/`release/*` pipeline should:
>
> - remain `pr: none`;
> - publish an immutable runtime-wheel artifact with source SHA/version/wheel digest;
> - build deterministic py313/py314 Linux fixture ZIPs from that artifact without editable install or downstream dependency drift;
> - deploy and attest each matching Flex app before qualification;
> - verify commit SHA, wheel SHA, package-manifest digest, package version, and remote Python minor through an external attestation chain;
> - run cold start, authenticated model turn, suspend/resume/reclaim, backing loss, N=5, and zero-leak checks;
> - serialize py313 then py314 qualification against the shared test group to manage quota;
> - retain the previous attested package for manual rollback;
> - start nonblocking and require an explicit human decision before promotion to a blocking post-main/release gate.
>
> N=100 remains human-only and out of scope. PR-time real ACA/model smoke remains in the existing E2E pipeline and is also out of scope.

### OS and Version?
> Linux x86_64 build/deployment agents; Azure Functions Flex Consumption; Python 3.13 and 3.14.

### Versions
> ACA Sandbox preview SDK `azure-containerapps-sandbox==0.1.0b4`; runtime version produced by each official build.

### Mention any other details that might be useful

> Scope intentionally moved out of PR #160:
>
> - protected py313/py314 fixture apps and deployment storage;
> - protected variable group containing app/resource/model targets (no target URLs committed publicly);
> - dedicated deployment service connection/RBAC, distinct from ACA data-plane, controller, guest-model, and Easy Auth invoker identities;
> - immutable wheel/fixture package builder and canonical manifest hashing;
> - One Deploy/config-zip deployment jobs;
> - deployment storage blob/version/hash verification and fixture-only Easy-Auth-protected build-info response;
> - host readiness, attestation, qualification, leak reconciliation, and rollback flow;
> - official pipeline templates, static tests, and operational runbook.
>
> The fixture build-info route is not sufficient by itself: deployment jobs must download only protected build artifacts (`checkout: none`), verify artifact hashes, deploy those bytes, and compare deployment storage/version evidence with the detached manifest.
>
> Same-repository PR authors are trusted for the separate least-privilege PR smoke environment. No cross-pipeline environment lock is required by the current human decision; post-main py313/py314 stages should still run serially and use immutable per-run labels plus final leak reconciliation to avoid quota contention.

> ---------------------------------------------------------------
> Thanks! We'll be in touch soon.

Contributor guide

Open the contributing guide

Research direction

Start by reviewing PR #160 and the existing E2E pipeline, then trace how official pipeline templates, protected artifacts, deployment jobs, attestation, qualification, and rollback should connect. Done means deterministic Python 3.13 and 3.14 fixtures are deployed and externally verified before serialized qualification, with leak reconciliation, rollback retention, static tests, and an operational runbook.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, python
Domain
ci-cd, cloud, infrastructure, testing-qa
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.