blob: 268aa2a14c4fd0fe51fa409441ca375a494a54f3 [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
Most of the site sources are in plain markdown, more specifically in [python-markdown](https://python-markdown.github.io/).
### Building the site with docker
This method is by far the easiest one.
1. Clone the site sources
If you are a Velocity commiter, you will want to directly edit the site sources:
:::shell
git clone https://github.com/apache/velocity-site.git
If you are a contributor, you should first fork the site sources to your github account, and use:
:::shell
git clone --single-branch --branch main git@github.com:[YOUR_GITHUB_ID]/velocity-site.git
2. Clone the site production pages
As a commiter you will use it to push into production the generated site. As a contributor, you will use it to check locally the result of your changes.
This clone must be called `velocity-site-prod` and must be made in the same directory as the `velocity-site` one.
:::shell
git clone --single-branch --branch asf-site https://github.com/apache/velocity-site.git velocity-site-prod
3. Make your changes to the site sources
4. Run the script `velocity-site/builder/bin/builder.sh` (linux implied...)
5. Check the result using your favorite browser
6. Advertize your changes
Commiters have to push the changes in both clones, the source and the production one. Contributors only need to submit a pull request to the site sources.
### Building the site without docker
Apache Velocity uses the [Apache Content Management System](https://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.
To do so, 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