This project contains the dockerfiles for two images, docker.unidata.ucar.edu/nctests
and docker.unidata.ucar.edu/ncabi
. The documentaiton below relates to nctests
. Documentation for ncabi
is forthcoming.
This docker image is used to perform spot-tests on Unidata netCDF
packages. It can be used to test code repositories remotely or locally. See Examples for various command-line recipes for using this package.
When this docker container is run, it will check out the following packages from the Unidata github site:
- netcdf-c
- netcdf-fortran
- netcdf-cxx4
- netcdf-java
- netcdf4-python
- NetCDF Operators (NCO)
Each package will be built and tested. This way, we can see if any changes in netcdf-c
break anything which depends on it (netcdf-fortran
and netcdf-cxx4
).
The docker containers will let you use the following compilers:
gcc
andg++
clang
andclang++
mpicc
(frommpich
package)
These are controlled via the USE_CC
and USE_CXX
environmental variables.
The following containers/systems are available:
- Ubuntu (64-bit)
- serial (for serial tests)
- parallel (for parallel tests)
These are specified by changing the USE_CC
environmental variable, gcc
by default.
From the NCO website:
The NCO toolkit manipulates and analyzes data stored in netCDF-accessible formats, including DAP, HDF4, and HDF5. It exploits the geophysical expressivity of many CF (Climate & Forecast) metadata conventions, the flexible description of physical dimensions translated by UDUnits, the network transparency of OPeNDAP, the storage features (e.g., compression, chunking, groups) of HDF (the Hierarchical Data Format), and many powerful mathematical and statistical algorithms of GSL (the GNU Scientific Library). NCO is fast, powerful, and free.
NCO integration adds additional regression testing.
You can specify an alternative branch for netcdf-c
than main
using the following syntax.
$ docker run -e CBRANCH="branch name" docker.unidata.ucar.edu/nctests
It is possible to use local directories instead of pulling from github. You do this by mounting your local git directory to the root of the docker image filesystem, e.g.
$ docker run -v $(pwd)/netcdf-c:/netcdf-c docker.unidata.ucar.edu/nctests
When the image runs, it will check for the existence of /netcdf-c
, /netcdf-fortran
, /netcdf-cxx4
and /netcdf4-python
. If they exist, the image will clone from these instead of pulling from GitHub.
Note: Because it is cloning from a 'local' directory, it is important that you have that local directory already on the branch you want to analyze. You will still need to set the appropriate Environmental Variable, however, if you want the build to be properly labelled for the CDash Dashboard.
The following environmental variables can be used to control the behavior at runtime.
CMD
- Run an alternative command. Options for this arehelp
.USEDASH
- Set to any non-TRUE
value to disable using the remote dashboard.HELP
- If non-zero, thehelp
information will be printed to standard out.
CBRANCH
- Git branch fornetcdf-c
FBRANCH
- Git branch fornetcdf-fortran
CXXBRANCH
- Git branch fornetcdf-cxx4
JAVABRANCH
- Git branch fornetcdf-java
- Default:
maint-5.x
JDKVER
- Version ofOpenJDK
to run for tests. Default:8
- Default:
PBRANCH
- Git branch fornetcdf4-python
NCOBRANCH
- Git branch forNCO
.- Default:
4.5.4
.
- Default:
H5VER
- Set to the version you want to use. Default:1.14.3
- Introduced in version
1.9.3
. - If non-empty, the specified HDF5 version will be downloaded, compiled and installed at runtime instead of using the pre-built version.
- Example: -e HDF5SRC="1.14.3"
- Introduced in version
USE_CC
-C
language compiler to use.gcc
- Defaultclang
USE_CXX
-C++
language compiler to use.g++
- Defaultclang++
Note that these options are currently only honored by the
serial
andserial32
images. How they function with the parallel images is TBD.
COPTS
- CMake options fornetcdf-c
FOPTS
- CMake options fornetcdf-fortran
CXXOPTS
- CMake options fornetcdf-cxx4
AC_COPTS
- Autoconf options fornetcdf-c
AC_FOPTS
- Autoconf options fornetcdf-fortran
AC_CXXOPTS
- Autoconf options fornetcdf-cxx4
RUNC
- Set toOFF
,FALSE
, anything butTRUE
, to disable runningnetcdf-c
tests. NetCDF-C is still downloaded, compiled and installed.RUNF
- Set toOFF
,FALSE
, anything butTRUE
, to disable runningnetcdf-fortran
tests.RUNCXX
- Set toOFF
,FALSE
, anything butTRUE
, to disable runningnetcdf-cxx4
tests.RUNJAVA
- Set to Non-TRUE
to disable.RUNP
- Set toOFF
,FALSE
, anything butTRUE
, to disable runningnetcdf4-python
tests.RUNNCO
- Set toOFF
,FALSE
, anything butTRUE
, to disable runningNCO
tests.
CREPS
- Default 1. How many times to repeat thenetcdf-c
build and tests.FREPS
- Default 1. How many times to repeat thenetcdf-fortran
build and tests.CXXREPS
- Default 1. How many times to repeat thenetcdf-cxx4
build and tests.PREPS
- Default 1. How many times to repeat thenetcdf4-python
build and tests.NCOREPS
- Default 1. How many times to repeat theNCO
build and tests.CTEST_REPEAT
- Default 3. How many times actest
should repeat until success.
Note that
USECMAKE
andUSEAC
may be used concurrently and, when coupled withCREPS
and other loop control options, we can see if the different build systems interfere with each other.
USE_BUILDSYSTEM
- 'Defaults to 'cmake'. Options are 'cmake', 'autotools', 'both'.DEPRECATEDUSECMAKE
- Default toTRUE
. WhenTRUE
, runcmake
builds.DEPRECATEDUSEAC
- Default toFALSE
. WhenTRUE
, run in-sourceautoconf
-based builds.DISTCHECK
- Default toFALSE
. RequiresUSEAC
to beTRUE
. Runsmake distcheck
aftermake check
.
NCOMAKETEST
- ADVANCED Default toFALSE
. WhenTRUE
, runmake test
for theNCO
package and parse the output forUnidata
-related output.TESTPROC
- ADVANCED Default to1
. Defines the number of processors to use when building and testing.TESTPROC_FORTRAN
- ADVANCED Default to1
. Defines the number of processors to use when building and testing.USE_LOCAL_CP
- ADVANCED Default toFALSE
. Usescp
instead ofgit clone
. This is required in particular circumstances and when a test image uses an older version ofgit
that will not work with shallow copies.ENABLE_C_MEMCHECK
- ADVANCED NetCDF-C only Turns on the following options when running the C tests:-fsanitize=address -fno-omit-frame-pointer
FORTRAN_SERIAL_BUILD
- ADVANCED NetCDF-Fortran only ForcesTESTPROC
to1
for netCDF-Fortran.
For these examples, we will assume you are working on a command line, and located in the root
netcdf-c
directory, such that$(pwd)
resolves to /location/to/root/netcdf/directory.
The following command line options will be used repeatedly, so I will explain them here. For a full explanation of docker command line arguments, see https://docs.docker.com/reference/commandline/cli/.
--rm
: clean up the docker image after it exits.-it
: Run as an interactive shell. This allows us toctrl-c
a running docker instance.-v
: Mount a local volume to the docker image.-e
: Set an environmental variable.
See the section on environmental variables for a complete list of variables understood by docker.unidata.ucar.edu/nctests
.
This will show you the help file for the docker image.
$ docker run --rm -it -e CMD=help docker.unidata.ucar.edu/nctests
This will put you into the shell for the docker container. Note that any changes you make will not persist once you exit.
$ docker run --rm -it --entrypoint /bin/bash docker.unidata.ucar.edu/nctests
$ docker run --rm -it docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e USE_CC=clang -e USE_CXX=clang++ docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e CBRANCH=working docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e COPTS="-DNETCDF_ENABLE_DAP=OFF" docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e USEDASH=OFF docker.unidata.ucar.edu/nctests
Note that you will not switch branches inside the docker container when running like this; you must make sure your local repository (that you're at the root of, remember?) is on the branch you want to analyze.
$ docker run --rm -it -v $(pwd):/netcdf-c docker.unidata.ucar.edu/nctests
$ docker run --rm -it -v $(pwd):/netcdf-c -e USEDASH=OFF -e RUNF=OFF -e RUNCXX=OFF docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e USE_BUILDSYSTEM=both -e CREPS=2 docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e USE_BUILDSYSTEM=cmake -e USE_CC=mpicc docker.unidata.ucar.edu/nctests
$ docker run --rm -it -e CBRANCH=v4.9.2 -e RUNF=OFF -e CTEST_REPEAT=3 -e RUNJAVA=TRUE -v /path/to/cdmUnitTest:/share/testdata/cdmUnitTest -v ./results:/results docker.unidata.ucar.edu/nctests