Writing documentation like release notes in Word is a pain, especially when you have it within your project which is under version control.
Diffs between commits are impossible and you risk having 2 people editing the document at the same time and overwriting each others changes (no automatic merge possibility like you have with the code).
The idea is then to use asciidocs to write the documentation and then generate PDF documents from there with some kind of template in order to have a final document which is easy to pass around.
So comes asciidoctor to the rescue, which has a maven plugin allowing us to do everything via maven!
You need this in your pom.xml file:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <asciidoctor.maven.plugin.version>1.5.3</asciidoctor.maven.plugin.version> <asciidoctorj.pdf.version>1.5.0-alpha.11</asciidoctorj.pdf.version> <asciidoctorj.version>1.5.4</asciidoctorj.version> <jruby.version>1.7.21</jruby.version> </properties> <build> <defaultGoal>process-resources</defaultGoal> <plugins> <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>${asciidoctor.maven.plugin.version}</version> <dependencies> <dependency> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctorj-pdf</artifactId> <version>${asciidoctorj.pdf.version}</version> </dependency> <!-- Comment this section to use the default jruby artifact provided by the plugin --> <dependency> <groupId>org.jruby</groupId> <artifactId>jruby-complete</artifactId> <version>${jruby.version}</version> </dependency> <!-- Comment this section to use the default AsciidoctorJ artifact provided by the plugin --> <dependency> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctorj</artifactId> <version>${asciidoctorj.version}</version> </dependency> </dependencies> <configuration> <sourceDirectory>src/main/resources/ReleaseNotes</sourceDirectory> <!-- Attributes common to all output formats --> <attributes> <sourcedir>${project.build.sourceDirectory}</sourcedir> </attributes> </configuration> <executions> <execution> <id>generate-pdf-doc</id> <phase>generate-resources</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <backend>pdf</backend> <!-- Since 1.5.0-alpha.9 PDF back-end can use 'rouge' as well as 'coderay' source highlighting --> <sourceHighlighter>rouge</sourceHighlighter> <attributes> <pdf-stylesdir>${project.basedir}/src/main/resources/ReleaseNotes/themes</pdf-stylesdir> <pdf-style>my-theme</pdf-style> <icons>font</icons> <tabsize>4</tabsize> <pagenums/> <toc/> <idprefix/> <idseparator>-</idseparator> </attributes> </configuration> </execution> </executions> </plugin> </plugins> </build>
If you have an image in src/main/resources/ReleaseNotes/images/image1.png and a theme in src/main/resources/ReleaseNotes/themes/my-theme.yml like this
title_page: align: right background_image: logo.jpg page: layout: portrait margin: [2cm, 1cm, 2cm, 1cm] # top, right, bottom, left size: A4 base: font_color: #333333 line_height_length: 17 line_height: $base_line_height_length / $base_font_size vertical_rhythm: $base_line_height_length heading: font_color: #333333 font_size: 17 font_style: bold line_height: 1.2 margin_bottom: $vertical_rhythm link: font_color: #0e83a4 outline_list: indent: $base_font_size * 1.5 header: height: 1.5cm line_height: 1 recto_content: center: '{document-title}' verso_content: center: '{document-title}' footer: height: 1.5cm line_height: 1 recto_content: # right: '{section-title} | *{page-number}/{page-count}*' right: '*{page-number}/{page-count}*' verso_content: # left: '*{page-number}/{page-count}* | {section-title}' left: '*{page-number}/{page-count}*' image: align: center caption: align: center font_color: #FF0000 font_size: 10
You can then write your release notes in asciidocs format in src/main/resources/ReleaseNotes/Release_Notes.adoc, which could like like this:
= Release Notes 1.0.0 My Project v1.0.0 // variables :MyProj: My fancy project name // Settings: :sectnums: :toc: :toclevels: 3 :imagesdir[:imagesdir: images] [.thumb] image::image1.png[scaledwidth=20%] [abstract] == Introduction This document contains release notes and change log for releases and patches to {MyProj}. + + The document describes changes, known issues, deliverables and versions of sub components for a single version of the application. + + + + + + + + + + + + + + + + + + ,=== *Author*, Bugs Bunny *Status*, Final *Approved by*, Daffy Duck *Version*, 1.0.0 *Created*, January 14th 2016 *Last changed*, January 19th 2016 ,=== <<< == Revision History *Only for this release* + + [format="csv", options="header"] |=== Date, Version, Description, Author *15.01.2016*,0.1,First draft, Bugs Bunny *15.01.2016*,0.2,Updates, Daffy Duck |=== <<< == Version Description === Deliverables (Sub components/Features) bla bla bla... <<< === Dependencies +++<span style="color: #FF0000">Just some red text</span>+++ + === Comments Comments comments + + + *+++<span style="color: red;">WARNING: red and bold</span>+++* +
Then when you compile your project via maven, you will get a PDF document in target/generated-docs!
It should like like this.
In this example, we use asciidoctor to generate the PDF file so the syntax can be a bit different than plain asciidoc.
References:
AsciiDoc Syntax Quick Reference
http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
Chapter 10. Text Formatting
http://www.methods.co.nz/asciidoc/chunked/ch10.html
asciidoctor-maven-examples/asciidoctor-pdf-example at master · asciidoctor/asciidoctor-maven-examples
https://github.com/asciidoctor/asciidoctor-maven-examples/tree/master/asciidoctor-pdf-example
asciidoctor/asciidoctor-pdfhttps://github.com/asciidoctor/asciidoctor-pdf
asciidoctor-pdf/theming-guide.adoc
https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc
AsciiDoc Writer’s Guide
http://asciidoctor.org/docs/asciidoc-writers-guide/
Asciidoctor User Manual
http://asciidoctor.org/docs/user-manual/
Asciidoctor Documentation
http://asciidoctor.org/docs/
Differences between Asciidoctor and AsciiDoc
http://asciidoctor.org/docs/asciidoc-asciidoctor-diffs/
AsciiDoc Writer’s Guide
http://asciidoctor.org/docs/asciidoc-writers-guide/
Nice work Jean-Marc. This can be quite powerful - I assume you can have queries into jira and/or svn to even make it more automatic.
I have not tried this yet, but links to Jira are easy to create since only the issue number changes.
So instead of writing XXX-123, one can just write https://myfirm.atlassian.net/browse/XXX-123[XXX-123]
thanks for the information