| Title: Apache Velocity - Site Building |
| |
| ## the Apache Velocity Site |
| |
| [TOC] |
| |
| ### Introduction |
| |
| The Apache Velocity Site is what you get when you visit [our homepage](/). It is the envelope site for all Apache Velocity sub projects. |
| |
| In short: This repository is only interesting for you if you |
| |
| + want to re-create the Apache Velocity site on your local computer or intranet. |
| + are an [Apache Velocity committer](/who-we-are.html) and want to update the site. |
| |
| ### Editing the Site |
| |
| Apache Velocity uses the [Apache Content Management System](http://www.apache.org/dev/cms.html) to manage its site. |
| |
| The site is not *hosted* by the CMS (it's planned to move it to pelican), so it still has to be build locally. |
| |
| ### Building the Site |
| |
| To build the site locally, you'll need a local checkout of the [Apache CMS](https://svn.apache.org/repos/infra/websites/cms), then refer to the [STATUS](https://svn.apache.org/repos/infra/websites/cms/STATUS) file. |
| You'll of course also need a local clone of [the site sources](https://gitbox.apache.org/repos/asf/velocity-site.git), or even preferably a local clone of [github's mirror](https://github.com/apache/velocity-site.git), where you can submit pull requests. |
| |
| You'll have to generate the site in some `target` temporary directory, then check added/modified/deleted files in the `asf-site` branch of the `velocity-site` repository. |
| |
| Typically, you'll have to: |
| |
| 1. define the environment variable MARKDOWN_SOCKET to something like /tmp/markdown |
| 2. launch the CMS markdown daemon `apache-cms/build/markdownd.py` |
| 3. run `apache-cms/build/build_site.pl --source-base velocity-site/src --target-base /tmp/target` (adapt the paths) |
| 4. copy the generated files from `target` to velocity-site's asf-site branch (including the hidden file .htaccess) |
| 5. check the result then commit and push |
| |
| Here's a bash script that you can adapt and reuse: |
| |
| #!/bin/bash |
| |
| export MARKDOWN_SOCKET=/tmp/markdown |
| CMS=~/projects/velocity/apache_cms |
| VELOCITY=~/projects/velocity/git |
| |
| if [[ `pidof markdownd.py` == "" ]]; then |
| $CMS/build/markdownd.py |
| fi |
| |
| find $VELOCITY/velocity-site/src/content -name "*~" | xargs rm -v |
| rm -rf $VELOCITY/velocity-site-target/* rm -rf $VELOCITY/velocity-site-target/.htaccess |
| |
| echo Generating site... |
| |
| $CMS/build/build_site.pl --source-base $VELOCITY/velocity-site/src --target-base $VELOCITY/velocity-site-target |
| |
| echo Copying to production directory... |
| |
| rm -rf $VELOCITY/velocity-site-prod/* $VELOCITY/velocity-site-prod/.htaccess |
| cp -r $VELOCITY/velocity-site-target/content/* $VELOCITY/velocity-site-prod/ |
| cp -r $VELOCITY/velocity-site-target/content/.htaccess $VELOCITY/velocity-site-prod/ |
| |
| echo Post processing... |
| |
| find $VELOCITY/velocity-site-prod/ -name "*.html" | xargs sed -ri -e "s'<span></span>''g" |
| |
| cd $VELOCITY/velocity-site-prod |
| echo cd $VELOCITY/velocity-site-prod |
| pwd |
| git status |
| |
| Notes: |
| |
| * the python pygments lexer (used by markdown/codehilite for code syntax highlighting) knows about the Velocity syntax, but not about silent references like `$!foo` or `$!{bar}`. I patched it and sent the [patch](https://bitbucket.org/birkenfeld/pygments-main/pull-requests/771/add-velocity-silent-references-syntax/diff) upstream, which has been accepted but not yet released at the time of writing. |
| |
| ### Additional Notes |
| |
| ### Javadocs |
| |
| For the time being, here are the steps to build the javadocs (listed for the engine, adapt for the tools): |
| |
| 1. issue an `mvn javadoc:aggregate -pl !velocity-custom-parser-example` command at the root of the source tree (the `-pl` option is here to ignore a specific module from the docs) |
| 2. copy the content of the `target/site/apidocs` directory inside of the `apidocs` directory of the apropriate module inside the site sources |
| 3. commit this result (which will produce a first big fat commit email...) |
| 3. generate the site then commit the production result (second horrible commit email...) |
| |
| #### Table of Content |
| |
| Per-page table of contents can be displayed with the following placeholder: |
| |
| [TOC] |
| |
| #### Tables |
| |
| Tables are supported. See the documentation of the [python-markdown](https://python-markdown.github.io/extensions/tables/) extension. |
| |
| #### Syntax highlighting |
| |
| The markdown module used by the CMS allows one to specify which language lexer to use for syntax coloring of blocks of code, using the following syntax: |
| |
| :::velocity |
| #set( $foo = 'bar' ) |
| ... |
| |
| which produces: |
| |
| :::velocity |
| #set( $foo = 'bar' ) |
| ... |
| |
| There are many lexers available, among which :::java, :::html, :::xml, :::properties, :::velocity, :::html+velocity, :::xml+velocity, etc. |
| |
| #### Breadcrumbs |
| |
| Breadcrumbs use the full pathname of the file (one path per level). So choose filenames and structure apropriately, as directory names will be used to label each step. |
| |
| #### Left Navigation |
| |
| The deepest left.nav (markdown format) will be used (starting from the current page markdown script directory and going up the hierarchy). |
| |
| #### Post-Processing |
| |
| To be able to handle some specific dynamic parts of the site that depends upon other resources than their markdown file (aka news, contributors, changes...), a post-processing mechanism has been setup: |
| |
| 1. define a perl subroutine in `lib/view.pm` called "`my_specific_section`" (for instance) that returns a string |
| 2. in the markdown file, use a {{my_specific_section}} tag wherever needed |
| 3. in path.pm, make sure that "postprocessing => 1" is included in the parameters relative to this markdown file |
| |
| The perl subroutine will be called *after* the markdown has been processed into html. The process is recursive: the result of a post-processing tag can contains other tags. |
| |
| ## TODO |
| |
| Integration of several Maven reports, like dependency-convergence |