diff --git a/.gitignore b/.gitignore
index 05ade97f..8c8ee162 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
node_modules
npm-debug.log
.idea
+dist
+*.html
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a6a8d811..0542db9c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,24 +14,22 @@
npm install
```
-3. Start the auto-build scripts
+3. Start the auto-build scripts, and leave them running
```
npm start
```
-4. Make changes **only** in the `/src` directory
- > Please note that `api.js` is an exception to this rule: it appears only in `/dist`, and should be edited there.
+ > NOTE: These build scripts enable you to view your changes locally. The build generates new files in two places: a new `/dist` directory (JS, CSS, images, etc), and `.html` files in the root directory. However, these files are ignored by .gitignore, and will not be included in commits.
-5. Open `/index.html` in any browser, and refresh the page after saving your changes to `/src`.
+4. Make changes in the `/src` directory. The auto-build scripts instantly pick up any newly saved changes, and include them in the output files and directories. Open `/index.html` in any browser to view the website locally, and refresh the page after saving your changes to `/src`.
---
## Contribution guidelines
### HTML (Handlebars) pt.1
-* **Do not** edit the `.html` files in the root directory. They are created and updated by the build process.
-* Instead, edit the `.handlebars` files in the `/src/handlebars` directory.
+* Edit the `.handlebars` files in the `/src/handlebars` directory. These are built into HTML.
* 'Handlebars' files should only include the `` element, containing the page's content, and `{{> header}}` / `{{> footer }}` tags.
### HTML (Handlebars) pt.2 (creating a new .handlebars file)
diff --git a/about.html b/about.html
deleted file mode 100644
index ca384cce..00000000
--- a/about.html
+++ /dev/null
@@ -1,186 +0,0 @@
-
-
-
-
-
-
-
- About - AdoptOpenJDK
-
-
-
-
-
-
-
-
-
-
-
- This initiative came about following a discussion about the general lack of an open and reproducible build & test system
- for the OpenJDK source across multiple platforms.
-
-
-
- The intention is to provide binaries and hardware access for all of the major platforms, for the purposes of:
-
-
Allowing end users to have a reliable source of OpenJDK binaries for all platforms.
-
Research and Development by OpenJDK developers, academics and researchers.
-
An open, common, audited, build infrastructure for vendors to use (if they wish).
-
Providing a place to try out build infrastructure ideas that might one day be re-implemented in the OpenJDK project.
-
-
-
-
-
-
About the AdoptOpenJDK Community
-
- AdoptOpenJDK is a community of Java user group members, Java developers and vendors who are
- advocates of OpenJDK, the open source project which forms the basis of the Java programming language and
- platform.
-
-
- Part of the group's activities occur at the Adoption Group on the OpenJDK project.
-
Internet Explorer is not supported. Please use another browser, or see the releases list on GitHub.
";
- }
- else {
- var url = ("https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-" + repo + "/master/" + filename + ".json"); // the URL of the JSON built in the website back-end
- var xobj = new XMLHttpRequest();
- xobj.overrideMimeType("application/json");
- xobj.open('GET', url, true);
- xobj.onreadystatechange = function() {
- if (xobj.readyState == 4 && xobj.status == "200") { // if the status is 'ok', run the callback function that has been passed in.
- callback(xobj.responseText);
- } else if(xobj.status != "200") { // if the status is NOT 'ok', remove the loading dots, and display an error:
- loading.innerHTML = "";
- document.getElementById("error-container").innerHTML = "
";
- }
- };
- xobj.send(null);
- }
-}
-
-// check for IE browser
-function msieversion() {
- var ua = window.navigator.userAgent;
- var msie = ua.indexOf("MSIE ");
- if (msie >= 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
- return true;
- }
- else { return false; }
-}
-
-// set variables for HTML elements
-var platformDropDown = document.getElementById("platform-dropdown");
-var archiveTableBody = document.getElementById("archive-table-body");
-
-// When releases page loads, run:
-/* eslint-disable no-unused-vars */
-function onArchiveLoad() {
- /* eslint-enable no-unused-vars */
- populateArchive(); // populate the Archive page
-}
-
-// ARCHIVE PAGE FUNCTIONS
-
-function populateArchive() {
-
- // call the XmlHttpRequest function in global.js, passing in 'releases' as the repo, and a long function as the callback.
- loadReleasesJSON("releases", "releases", function(response) {
- function checkIfProduction(x) { // used by the array filter method below.
- return x.prerelease === false && x.assets[0];
- }
-
- // Step 1: create a JSON from the XmlHttpRequest response
- // Step 2: filter out all releases from this JSON that are marked as 'pre-release' in GitHub.
- var releasesJson = JSON.parse(response).filter(checkIfProduction);
-
- // if there are releases prior to the 'latest' one (i.e. archived releases)...
- if (typeof releasesJson[0] !== 'undefined') {
- buildArchiveHTML(releasesJson);
- } else { // if there are no releases (beyond the latest one)...
- // report an error, remove the loading dots
- loading.innerHTML = "";
- errorContainer.innerHTML = "
There are no archived releases yet! See the Latest release page.
";
- }
- });
-}
-
-function buildArchiveHTML(releasesJson) {
- // for each release...
- releasesJson.forEach(function(eachRelease) {
-
- // set values for this release, ready to inject into HTML
- var publishedAt = eachRelease.published_at;
- var thisReleaseName = eachRelease.name;
- var thisReleaseDate = moment(publishedAt).format('Do MMMM YYYY');
- var thisGitLink = ("https://github.com/AdoptOpenJDK/openjdk-releases/releases/tag/" + thisReleaseName);
- var thisTimestamp = (publishedAt.slice(0, 4) + publishedAt.slice(8, 10) + publishedAt.slice(5, 7) + publishedAt.slice(11, 13) + publishedAt.slice(14, 16));
- var platformTableRows = ""; // an empty var where new table rows can be added for each platform
-
- // create an array of the details for each asset that is attached to this release
- var assetArray = [];
- eachRelease.assets.forEach(function(each) {
- assetArray.push(each);
- });
-
- // populate 'platformTableRows' with one row per binary for this release...
- assetArray.forEach(function(eachAsset) {
- var nameOfFile = (eachAsset.name);
- var uppercaseFilename = nameOfFile.toUpperCase(); // make the name of the asset uppercase
- var thisPlatform = getSearchableName(uppercaseFilename); // get the searchableName, e.g. MAC or X64_LINUX.
-
- // firstly, check if the platform name is recognised...
- if(thisPlatform) {
-
- // secondly, check if the file has the expected file extension for that platform...
- // (this filters out all non-binary attachments, e.g. SHA checksums - these contain the platform name, but are not binaries)
- var thisFileExtension = getFileExt(thisPlatform); // get the file extension associated with this platform
- if(uppercaseFilename.indexOf((thisFileExtension.toUpperCase())) >= 0) {
-
- // set values ready to be injected into the HTML
- var thisOfficialName = getOfficialName(thisPlatform);
- var thisBinaryLink = (eachAsset.browser_download_url);
- var thisBinarySize = Math.floor((eachAsset.size)/1024/1024);
- var thisChecksumLink = (eachAsset.browser_download_url).replace(thisFileExtension, ".sha256.txt");
-
- // prepare a fully-populated table row for this platform
- platformTableRows += ("
");
- }
- }
- });
-
- // create a new table row containing all release information, and the completed platform/binary table
- var newArchiveContent = ("
");
-
- archiveTableBody.innerHTML += newArchiveContent;
-
- });
-
- loading.innerHTML = ""; // remove the loading dots
-
- // show the archive list and filter box, with fade-in animation
- var archiveList = document.getElementById('archive-list');
- var filterContainer = document.getElementById('filter-container');
- archiveList.className = archiveList.className.replace( /(?:^|\s)hide(?!\S)/g , ' animated fadeIn ' );
- filterContainer.className = filterContainer.className.replace( /(?:^|\s)hide(?!\S)/g , ' animated fadeIn ' );
-
- // add a new entry to the platform filter drop-down list for each entry in the global 'platforms' array.
- platforms.forEach(function(each) {
- var op = new Option();
- op.value = each.searchableName;
- op.text = each.officialName;
- platformDropDown.options.add(op);
- });
-
- // when the user selects a new platform filter, run the filterByPlatform function, passing in the value of the selection.
- platformDropDown.onchange = function(){
- filterByPlatform(this.value);
- };
-}
-
-// create an array that contains all of the drop-down list options, including 'ALL'.
-function buildDropdownArray() {
- var dropdownArray = [];
- for (i = 0; i < platformDropDown.options.length; i++) {
- dropdownArray.push(platformDropDown.options[i].value);
- }
- return dropdownArray;
-}
-
-// filters the platform rows and release rows based on a selected platform.
-// pass in the 'searchableName' value of an object in the 'platforms' array, e.g. X64_LINUX
-function filterByPlatform(selection) {
- var dropdownArray = buildDropdownArray(); // get an array of the items in the dropdown platform selector
- var index = dropdownArray.indexOf(selection); // find the index number of the selected platform in this array
- dropdownArray.splice(index, 1); // remove this selected platform from the array
- var notSelectedArray = dropdownArray; // create a new 'not selected' array (for clarity only)
-
- // if the first, default entry ('All', or equivalent) is selected...
- if(index == 0){
- var thisPlatformRowArray = document.getElementsByClassName("platform-row"); // create an array containing all of the platform rows
- for (i = 0; i < thisPlatformRowArray.length; i++) {
- thisPlatformRowArray[i].className = thisPlatformRowArray[i].className.replace( /(?:^|\s)hide(?!\S)/g , '' ); // un-hide all of these rows
- }
-
- var releaseRows = archiveTableBody.getElementsByClassName("release-row"); // create an array containing all of the release rows
- for (i = 0; i < releaseRows.length; i++) {
- releaseRows[i].className = releaseRows[i].className.replace( /(?:^|\s)hide(?!\S)/g , '' ); // un-hide all of these rows
- }
- }
- // else, if a specific platform is selected...
- else {
- /* eslint-disable */
- var thisPlatformRowArray = document.getElementsByClassName(selection); // create an array containing all of the selected platform's rows
- /* eslint-enable */
- for (i = 0; i < thisPlatformRowArray.length; i++) {
- thisPlatformRowArray[i].className = thisPlatformRowArray[i].className.replace( /(?:^|\s)hide(?!\S)/g , '' ); // make sure that these rows are not hidden
- }
-
- notSelectedArray.splice(0, 1); // remove the first, default entry ('All', or equivalent) to leave just the platforms that have not been selected
-
- // for each of the non-selected platforms...
- notSelectedArray.forEach(function(thisPlatform) {
- /* eslint-disable */
- var thisPlatformRowArray = document.getElementsByClassName(thisPlatform); // create an array containing all of this platform's rows
- /* eslint-enable */
-
- for (i = 0; i < thisPlatformRowArray.length; i++) {
- thisPlatformRowArray[i].className += " hide"; // hide all of the rows for this platform
- }
- });
-
- /* eslint-disable */
- var releaseRows = archiveTableBody.getElementsByClassName("release-row"); // create an array containing all of the release rows
- /* eslint-enable */
-
- // for each of the release rows...
- for (i = 0; i < releaseRows.length; i++) {
- var platformBox = releaseRows[i].getElementsByTagName("TD")[1]; // get the second
element in this row (the one that contains the platforms)
- var numberOfPlatformRows = platformBox.getElementsByTagName("TR").length; // get the number of platform rows
- var numberOfHiddenPlatformRows = platformBox.getElementsByClassName(" hide").length; // get the number of hidden platform rows
- if(numberOfPlatformRows == numberOfHiddenPlatformRows) { // if ALL of the platform rows are hidden...
- if(releaseRows[i].className.indexOf("hide") == -1){ // and if this release row isn't ALREADY hidden...
- releaseRows[i].className += " hide"; // hide this release row
- }
- }
- else { // else, if there is at least one visible platform row...
- releaseRows[i].className = releaseRows[i].className.replace( /(?:^|\s)hide(?!\S)/g , '' ); // make sure that this release row isn't hidden
- }
- }
-
-
- }
-}
-
-// set variables for all index page HTML elements that will be used by the JS
-const dlText = document.getElementById('dl-text');
-const dlLatest = document.getElementById('dl-latest');
-const dlArchive = document.getElementById('dl-archive');
-const dlOther = document.getElementById('dl-other');
-const dlIcon = document.getElementById('dl-icon');
-const dlIcon2 = document.getElementById('dl-icon-2');
-const dlVersionText = document.getElementById('dl-version-text');
-
-// When index page loads, run:
-/* eslint-disable no-unused-vars */
-function onIndexLoad() {
- setDownloadSection(); // on page load, populate the central download section.
-}
-/* eslint-enable no-unused-vars */
-
-// INDEX PAGE FUNCTIONS
-
-function setDownloadSection() {
- // call the XmlHttpRequest function in global.js, passing in 'releases' as the repo, and a long function as the callback.
- loadReleasesJSON("releases", "latest_release", function(response) {
- var releasesJson = JSON.parse(response);
-
- if (typeof releasesJson !== 'undefined') { // if there are releases...
- buildHomepageHTML(releasesJson);
- }
- else {
- // report an error
- errorContainer.innerHTML = "
Error... no releases have been found!
";
- loading.innerHTML = ""; // remove the loading dots
- }
- });
-}
-
-function buildHomepageHTML(releasesJson) {
- // set the download button's version number to the latest release
- dlVersionText.innerHTML = releasesJson.tag_name;
-
- // create an array of the details for each binary that is attached to a release
- var assetArray = [];
- // create a new array that contains each 'asset' (binary) from the latest release:
- releasesJson.assets.forEach(function(each) {
- assetArray.push(each);
- });
-
- var OS = detectOS(); // set a variable as an object containing all information about the user's OS (from the global.js 'platforms' array)
- var matchingBinary = null;
-
- // if the OS has been detected...
- if(OS) {
- assetArray.forEach(function(eachAsset) { // iterate through the assets attached to this release
- var nameOfFile = eachAsset.name;
- var uppercaseFilename = nameOfFile.toUpperCase();
- var thisPlatform = getSearchableName(uppercaseFilename); // get the searchableName, e.g. X64_MAC or X64_LINUX.
-
- // firstly, check if a valid searchableName has been returned (i.e. the platform is recognised)...
- if(thisPlatform) {
-
- // secondly, check if the file has the expected file extension for that platform...
- // (this filters out all non-binary attachments, e.g. SHA checksums - these contain the platform name, but are not binaries)
- var thisFileExtension = getFileExt(thisPlatform); // get the file extension associated with this platform
- if(uppercaseFilename.indexOf((thisFileExtension.toUpperCase())) >= 0) {
- var uppercaseOSname = OS.searchableName.toUpperCase();
-
- // thirdly, check if the user's OS searchableName string matches part of this binary's name (e.g. ...X64_LINUX...)
- if(uppercaseFilename.indexOf(uppercaseOSname) >= 0) {
- matchingBinary = eachAsset; // set the matchingBinary variable to the object containing this binary
- }
- }
- }
- });
- }
-
- // if there IS a matching binary for the user's OS...
- if(matchingBinary) {
- dlLatest.href = matchingBinary.browser_download_url; // set the main download button's link to be the binary's download url
- dlText.innerHTML = ("Download for " + OS.officialName); // set the text to be OS-specific, using the full OS name.
- var thisBinarySize = Math.floor((matchingBinary.size)/1024/1024);
- dlVersionText.innerHTML += (" - " + thisBinarySize + " MB");
- }
- // if there is NOT a matching binary for the user's OS...
- else {
- dlOther.className += " hide"; // hide the 'Other platforms' button
- dlIcon.className += " hide"; // hide the download icon on the main button, to make it look less like you're going to get a download immediately
- dlIcon2.className = dlIcon2.className.replace( /(?:^|\s)hide(?!\S)/g , '' ); // un-hide an arrow-right icon to show instead
- dlText.innerHTML = ("Downloads"); // change the text to be generic: 'Downloads'.
- dlLatest.href = "./releases.html"; // set the main download button's link to the latest releases page for all platforms.
- }
-
- // remove the loading dots, and make all buttons visible, with animated fade-in
- loading.innerHTML = "";
- dlLatest.className = dlLatest.className.replace( /(?:^|\s)invisible(?!\S)/g , ' animated ' );
- dlOther.className = dlOther.className.replace( /(?:^|\s)invisible(?!\S)/g , ' animated ' );
- dlArchive.className = dlArchive.className.replace( /(?:^|\s)invisible(?!\S)/g , ' animated ' );
-
- dlLatest.onclick = function() {
- document.getElementById('installation-link').className += " animated pulse infinite transition-bright";
- };
-
- // animate the main download button shortly after the initial animation has finished.
- setTimeout(function(){
- dlLatest.className = "dl-button a-button animated pulse";
- }, 1000);
-}
-
-// set variables for HTML elements
-var tableHead = document.getElementById("table-head");
-var tableContainer = document.getElementById("nightly-list");
-var nightlyList = document.getElementById("nightly-table");
-var searchError = document.getElementById("search-error");
-
-// When nightly page loads, run:
-/* eslint-disable no-unused-vars */
-function onNightlyLoad() {
- /* eslint-enable no-unused-vars */
-
- populateNightly(); // run the function to populate the table on the Nightly page.
-
-}
-
-
-// NIGHTLY PAGE FUNCTIONS
-
-function populateNightly() {
- // call the XmlHttpRequest function in global.js, passing in 'nightly' as the repo, and a long function as the callback.
- loadReleasesJSON("nightly", "nightly", function(response) {
- function checkIfProduction(x) { // used by the array filter method below.
- return x.prerelease === false && x.assets[0];
- }
-
- // Step 1: create a JSON from the XmlHttpRequest response
- // Step 2: filter out all releases from this JSON that are marked as 'pre-release' in GitHub.
- var releasesJson = JSON.parse(response).filter(checkIfProduction);
-
- // if there are releases...
- if (typeof releasesJson[0] !== 'undefined') {
- buildNightlyHTML(releasesJson);
- } else { // if there are no releases...
- // report an error
- errorContainer.innerHTML = "
Error... no releases have been found!
";
- loading.innerHTML = ""; // remove the loading dots
- }
-
- setSearchLogic();
-
- });
-}
-
-function buildNightlyHTML(releasesJson) {
- loading.innerHTML = ""; // remove the loading dots
-
- // for each release...
- var tableRowCounter = 0;
-
- tableHead.innerHTML = ("
Release
Platform
Downloads
Release details
");
-
- releasesJson.forEach(function(eachRelease) {
-
- // create an array of the details for each binary that is attached to a release
- var assetArray = [];
- eachRelease.assets.forEach(function(each) {
- assetArray.push(each);
- });
-
- // build rows with the array of binaries...
- assetArray.forEach(function(eachAsset) { // for each file attached to this release...
-
- var nameOfFile = (eachAsset.name);
- var uppercaseFilename = nameOfFile.toUpperCase(); // make the name of the file uppercase
- var thisPlatform = getSearchableName(uppercaseFilename); // get the searchableName, e.g. MAC or X64_LINUX.
-
- // firstly, check if the platform name is recognised...
- if(thisPlatform) {
-
- // secondly, check if the file has the expected file extension for that platform...
- // (this filters out all non-binary attachments, e.g. SHA checksums - these contain the platform name, but are not binaries)
- var thisFileExtension = getFileExt(thisPlatform); // get the file extension associated with this platform
- if(uppercaseFilename.indexOf((thisFileExtension.toUpperCase())) >= 0) {
-
- // get the current content of the nightly list div
- var currentNightlyContent = nightlyList.innerHTML;
-
- // add an empty, hidden HTML template entry to the current nightly list, with the tableRowCounter suffixed to every ID
- // to change the HTML of the nightly table rows/cells, you must change this template.
- var newNightlyContent = currentNightlyContent += ("
");
-
- // update the HTML container element with this new, blank, template row (hidden at this stage)
- nightlyList.innerHTML = newNightlyContent;
-
- // set variables for HTML elements.
- var dlButton = document.getElementById("nightly-dl"+tableRowCounter);
- //var dlContent = document.getElementById("nightly-dl-content"+tableRowCounter);
-
- // populate this new row with the release information
- var publishedAt = (eachRelease.published_at);
- document.getElementById("nightly-release"+tableRowCounter).innerHTML = (eachRelease.name).slice(0, 12); // the release name, minus the timestamp
- document.getElementById("nightly-release"+tableRowCounter).href = ("https://github.com/AdoptOpenJDK/openjdk-nightly/releases/tag/" + eachRelease.name) // the link to that release on GitHub
- document.getElementById("nightly-date"+tableRowCounter).innerHTML = moment(publishedAt).format('Do MMMM YYYY'); // the timestamp converted into a readable date
- //document.getElementById("nightly-changelog"+tableRowCounter).href = eachRelease.name; // TODO: WAITING FOR THE LINKS TO BE AVAILABLE. the link to the release changelog
- document.getElementById("nightly-timestamp"+tableRowCounter).innerHTML = (eachRelease.name).slice(13, 25); // the timestamp section of the build name
- //document.getElementById("nightly-buildnumber"+tableRowCounter).innerHTML = eachRelease.id; // TODO: currently this is the release ID
- //document.getElementById("nightly-commitref"+tableRowCounter).innerHTML = eachRelease.name; // TODO: WAITING FOR THE INFO TO BE AVAILABLE.
- //document.getElementById("nightly-commitref"+tableRowCounter).href = eachRelease.name; // TODO: WAITING FOR THE LINKS TO BE AVAILABLE.
-
- // get the official name, e.g. Linux x86-64, and display it in this new row
- var officialName = getOfficialName(thisPlatform);
- document.getElementById("platform-block"+tableRowCounter).innerHTML = officialName;
-
- // set the download section for this new row
- dlButton.innerHTML = (thisFileExtension + " (" + (Math.floor((eachAsset.size)/1024/1024)) + " MB)"); // display the file type and the file size
- document.getElementById("nightly-checksum"+tableRowCounter).href = (eachAsset.browser_download_url).replace(thisFileExtension, ".sha256.txt"); // set the checksum link (relies on the checksum having the same name as the binary, but .sha256.txt extension)
- var link = (eachAsset.browser_download_url);
- dlButton.href = link; // set the download link
-
- // show the new row, with animated fade-in
- var trElement = document.getElementById(tableRowCounter);
- trElement.className = trElement.className.replace( /(?:^|\s)hide(?!\S)/g , ' animated fadeIn ' );
-
- tableRowCounter++;
- }
- }
- });
- });
-
- // if the table has a scroll bar, show text describing how to horizontally scroll
- var scrollText = document.getElementById('scroll-text');
- var tableDisplayWidth = document.getElementById('nightly-list').clientWidth;
- var tableScrollWidth = document.getElementById('nightly-list').scrollWidth;
- if (tableDisplayWidth != tableScrollWidth) {
- scrollText.className = scrollText.className.replace( /(?:^|\s)hide(?!\S)/g , '' );
- }
-}
-
-function setSearchLogic() {
- // logic for the realtime search box...
- /* eslint-disable */
- var $rows = $('#nightly-table tr');
- $('#search').keyup(function() {
- var val = '^(?=.*' + $.trim($(this).val()).split(/\s+/).join(')(?=.*') + ').*$',
- reg = RegExp(val, 'i'),
- text;
-
- $rows.show().filter(function() {
- text = $(this).text().replace(/\s+/g, ' ');
- return !reg.test(text);
- }).hide();
-
- if(document.getElementById('table-parent').offsetHeight < 45) {
- tableContainer.style.visibility = "hidden";
- searchError.className = "";
- } else {
- tableContainer.style.visibility = "";
- searchError.className = "hide";
- }
- });
- /* eslint-enable */
-}
-
-// When releases page loads, run:
-/* eslint-disable no-unused-vars */
-function onLatestLoad() {
- /* eslint-enable no-unused-vars */
- populateLatest(); // populate the Latest page
-}
-
-// LATEST PAGE FUNCTIONS
-
-function populateLatest() {
-
- // call the XmlHttpRequest function in global.js, passing in 'releases' as the repo, and a long function as the callback.
- loadReleasesJSON("releases", "latest_release", function(response) {
- var releasesJson = JSON.parse(response);
-
- if (typeof releasesJson !== 'undefined') { // if there are releases...
- buildLatestHTML(releasesJson);
- }
- else {
- // report an error
- errorContainer.innerHTML = "
Error... no releases have been found!
";
- loading.innerHTML = ""; // remove the loading dots
- }
- });
-}
-
-function buildLatestHTML(releasesJson) {
- // populate the page with the release's information
- var publishedAt = (releasesJson.published_at);
- document.getElementById("latest-build-name").innerHTML = releasesJson.name;
- document.getElementById("latest-build-name").href = ("https://github.com/AdoptOpenJDK/openjdk-releases/releases/tag/" + releasesJson.name);
- document.getElementById("latest-date").innerHTML = moment(publishedAt).format('Do MMMM YYYY');
- //document.getElementById("latest-changelog").href = releasesJson.name;
- document.getElementById("latest-timestamp").innerHTML = (publishedAt.slice(0, 4) + publishedAt.slice(8, 10) + publishedAt.slice(5, 7) + publishedAt.slice(11, 13) + publishedAt.slice(14, 16));
- //document.getElementById("latest-buildnumber").innerHTML = releasesJson.id;
- //document.getElementById("latest-commitref").innerHTML = releasesJson.name;
- //document.getElementById("latest-commitref").href = releasesJson.name;
-
- // create an array of the details for each asset that is attached to a release
- var assetArray = [];
- releasesJson.assets.forEach(function(each) {
- assetArray.push(each);
- });
-
- // for each asset attached to this release, check if it's a valid binary, then add a download block for it...
- assetArray.forEach(function(eachAsset) {
- var nameOfFile = (eachAsset.name);
- var uppercaseFilename = nameOfFile.toUpperCase(); // make the name of the asset uppercase
- var thisPlatform = getSearchableName(uppercaseFilename); // get the searchableName, e.g. MAC or X64_LINUX.
-
- // firstly, check if the platform name is recognised...
- if(thisPlatform) {
-
- // secondly, check if the file has the expected file extension for that platform...
- // (this filters out all non-binary attachments, e.g. SHA checksums - these contain the platform name, but are not binaries)
- var thisFileExtension = getFileExt(thisPlatform); // get the file extension associated with this platform
- if(uppercaseFilename.indexOf((thisFileExtension.toUpperCase())) >= 0) {
-
- // set values ready to be injected into the HTML
- var thisLogo = getLogo(thisPlatform);
- var thisOfficialName = getOfficialName(thisPlatform);
- var thisBinaryLink = (eachAsset.browser_download_url);
- var thisBinarySize = Math.floor((eachAsset.size)/1024/1024);
- var thisChecksumLink = (eachAsset.browser_download_url).replace(thisFileExtension, ".sha256.txt");
- var thisRequirements = getRequirements(thisPlatform);
-
- // get the current content of the latest downloads container div
- var latestContainer = document.getElementById("latest-downloads-container");
- var currentLatestContent = latestContainer.innerHTML;
-
- // prepare a fully-populated HTML block for this platform
- var newLatestContent = currentLatestContent += ("
- We provide solidly made binaries to the highest quality possible utilising existing OpenJDK test suites
- (via jtreg, jcov test coverage) and possibly other OSS donated test suites. However, these binaries are
- not commercially supported. See Support for details.
-
-
-
Available Platforms
-
- We currently have Linux x64 and Mac OS X and are looking to rapidly add the other common Linux variants + Windows and
- Solaris. We envisage some strong collaboration can form here with IcedTea and other
- specific platform efforts!
-
-
-
-
-
-
I'm an OpenJDK Developer
-
- We anticipate that this effort will lead to an easier way for OpenJDK developers to submit, review and test patches for
- multiple platforms before submitting to the OpenJDK project.
-
-
-
Source Forests
-
- We've started with jdk8u (effectively Java 8) with test coverage from the open jtreg tests, providing jcov test coverage reports.
- Later on other popular forests such as jdk9, jdk10, valhalla, shenandoah etc will be added.
-
-
-
- There may be some areas of overlap with other past/present efforts, but that's OK. We expect any duplication to
- converge in due course and have started working with other platform specific OpenJDK build efforts.
-
-
-
-
-
-
I'm an Adopt OpenJDK Developer
-
-
- Discussions take place on the Mailing List, or via
- the openjdk-build issues; and consensus recorded on this project website or the
- appropriate GitHub repo (wiki) as appropriate:
-
-
-
openjdk-build -
- (wiki)
- - Build scripts and other infrastructure to create binaries
- Java™ is the world's leading programming language and platform. The code for Java is open source and available at
- OpenJDK™. AdoptOpenJDK provides prebuilt OpenJDK binaries
- from a fully open source set of build scripts and infrastructure.
-
The AdoptOpenJDK Foundation is proud to receive contributions from many companies, both in the form of monetary contributions in exchange for membership or in-kind contributions for required resources.
-
-
We are currently looking for the following infrastructure:
-
Multiple build and test servers across various platforms that have significant CPU and memory. This will be used to quickly and continuously build and test multiple versions of OpenJDK.
-
-
-
Tier-1 Sponsors
-
The AdoptOpenJDK Foundation's Tier-1 infrastructure providers contribute the largest share of infrastructure to the Adopt OpenJDK build farm project. Without these companies, the project would not be able to provide the quality, speed and availability of test coverage that it does today. (Listed alphabetically).
-
-
-
-
- The London Java Community (LJC) is a group of Java enthusiasts who are interested in benefiting from shared knowledge in the industry. Through our forum and regular meetings developers can keep in touch with the latest industry developments, learn new Java (& other JVM) technologies, meet other developers, discuss technical/non technical issues and network further throughout the Java Community.
-
- The LJC has over 6000 members and holds a seat on the Executive Committee of the Java Community Process (JCP) - aka the Java standards body. The LJC is a leading member in both the Adopt a JSR and Adopt OpenJDK programmes to contribute to Java standards and the leading implementations behind those standards.
-
-
-
-
-
Tier-2 Sponsors
-
The AdoptOpenJDK Foundation's Tier-2 infrastructure providers fill essential gaps in architecture and operating system variations and shoulder some of the burden from the tier-1 providers, contributing to availability and speed in our CI system. (Listed alphabetically).
-
-
-
-
-
-
-
-
MacStadium is the leading managed Mac hosting solution in the world offering individuals and organizations of all sizes to colocate and rent dedicated Mac servers and Mac private cloud environments hosted in data centers around the world. We’re an experienced, driven team of technology enthusiasts striving to provide the best Mac hosting experience to all users. If you need a couple of Mac build servers, you can rent a Mac mini or Mac Pro. For many folks, including AdoptOpenJDK, this is a great route. For others interested in paying a bit more for automation and scalability, see Mac Private Cloud.
-
-
-
-
Packet is passionate about building a better internet. Our specialty is automating fundamental infrastructure. With premium Intel and ARMv8 based server configurations that provision in 8 minutes or less, the Packet platform brings the promise of the virtualized cloud to bare metal - offering the ultimate in performance, portability, and scalability for modern workloads. The company also operates an advanced software defined network and offers private deployments for enterprise customers. Packet currently serves a global client base from data centers in Parsippany (NJ), Sunnyvale (CA), Amsterdam (NL) and Tokyo (JP).
-
-
-
-
Scaleway is a pioneer in the BareMetal cloud computing industry. Created in 2015, Scaleway is the sole cloud provider worldwide to provide on-demand BareMetal servers designed by their own engineering teams. All their components are carefully selected to always provide the most reliable and cost-effective solutions. Scaleway now offers a full range of Compute, Storage and Networking services for infrastructure of all sizes, from development platform to large-scale mission-critical deployments. For more information, visit scaleway.com.
- The binaries that AdoptOpenJDK produces have passed the full OpenJDK test suite and other tests (donated by the community)
- ensuring a good quality binary. However, they are not JCK/TCK compliant. If you want a formally (JCK/TCK)
- tested and verified Java binary then you can get one from a commercial vendor.
-
-
-
-
-
Community Support
-
- The OpenJDK community does not offer any commercial support for the binaries produced. If you do have questions, comments, want to report a bug or
- wish to contribute then choose from one of the options below (please post on the mailing list to get access to Slack):
-