blob: b04916b6cbb2fe3f4a147af2b4d0221b419dbc2f [file] [log] [blame]
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