You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by an...@apache.org on 2015/11/12 23:34:42 UTC
incubator-apex-site git commit: APEX-261 #resolve
Repository: incubator-apex-site
Updated Branches:
refs/heads/master 670efbcf7 -> 7e2788684
APEX-261 #resolve
Project: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/commit/7e278868
Tree: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/tree/7e278868
Diff: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/diff/7e278868
Branch: refs/heads/master
Commit: 7e2788684f50a6ba0ca83628d46e90f29b5eb044
Parents: 670efbc
Author: Andy Perlitch <an...@datatorrent.com>
Authored: Thu Nov 12 14:18:56 2015 -0800
Committer: Andy Perlitch <an...@datatorrent.com>
Committed: Thu Nov 12 14:18:56 2015 -0800
----------------------------------------------------------------------
README.md | 22 +++++
gulpfile.js | 156 ++++++++++++++++++++++++++++++++++-
navigation.js | 24 ------
navigation.json | 19 +++++
package.json | 6 +-
releases.json | 14 ++++
src/less/header.less | 12 +++
src/md/third-party-downloads.md | 7 ++
src/pages/downloads.html | 62 ++++++++++++++
src/partials/header.handlebars | 3 +-
10 files changed, 297 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 0c2e9fc..bc9fece 100644
--- a/README.md
+++ b/README.md
@@ -95,3 +95,25 @@ To test changes:
One way to improve this process is to run `./node_modules/.bin/gulp watch`.
This will start a process that watches for changes to source files and updates the `/content` folder accordingly.
This way you make your change and refresh the page to see the effect immediately.
+
+
+Updating Downloads Page
+-----------------------
+
+The downloads page uses the content of `./releases.json` to populate the tables found there.
+Care has been taken to automatically generate this releases.json file. To do so, run:
+
+```bash
+./node_modules/.bin/gulp fetch-releases
+git add releases.json
+git commit -m 'updated releases'
+```
+
+This will do the following things:
+
+1. Parses out the release versions available via the [ASF dist pages](https://dist.apache.org/repos/dist/release/incubator/apex).
+2. Queries Github for these found release tags to find the date they were published to github
+3. Writes to releases.json with release information.
+
+
+Once you have committed the changes to `releases.json`, follow the steps to contributing steps to publish the site to go live.
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/gulpfile.js
----------------------------------------------------------------------
diff --git a/gulpfile.js b/gulpfile.js
index 3a3c47b..aed7406 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -6,6 +6,11 @@ var marked = require('gulp-marked');
var handlebars = require('gulp-compile-handlebars');
var less = require('gulp-less');
var path = require('path');
+var request = require('request');
+var jsdom = require('jsdom');
+var fs = require('fs');
+var async = require('async');
+var _ = require('lodash');
// Constants
var TEMP_PARTIAL_LOCATION = './.tmp/partials/';
@@ -32,12 +37,18 @@ gulp.task('html', ['md2html'], function() {
// Get partials from src and temp partials locations.
// Temp partials are rendered md files
var options = {
- batch: ['./src/partials', TEMP_PARTIAL_LOCATION]
+ batch: ['./src/partials', TEMP_PARTIAL_LOCATION],
+ helpers: {
+ releaseDate: function(timestamp) {
+ var d = new Date(timestamp);
+ return [d.getFullYear(), d.getMonth() + 1, d.getDate()].join('-');
+ }
+ }
};
// Render the files in pages
gulp.src('./src/pages/*.html')
- .pipe(handlebars({ nav: require('./navigation') }, options))
+ .pipe(handlebars({ nav: require('./navigation.json'), releases: require('./releases.json') }, options))
.pipe(gulp.dest(BUILD_LOCATION))
.on('error', function(err) {
console.warn(err);
@@ -74,6 +85,147 @@ gulp.task('copy:images', function() {
// Default task is to build the site
gulp.task('default', ['less', 'html', 'copy:js', 'copy:images']);
+// Creates releases.json file.
+//
+// 1. Requests page that lists release versions (https://dist.apache.org/repos/dist/release/incubator/apex[/malhar])
+// 2. Queries Github for release tags to find the date they were published to github
+// 3. Writes to releases.json with release information.
+//
+gulp.task('fetch-versions', function(taskCb) {
+
+ // The base location for release listings
+ var distUrl = 'https://dist.apache.org/repos/dist/';
+
+ // The release "targets", in this case meaning apex-core and apex-malhar
+ var targets = [
+ // NOTE: Once apex leaves incubation, this object should be changed to exclude "incubator"
+ { key: 'core.src', path: 'release/incubator/apex', repo: 'incubator-apex-core' },
+ { key: 'malhar.src', path: 'release/incubator/apex/malhar', repo: 'incubator-apex-malhar' }
+ ];
+
+ // For each target, get the releases
+ async.map(targets, function(target, cb) {
+
+ // Request the page that lists the release versions,
+ // e.g. https://dist.apache.org/repos/dist/release/incubator/apex
+ request(distUrl + target.path, function(err, response) {
+
+ // Abort for error
+ if (err) {
+ return cb(err);
+ }
+
+ // Parse out the link names which are the
+ // available versions
+ jsdom.env(
+ response.body,
+ function (err, window) {
+
+ // Query the DOM for all links in the list
+ var releaseLinks = window.document.querySelectorAll('ul li a');
+
+ // Convert this NodeList to an array
+ releaseLinks = Array.prototype.slice.call(releaseLinks)
+
+ // Filter out non-version-looking links
+ .filter(function(el) {
+ var text = el.innerHTML.trim();
+ return ['..', 'KEYS', 'malhar', 'malhar/'].indexOf(text) === -1;
+ });
+
+ // Create array of releases from this filtered NodeList
+ var releases = releaseLinks.map(function(el) {
+ return {
+ // Trim the href attribute of leading "v" and trailing slash
+ version: el.href.trim().replace(/^v/, '').replace(/\/$/, ''),
+ // Add repo for use in async.each call below
+ repo: target.repo
+ };
+ });
+
+ // Get the date for each release via the github API
+ async.each(releases, function(release, eachCb) {
+
+ // Get the tags for the repo
+ request({
+ url: 'https://api.github.com/repos/apache/' + release.repo + '/tags',
+ json: true,
+ headers: { 'User-Agent': 'apache' } // Github asks that the user agent is the GH org or username
+ }, function(err, response) {
+
+ // Abort if tags not found or something happened with github API
+ if (err) {
+ return eachCb(err);
+ }
+
+ // Find the tag object corresponding to this release
+ var ghTag = _.find(response.body, function(t) {
+ return t.name.replace(/^v/, '') === release.version;
+ });
+
+ // Get info about the commit that the tag points to
+ request({
+ url: ghTag.commit.url, // Github API address
+ json: true,
+ headers: { 'User-Agent': 'apache' }
+ }, function(err, response) {
+
+ // Abort if the commit could not be found
+ if (err) {
+ return eachCb(err);
+ }
+
+ // Set the date from the this information
+ release.date = Date.parse(response.body.commit.author.date);
+
+ // We're all done
+ eachCb();
+
+ });
+
+ });
+
+ }, function(err) { // callback for async.each(releases, ...)
+
+ // Abort if error occurred somewhere
+ if (err) {
+ return cb(err);
+ }
+
+ // Sort the releases by the date
+ releases.sort(function(a, b) {
+ return b.date - a.date;
+ });
+
+ // Return with a new target object with releases.
+ // Note that this is the cb from the async.map call above
+ cb(null, _.extend({}, target, { releases: releases }) );
+
+ });
+
+ } // end jsdom.env callback
+ ); // end jsdom.env
+
+ }); // end request to the listing of this target
+
+
+ }, function(err, targetsWithVersions) { // this is the async.map(targets) callback
+
+ // This will be written to releases.json
+ var fileContents = {};
+
+ // Use the "key" to set core.src and malhar.src, etc.
+ targetsWithVersions.forEach(function(trg) {
+ _.set(fileContents, trg.key, trg.releases);
+ });
+
+ // Write the file to releases.json
+ fs.writeFile('./releases.json', JSON.stringify(fileContents, 0, 2), taskCb);
+
+ });
+
+});
+
// Watch for changes
gulp.task('watch', function() {
gulp.watch('./src/less/*.less', ['less']);
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/navigation.js
----------------------------------------------------------------------
diff --git a/navigation.js b/navigation.js
deleted file mode 100644
index 23ef750..0000000
--- a/navigation.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-/**
- * This array generates the top navigation
- */
-
-exports = module.exports = [
- { id: 'index', label: 'Home', href: '/' },
- { id: 'community', label: 'Community', href: '/community.html' },
- { id: 'docs', label: 'Docs', href: '/docs.html' },
- { id: 'source', label: 'Source', items: [
- { label: 'Apex Core (ASF)', href: 'https://git-wip-us.apache.org/repos/asf?p=incubator-apex-core.git' },
- { label: 'Apex Core (Github Mirror)', href: 'https://github.com/apache/incubator-apex-core' },
- { label: 'Apex Malhar (ASF)', href: 'https://git-wip-us.apache.org/repos/asf?p=incubator-apex-malhar.git' },
- { label: 'Apex Malhar (Github Mirror)', href: 'https://github.com/apache/incubator-apex-malhar' }
- ] },
- { id: 'apache', label: 'Apache', items: [
- { label: 'Status Page', href: 'http://incubator.apache.org/projects/apex.html' },
- { label: 'Apache Foundation', href: 'http://www.apache.org/foundation/how-it-works.html' },
- { label: 'Apache License', href: 'http://www.apache.org/licenses/' },
- { label: 'Sponsorship', href: 'http://www.apache.org/foundation/sponsorship.html' },
- { label: 'Thanks', href: 'http://www.apache.org/foundation/thanks.html' }
- ]}
-];
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/navigation.json
----------------------------------------------------------------------
diff --git a/navigation.json b/navigation.json
new file mode 100644
index 0000000..6ce8b6d
--- /dev/null
+++ b/navigation.json
@@ -0,0 +1,19 @@
+[
+ { "id": "index", "label": "Home", "href": "/" },
+ { "id": "community", "label": "Community", "href": "/community.html" },
+ { "id": "docs", "label": "Docs", "href": "/docs.html" },
+ { "id": "source", "label": "Source", "items": [
+ { "label": "Apex Core (ASF)", "href": "https://git-wip-us.apache.org/repos/asf?p=incubator-apex-core.git" },
+ { "label": "Apex Core (Github Mirror)", "href": "https://github.com/apache/incubator-apex-core" },
+ { "label": "Apex Malhar (ASF)", "href": "https://git-wip-us.apache.org/repos/asf?p=incubator-apex-malhar.git" },
+ { "label": "Apex Malhar (Github Mirror)", "href": "https://github.com/apache/incubator-apex-malhar" }
+ ] },
+ { "id": "apache", "label": "Apache", "items": [
+ { "label": "Status Page", "href": "http://incubator.apache.org/projects/apex.html" },
+ { "label": "Apache Foundation", "href": "http://www.apache.org/foundation/how-it-works.html" },
+ { "label": "Apache License", "href": "http://www.apache.org/licenses/" },
+ { "label": "Sponsorship", "href": "http://www.apache.org/foundation/sponsorship.html" },
+ { "label": "Thanks", "href": "http://www.apache.org/foundation/thanks.html" }
+ ]},
+ { "id": "download", "label": "Download", "href": "/downloads.html", "classes": "btn btn-success" }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 26da00f..bf02e99 100644
--- a/package.json
+++ b/package.json
@@ -21,12 +21,16 @@
"author": "Andy Perlitch <an...@datatorrent.com>",
"license": "Apache-2.0",
"dependencies": {
+ "async": "^1.5.0",
"bower": "^1.5.2",
"gulp": "^3.9.0",
"gulp-compile-handlebars": "^0.5.0",
"gulp-less": "^3.0.3",
"gulp-marked": "^1.0.0",
"handlebars": "^4.0.2",
- "highlight.js": "^8.9.1"
+ "highlight.js": "^8.9.1",
+ "jsdom": "^7.0.2",
+ "lodash": "^3.10.1",
+ "request": "^2.65.0"
}
}
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/releases.json
----------------------------------------------------------------------
diff --git a/releases.json b/releases.json
new file mode 100644
index 0000000..1a4751a
--- /dev/null
+++ b/releases.json
@@ -0,0 +1,14 @@
+{
+ "core": {
+ "src": [
+ {
+ "version": "3.2.0-incubating",
+ "date": 1445639866000,
+ "repo": "incubator-apex-core"
+ }
+ ]
+ },
+ "malhar": {
+ "src": []
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/src/less/header.less
----------------------------------------------------------------------
diff --git a/src/less/header.less b/src/less/header.less
index 13f1722..1a7e265 100644
--- a/src/less/header.less
+++ b/src/less/header.less
@@ -8,6 +8,18 @@
&:hover {
background: lighten(@brand-primary, 25%);
}
+ &.btn {
+ padding-bottom: 7px;
+ padding-top: 7px;
+ margin-top: 8px;
+ margin-left: 5px;
+ margin-right: 5px;
+ &.btn-success {
+ &:hover {
+ background-color: darken(@brand-success, 10%);
+ }
+ }
+ }
}
.navbar-brand {
font-family: @headings-font-family;
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/src/md/third-party-downloads.md
----------------------------------------------------------------------
diff --git a/src/md/third-party-downloads.md b/src/md/third-party-downloads.md
new file mode 100644
index 0000000..47c0ecc
--- /dev/null
+++ b/src/md/third-party-downloads.md
@@ -0,0 +1,7 @@
+## Third-Party Downloads
+
+This is a list of 3rd party binary packages based on Apache Apex. The Apache Apex project does not endorse or maintain any 3rd party binary packages.
+
+- [DataTorrent RTS](https://www.datatorrent.com/download/) is a binary build of Apache Apex created by [DataTorrent](https://datatorrent.com).
+
+If you would like to provide your own edition of Apache Apex here, please send email to [dev@apex.incubator.apache.org](mailto:dev@apex.incubator.apache.org).
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/src/pages/downloads.html
----------------------------------------------------------------------
diff --git a/src/pages/downloads.html b/src/pages/downloads.html
new file mode 100644
index 0000000..8c58112
--- /dev/null
+++ b/src/pages/downloads.html
@@ -0,0 +1,62 @@
+{{> header}}
+
+<div class="container">
+
+ <h1>Downloads</h1>
+
+ <!-- APEX CORE SOURCE RELEASES TABLE -->
+ {{#if releases.core.src.length}}
+ <h2>Apex Source Releases</h2>
+ <table class="table table-bordered table-striped">
+ <thead>
+ <tr>
+ <th scope="col">Version</th>
+ <th scope="col">Date</th>
+ <th scope="col">Source (zip)</th>
+ <th scope="col">Source (tarball)</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#each releases.core.src as |version vIndex|}}
+ <tr>
+ <td>
+ {{ version.version }}
+ {{#if @first}}
+ (latest)
+ {{/if}}
+ </td>
+ <td>
+ {{releaseDate version.date}}
+ </td>
+ <td>
+ <a href="http://www.apache.org/dyn/closer.lua/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.zip">apex-{{ version.version }}-source-release.zip</a><br>
+ <small>
+ (
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.zip.asc">pgp</a>,
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.zip.md5">md5</a>,
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.zip.sha">sha1</a>
+ )
+ </small>
+ </td>
+ <td>
+ <a href="http://www.apache.org/dyn/closer.lua/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.tar.gz">apex-{{ version.version }}-source-release.tar.gz</a><br>
+ <small>
+ (
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.tar.gz.asc">pgp</a>,
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.tar.gz.md5">md5</a>,
+ <a href="https://dist.apache.org/repos/dist/release/incubator/apex/v{{ version.version }}/apex-{{ version.version }}-source-release.tar.gz.sha">sha1</a>
+ )
+ </small>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+ {{/if}}
+
+
+ {{> third-party-downloads}}
+
+</div>
+
+{{> footer}}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/7e278868/src/partials/header.handlebars
----------------------------------------------------------------------
diff --git a/src/partials/header.handlebars b/src/partials/header.handlebars
index 50e1526..f4eb8a3 100644
--- a/src/partials/header.handlebars
+++ b/src/partials/header.handlebars
@@ -47,10 +47,11 @@
</li>
{{else}}
<li class="nav-item">
- <a class="nav-link" href="{{href}}">{{label}}</a>
+ <a class="nav-link {{classes}}" href="{{href}}">{{label}}</a>
</li>
{{/if}}
{{/each}}
</ul>
+
</div>
</nav>
\ No newline at end of file