Git Product home page Git Product logo

oss-review-toolkit / ort Goto Github PK

View Code? Open in Web Editor NEW
1.5K 41.0 292.0 134.33 MB

A suite of tools to automate software compliance checks.

Home Page: https://oss-review-toolkit.org

License: Apache License 2.0

Shell 2.22% Kotlin 87.09% Go 0.03% Python 0.34% Ruby 0.17% JavaScript 5.93% CSS 0.47% HTML 1.72% Dockerfile 0.35% Rust 0.01% FreeMarker 0.49% Scala 0.12% Emacs Lisp 0.01% Haskell 0.54% Roff 0.14% Java 0.01% Swift 0.22% Vim Snippet 0.13% Starlark 0.02% C++ 0.01%
license-scan package-scan package-manager dependencies dependency-graph license copyright spdx copyright-scan compliance

ort's Introduction

OSS Review Toolkit Logo

 

Slack

Wrapper Validation Static Analysis

Build and Test JitPack build status Code coverage

TODOs REUSE status CII

Introduction

The OSS Review Toolkit (ORT) is a FOSS policy automation and orchestration toolkit that you can use to manage your (open source) software dependencies in a strategic, safe and efficient manner.

You can use it to:

  • Generate CycloneDX, SPDX SBOMs, or custom FOSS attribution documentation for your software project
  • Automate your FOSS policy using risk-based Policy as Code to do licensing, security vulnerability, InnerSource and engineering standards checks for your software project and its dependencies
  • Create a source code archive for your software project and its dependencies to comply with certain licenses or have your own copy as nothing on the internet is forever
  • Correct package metadata or licensing findings yourself, using InnerSource or with the help of the FOSS community

ORT can be used as a library (for programmatic use), via a command line interface (for scripted use), or via its CI integrations. It consists of the following tools which can be combined into a highly customizable pipeline:

  • Analyzer: Determines the dependencies of projects and their metadata, abstracting which package managers or build systems are actually being used.
  • Downloader: Fetches all source code of the projects and their dependencies, abstracting which Version Control System (VCS) or other means are used to retrieve the source code.
  • Scanner: Uses configured source code scanners to detect license / copyright findings, abstracting the type of scanner.
  • Advisor: Retrieves security advisories for used dependencies from configured vulnerability data services.
  • Evaluator: Evaluates custom policy rules along with custom license classifications against the data gathered in preceding stages and returns a list of policy violations, e.g. to flag license findings.
  • Reporter: Presents results in various formats such as visual reports, Open Source notices or Bill-Of-Materials (BOMs) to easily identify dependencies, licenses, copyrights or policy rule violations.
  • Notifier: Sends result notifications via different channels (like emails and / or JIRA tickets).

Also see the list of related tools that help with running ORT.

Documentation

For detailed information, see the documentation on the ORT Website.

Installation

System requirements

ORT is being continuously used on Linux, Windows and macOS by the core development team, so these operating systems are considered to be well-supported.

To run the ORT binaries (also see Installation from binaries) at least Java 11 is required. Memory and CPU requirements vary depending on the size and type of project(s) to analyze / scan, but the general recommendation is to configure Java with 8 GiB of memory and to use a CPU with at least 4 cores.

# This will give the Java Virtual Machine 8GB Memory.
export JAVA_OPTS="$JAVA_OPTS -Xmx8g"

If ORT requires external tools to analyze a project, these tools are listed by the ort requirements command. If a package manager is not list listed there, support for it is integrated directly into ORT and does not require any external tools to be installed.

From binaries

Preliminary binary artifacts for ORT are currently available via JitPack. Please note that due to limitations with the JitPack build environment, the reporter is not able to create the Web App report.

From sources

Install the following basic prerequisites:

  • Git (any recent version will do).

Then clone this repository.

git clone https://github.com/oss-review-toolkit/ort
# If you intend to run tests, you have to clone the submodules too.
cd ort
git submodule update --init --recursive

Build using Docker

Install the following basic prerequisites:

  • Docker 18.09 or later (and ensure its daemon is running).
  • Enable BuildKit for Docker.

Change into the directory with ORT's source code and run docker build -t ort .. Alternatively, use the script at scripts/docker_build.sh which also sets the ORT version from the Git revision.

Build natively

Install these additional prerequisites:

  • Java Development Kit (JDK) version 11 or later; also remember to set the JAVA_HOME environment variable accordingly.

Change into the directory with ORT's source code and run ./gradlew installDist (on the first run this will bootstrap Gradle and download all required dependencies).

Basic usage

Depending on how ORT was installed, it can be run in the following ways:

  • If the Docker image was built, use

    docker run ort --help

    You can find further hints for using ORT with Docker in the documentation.

  • If the ORT distribution was built from sources, use

    ./cli/build/install/ort/bin/ort --help
  • If running directly from sources via Gradle, use

    ./gradlew cli:run --args="--help"

    Note that in this case the working directory used by ORT is that of the cli project, not the directory gradlew is located in (see gradle/gradle#6074).

Want to Help or have Questions?

All contributions are welcome. If you are interested in contributing, please read our contributing guide. To get quick answers to any of your questions, we recommend you join our Slack community.

License

Copyright (C) 2017-2024 The ORT Project Authors.

See the LICENSE file in the root of this project for license details.

OSS Review Toolkit (ORT) is a Linux Foundation project and part of ACT.

ort's People

Contributors

adambhere avatar ajdurant avatar bennati avatar bs-ondem avatar camillem avatar chrisdecker1201 avatar daniellandau avatar dependabot[bot] avatar fb33 avatar fviernau avatar haikoschol avatar heliocastro avatar iamwillbar avatar jens-erdmann avatar marcelbochtler avatar martin-idel-si avatar maxhbr avatar misha-codescoop avatar mmurto avatar mnonnenmacher avatar neubs-bsi avatar nnobelis avatar oheger-bosch avatar pnowakowski avatar renovate[bot] avatar sschuberth avatar tg1999 avatar tsteenbe avatar yarosevych avatar zhernovs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ort's Issues

YARN 0.27 causes command version check in analyzer to fail

Here is the output from analyzer:

The following package managers are activated:
        Gradle, Maven, SBT, NPM, PIP
Scanning project path:
        /app
NPM projects found in:
        oss-attribution-builder/package.json
17:46:30.994 [main] INFO  com.here.ort.util.UtilsKt$log$1 - Running 'npm --version'...
17:46:30.999 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - Keeping temporary files:
17:46:31.000 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - /tmp/npm6011353000025587699.stdout
17:46:31.000 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - /tmp/npm6832287346807849534.stderr
17:46:31.242 [main] INFO  com.here.ort.util.UtilsKt$log$1 - Running 'yarn --version'...
17:46:31.242 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - Keeping temporary files:
17:46:31.243 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - /tmp/yarn2289262920421819612.stdout
17:46:31.243 [main] DEBUG com.here.ort.util.UtilsKt$log$1 - /tmp/yarn792803821624333627.stderr
Exception in thread "main" com.vdurmont.semver4j.SemverException: Invalid version (no patch version): 0.27
        at com.vdurmont.semver4j.Semver.<init>(Semver.java:81)
        at com.vdurmont.semver4j.Semver.<init>(Semver.java:20)
        at com.vdurmont.semver4j.Requirement.isSatisfiedBy(Requirement.java:515)
        at com.here.ort.util.ProcessCaptureKt.checkCommandVersion(ProcessCapture.kt:117)
        at com.here.ort.util.ProcessCaptureKt.checkCommandVersion$default(ProcessCapture.kt:114)
        at com.here.ort.analyzer.managers.NPM.prepareResolution(NPM.kt:116)
        at com.here.ort.analyzer.PackageManager.resolveDependencies(PackageManager.kt:73)
        at com.here.ort.analyzer.Main$main$5.accept(Main.kt:247)
        at com.here.ort.analyzer.Main$main$5.accept(Main.kt:52)
        at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
        at com.here.ort.analyzer.Main.main(Main.kt:245)

If I run yarn --version here is the output:

0.27

Gradle: Add warnings to the Tooling API model

Currently the Tooling API model classes only have fields for errors. Also add fields for warnings, because not everything reported there should be an error, for example the usage of flat dir repositories (see #251).

Add CONTRIBUTING.md

Lack of file makes it difficult to determine how ORT maintainers like to see contributions.

PIP: Process setup.py even when requirements.txt is present

Currently the pip package manager will be called with the first file it recognizes, and requirements.txt takes precedence over setup.py. That means the analyzer might not catch any of the metadata contained in setup.py. The implementation should be changed to always take setup.py into account.

Support the BndTools build system

In order to build OSGi bundles
http://bndtools.org/
can be used.

Not sure if you could scan bnd.bnd files to at least list possible dependencies as I assume analyzing its dependencies is not that easy as one can import raw JARs and bundle them in your target JAR.

PIP: Support "sanitized" project names

The Python Packaging Guide specifies what characters can be used in the name field in setup.py. For some illegal characters (e.g. spaces), setuptools does not throw an error, but replaces them with dashes during installation.

The analyzer uses pydep, which hooks setup() and captures it's keyword arguments verbatim. Therefore it fails when searching for the original name in the output of pipdeptree.

Gradle checks still fail after following installation instructions

I'll just dump the log here.

  • Tests should skip if they rely on external tools. Installation of external tools is not documented.
  • Internal tools should be built. It's unclear whether they are, or are external tools. licensee in particular appears to come from a submodule, but is not built.
  • See log for more
$ ./gradlew check
Starting a Gradle Daemon (subsequent builds will be faster)
Parallel execution with configuration on demand is an incubating feature.

> Task :utils-test:detektCheck 
. :utils:detektCheck
> Task :graph:detektCheck 
. :analyzer:detektCheck
> Task :utils-test:detektCheck 


1 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 27 lines of code (loc)
        - 4 source lines of code (sloc)
        - 2 logical lines of code (lloc)
        - 18 comment lines of code (cloc)
        - 0 McCabe complexity (mcc)
        - 0 number of total code smells
        - 450 % comment source ratio
        - 0 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 0
        - number of functions: 0
        - number of classes: 0
        - number of packages: 1
        - number of kt files: 1


detekt finished in 1958 ms.

> Task :graph:detektCheck 


1 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 160 lines of code (loc)
        - 104 source lines of code (sloc)
        - 74 logical lines of code (lloc)
        - 27 comment lines of code (cloc)
        - 13 McCabe complexity (mcc)
        - 0 number of total code smells
        - 25 % comment source ratio
        - 175 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 16
        - number of functions: 3
        - number of classes: 0
        - number of packages: 1
        - number of kt files: 1


detekt finished in 2393 ms.

> Task :downloader:detektCheck 
.......
> Task :model:detektCheck 
.................

17 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 1705 lines of code (loc)
        - 848 source lines of code (sloc)
        - 650 logical lines of code (lloc)
        - 648 comment lines of code (cloc)
        - 63 McCabe complexity (mcc)
        - 0 number of total code smells
        - 76 % comment source ratio
        - 96 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 64
        - number of functions: 28
        - number of classes: 31
        - number of packages: 1
        - number of kt files: 17


detekt finished in 2868 ms.

> Task :analyzer:detektCheck 
........
> Task :downloader:detektCheck 
..............

21 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 3313 lines of code (loc)
        - 2189 source lines of code (sloc)
        - 1553 logical lines of code (lloc)
        - 588 comment lines of code (cloc)
        - 277 McCabe complexity (mcc)
        - 0 number of total code smells
        - 26 % comment source ratio
        - 178 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 295
        - number of functions: 93
        - number of classes: 29
        - number of packages: 2
        - number of kt files: 21


detekt finished in 3201 ms.

> Task :utils:detektCheck 
........

8 kotlin files were analyzed.

> Task :scanner:detektCheck 
........oader:compileKotlin
> Task :utils:detektCheck 

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 1414 lines of code (loc)
        - 851 source lines of code (sloc)
        - 594 logical lines of code (lloc)
        - 349 comment lines of code (cloc)
        - 128 McCabe complexity (mcc)
        - 0 number of total code smells
        - 41 % comment source ratio
        - 215 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 124
        - number of functions: 36
        - number of classes: 4
        - number of packages: 2
        - number of kt files: 8


detekt finished in 2778 ms.

> Task :analyzer:detektCheck 
........................

32 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 4263 lines of code (loc)
        - 2651 source lines of code (sloc)
        - 1585 logical lines of code (lloc)
        - 902 comment lines of code (cloc)
        - 358 McCabe complexity (mcc)
        - 0 number of total code smells
        - 34 % comment source ratio
        - 225 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 460
        - number of functions: 116
        - number of classes: 36
        - number of packages: 6
        - number of kt files: 32


detekt finished in 3429 ms.

> Task :scanner:detektCheck 
.....

13 kotlin files were analyzed.

Ruleset: comments
Ruleset: complexity
Ruleset: empty-blocks
Ruleset: exceptions
Ruleset: performance
Ruleset: potential-bugs
Ruleset: style

Complexity Report:
        - 1657 lines of code (loc)
        - 1022 source lines of code (sloc)
        - 730 logical lines of code (lloc)
        - 356 comment lines of code (cloc)
        - 169 McCabe complexity (mcc)
        - 0 number of total code smells
        - 34 % comment source ratio
        - 231 mcc per 1000 lloc
        - 0 code smells per 1000 lloc

Project Statistics:
        - number of properties: 145
        - number of functions: 45
        - number of classes: 16
        - number of packages: 2
        - number of kt files: 13


detekt finished in 3997 ms.

> Task :downloader:test 

com.here.ort.downloader.vcs.GitTest > GitTest.Detected Git version is not empty STARTED

com.here.ort.downloader.vcs.GitTest > GitTest.Detected Git version is not empty PASSED

com.here.ort.downloader.vcs.GitTest > GitTest.Git detects non-working-trees STARTED

com.here.ort.downloader.vcs.GitTest > GitTest.Git detects non-working-trees PASSED

com.here.ort.downloader.vcs.GitTest > GitTest.Git correctly detects URLs to remote repositories STARTED

> Task :analyzer:test 

com.here.ort.analyzer.MergedResultsBuilderTest > MergedResultsBuilderTest.MergedResultsBuilder merges results from all files STARTED

com.here.ort.analyzer.MergedResultsBuilderTest > MergedResultsBuilderTest.MergedResultsBuilder merges results from all files PASSED

com.here.ort.analyzer.YamlFilePackageCurationProviderTest > YamlFilePackageCurationProviderTest.Provider can read YAML file STARTED

com.here.ort.analyzer.YamlFilePackageCurationProviderTest > YamlFilePackageCurationProviderTest.Provider can read YAML file PASSED

com.here.ort.analyzer.YamlFilePackageCurationProviderTest > YamlFilePackageCurationProviderTest.Provider returns only matching curations STARTED

com.here.ort.analyzer.YamlFilePackageCurationProviderTest > YamlFilePackageCurationProviderTest.Provider returns only matching curations PASSED

com.here.ort.utils.NpmTest > expandShortcutURL.should do nothing for empty URLs STARTED

com.here.ort.utils.NpmTest > expandShortcutURL.should do nothing for empty URLs PASSED

com.here.ort.utils.NpmTest > expandShortcutURL.should properly handle NPM shortcut URLs STARTED

com.here.ort.utils.NpmTest > expandShortcutURL.should properly handle NPM shortcut URLs PASSED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find all managed files STARTED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find all managed files PASSED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find only files for active package managers STARTED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find only files for active package managers PASSED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find no files if no package managers are active STARTED

com.here.ort.util.PackageManagerTest > findManagedFiles.should find no files if no package managers are active PASSED

com.here.ort.util.PackageManagerTest > findManagedFiles.should fail if the provided file is not a directory STARTED

com.here.ort.util.PackageManagerTest > findManagedFiles.should fail if the provided file is not a directory PASSED

> Task :downloader:test 

com.here.ort.downloader.vcs.GitTest > GitTest.Git correctly detects URLs to remote repositories PASSED

com.here.ort.downloader.vcs.GitTest > GitTest.Detected Git working tree information is correct STARTED

com.here.ort.downloader.vcs.GitTest > GitTest.Detected Git working tree information is correct PASSED

com.here.ort.downloader.vcs.GitTest > GitTest.Git correctly lists remote tags STARTED

com.here.ort.downloader.vcs.GitTest > GitTest.Git correctly lists remote tags PASSED

> Task :scanner:funTest 

com.here.ort.scanner.HttpCacheTest > HttpCacheTest.HTTP GET returns what was PUT STARTED

com.here.ort.scanner.HttpCacheTest > HttpCacheTest.HTTP GET returns what was PUT PASSED

com.here.ort.scanner.ScanPathTest > ScanPathTest.BoyterLc recognizes our own LICENSE STARTED

> Task :downloader:test 

com.here.ort.downloader.vcs.CvsTest > CvsTest.Detected CVS version is not empty STARTED

com.here.ort.downloader.vcs.CvsTest > CvsTest.Detected CVS version is not empty SKIPPED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS detects non-working-trees STARTED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS detects non-working-trees SKIPPED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS correctly detects URLs to remote repositories STARTED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS correctly detects URLs to remote repositories SKIPPED

com.here.ort.downloader.vcs.CvsTest > CvsTest.Detected CVS working tree information is correct STARTED

com.here.ort.downloader.vcs.CvsTest > CvsTest.Detected CVS working tree information is correct SKIPPED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS correctly lists remote tags STARTED

com.here.ort.downloader.vcs.CvsTest > CvsTest.CVS correctly lists remote tags SKIPPED

com.here.ort.downloader.MercurialTest > MercurialTest.Detected Mercurial version is not empty STARTED

com.here.ort.downloader.MercurialTest > MercurialTest.Detected Mercurial version is not empty SKIPPED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial detects non-working-trees STARTED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial detects non-working-trees SKIPPED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial correctly detects URLs to remote repositories STARTED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial correctly detects URLs to remote repositories SKIPPED

com.here.ort.downloader.MercurialTest > MercurialTest.Detected Mercurial working tree information is correct STARTED

com.here.ort.downloader.MercurialTest > MercurialTest.Detected Mercurial working tree information is correct SKIPPED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial correctly lists remote tags STARTED

com.here.ort.downloader.MercurialTest > MercurialTest.Mercurial correctly lists remote tags SKIPPED

com.here.ort.downloader.SubversionTest > SubversionTest.Detected Subversion version is not empty STARTED

com.here.ort.downloader.SubversionTest > SubversionTest.Detected Subversion version is not empty PASSED

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion detects non-working-trees STARTED

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion detects non-working-trees PASSED

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion correctly detects URLs to remote repositories STARTED

> Task :analyzer:funTest 

com.here.ort.analyzer.BabelTest > Babel dependencies.should be correctly analyzed STARTED

com.here.ort.analyzer.BabelTest > Babel dependencies.should be correctly analyzed FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.MainTest > MainTest.Activating only Gradle works STARTED

> Task :scanner:funTest 

com.here.ort.scanner.ScanPathTest > ScanPathTest.BoyterLc recognizes our own LICENSE PASSED

com.here.ort.scanner.ScanPathTest > ScanPathTest.Licensee recognizes our own LICENSE STARTED

com.here.ort.scanner.ScanPathTest > ScanPathTest.Licensee recognizes our own LICENSE FAILED
    java.io.IOException: Cannot run program "licensee" (in directory ".."): error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.scanner.ScanPathTest > ScanPathTest.ScanCode recognizes our own LICENSE STARTED

> Task :downloader:test 

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion correctly detects URLs to remote repositories PASSED

com.here.ort.downloader.SubversionTest > SubversionTest.Detected Subversion working tree information is correct STARTED

com.here.ort.downloader.SubversionTest > SubversionTest.Detected Subversion working tree information is correct PASSED

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion correctly lists remote tags STARTED

> Task :analyzer:funTest 

com.here.ort.analyzer.MainTest > MainTest.Activating only Gradle works PASSED

com.here.ort.analyzer.MainTest > MainTest.Activating only NPM works STARTED

com.here.ort.analyzer.MainTest > MainTest.Activating only NPM works FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.MainTest > MainTest.Merging into single results file creates correct output STARTED

com.here.ort.analyzer.MainTest > MainTest.Merging into single results file creates correct output PASSED

com.here.ort.analyzer.MainTest > MainTest.Package curation data file is applied correctly STARTED

com.here.ort.analyzer.MainTest > MainTest.Package curation data file is applied correctly PASSED

com.here.ort.analyzer.NpmTest > NPM should.resolve shrinkwrap dependencies correctly STARTED

com.here.ort.analyzer.NpmTest > NPM should.resolve shrinkwrap dependencies correctly FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.NpmTest > NPM should.resolve package-lock dependencies correctly STARTED

com.here.ort.analyzer.NpmTest > NPM should.resolve package-lock dependencies correctly FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.NpmTest > NPM should.show error if no lockfile is present STARTED

com.here.ort.analyzer.NpmTest > NPM should.show error if no lockfile is present FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.NpmTest > NPM should.show error if multiple lockfiles are present STARTED

com.here.ort.analyzer.NpmTest > NPM should.show error if multiple lockfiles are present FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.NpmTest > NPM should.resolve dependencies even if the node_modules directory already exists STARTED

com.here.ort.analyzer.NpmTest > NPM should.resolve dependencies even if the node_modules directory already exists FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.NpmTest > yarn should.resolve dependencies correctly STARTED

com.here.ort.analyzer.NpmTest > yarn should.resolve dependencies correctly FAILED
    java.io.IOException: Cannot run program "npm": error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.PipTest > setup py dependencies.should be resolved correctly for spdx-tools-python STARTED

> Task :downloader:test 

com.here.ort.downloader.SubversionTest > SubversionTest.Subversion correctly lists remote tags PASSED

com.here.ort.downloader.VersionControlSystemTest > For an absolute working directory, getPathToRoot  .should work if given absolute paths STARTED

com.here.ort.downloader.VersionControlSystemTest > For an absolute working directory, getPathToRoot  .should work if given absolute paths PASSED

com.here.ort.downloader.VersionControlSystemTest > For an absolute working directory, getPathToRoot  .should work if given relative paths STARTED

com.here.ort.downloader.VersionControlSystemTest > For an absolute working directory, getPathToRoot  .should work if given relative paths PASSED

com.here.ort.downloader.VersionControlSystemTest > For a relative working directory, getPathToRoot  .should work if given absolute paths STARTED

com.here.ort.downloader.VersionControlSystemTest > For a relative working directory, getPathToRoot  .should work if given absolute paths PASSED

com.here.ort.downloader.VersionControlSystemTest > For a relative working directory, getPathToRoot  .should work if given relative paths STARTED

com.here.ort.downloader.VersionControlSystemTest > For a relative working directory, getPathToRoot  .should work if given relative paths PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should not modify URLs without a path STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should not modify URLs without a path SKIPPED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should split tree URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should split tree URLs PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should split blob URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for Bitbucket.should split blob URLs PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should not modify URLs without a path STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should not modify URLs without a path PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should not fail for a user called blob or a project called tree STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should not fail for a user called blob or a project called tree PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split tree URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split tree URLs PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split blob URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split blob URLs PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split extra path components STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitHub.should split extra path components PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should not modify URLs without a path STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should not modify URLs without a path PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should split tree URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should split tree URLs PASSED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should split blob URLs STARTED

com.here.ort.downloader.VersionControlSystemTest > splitUrl for GitLab.should split blob URLs PASSED

> Task :downloader:funTest 

com.here.ort.downloader.BabelTest > BabelTest.Babel packages should be correctly downloaded STARTED

> Task :analyzer:funTest 

com.here.ort.analyzer.PipTest > setup py dependencies.should be resolved correctly for spdx-tools-python PASSED

com.here.ort.analyzer.PipTest > requirements txt dependencies.should be resolved correctly for example-python-flask STARTED

> Task :downloader:funTest 

com.here.ort.downloader.BabelTest > BabelTest.Babel packages should be correctly downloaded PASSED

com.here.ort.downloader.DirectoryTest > DirectoryTest.Creates directories for Gradle submodules STARTED

com.here.ort.downloader.DirectoryTest > DirectoryTest.Creates directories for Gradle submodules PASSED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Downloads and unpacks JAR source package STARTED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Downloads and unpacks JAR source package PASSED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Download of JAR source package fails when hash is incorrect STARTED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Download of JAR source package fails when hash is incorrect PASSED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Falls back to downloading source package when download from VCS fails STARTED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Falls back to downloading source package when download from VCS fails PASSED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Can download source artifact from SourceForce STARTED

com.here.ort.downloader.DownloaderTest > DownloaderTest.Can download source artifact from SourceForce PASSED

com.here.ort.downloader.BeanUtilsTest > BeanUtilsTest.BeanUtils SVN tag should be correctly downloaded STARTED

> Task :analyzer:funTest 

com.here.ort.analyzer.PipTest > requirements txt dependencies.should be resolved correctly for example-python-flask PASSED

com.here.ort.analyzer.SbtTest > Dependencies of the.external 'directories' project should be detected correctly STARTED

com.here.ort.analyzer.SbtTest > Dependencies of the.external 'directories' project should be detected correctly FAILED
    java.io.IOException: Cannot run program "sbt" (in directory "src/funTest/assets/projects/external/directories"): error=2, No such file or directory

        Caused by:
        java.io.IOException: error=2, No such file or directory

com.here.ort.analyzer.GradleTest > GradleTest.Root project dependencies are detected correctly STARTED

com.here.ort.analyzer.GradleTest > GradleTest.Root project dependencies are detected correctly PASSED

com.here.ort.analyzer.GradleTest > GradleTest.Project dependencies are detected correctly STARTED

com.here.ort.analyzer.GradleTest > GradleTest.Project dependencies are detected correctly PASSED

com.here.ort.analyzer.GradleTest > GradleTest.External dependencies are detected correctly STARTED

com.here.ort.analyzer.GradleTest > GradleTest.External dependencies are detected correctly PASSED

com.here.ort.analyzer.GradleTest > GradleTest.Unresolved dependencies are detected correctly STARTED

com.here.ort.analyzer.GradleTest > GradleTest.Unresolved dependencies are detected correctly PASSED

com.here.ort.analyzer.GradleTest > GradleTest.Fails nicely for Gradle version < 3.3 STARTED

> Task :downloader:funTest 

com.here.ort.downloader.BeanUtilsTest > BeanUtilsTest.BeanUtils SVN tag should be correctly downloaded PASSED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download a given revision STARTED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download a given revision PASSED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download only a single path STARTED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download only a single path PASSED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download based on a version STARTED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download based on a version PASSED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download only a single path based on a version STARTED

com.here.ort.downloader.vcs.GitDownloadTest > GitDownloadTest.Git can download only a single path based on a version PASSED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download a given revision STARTED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download a given revision SKIPPED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download only a single path STARTED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download only a single path SKIPPED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download based on a version STARTED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download based on a version SKIPPED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download only a single path based on a version STARTED

com.here.ort.downloader.vcs.CvsDownloadTest > CvsDownloadTest.CVS can download only a single path based on a version SKIPPED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download a given revision STARTED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download a given revision SKIPPED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download only a single path STARTED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download only a single path SKIPPED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download based on a version STARTED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download based on a version SKIPPED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download only a single path based on a version STARTED

com.here.ort.downloader.vcs.MercurialDownloadTest > MercurialDownloadTest.Mercurial can download only a single path based on a version SKIPPED

com.here.ort.downloader.vcs.SubversionDownloadTest > SubversionDownloadTest.Subversion can download a given revision STARTED

> Task :analyzer:funTest 

com.here.ort.analyzer.GradleTest > GradleTest.Fails nicely for Gradle version < 3.3 PASSED

com.here.ort.analyzer.GradleTest > GradleTest.Is compatible with Gradle >= 3.3 STARTED

com.here.ort.analyzer.GradleTest > GradleTest.Is compatible with Gradle >= 3.3 SKIPPED

com.here.ort.analyzer.MavenTest > MavenTest.jgnash parent dependencies are detected correctly STARTED

com.here.ort.analyzer.MavenTest > MavenTest.jgnash parent dependencies are detected correctly PASSED

com.here.ort.analyzer.MavenTest > MavenTest.jgnash-core dependencies are detected correctly STARTED

> Task :scanner:funTest 

com.here.ort.scanner.ScanPathTest > ScanPathTest.ScanCode recognizes our own LICENSE PASSED

> Task :downloader:funTest 

com.here.ort.downloader.vcs.SubversionDownloadTest > SubversionDownloadTest.Subversion can download a given revision FAILED
    com.here.ort.downloader.DownloadException: Subversion failed to download from URL 'https://svn.code.sf.net/p/sendmessage/code'.

        Caused by:
        java.io.IOException: Running 'svn checkout https://svn.code.sf.net/p/sendmessage/code --depth empty .' in directory '/tmp/tmp2273889995595760709.tmp' failed with exit code 1:
        svn: E170013: Unable to connect to a repository at URL 'https://svn.code.sf.net/p/sendmessage/code'
        svn: E175002: Unexpected HTTP status 504 'Gateway Time-out' on '/p/sendmessage/code'

com.here.ort.downloader.vcs.SubversionDownloadTest > SubversionDownloadTest.Subversion can download only a single path STARTED
^C

No license and copyright information in the files

Since this is an open Source compliance toolkit, I would love to see the best practises for a good OSS project realized in this project.
Some of the best practises are:

  1. Put a copyrihgt notice in each file
  2. Put the relevant Strandard License Header in file (or a statement like This file is licensed under --SPDX Short Identifier --

The FSFE hast set up a Project with best practizes relevant for smart license compliance support, the proejct is called reuse. Please see https://reuse.software/
No file of the current release carries a standarde license haeder, there is no license information in the files at all. The same applies to the copyright information, except the README.md file.

Regarding the README.md file, please remove the statement "See the LICENSE file in the root of this project for license details." because no license scanner can "auto conclude" such a statement.

The file oss-review-toolkit-preview/analyzer/src/funTest/assets/projects/synthetic/mixed/NPMNestedMaven/package.json
{
"name": "npmnestedmaven",
"version": "1.0.0",
"description": "A dummy NPM project with a nested Maven project",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "Sebastian Schuberth",
"license": "ISC",
"repository": {
"type": "git",
"url": "https://github.com/heremaps/oss-review-toolkit.git"
}
}
Carries a license information which doea not fit. Even in case of test files you should care for license hygiene

PIP: Python 3 Support

The current Python/pip implementation does not try to determine which Python version to use for the project being analyzed and instead always uses Python 2.7.

There are ways to specify supported Python versions in both setup.py and requirements.txt files (as well as tox.ini and other files commonly found in Python projects). The analyzer could use that information to decide which version of Python/pip to invoke for gathering information about dependencies.

Broken links in README.md

There are broken links to the subprojects analyzer, graph, downloader, and scanner in the README file. Also, the link to the license file isn't correct.

PIP: Update PyPI API endpoint

PyPI recently moved from pypi.python.org to pypi.org. When querying the API for package metadata, we should use this domain instead of relying on working HTTP redirects.

Merge output of analyzer in single YAML file

Currently the analyzer creates one YAML file per defintion file. These files different files can be hard to handle, and also can contain a lot of duplication in the package list.

Add an option to the analyzer to create a merged YAML file that contains the results for all definition files. The structure should be:

  • Repository: Description of the scanned repository, with VCS information if available.
  • Projects: List of the projects, as they appear in the individual analyzer results. Needs to reference the path of the definition file it describes.
  • Packages: A list of all packages, merged from the package lists of the individual analyzer results.

Am I right in thinking that analyser is trusting package-manager metadata?

In general I've been advocating building everything from source, so that we can be sure that we are working with known components (and extra points for verifying bit-for-bit reproducibility).

If we trust the package managers there are at least a couple of risks:

  • the metadata is wrong (someone forgot to bump version information, or similar)
  • the content is wrong (maybe it's been compromised, or we've been pointed at a fake url)

Add support for Hex packages

Add support for Hex packages (projects written in Elixir and Erlang) to the ORT analyzer module.

About Hex:

Hex is a package manager for the BEAM ecosystem, any language that compiles to run on the BEAM VM, such as Elixir and Erlang, can be used to build Hex packages.... Many build tools support Hex packages including Mix for Elixir projects, rebar and erlang.mk for Erlang projects.

However, the use of the build tools is not as clear-cut as this, see also Requirements 1 below. In general, a Hex package can use the following build tools:

  • Mix
  • rebar3
  • rebar3 with erlang.mk
  • both Mix and rebar3

Requirements

  1. Detect whether a project is a Hex project and whether it uses Mix or rebar

However, the use of the build tools is not as clean-cut as this. For example, the project ssl_verify_fun makes use of both Mix and rebar3.

  1. Detect declared license for a package
  1. Get dependency tree including package names, versions

Options:

  • rebar3:

    • use rebar3 deps or rebar3 pkgs, but note there is no machine-readable output:
    → rebar3 deps
    ...
    cowboy* (package)
    recon* (git source)
    erlware_commons (locked git source)
    getopt* (locked git source)
    providers (locked hg source)
    relx (locked git source)Erlang have scopes
    
    → rebar3 tree
    ...
    |- bootstrap-0.0.2 (git repo)
    |- dirmon-0.1.0 (project app)any 
    |- file_monitor-0.1 (git repo)
    |- peeranha-0.1.0 (git repo)
    |  |- gproc-git (git repo)
    |  |- interclock-0.1.2 (git repo)
    |  |  |- bitcask-1.7.0 (git repo)
    |  |  |  |- lager-2.1.1 (hex package)
    |  |  |  |  |- goldrush-0.1.6 (hex package)
    |  |  |- itc-1.0.0 (git repo)
    |  |- merklet-1.0.0 (git repo)
    |- recon-2.2.2 (git repo) on which to test Mix/rebar3 support
    |- uuid-1.5.0 (git repo)
    |  |- quickrand-1.5.0 (git repo)
    

    Documentation:

  1. Obtain the source for a dependency
  1. Determine how to separate code dependencies from build/test ones
  • Are scopes supported/recognised in Mix/rebar3?
  • rebar3 has the concept of profiles (default, native, prod, test) which we possibly could use to do this.
  1. Implementation is not to use exeternal plugins to analyze Hex (Mix/rebar3) projects

Example Hex projects:

./gradlew installDist fails on Task :analyzer:compileKotlin

Hi,

I can't compile the current master branch and get an error on Task :analyzer:compileKotlin

Steps to reproduce the problem

I have :

  • installed OpenJDK 8

$ dpkg -l
ii openjdk-8-jdk:amd64 8u162-b12-1 amd64 OpenJDK Development Kit (JDK)

  • Ensured the JAVA_HOME environment variable is set.

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64

  • cloned the repo and launched the build:

git clone --recurse-submodules https://github.com/heremaps/oss-review-toolkit.git
cd oss-review-toolkit
./gradlew installDist

Expected result

Successfull build

Actual result

FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':analyzer:compileKotlin'.

(More details below)

Did I miss somethig ?
Thanks,
Camille

Task :analyzer:compileKotlin
file or directory '/home/camille/Devel/oss-review-toolkit/analyzer/src/main/java', not found
Build cache key for task ':analyzer:compileKotlin' is 4b3ff08342112e8deffd6c1f2d4a5f2b
Task ':analyzer:compileKotlin' is not up-to-date because:
Task has failed previously.
All input files are considered out-of-date for incremental task ':analyzer:compileKotlin'.
file or directory '/home/camille/Devel/oss-review-toolkit/analyzer/src/main/java', not found
file or directory '/home/camille/Devel/oss-review-toolkit/analyzer/src/main/java', not found
Using Kotlin incremental compilation
Options for KOTLIN DAEMON: IncrementalCompilationOptions(super=CompilationOptions(compilerMode=INCREMENTAL_COMPILER, targetPlatform=JVM, reportCategories=[0], reportSeverity=2, requestedCompilationResults=[0]), areFileChangesKnown=false, modifiedFiles=null, deletedFiles=null, workingDir=/home/camille/Devel/oss-review-toolkit/analyzer/build/kotlin/compileKotlin, customCacheVersionFileName='gradle-format-version.txt', customCacheVersion=4, resultDifferenceFile=/home/camille/Devel/oss-review-toolkit/analyzer/build/kotlin/compileKotlin/build-history.bin, friendDifferenceFile=null, usePreciseJavaTracking=truelocalStateDirs=[/home/camille/Devel/oss-review-toolkit/analyzer/build/classes/kotlin/main])

e: /home/camille/Devel/oss-review-toolkit/analyzer/src/main/kotlin/managers/Bundler.kt: (144, 13): No value passed for parameter 'definitionFilePath'

Task :analyzer:compileKotlin FAILED
[KOTLIN] deleting /home/camille/Devel/oss-review-toolkit/analyzer/build/classes/kotlin/main on error
[KOTLIN] deleting /home/camille/Devel/oss-review-toolkit/analyzer/build/classes/kotlin/main on error
:analyzer:compileKotlin (Thread[Task worker for ':' Thread 3,5,main]) completed. Took 5.363 secs.

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':analyzer:compileKotlin'.

Compilation error. See log for more details

BUILD FAILED in 7s
17 actionable tasks: 1 executed, 16 up-to-date

Installation instructions and tests should be improved

Here's what I did.

  • Checked out the project: worked (duh)
  • Ran ./gradlew sync: worked
  • Ran ./gradlew check: failed
    • Some tests failed because external executables such as hg could not be found; should skip these tests.
    • Some tests failed because internal dependencies such as /scanner/src/funTest/assets/scanners/scancode-toolkit/ could not be found; should just work.

Turns out that for that last issue, pulling git submodules gets one step further, so that should be added to the instructions.

But the test case still fails; the subsequent step that looks for configure in the same directory now works. I'm wondering why you're looking for configure if not to build binaries in that directory, and if so, why they're not built.

Lastly, gradlew check at some point just hangs, or seems to hang, with no indication what's going on. I killed it after about 15 minutes run-time.

At this point I'd abandon the project unless I had immediate need for it. I'm not sure how non-technical folk just interested in a compliance tool would react :)

Support the Bazel build system

See https://bazel.build/ as used by newer versions of Gerrit .

Tasks

  1. analyzer enhancement
  2. analyzer enhancement
  3. analyzer enhancement
  4. analyzer enhancement
  5. analyzer enhancement

Improve SBT support

Currently, we support SBT by running sbt makePom and then using our Maven-backend on the generated POMs. While that works fairly well, there are edge-cases where the results are incomplete e.g. for some inter-module dependencies or dynamically generated projects. Ideas to improve this include using Coursier directly, or maybe yet better the Build Server Protocol for Scala.

Add `provider` to Package

Packages have a packageManager (e.g, npm, maven, ...). Since a given type of package could come from many different places, the Package should also talk about a provider. The provider should not be the URL of the repository, rather the notional name of the repository (e.g., npmjs.org, github.com). This allows the repos to move and change their URL structure without affecting the identity of the data stored in ORT.

Capture the VCS revision actually fetched

In the Git downloader there is some code to refine the vcs revision that is fetched (e.g., looking up the package version as a tag). That gets the right source but the revision fetched is never recorded in the package data as far as I can tell. This info is key to get out and recorded somewhere.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.