Bintray repositories and packages form a structured and logical way for you to organize your content according to development technology and functionality. They are also the basis of how end users will search for and find your content. However, to distribute a complete and coherent software offering, you may want to assemble a set of packages from different repositories that you own. For example, if you developed a piece of software as both a Maven package and a NuGet package, and in addition, you want to offer it as a Docker image, you may want to assemble all three of these packages into a single offering. This is where Bintray Products come into play.
Bintray Products offer a convenient way to assemble a set of packages into one coherent whole, letting you expose your software, in all its forms as a single offering.
Assembling packages into a Product presents several benefits:
It collects all components of your product offering in a single place, making it easy for you to manage.
Products offer a more natural way for users to search for content as opposed to searching for repositories or packages.
An update to any of the packages in the product is automatically reflected as a new version of the product itself.
Products offer a convenient and central place from which you can manage the EULAs for the product’s constituent packages.
Your products are displayed at the top of the Bintray homepage once you are signed in.
Every Bintray product has a version, but the version is not expressly set by the product owner. The product’s version is automatically derived from the version of the latest release of any of the packages that make up the product. For example, consider you have a product called "ABC" made up of packages "A", "B", and "C" with the following version numbers and release dates:
Jan. 5, 2016
Jan. 12, 2016
Jan. 20, 2016
In this case, product ABC’s current version number is 2.0 because that is the version of package C which currently has the latest release date. If package B is later released with a new version, 1.6, then the product’s version number will change accordingly to 1.6
Users and organizations on an Enterprise plan can assign a EULA for each product version. Once a EULA is assigned to a product, any user downloading any of the packages in the product will have to accept the EULA before being able to complete the download. Once the user has accepted the EULA, they can download any of the packages in the product’s version. The user’s acceptance of the EULA is valid for new versions of the product, so even if the product gets updated, the user may continue to download new versions. The user will only have to renew their acceptance of the EULA next time they download a package if the EULA itself gets updated.
Displaying Your EULA Before Download
Bintray lets you define a download URL which displays the corresponding EULA before providing access to your products' files. When an end user clicks on the download URL for any of a product’s files, Bintray will first display the product’s assigned EULA. Once the end user accepts the EULA, download commences automatically
Download URLs that display your EULA have the following format:
:subject: The user or organization that owns the product
:repo: The name of the repository that is hosting the file
file_path: The fully qualified path in Bintray to the file
For example, to provide a download URL that requires the end user to accept the EULA for the JFrog Mission Control v1.1 installation ZIP file, JFrog would provide the following URL (click on the link to see the feature in action):
|You can "mouse-over" any file in your download list to view its EULA-mediated download URL.|
Automated EULA-Protected Downloads using the REST API
Download URLs that display a EULA work when the downloading user is going through Bintray’s UI and downloading publicly available content, however, they won’t work when your user wants to download the content through automation scripts in which there is no human intervention. Moreover, the download URLs require that the downloading user has a Bintray account, which may not always be the case.
Bintray offers a solution for this scenario that lets you provide automated downloads via REST API for private content that is EULA protected to external users.
Here is how it works:
Create an entitlement and access key that provides read access (at least) to your content
Provide your downloading user with the access key and its password
The user constructs a URL which, when pasted in a browser, notifies Bintray to display your EULA to be accepted
The user pastes the provided URL in a browser, logs in using the access key and password you provided and is presented with the EULA
The user accepts your EULA
Subsequent attempts to download the product that include the access key you provided will progress to completion since the EULA has already been accepted with the access key provided.
In this manner, you have provided automated access for external users (and scripts) to download your content via REST API while protecting your Products with a EULA.
Constructing the EULA Acceptance URL
To get Bintray to display your EULA, construct the URL in the following format:
:subject: The user or organization that owns the product
:product: The product for which you want to provide access
:version: The version for which you want to provide access
:username: The access key
Consider the following example: User "amy" wants to provide Bob (who doesn’t have a Bintray account) with access to a product called "AmyProd" version 1.1. Amy wants to protect her content and has protected it with a EULA. Amy creates the appropriate entitlement to her content and generates an access key called "amyOrg-key1@amyOrg" whose password is "p4ssw0rd", and provides these to Bob.
Bob now browses to the following URL:
Bintray displays a login screen for Bob to login to using the key ("amyOrg-key1@amyOrg") and password ("p4ssw0rd") that Amy provided him with.
After Bob logs in, Bintray displays the EULA which he can now accept.
From now on, any REST API used to download this version of Amy’s product that includes "amyOrg-key1@amyOrg" will progress to completion without requiring additional EULA acceptance. In other words, Bob (or anyone else with "amyOrg-key1@amyOrg") can use automation to download AmyProd 1.1
Effectively, Bob is an external user who is accessing Amy’s private content that requires EULA acceptance through the REST API - exactly the scenario described at the beginning of this section.
Tracking EULA Acceptance
To help you keep track of downloads for a product, Bintray shows you all users who have accepted its EULA. To view the list of users who have accepted a product’s EULA, select the EULA Tracking tab of the Edit Product page.
Creating and Editing a Product
To create a new product, click New Product on the Bintray homepage. Bintray will display the New Product form where you can fill in the details of your product.
Once your product is created, you can add packages to it. Click your product on the Bintray homepage to display its product page, and then click Edit.
On the Edit Product page, select the Packages tab and click Add Package. In the search box that pops up, start typing the name of the package you want to add. Bintray will display all the packages you own, in any repository, that match the search term. Select the packages you want to add from the list.
Once you have finished adding the relevant packages, you can see them displayed along with an indication of which teams have read access to the added packages. Click on the package’s permission to go to the relevant repository page if you need to modify access permissions for the package.
The Versions Tab
As described above, product versions are derived automatically from the versions of all the packages included in the product. The Versions tab indicates the versions that have been assigned to your product according to the packages it includes, and lets you assign a EULA to each version.
The EULA Tab
As described above, you can attach a EULA to your product if you are on an Enterprise plan. The EULA tab is where you can create all the EULAs you may need and gives you the option of writing them in asciidoc, markdown, or plain text. Once you have created EULAs, you can set one of them to be the default EULA assigned to any new version of your product.