Project

General

Profile

Making a TRACE release package

Introduction

TRACE has been through several iterations of its build process, from being a pull-only product (do_pull in buildFW buildcfg files) to being an external product (do_build), and finally is a CET-style package (cet_build). These instructions pertain to the TRACE v3_06_00+, or the cet_build versions. Package release notes are at Release_Notes.

The TRACE repositories

TRACE currently has three repos:
  • cdcvs.fnal.gov/cvs/projects/trace: The original TRACE CVS repository. In use until v3_05_00a - now obsolete.
  • trace-svn: The TRACE SVN respository. This is TRACE's current "main" repository; development is here
  • trace-git: A "release" version of trace, provided for compatibility with buildFW's cet_build

Making a TRACE release

Maintainers of TRACE code should follow this procedure for making a new release of TRACE for any reason (dependent product updates, code updates, etc):

# Name the release (suggested format: vX_YY_ZZ, where X=major, YY=minor, ZZ=sub-minor or patch)
release=<RELEASE VERSION>           # note: 'svn ls ^/tags' will list the tags
                                    # as will: git tag -l --sort creatordate
dot_release=`echo ${release:-dont_be_null}|sed -e 's/v//g' -e 's/_/./g'`

# Prepare the git repository, using the strategy here: http://goo.gl/kYYTNf
cd /your/working/directory
git clone ssh://p-trace@cdcvs.fnal.gov/cvs/projects/trace-git trace-combined
cd trace-combined
rm -rf * .gitignore .clang-format

# Checkout the HEAD of the TRACE development SVN repository
svn export --force svn+ssh://p-trace@cdcvs.fnal.gov/cvs/projects/trace-svn/trunk .
: OR, if you need to update the release
svn co svn+ssh://p-trace@cdcvs.fnal.gov/cvs/projects/trace-svn/trunk .
# sed -i -e "s/parent TRACE .*/parent TRACE $release/" ups/product_deps # For pre-v3_14_00 releases
sed -i -e "s/TRACE VERSION .*/TRACE VERSION $dot_release)/" CMakeLists.txt # For post-v3_14_00 releases
svn ci -m"TRACE release $release" 
: .svn directory is currently in .gitignore

# Tell GIT about changes made in development
git commit -am"TRACE release $release" 

# Make a GIT tag and push
git tag $release
git push
git push --tags

# Make a SVN tag
svn copy -m"new release $release" \
 svn+ssh://p-trace@cdcvs.fnal.gov/cvs/projects/trace-svn/trunk \
 svn+ssh://p-trace@cdcvs.fnal.gov/cvs/projects/trace-svn/tags/${release:-dont_be_null}
# Newline so that last line of script executes when copy/pasting.

To build your new release, follow the instructions on Building TRACE from source.
If you have to move the tags (git, svn): for git, just add a --force, for svn, first rm (or delete) the tag (need to have a message (ie -m'moving tag'))

This setup is analogous to the gitflow workflow used by other packages. The trace-svn repository is the "develop" branch, while trace-git is the "master" branch. For static releases, the "develop" branch is merged into the "master" branch and tagged with a specific version number. This tag can be updated through forced updates and patch versions made as necessary without merging "develop", but those changes should really be made in both places. Using svn allows trace.h to contain an incremental revision number.