Making a new frozen DAQ release consists of:
- Preparations before performing each candidate/frozen release build, detailed below
- Build/deploy candidate releases during the testing period of a release cycle
- One last build of the release at the end of the testing period
A patch release is built in the same way as a non-patch release, except it doesn't involve candidate releases.
The release configuration package versions are defined by configs/coredaq/coredaq-vX.Y.Z/release.yaml
(core release) and either configs/fddaq/fddaq-vX.Y.Z/release.yaml
or configs/nddaq/nddaq-vX.Y.Z/release.yaml
(detector release). To prepare the release configuration for a new release, it is best to start from (copy) the configuration of the develop release (configs/coredaq/coredaq-develop/release.yaml
and configs/fddaq/fddaq-develop/release.yaml
or configs/nddaq/nddaq-develop/release.yaml
).
The release YAML file contains sections meant to define the versions of packages. In general, the externals
, devtools
, systems
and pymodules
sections will already have versions defined since you copied the YAML files from the develop release. While the develop release builds DUNE DAQ packages from the head of their develop
branches, it uses versioned non-DUNE DAQ packages (e.g., Boost). However, you'll want to add the correct versions for the DUNE DAQ packages, e.g. edit
- name: fddetdataformats
version: "develop"
commit: null
to
- name: fddetdataformats
version: v1.0.2
commit: null
...where the commit
field will be automatically calculated by the make-release-repo.py
script run during the GitHub Actions which build releases.
In addition to the release.yaml
file, there also needs to be a dbt-build-order.cmake
file in the configs/fddaq-vX.Y.Z/
or configs/nddaq-vX.Y.Z/
directory you created. Copy it from the corresponding fddaq-develop
/nddaq-develop
subdirectory. Update this file when there's a package being added/removed, or if the dependency tree changed and a package needs to be built earlier.
It's worth doing a couple of checks before starting any test builds. These checks include:
- Check version tags match with the version numbers listed in
CMakeLists.txt
; The scriptscripts/checkout-daq-package.py
in this repo can help here.
python3 scripts/checkout-daq-package.py -i <path-to-release-config-yaml> -a -c -o $( mktemp -d )
will checkout all the DAQ packages used in the release into a randomly-named directory and verify if the version tags match what's in CMakeLists.txt
- (Optional) Check if developers got their dependencies in
CMakeLists.txt
to match those incmake/<pkgname>Config.cmake.in
files; see this section of the daq-cmake instructions for more
- Once the release configuration is ready, one can start the CI build for candidate releases. Go to the "Actions" tab of
daq-release
repo on GitHub. From the list of workflows on the left, select either "Alma9 build v5 candidate release" (for a develop release) or "Alma9 build v4 production candidate release" (for a production release), then click the "run workflow" button. A drop-down menu will show up. Put in the version of the base release in thevX.Y.Z
format, the version of the detector release, the detector type for the release (fd
ornd
) and the candidate release number (start with 1, count up with later candidate releases). Click "Run workflow" to start the build. - Once the build is completed successfully, verify if the same version tags shown in the GitHub Action log match those in the tag collector spreadsheet
- To publish the candidate release to cvmfs:
- Log in to
oasiscfs05.fnal.gov
ascvmfsdunedaqdev
- Get the
publish_release_to_cvmfs.sh
script (git clone
this repo or usecurl
, e.g.) - Run the script without arguments for instructions; in a nutshell, it will publish the most recent release of a given specification (e.g., the most recent Alma9 near detector candidate build)
- Run it with the desired specifications (e.g.
publish_release_to_cvmfs.sh candidate nd alma9 develop
) - After running the script, the release will take ~20 minutes before it appears on cvmfs
- Log in to
- After the candidate release is deployed and available on cvmfs, do the following simple tests:
- Set up a work area based on the candidate release
- If it's a far detector release, clone and build
daqsystemtest
used in this release and runminimal_system_quick_test.py
in itsintegtest
sub-directory - The above tests should be run on at least one NP04 DAQ server, and one Fermilab server
- Repeat all the above steps with "SL7" replacing "Alma9".
- The release will be cut at the end of the testing period. The build of the final frozen release can be done in a similar way as the candidate releases. Choose "Build frozen release" in the workflows list, and trigger the build by specifying release name used in
configs
and the number (starts from 1, increment it if second deployment to cvmfs is needed). - Deploying the frozen release to cvmfs is the same as for a candidate release except you want to log in to
oasiscfs05.fnal.gov
ascvmfsdunedaq
instead ofcvmfsdunedaqdev
and of course you'll want to passfrozen
rather thancandidate
to the publishing script - Do similar tests as shown in the section above for candidate releases
- If there is a new version of
daq-buildtools
for the release, it will need to be deployed to cvmfs too. Otherwise, creating a symbolic link in cvmfs to the latest tagged version will be sufficient, e.g. thatsetup_dbt fddaq-vX.Y.Z
would give you the daq-buildtools used during the release period offddaq-vX.Y.Z
. How to do this is described in the documentation on cvmfs. - After the frozen release is rolled out, there will be remaining prep release and patch branches used in the production of the release. The software coordination team and the release coordinator should get in touch to establish if anything should be kept out of the merge to
develop
. The software coordination team will do the merge across all relevant repositories. Developers should handle any partial merge (cherry-pick). - Also make sure that if the version of daq-cmake and/or any Python packages was bumped for the release, that these version increments make it into the nightly for the relevant development line.
- The last step of making a frozen release is to create release tags for all packages used by the release. To do so, use the script
scripts/create-release-tag.py
:- make sure
daq-release
is tagged for the new release, and the version is updated in the release YAML file. It will be tagged by thecreate-release-tag.py
script; - Make sure you're able to push changes to repos without needing to enter your password;
gh auth login
should set you up to be able to do this if you have a GitHub Personal Access Token with the appropriate permissions scripts/create-release-tag.py -h
to show the usage of the script;scripts/create-release-tag.py -a -t <release-tag> -i <release YAML file>
to tag all packages used by the release; do this both for the core release and the detector release, using the correct release tag for each of the two categories-d
to delete release tags if found,-f
to recreate release tags.
- make sure