Difference between revisions of "Documentation Release Process"

From GnuCash
Jump to: navigation, search
(Other documentation formats: Update for cmake)
(use <syntaxhighlight lang="sh">; ...->…)
Line 10: Line 10:
 
|-
 
|-
 
| ssh://code.gnucash.org/gnucash-htdocs-docs
 
| ssh://code.gnucash.org/gnucash-htdocs-docs
| ready docs to be presented at ...
+
| ready docs to be presented at
 
|-
 
|-
 
| ssh://code.gnucash.org/gnucash-htdocs
 
| ssh://code.gnucash.org/gnucash-htdocs
Line 30: Line 30:
  
 
=== git ===
 
=== git ===
This means the branches in our repository have to be reshuffled. The release is done from a commit on the master branch. This commit should now become the HEAD commit for the maint branch because maintenance should now happen from there on. At the same time it may be necessary to keep up maintenance to the previous major series, so this should now get its own branch.
+
This means the branches in our repository have to be reshuffled. The release is done from a commit on the master branch. This commit should now become the HEAD commit for the maint branch because maintenance should now happen from there on. At the same time it may be necessary to keep up maintenance to the previous major series, so this should now get its own branch: <syntaxhighlight lang="sh">
 +
git branch maint-X.Y maint # for example git branch maint-2.6 maint
 +
git checkout maint
 +
git merge --ff-only master
 +
</syntaxhighlight>
  
  git branch maint-X.Y maint # for example git branch maint-2.6 maint
+
;[https://github.com/Gnucash/gnucash-docs/blob/maint/docbook/gnc-docbookx.dtd#L35 docbook/gnc-docbook.dtd]: Update <!ENTITYs vers-unstable series-stable.
  git checkout maint
 
  git merge --ff-only master
 
 
 
 
 
;[https://github.com/Gnucash/gnucash-docs/blob/maint/docbook/gnc-docbookx.dtd#L35 docbook/gnc-docbook.dtd]: Update <!ENTITYs vers-unstable ... series-stable.
 
  
 
=== GnuCash Wiki ===
 
=== GnuCash Wiki ===
Line 50: Line 49:
 
== Checkout release branch ==
 
== Checkout release branch ==
 
* Determine which branch to do the release from:
 
* Determine which branch to do the release from:
** If you want to release a new maintenance release on the ''current stable'' series (like 2.6.1, 2.6.2,...) then choose '''maint'''
+
** If you want to release a new maintenance release on the ''current stable'' series (like 2.6.1, 2.6.2,) then choose '''maint'''
 
** If you want to release a new maintenance release on an ''older stable'' series (like 2.4.16 if 2.6.x is the current stable series) then choose '''maint-X.Y'''
 
** If you want to release a new maintenance release on an ''older stable'' series (like 2.4.16 if 2.6.x is the current stable series) then choose '''maint-X.Y'''
** If you are about to release a ''development snapshot'' (like 2.7.0, 2.7.1,...), choose '''master'''
+
** If you are about to release a ''development snapshot'' (like 2.7.0, 2.7.1,), choose '''master'''
* Clone gnucash-docs if you don't already have one.
+
* Clone gnucash-docs if you don't already have one: <syntaxhighlight lang="sh">
  git clone ssh://code.gnucash.org/gnucash-docs
+
git clone ssh://code.gnucash.org/gnucash-docs
* Check out the branch you want and make sure that it's up-to-date:
+
</syntaxhighlight>
  cd gnucash-docs
+
* Check out the branch you want and make sure that it's up-to-date: <syntaxhighlight lang="sh">
  git checkout <branch>
+
cd gnucash-docs
  git pull --rebase
+
git checkout <branch>
 +
git pull --rebase
 +
</syntaxhighlight>
  
If you are about to release from '''master''' you should verify that '''master''' is a ''superset'' of '''maint'''. You can do this by running the following command
+
If you are about to release from '''master''' you should verify that '''master''' is a ''superset'' of '''maint'''. You can do this by running: <syntaxhighlight lang="sh">
  git log master..maint
+
git log master..maint
This command should not list any commits. If it does, checkout '''master''' and merge '''maint''' into it.
+
</syntaxhighlight>
  git checkout master
+
This command should not list any commits. If it does, checkout '''master''' and merge '''maint''' into it: <syntaxhighlight lang="sh">
  git merge maint
+
git checkout master
 +
git merge maint
 +
</syntaxhighlight>
  
 
;Note: The same check should be performed when releasing from '''maint''' and there is an older '''maint-X.Y''' branch on which commits still happen.
 
;Note: The same check should be performed when releasing from '''maint''' and there is an older '''maint-X.Y''' branch on which commits still happen.
Line 83: Line 86:
 
*: in <tt>project</tt> of CMakeLists.txt.
 
*: in <tt>project</tt> of CMakeLists.txt.
 
* Update NEWS by running ../gnucash/util/git-release-notes.pl > release.news and copying over the changes, reformatting appropriately.
 
* Update NEWS by running ../gnucash/util/git-release-notes.pl > release.news and copying over the changes, reformatting appropriately.
* Update the ChangeLog:
+
* Update the ChangeLog: <syntaxhighlight lang="sh">
  git log --format="%ad %aN %n%n%x09* %s%d%n" --date=short <previous release tag>.. > ChangeLogNew
+
git log --format="%ad %aN %n%n%x09* %s%d%n" --date=short <previous release tag>.. > ChangeLogNew
  mv ChangeLog ChangeLogOld
+
mv ChangeLog ChangeLogOld
  cat ChangeLogNew ChangeLogOld > ChangeLog
+
cat ChangeLogNew ChangeLogOld > ChangeLog
  rm ChangeLogNew
+
rm ChangeLogNew
  rm ChangeLogOld  
+
rm ChangeLogOld  
 +
</syntaxhighlight>
 
* Commit this change as "Release X.X.X"
 
* Commit this change as "Release X.X.X"
  
 
== Git ==
 
== Git ==
* Verify that the chosen branch can build a distribution tarball, compile, and test it satisfactorily:
+
* Verify that the chosen branch can build a distribution tarball, compile, and test it satisfactorily: <syntaxhighlight lang="sh">
mkdir build && cd build
+
mkdir build && cd build
cmake ..
+
cmake ..
make distcheck
+
make distcheck
 +
</syntaxhighlight>
 
:Fix any errors this step may turn up, commit and check again.
 
:Fix any errors this step may turn up, commit and check again.
* Tag the release and push:
+
* Tag the release and push: <syntaxhighlight lang="sh">
  git tag -am "Release 3.4" 3.4
+
git tag -am "Release 3.4" 3.4
  git push --tags origin <branch>
+
git push --tags origin <branch>
'''N.B.''' If after pushing the tag you discover a problem, fix the problem and tag the new commit with a lower-case letter subscript, e.g.  
+
</syntaxhighlight>
  git -tag -am "Re-tag of release 3.4" 3.4a
+
'''N.B.''' If after pushing the tag you discover a problem, fix the problem and tag the new commit with a lower-case letter subscript, e.g. <syntaxhighlight lang="sh">
 +
git -tag -am "Re-tag of release 3.4" 3.4a
 +
</syntaxhighlight>
  
 
== Source tarballs ==
 
== Source tarballs ==
* After the tag has propagated, clone your repo to make sure that no stray changes are put in the tarball. For example:
+
* After the tag has propagated, clone your repo to make sure that no stray changes are put in the tarball. For example: <syntaxhighlight lang="sh">
cd ..
+
cd ..
rm -rf gnucash-docs-release  
+
rm -rf gnucash-docs-release  
git clone gnucash-docs -b 2.6 gnucash-docs-release
+
git clone gnucash-docs -b 2.6 gnucash-docs-release
* Inside gnucash-docs-release, run
+
</syntaxhighlight>
mkdir build && cd build
+
* Inside gnucash-docs-release, run <syntaxhighlight lang="sh">
cmake ..
+
mkdir build && cd build
make distcheck
+
cmake ..
 +
make distcheck
 +
</syntaxhighlight>
  
 
Note that the build is done in a subdirectory here. This is not strictly necessary, but it will simplify some of the future steps in the documentation release process.
 
Note that the build is done in a subdirectory here. This is not strictly necessary, but it will simplify some of the future steps in the documentation release process.
Line 122: Line 131:
 
Building these requires the [https://xmlgraphics.apache.org/fop/ Apache FOP (XML Formatting-objects Processor)] for PDF and [http://calibre-ebook.com/ Calibre ] for mobi ebooks.
 
Building these requires the [https://xmlgraphics.apache.org/fop/ Apache FOP (XML Formatting-objects Processor)] for PDF and [http://calibre-ebook.com/ Calibre ] for mobi ebooks.
  
* In the same build directory we created in the previous step, run
+
* In the same build directory we created in the previous step, run <syntaxhighlight lang="sh">
cmake --with-mobi ..
+
cmake --with-mobi ..
make html pdf epub mobi
+
make html pdf epub mobi
 +
</syntaxhighlight>
  
 
This should generate the various alternative formats in subdirectories per document (guide or help) and per language (like C, de, it and so on).
 
This should generate the various alternative formats in subdirectories per document (guide or help) and per language (like C, de, it and so on).
Line 137: Line 147:
 
==  Git housekeeping after a release ==
 
==  Git housekeeping after a release ==
  
If any changes were committed during the release steps above, merge these upwards to the other upstream branches. For example if you committed something to maint, merge maint into master:
+
If any changes were committed during the release steps above, merge these upwards to the other upstream branches. For example if you committed something to maint, merge maint into master: <syntaxhighlight lang="sh">
  git checkout master
+
git checkout master
  git merge maint
+
git merge maint
 +
</syntaxhighlight>
  
 
Expect a merge conflict here for the changed version number. This is normal and the conflict should be resolved by keeping the version number in master. There may be other merge conflicts. Evaluate them and fix them accordingly.
 
Expect a merge conflict here for the changed version number. This is normal and the conflict should be resolved by keeping the version number in master. There may be other merge conflicts. Evaluate them and fix them accordingly.
Line 151: Line 162:
  
 
The additional documentation formats have to be uploaded to the gnucash website. The website is also managed in git, so to get the documentation in there, the current website sources have to be checked out:
 
The additional documentation formats have to be uploaded to the gnucash website. The website is also managed in git, so to get the documentation in there, the current website sources have to be checked out:
* Move one level up from the gnucash-docs-release directory created above
+
* Move one level up from the gnucash-docs-release directory created above <syntaxhighlight lang="sh">
  git clone ssh://code.gnucash.org/gnucash-htdocs-docs
+
git clone ssh://code.gnucash.org/gnucash-htdocs-docs
 +
</syntaxhighlight>
  
You should now have the gnucash-docs-release and gnucash-htdocs-docs directories next to each other. Inside the htdocs-docs directory you will find a subdirectory docs and in there a subdirectory per major release (v1.8, v2.0, v2.2,...).  
+
You should now have the gnucash-docs-release and gnucash-htdocs-docs directories next to each other. Inside the htdocs-docs directory you will find a subdirectory docs and in there a subdirectory per major release (v1.8, v2.0, v2.2,).  
 
Note that each version directory starts with a lowercase "v" (from "version")
 
Note that each version directory starts with a lowercase "v" (from "version")
  
Next, we'll copy all of the alternative documentation formats into the version directory. The most efficient way is by using rsync. These commands accomplish this:
+
Next, we'll copy all of the alternative documentation formats into the version directory. The most efficient way is by using rsync. These commands accomplish this: <syntaxhighlight lang="sh">
base="$PWD/gnucash-htdocs-docs/v2.6"
+
base="$PWD/gnucash-htdocs-docs/v2.6"
(cd gnucash-docs-release/build/guide; for i in C de it ja pt; do rsync -av --delete $i/gnucash-guide{,.pdf,.epub,.mobi} $base/$i/;done)
+
(cd gnucash-docs-release/build/guide; for i in C de it ja pt; do rsync -av --delete $i/gnucash-guide{,.pdf,.epub,.mobi} $base/$i/;done)
(cd gnucash-docs-release/build/help; for i in C de it pt; do rsync -av --delete $i/gnucash-help{,.pdf,.epub,.mobi} $base/$i/;done)
+
(cd gnucash-docs-release/build/help; for i in C de it pt; do rsync -av --delete $i/gnucash-help{,.pdf,.epub,.mobi} $base/$i/;done)
 +
</syntaxhighlight>
  
You should find in the gnucash-htdocs-docs directory a shell script named <tt>copy-files.sh</tt> which does the rsync for you:
+
You should find in the gnucash-htdocs-docs directory a shell script named <tt>copy-files.sh</tt> which does the rsync for you: <syntaxhighlight lang="sh">
  ./copy-files.sh /path/to/build_dir v2.6
+
./copy-files.sh /path/to/build_dir v2.6
 +
</syntaxhighlight>
 
'''N.B.:''' The path must be absolute for it to work correctly.
 
'''N.B.:''' The path must be absolute for it to work correctly.
  
 
Note that the commands should be run from the parent directory of gnucash-docs-release and gnucash-htdocs, and the parentheses are important.
 
Note that the commands should be run from the parent directory of gnucash-docs-release and gnucash-htdocs, and the parentheses are important.
  
If that worked well, you can now go into the gnucash-htdocs-docs directory and use '''git add''' to add new files and '''git rm''' to remove deleted files from the repository (if any):
+
If that worked well, you can now go into the gnucash-htdocs-docs directory and use '''git add''' to add new files and '''git rm''' to remove deleted files from the repository (if any): <syntaxhighlight lang="sh">
cd gnucash-htdocs-docs
+
cd gnucash-htdocs-docs
git status
+
git status
# This will show a list of new/changed/deleted files.
+
# This will show a list of new/changed/deleted files.
git add v2.6
+
git add v2.6
git rm [deleted files]...
+
git rm [deleted files]
git commit -m "Add documentation version 2.6.2 to the GnuCash website"
+
git commit -m "Add documentation version 2.6.2 to the GnuCash website"
git push origin <branch>
+
git push origin <branch>
 +
</syntaxhighlight>

Revision as of 19:10, 9 February 2021

This page gathers the steps for a release of the GnuCash documentation. It was animated by Bug 652350 - Formalize the Documentation release process.

URLs

URL Meaning
ssh://code.gnucash.org/gnucash-docs source files of the docs
ssh://code.gnucash.org/gnucash-htdocs-docs ready docs to be presented at …
ssh://code.gnucash.org/gnucash-htdocs source files of www.gnucash.org

Releases

Beginning with 2.6.0, documentation releases should be done at the same time as GnuCash releases, with the Documentation release number corresponding to the GnuCash release. Do this even if there are no significant documentation changes in order to keep the numbers synchronized.

Branching Policy

As with development, we maintain two documentation branches, master and maint for whatever the current stable version is (at this writing it's 2.6).

  • Documentation updates describing features which are exclusively in code's master branch should be applied only on master.
  • All others should be applied on maint and then merged in master.

Check Git#Branching and Merging to see if something changed.

Major Releases

A major release is the first release to bring new development features to the users. This is shown by a jump in the version number (for example from 2.6.x to 2.8.0), and signifies the start of a new major development cycle.

git

This means the branches in our repository have to be reshuffled. The release is done from a commit on the master branch. This commit should now become the HEAD commit for the maint branch because maintenance should now happen from there on. At the same time it may be necessary to keep up maintenance to the previous major series, so this should now get its own branch:
git branch maint-X.Y maint # for example git branch maint-2.6 maint
git checkout maint
git merge --ff-only master
docbook/gnc-docbook.dtd
Update <!ENTITYs vers-unstable … series-stable.

GnuCash Wiki

This is now done by templates, see Release_Process#Update_Release_Version.

Website

New Main Version only
Create a new directory for the documentation in the website repo:
mkdir v${MainVersion}
git add v${MainVersion}

Checkout release branch

  • Determine which branch to do the release from:
    • If you want to release a new maintenance release on the current stable series (like 2.6.1, 2.6.2,…) then choose maint
    • If you want to release a new maintenance release on an older stable series (like 2.4.16 if 2.6.x is the current stable series) then choose maint-X.Y
    • If you are about to release a development snapshot (like 2.7.0, 2.7.1,…), choose master
  • Clone gnucash-docs if you don't already have one:
    git clone ssh://code.gnucash.org/gnucash-docs
    
  • Check out the branch you want and make sure that it's up-to-date:
    cd gnucash-docs
    git checkout <branch>
    git pull --rebase
    
If you are about to release from master you should verify that master is a superset of maint. You can do this by running:
git log master..maint
This command should not list any commits. If it does, checkout master and merge maint into it:
git checkout master
git merge maint
Note
The same check should be performed when releasing from maint and there is an older maint-X.Y branch on which commits still happen.

Checks and Updates

docbook/gnc-docbookx.dtd
Update <!ENTITYs manrevision and date.
  • In each copy of gnucash-help.xml and gnucash-guide.xml, update the document history.
  • Update the copyright - the year might change.
  • Check if Authors, Maintainers and Translators from main documents are in sync with
    • the related OMF files (has someone expirience with existing tools for this task?) and
    • AUTHORS
  • Check if gnucash/DOCUMENTERS on both development and stable branches is in sync with gnucash-docs/AUTHORS.
  • Update the version number
    of the [AC_INIT] macro in configure.ac and
    in project of CMakeLists.txt.
  • Update NEWS by running ../gnucash/util/git-release-notes.pl > release.news and copying over the changes, reformatting appropriately.
  • Update the ChangeLog:
    git log --format="%ad %aN %n%n%x09* %s%d%n" --date=short <previous release tag>.. > ChangeLogNew
    mv ChangeLog ChangeLogOld
    cat ChangeLogNew ChangeLogOld > ChangeLog
    rm ChangeLogNew
    rm ChangeLogOld
    
  • Commit this change as "Release X.X.X"

Git

  • Verify that the chosen branch can build a distribution tarball, compile, and test it satisfactorily:
    mkdir build && cd build
    cmake ..
    make distcheck
    
Fix any errors this step may turn up, commit and check again.
  • Tag the release and push:
    git tag -am "Release 3.4" 3.4
    git push --tags origin <branch>
    
N.B. If after pushing the tag you discover a problem, fix the problem and tag the new commit with a lower-case letter subscript, e.g.
git -tag -am "Re-tag of release 3.4" 3.4a

Source tarballs

  • After the tag has propagated, clone your repo to make sure that no stray changes are put in the tarball. For example:
    cd ..
    rm -rf gnucash-docs-release 
    git clone gnucash-docs -b 2.6 gnucash-docs-release
    
  • Inside gnucash-docs-release, run
    mkdir build && cd build
    cmake ..
    make distcheck
    

Note that the build is done in a subdirectory here. This is not strictly necessary, but it will simplify some of the future steps in the documentation release process.

The above commands should generate a gzip compressed tarball in the build directory. (Using "make distcheck" instead of only "make dist" does not only create the tarball, but also runs a complete compilation run on the created tarball so that missing files are discovered immediately.) N.B. If a retag was necessary be sure to modify the tarball name to match so that it the automatic build scripts can find it.

Other documentation formats

Next to source tarballs, GnuCash also offers the documentation in several other formats for on-line or off-line reading. Currently these formats are html, pdf, epub and mobi.

Building these requires the Apache FOP (XML Formatting-objects Processor) for PDF and Calibre for mobi ebooks.

  • In the same build directory we created in the previous step, run
    cmake --with-mobi ..
    make html pdf epub mobi
    

This should generate the various alternative formats in subdirectories per document (guide or help) and per language (like C, de, it and so on).

Sourceforge file uploads

The tarball generated above should be uploaded to Source Forge.

  • Log in on the [Source Forge GnuCash website]
  • Go to the Project Admin -> File Manager section
  • Create a new directory for the release under gnucash-docs
  • Upload the file created above to this directory.

Git housekeeping after a release

If any changes were committed during the release steps above, merge these upwards to the other upstream branches. For example if you committed something to maint, merge maint into master:
git checkout master
git merge maint

Expect a merge conflict here for the changed version number. This is normal and the conflict should be resolved by keeping the version number in master. There may be other merge conflicts. Evaluate them and fix them accordingly.

If the release was from an older maint-X.Y branch, merge these changes into maint and then merge maint into master. Expect the same version number conflict during the merges.

The first command creates a maintenance branch for the old stable release series. The subsequent commands move maint to where master is now. If the latter command fails there are commits on the maint branch that didn't get merged into master. This should not happen if the earlier steps were followed to verify master is a superset of maint.

GnuCash Website

Uploading the new documentation versions

The additional documentation formats have to be uploaded to the gnucash website. The website is also managed in git, so to get the documentation in there, the current website sources have to be checked out:

  • Move one level up from the gnucash-docs-release directory created above
    git clone ssh://code.gnucash.org/gnucash-htdocs-docs
    

You should now have the gnucash-docs-release and gnucash-htdocs-docs directories next to each other. Inside the htdocs-docs directory you will find a subdirectory docs and in there a subdirectory per major release (v1.8, v2.0, v2.2,…). Note that each version directory starts with a lowercase "v" (from "version")

Next, we'll copy all of the alternative documentation formats into the version directory. The most efficient way is by using rsync. These commands accomplish this:
base="$PWD/gnucash-htdocs-docs/v2.6"
(cd gnucash-docs-release/build/guide; for i in C de it ja pt; do rsync -av --delete $i/gnucash-guide{,.pdf,.epub,.mobi} $base/$i/;done)
(cd gnucash-docs-release/build/help; for i in C de it pt; do rsync -av --delete $i/gnucash-help{,.pdf,.epub,.mobi} $base/$i/;done)
You should find in the gnucash-htdocs-docs directory a shell script named copy-files.sh which does the rsync for you:
./copy-files.sh /path/to/build_dir v2.6

N.B.: The path must be absolute for it to work correctly.

Note that the commands should be run from the parent directory of gnucash-docs-release and gnucash-htdocs, and the parentheses are important.

If that worked well, you can now go into the gnucash-htdocs-docs directory and use git add to add new files and git rm to remove deleted files from the repository (if any):
cd gnucash-htdocs-docs
git status
# This will show a list of new/changed/deleted files.
git add v2.6
git rm [deleted files]…
git commit -m "Add documentation version 2.6.2 to the GnuCash website"
git push origin <branch>