{% set branch = env.get('SYSTEM_PULLREQUEST_SOURCEBRANCH') if env.get('SYSTEM_PULLREQUEST_SOURCEBRANCH') else env.get('BUILD_SOURCEBRANCHNAME') %} {% set build = env.get('BUILD_BUILDNUMBER') %} {% set build_url = '%s%s/_build/results?buildId=%s' % (env.get('SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'), env.get('SYSTEM_TEAMPROJECT'), env.get('BUILD_BUILDID')) %} {% set commit = env.get('BUILD_SOURCEVERSION') %} {% set isfork = env.get('SYSTEM_PULLREQUEST_ISFORK') == 'True' %} {% set rel_url = env.get('RELEASE_RELEASEWEBURL') %} {% set release = env.get('RELEASE_RELEASENAME') %} {% set repo = env.get('BUILD_REPOSITORY_NAME') if isfork else ('Azure/' + repo_name) %} {% macro pluralize(num, singular, plural) -%} {% if num == 1 %}{{ singular }}{% else %}{{ plural }}{% endif %} {%- endmacro %} {{ repo_name|capitalize }} Dependency Report

{{ repo_name|capitalize }} Dependency Report

Generated at {{ curtime.replace(microsecond=0).isoformat() }}Z {% if release %} for release {{ release }} {% elif build %} for build {{ build }} {% if branch %}
from branch {{ branch }} {% if isfork %} in repo {{ repo }} {% endif %} {% endif %} {% if commit %} ({{ commit[:7] }}) {% endif %} {% endif %}

{{ dependencies|length - external|length }} internal and {{ external|length }} external package {{ pluralize(dependencies|length,'dependency was','dependencies were') }} analyzed to determine if any packages declare inconsistent dependency versions.
{% if inconsistent %} {{ inconsistent|length }} inconsistent package dependency {{ pluralize(inconsistent|length,'version was','versions were') }} discovered.

{% else %} No inconsistent package dependency versions were discovered.

{% endif %} {% if frozen %} {{ frozen|length }} dependency {{ pluralize(frozen|length,'version was','versions were') }} discovered in the lockfile.
{% if override_count %} {{ override_count }} dependency version {{ pluralize(override_count,'override is','overrides are') }} present, causing dependency versions to differ from the version in the lockfile.
{% endif %} {% if new_reqs %} {{ new_reqs|length }} {{ pluralize(new_reqs|length,'dependency is','dependencies are') }} missing from the lockfile.
{% endif %} {% if non_overridden_reqs_count %} {{ non_overridden_reqs_count }} dependency {{ pluralize(non_overridden_reqs_count,'version does','versions do') }} not match the version in the lockfile.
{% endif %} {% if not new_reqs and not non_overridden_reqs_count %} All declared dependency versions were validated against those in the lockfile.
{% endif %} {% else %} No lockfile is present in the repo, declared dependency versions were not able to be validated.
{% endif %}
This report scanned {{ packages|length }} {{ pluralize(packages|length,'package','packages') }}.

{% for dep_name in ordered_deps %} {% if loop.index == 1 %} {% endif %} {% if dep_name in external %} {% set dep_type = "external" %} {% else %} {% set dep_type = "internal" %} {% endif %} {% if dep_name in inconsistent %} {% set dep_type = "inconsistent " + dep_type %} {% endif %} {% for requirement, packages in dependencies[dep_name]|dictsort %} {% endfor %}
Dependencies Discovered in Packages
{{ dep_type|title }} Dependency: {{ dep_name }}
{{ requirement if requirement else '(empty)' }} {% for package_name in packages|sort %} {{ package_name }} {% if dep_name in overrides and requirement in overrides[dep_name] and package_name in overrides[dep_name][requirement] %} override {% endif %}
{% endfor %}

{% endfor %}




{% if frozen %} {% endif %} {% for name, versions in frozen|dictsort %} {% if name in missing_reqs %} {% elif name in changed_reqs %} {% else %} {% endif %} {% endfor %} {% if not frozen %} {% endif %}
Dependencies Frozen in Lockfile
DependencyFrozen VersionDependency State
{{ name }} {{ versions[0] if versions[0] else '(empty)' }}⚠️ No packages reference this dependency
❌ One or more packages reference a different version of this dependency {% for spec, libs in dependencies[name]|dictsort %} {% if spec != versions[0] %} {% for package in libs|sort %} {{ package }} ({{ spec }})
{% endfor %} {% endif %} {% endfor %}
✅ All packages validated against this dependency and version
Unable to open shared_requirements.txt, shared requirements have not been validated
{% if frozen and new_reqs %}
{% for name in new_reqs|sort %} {% if loop.index == 1 %} {% endif %} {% for requirement, packages in dependencies[name]|dictsort %} {% endfor %}
Dependencies Missing from Lockfile
Missing Dependency: {{ name }}
{{ requirement if requirement else '(empty)' }} {% for package_name in packages|sort %} {{ package_name }}
{% endfor %}
{% endfor %} {% endif %}




{% for name, info in packages|dictsort %} {% endfor %}
Packages Scanned for this Report
Package AnalyzedPackage VersionPackage Source
{{ name }} {{ info.version }} {{ info.source }}