Add customer ZIP packaging scripts for each Function language - #12
Conversation
Direct ZIP downloads and CI automation addedCustomer ZIPs are published now: https://github.com/Azure-Samples/ExternalPhoneProvider-AzureFunction-Sample/releases/tag/epp-packages-preview-20260914 Assets: epp-javascript.zip, epp-dotnet.zip, epp-python-source.zip, and SHA256SUMS.txt. Preview assets were built from commit 4f32003 and their uploaded digests match local checksums. Python remains a source ZIP requiring Azure remote build on Linux. This main-based preview excludes the separate provider feature branches. The Function ZIPs workflow passed on Linux: https://github.com/Azure-Samples/ExternalPhoneProvider-AzureFunction-Sample/actions/runs/34902091675 It runs all language tests, builds all three archives, verifies contents, generates checksums, and uploads PR artifacts. A separate contents-write job publishes versioned GitHub Releases only after successful main builds; PR builds cannot publish. This release automation becomes active on main after this PR is merged. No Azure deployment or live provider calls performed. |
There was a problem hiding this comment.
🔵 Needs a closer look
Moderate issues remain with cross-volume output paths and CI coverage of the no-overwrite guarantee.
Pull request overview
Adds customer-facing PowerShell ZIP packaging scripts for JavaScript, .NET, and Python Azure Functions, plus documentation and CI automation.
Changes:
- Added language-specific packaging scripts with staging and safety checks.
- Added CI validation, checksums, artifact uploads, and releases.
- Documented prerequisites, deployment boundaries, and Python remote-build requirements.
File summaries
| File | Summary |
|---|---|
README.md |
Documents downloads and local packaging. |
package-python.ps1 |
Creates a Python source ZIP. |
package-javascript.ps1 |
Packages JavaScript source and production dependencies. |
package-dotnet.ps1 |
Publishes and packages .NET Release output. |
docs/ONBOARDING.md |
Adds packaging and deployment guidance. |
.github/workflows/packages.yml |
Builds, validates, checksums, and releases ZIPs. |
Review details
Suppressed comments (4)
.github/workflows/packages.yml:46
- The new workflow only invokes each packager once into a clean
artifacts/directory, so it does not regression-test the documented no-overwrite guarantee. A future change could replace an existing ZIP while all current checks still pass; add a CI step that seeds each output, reruns the corresponding script, expects failure, and verifies the original SHA256 is unchanged.
- name: Build ZIPs
shell: pwsh
run: |
./package-javascript.ps1
./package-dotnet.ps1
package-dotnet.ps1:30
$zipis created under the system temp directory, butFile.Movedoes not support moving across volumes. A caller using-OutputPathon another drive or mounted filesystem will get an IOException after the package has been built, so the advertised output-path option is not portable. Copy the archive to the destination instead (or create it in a destination-local temporary directory).
[IO.File]::Move($zip, $archive)
package-javascript.ps1:39
$zipis created under the system temp directory, butFile.Movedoes not support moving across volumes. A caller using-OutputPathon another drive or mounted filesystem will get an IOException after the package has been built, so the advertised output-path option is not portable. Copy the archive to the destination instead (or create it in a destination-local temporary directory).
[IO.File]::Move($zip, $archive)
package-python.ps1:30
$zipis created under the system temp directory, butFile.Movedoes not support moving across volumes. A caller using-OutputPathon another drive or mounted filesystem will get an IOException after the package has been built, so the advertised output-path option is not portable. Copy the archive to the destination instead (or create it in a destination-local temporary directory).
[IO.File]::Move($zip, $archive)
- Files reviewed: 6/6 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Summary
Validation
Scope and limitations