IP Library Granted Patent US 10,255,065
Granted Patent B1
US 10,255,065 · App. 15/857,967 · Granted Apr 9, 2019

Automatically building software projects

Inventor: Jonas B. Jensen (Oxford, GB)
Assignee: Semmle Limited
G06F8/71G06F8/36G06F8/77
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,255,065
App. No.
15/857,967
Granted
Apr 9, 2019
Kind
B1
Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for performing automatic builds of snapshots using software packages with highly similar contents. One of the methods includes computing, by a source code analysis system, a respective similarity score between contents of a particular snapshot and contents of each software package of a plurality of software packages in one or more package repositories. A highest-scoring software package for the snapshot is determined using the computed similarity scores. An automatic build of the snapshot using the highest-scoring software package is performed, including identifying one or more dependencies and one or more build commands from the highest-scoring software package, installing the one or more dependencies in a build environment of the snapshot, and executing the one or more build commands in the build environment of the snapshot.

Claims (67)

1. A system comprising:

one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising:

receiving, by a source code analysis system, a request to automatically build a snapshot of a software project;

obtaining, by the source code analysis system, a plurality of software packages from one or more package repositories;

computing, by the source code analysis system, a respective similarity score between contents of the snapshot and contents of each software package of the plurality of software packages;

determining a highest-scoring software package for the snapshot using the computed similarity scores; and

attempting an automatic build of the snapshot using the highest-scoring software package, including:

identifying one or more dependencies and one or more build commands from the highest-scoring software package,

installing the one or more dependencies in a build environment of the snapshot, and

executing the one or more build commands in the build environment of the snapshot.

2. The system of claim 1 , wherein the operations further comprise:

determining that the automatic build of the snapshot failed;

in response, selecting a next highest-scoring software package from the plurality of software packages; and

attempting an automatic build of the snapshot using the next highest-scoring software package.

3. The system of claim 1 , wherein the operations further comprise:

determining that the automatic build of the snapshot succeeded;

in response, selecting a next snapshot of the software project; and

attempting an automatic build of the next snapshot using the package that successfully built the snapshot most similar to the next snapshot.

4. The system of claim 1 , wherein the operations further comprise:

determining that the automatic build of the next snapshot failed;

in response, computing, by the source code analysis system, a respective similarity score between contents of the next snapshot and contents of each software package of the plurality of software packages;

determining a highest-scoring software package for the next snapshot using the computed similarity scores; and

attempting an automatic build of the next snapshot using the highest-scoring software package for the next snapshot.

5. The system of claim 1 , wherein the snapshot and the highest-scoring software package are from different versions of the software project.

6. The system of claim 5 , wherein the highest-scoring software package is a different version of the software project than the snapshot.

7. The system of claim 6 , wherein the highest-scoring software package is a newer version of the software project than the snapshot.

8. The system of claim 1 , wherein the snapshot and the highest-scoring software package are from different software projects.

9. The system of claim 1 , wherein computing, by the source code analysis system, a respective similarity score between filenames of the snapshot and filenames of each software package of the plurality of software packages comprises stripping one or more directory names from the filenames of the snapshot and from filenames of each software package.

10. The system of claim 1 , wherein the operations further comprise:

extracting source code from the snapshot by intercepting build commands executed in the build environment of the snapshot; and

determining whether the automatic build succeeded by computing an amount of source code extracted from the snapshot.

11. The system of claim 10 , wherein computing an amount of source code extracted from the snapshot comprises computing the amount of source extracted relative to source code extracted during an automatic build of one or more neighboring snapshots in a revision graph of the software project.

12. A computer-implemented method comprising:

receiving, by a source code analysis system, a request to automatically build a snapshot of a software project;

obtaining, by the source code analysis system, a plurality of software packages from one or more package repositories;

computing, by the source code analysis system, a respective similarity score between contents of the snapshot and contents of each software package of the plurality of software packages;

determining a highest-scoring software package for the snapshot using the computed similarity scores; and

attempting an automatic build of the snapshot using the highest-scoring software package, including:

identifying one or more dependencies and one or more build commands from the highest-scoring software package,

installing the one or more dependencies in a build environment of the snapshot, and

executing the one or more build commands in the build environment of the snapshot.

13. The method of claim 12 , further comprising:

determining that the automatic build of the snapshot failed;

in response, selecting a next highest-scoring software package from the plurality of software packages; and

attempting an automatic build of the snapshot using the next highest-scoring software package.

14. The method of claim 12 , further comprising:

determining that the automatic build of the snapshot succeeded;

in response, selecting a next snapshot of the software project; and

attempting an automatic build of the next snapshot using the package that successfully built the snapshot most similar to the next snapshot.

15. The method of claim 12 , further comprising:

determining that the automatic build of the next snapshot failed;

in response, computing, by the source code analysis system, a respective similarity score between contents of the next snapshot and contents of each software package of the plurality of software packages;

determining a highest-scoring software package for the next snapshot using the computed similarity scores; and

attempting an automatic build of the next snapshot using the highest-scoring software package for the next snapshot.

16. The method of claim 12 , wherein the snapshot and the highest-scoring software package are from different versions of the software project.

17. The method of claim 16 , wherein the highest-scoring software package is a different version of the software project than the snapshot.

18. The method of claim 17 , wherein the highest-scoring software package is a newer version of the software project than the snapshot.

19. The method of claim 12 , wherein the snapshot and the highest-scoring software package are from different software projects.

20. A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising:

receiving, by a source code analysis system, a request to automatically build a snapshot of a software project;

obtaining, by the source code analysis system, a plurality of software packages from one or more package repositories;

computing, by the source code analysis system, a respective similarity score between contents of the snapshot and contents of each software package of the plurality of software packages;

determining a highest-scoring software package for the snapshot using the computed similarity scores; and

attempting an automatic build of the snapshot using the highest-scoring software package, including:

identifying one or more dependencies and one or more build commands from the highest-scoring software package,

installing the one or more dependencies in a build environment of the snapshot, and

executing the one or more build commands in the build environment of the snapshot.

Assignments (3)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 27, 2020
From: GITHUB SOFTWARE UK LTD.
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 051710/0252 →
CHANGE OF NAME Recorded Dec 11, 2019
From: SEMMLE LTD.
To: GITHUB SOFTWARE UK LTD.
Reel/Frame 052027/0912 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 23, 2018
From: JENSEN, JONAS B.
To: SEMMLE LIMITED
Reel/Frame 044695/0367 →
Cited By (2)
US 12,524,232 US 12,632,241