Omniverse Wrapp Change Log#

2.2.0#

Compatibility 2.2.0#

  • Breaking change: When --ignore-file is not specified, WRAPP now looks for .wrappignore in the root of the source directory being processed, not in the current working directory. This provides more intuitive behavior when working with packages.

  • Python API: Deprecated the ignore_file parameter in create, catalog, freeze, status, and install functions. Use the new ignores parameter instead, which accepts either a file path or an IgnoreEvaluator object for programmatic ignore rule handling.

  • Hash cache persistence now uses a safer JSON format; legacy pickle cache files are rejected with a clear migration path.

  • Update to ClientLibrary 2.70.0.

New Features 2.2.0#

  • WRAPP distributions now include the WRAPP agent skill package for AI assistant discovery across CLI bundles and wheel builds.

  • Added native Google Cloud Storage backend (gs:// URLs). Install with pip install omni-wrapp-minimal[gcs]. GCS authentication picks up all standard Google Application Default Credentials, including credentials from gcloud auth application-default login.

  • Added publish-redirect command that creates wrapp files suited for install, export, and mirror commands, allowing packages to be hosted on a CDN via external URLs.

  • Added Storage API discovery-based authentication support, including bearer-token auth via --auth/WRAPP_AUTH, interactive browser login flow, and OAuth2 client credentials flow for non-interactive machine-to-machine authentication (--auth <url>,<client_id>,<client_secret>).

  • Storage API now supports automatic routing via the Capability API, using ListRoutes for URL routing when available with fallback to ListTopLevelAddresses. Route patterns with trailing /** also match URLs without a trailing slash.

  • Added a Python-native local file system backend, allowing WRAPP to operate without ClientLibrary for non-Nucleus storage. ClientLibrary can be disabled via the WRAPP_DISABLE_NUCLEUS environment variable.

Improvements 2.2.0#

  • Improved install performance by using targeted cataloging to avoid hashing extra files in the destination.

  • Unified ignore file handling across create, catalog, and freeze commands for consistent behavior.

  • Added IgnoreEvaluator and IgnoreFilePredicate classes to the public Python API for programmatic ignore rule handling.

  • Added WRAPP_AZURE_API_VERSION environment variable to specify an Azure API version for compatibility with older Azurite builds.

  • Added environment variables for customizing Storage API download performance: WRAPP_STORAGE_API_ENABLE_RANGE_DOWNLOAD, WRAPP_STORAGE_API_DOWNLOAD_RANGE_PART_SIZE, WRAPP_STORAGE_API_DOWNLOAD_RANGE_MAX_CONCURRENCY.

  • Added environment variables for customizing native Azure transfer performance: WRAPP_AZURE_UPLOAD_MAX_CONCURRENCY, WRAPP_AZURE_UPLOAD_MAX_SINGLE_PUT_SIZE, WRAPP_AZURE_UPLOAD_MAX_BLOCK_SIZE, WRAPP_AZURE_DOWNLOAD_MAX_CONCURRENCY, WRAPP_AZURE_DOWNLOAD_MAX_SINGLE_GET_SIZE, WRAPP_AZURE_DOWNLOAD_MAX_CHUNK_GET_SIZE.

  • Added --log-file option to the check, create-patch, delete-packages, diff, export, extract-catalog, find-orphans, and list-repo commands.

  • Added --hash-cache-file option to catalog, install, mirror, and uninstall commands for faster repeated operations on local files.

  • Added SchedulerContext.sub_job() to allow grouping operations under a named sub-job in the progress report.

  • Public API calls are now logged with their arguments (excluding auth parameters) for improved debugging and traceability.

  • Storage API metadata handling is more robust: WRAPP preserves nv-omniverse-nucleus-hash consistently and improves discovery/negotiation behavior for route and service selection.

Bug Fixes 2.2.0#

  • Fixed Ctrl+C not aborting long-running CLI commands such as recursive mirror operations under all circumstances.

  • Fixed double URL encoding when accessing Omniverse paths containing literal percent characters (e.g., folders named “Mini%20map”).

  • Fixed progress report showing “Finished” with progress 1.0 before any jobs have been registered. The first report now correctly shows “Running” with progress 0.0.

  • Fixed custom job_name set via SchedulingParameters being ignored in the ProgressReport.

  • Fixed commands showing unclear error messages when parameters are empty strings.

  • Fixed boto3/botocore/aiobotocore log levels being incorrectly set to INFO instead of the default.

2.1.0#

Availability 2.1.0#

  • WRAPP CLI is now available for download via NGC.

  • WRAPP is now available as a Python wheel, downloadable from NGC.

Compatibility 2.1.0#

  • Support for Python 3.10 was dropped. WRAPP is compatible with Python 3.11 and 3.12.

  • The Nucleus tagging library is no longer bundled with WRAPP. If needed, the tagging library can be installed manually into the Python environment.

  • Update to client-library 2.69.0.

New Features 2.1.0#

  • WRAPP now provides a public Python API.

  • Add native Azure support to WRAPP.

  • Added create-metapackage CLI command that allows creating a meta package (a package that has only dependencies and no content on its own) easily from a list of dependencies without having to install the referenced packages first.

  • Added check command with --recursive option that can verify if the catalog of a repository package matches its data.

  • Added find-orphans and delete-packages CLI commands to find packages no longer used by a given set of top level packages and delete them.

  • The mirror command supports --recursive and --repo-mapping to mirror the specified package and all its dependencies to the target repo.

  • mirror can now re-run successfully with --resume after an aborted previous run.

Improvements 2.1.0#

  • Improved progress reporting.

  • Improved performance for create and other commands when running on Nucleus working folders.

  • create now removes top level dependencies if the corresponding wrapp file cannot be found in the work tree.

  • uninstall --force --package <package_file> can be used to manually remove missing packages.

  • install --force will succeed even if it encounters invalid .wrapp files in the target folder.

  • WRAPP operations will no longer hang during operations moving very complex data even if the --jobs option is not set to a very high value.

  • All storage operations which fail with a generic error now log an error message.

  • install fails if you try to run it on a manually copied repository package to prevent using invalid source references.

Bug Fixes 2.1.0#

  • Fixed install generating invalid .wrapp files for installed subpackages under specific circumstances (repeated installs to S3 using different source repositories).

  • Fixed create of a package which contains only dependencies and no items.

  • Fixed create from first copying the top-level .wrapp file (if it exists) and then overwriting it.

  • Fixed S3 upload retry logic to properly handle residual files with non-zero sizes at the destination.

  • Fixed status to work even if the file format of the wrapp files has changed.

  • Fixed mirror to fail if it finds a package already in place with missing dependencies (unless the missing dependency is mirrored by the same operation).

  • Repository URLs ending with more than one slash will now cause failure for all operations (validation improvement).

  • Fixed relative --repo paths failing on Windows.

2.0.1#

  • Documentation changes only.

2.0.0#

Compatibility#

  • All WRAPP file formats are from this release onwards backwards and forwards compatible, if possible, but at least backwards compatible. This version 2.0.0 breaks forwards but not backwards compatibility for older WRAPP versions, so:

    • WRAPP version 2.0.0 will be able to read packages written by previous WRAPP versions.

    • Previous WRAPP versions will not be able to read packages written by WRAPP version 2.0.0.

Changes in 2.0.0#

  • The mirror command got a new option --redirect-dependencies which instructs mirror to rewrite the dependencies’ repository field to point to the target of the mirror command, meant to be used when the intention is to mirror all packages into the target repository.

  • New CLI traceback command to trace back a wrapp file via the repository to the original source.

    • Each wrapp file contains two pointers. A source pointer to the directory where the last create command was issued from, and a repository pointer which points to the repository this package was last installed from or created to.

    • The traceback logic can follow both pointer directions to produce a potentially large ancestry tree of multiple repository/mirror commands and create/install operations.

  • Add a new command status, which taking the path of a wrapp file will determine if the project has any dirty files or sub-packages and output a detailed list of modified files, package versions, or dependencies.

  • Check for cyclic dependencies during install and create and refuse operation that could cause an endless recursion.

  • Extract-catalog now has a --recursive option to produce the catalog of all files in the package including all subpackages. A corresponding API function extract_catalog was added as well.

  • Added new command status to find all modified, extra, or missing files and check that dependency versions are recorded. Prints out details if given –show parameter.

  • Fixed bug where mirror failed when mirroring an empty package that contained only a wrapp file.

  • Create now features a new parameter “–check-subpackage”. If enabled, create will fail if the package contains subpackages which are missing from their source repository.

  • Create now checks if any of the subpackages that are referenced is considered to be modified or ‘dirty’. If yes, it will fail. A command line switch --allow-dirty-subpackages can be used to override the new behavior.

  • Added new command installed-package-list to recursively list all packages in a working tree including their versions and repository locations.

  • “new” immediately fails now when the “.wrapp” file already exists.

  • If WRAPP detects conflicts during an “install”, it now is more explicit about the differences it sees between files.

  • The “install” command now reports conflicts in a less technical fashion, including the explanation in the patch files it can create.

  • Fixed connection error to the Nucleus tagging service occurring under specific circumstances when multiple concurrent tagging operations were run during a patch operation.

  • Delete operations during “install” were done one at a time under some circumstances, making the operation very slow. This has been fixed.

  • “install” has now an additional flag “–force”. If used, “install” will overwrite all files on the destination with the files from the package.

  • The “install” and “create” command under some circumstances had a long delay until it showed any progress. This has been fixed.

    • This also improves performance for both commands when many nested dependencies are used.

  • Improve progress reporting on the command line.

  • Fix handling of empty folders in WRAPP 1.x packages.

    • WRAPP 2.0.0 no longer supports empty folders in packages - empty folders are simply skipped during catalog or package creation.

      • To retain a folder, a dummy file must be added to it.

    • If packages created with WRAPP 1.x are installed with WRAPP 2.0.0, a dummy file “.wrapp_keep_empty_folder” is automatically created in the empty folder.

  • The “–auth” CLI parameter and the WRAPP_AUTH environment variable now allow providing credentials for S3.

  • Introduce new “–interactive-auth” CLI flag.

    • WRAPP CLI now only pops up the browser when no credentials are provided for a Nucleus server when the flag is explicitly enabled.

    • If the flag is not specified and no credentials are provided, the operation fails.

  • Accelerated the list_repo operation for S3 by using proper concurrency.

  • Better error handling for S3 authentication failures.

  • Improve Python API documentation

  • WRAPP is now compatible with Python 3.10, 3.11, 3.12.

  • Update ClientLibrary to 2.63.0 release.

    • WRAPP is compatible with ClientLibrary 2.53.2 or newer.

1.1.2#

  • Updates for security vulnerabilities

    • Update ClientLibrary to 2.54.0.

1.1.1#

  • Updates for security vulnerabilities

    • Update Python to 3.10.15+nv1.

    • Update aiohttp to 3.10.10.

    • Update ClientLibrary to 2.53.2.

1.1.0#

  • On Windows, before running wrapp you need to install the Microsoft runtime in case it is not already installed. Download and install from https://aka.ms/vs/17/release/vc_redist.x64.exe.

  • Allow using S3 as target for install, import, and create commands. S3 can be addressed both with global s3:// style URLs and https:// style links pointing to amazonaws.com.

  • OMPE-15135: freeze would not create local file system folders when copying from S3

  • Introduce progress report flag and additional options for number of tagging and file transfer jobs for create, install, mirror, freeze and apply-patch.

API Changes:#

  • The “get” API function used to download a file to the local disk is now accepting the optional parameters “context” and “scheduler”, like the other API functions.

  • The credentials used to sign in to S3 can be set using WRAPP_AWS_ACCESS_KEY_ID and WRAPP_AWS_SECRET_ACCESS_KEY, the endpoint can be set with WRAPP_S3_ENDPOINT.

    • If the variables are not set, boto3 tries to locate the credential in the usual way.

  • The API initialize function is now documented to possibly raise a RuntimeError when initialization fails.

    • Before it might have thrown any exception.

1.0.1#

  • Update ClientLibrary to 2.49.0 release, closing security vulnerabilities

  • Updated to use Python 3.10.14+nv1 instead of 3.10.13+nv3

  • Linux-binaries built on Ubuntu 20.04 LTS instead of CentOS 7, which is EOL

  • New documentation

1.0.0#

  • Initial Omniverse Nucleus WRAPP release.