Submitting a validation package
The repository's staging area is the development and review path for validation packages that will be published through AVPR.
Staging-area layout
Put each package exactly one directory below StagingArea/. The directory,
filename, and metadata name and version must agree:
StagingArea/
├── some-package/
│ ├── some-package@1.0.0.fsx
│ ├── some-package@2.0.0.fsx
│ └── some-package@2.1.0.fsx
└── some-python-package/
├── some-python-package@1.0.0.py
└── some-python-package@2.0.0.py
Validation packages must be self-contained, single-file scripts:
- F# packages use
.fsx. External dependencies must use#r "nuget: ..."directives and packages run throughdotnet fsi. - Python packages use
.py. Dependencies must use PEP 723 inline script metadata and packages run throughuv run.
Only .fsx and .py files are allowed in StagingArea/.
Submission workflow
Suppose you want to develop version 1.0.0 of a package named my-package:
- Fork the repository.
- Add
StagingArea/my-package/my-package@1.0.0.fsxor the corresponding.pyfile. - Develop the package in a work-in-progress pull request so CI continuously checks its layout, metadata, and syntax.
- When the package is ready and reviewed, set
Publish: truein its frontmatter. - Merge the pull request. The publication pipeline publishes eligible packages after all staging and pre-publication checks pass.
Published packages are immutable. Never change a version already published to the registry; submit a higher semantic version instead.
| Stage | Availability | Mutability |
|---|---|---|
| Staging | Current repository revision | Changes are allowed |
| Published | Production registry API | Immutable |
Package versioning
Use Semantic Versioning:
- Increment the major version for incompatible behavior changes.
- Increment the minor version for backwards-compatible functionality.
- Increment the patch version for backwards-compatible fixes.
Filename suffixes and metadata suffixes must also match when using prerelease or build metadata.
Automated checks
Changes below StagingArea/ trigger StagingAreaTests:
- Directory, filename, and metadata identities must match.
- Frontmatter and required metadata are validated.
- F# scripts are parsed and type-checked with FSharp.Compiler.Service.
- Python source is compiled without importing or executing it.
The default gate does not execute real staged package code. Runtime execution is limited to small repository-owned fixtures. Package scripts can access the network, traverse input data, or perform substantial computation, so read a script before invoking it locally.
Run the staging checks with:
dotnet build PackageStagingArea.slnx --configuration Release
dotnet test PackageStagingArea.slnx --configuration Release --no-build
See validation package metadata for the required script header.