diff --git a/.github/workflows/Intel.yml b/.github/workflows/Intel.yml index 0e303c9d..6c3495e6 100644 --- a/.github/workflows/Intel.yml +++ b/.github/workflows/Intel.yml @@ -1,16 +1,16 @@ +# This is a GitHub actions workflow for the NCEPLIBS-grib_util project. +# +# This workflow builds with the intel compiler. +# +# Ed Hartnett 1/19/23 name: Intel on: push: branches: - develop - paths-ignore: - - README.md pull_request: branches: - develop - paths-ignore: - - README.md - # Use custom shell with -l so .bash_profile is sourced which loads intel/oneapi/setvars.sh # without having to do it in manually every step diff --git a/.github/workflows/Linux_external.yml b/.github/workflows/Linux_external.yml new file mode 100644 index 00000000..960ec74e --- /dev/null +++ b/.github/workflows/Linux_external.yml @@ -0,0 +1,204 @@ +# This is a GitHub actions workflow for the NCEPLIBS-grib_util project. +# +# This workflow builds on Linux with latest versions of NCEPLIBS and +# different versions jasper. +# +# Ed Hartnett 1/19/23 +name: Linux_external +on: + push: + branches: + - develop + pull_request: + branches: + - develop + +jobs: + Linux_external: + runs-on: ubuntu-latest + env: + FC: gfortran-11 + CC: gcc-11 + strategy: + matrix: + g2-version: [develop, v3.4.x] + bacio-version: [2.5.0] + jasper-version: [2.0.33, 3.0.5, 4.0.0] + w3emc-version: [2.9.3] + + steps: + - name: install-dependencies + run: | + sudo apt-get update &> /dev/null + sudo apt-get install libpng-dev libjpeg-dev + + - name: cache-jasper + id: cache-jasper + uses: actions/cache@v2 + with: + path: ~/jasper + key: jasper-Linux_versions-${{ matrix.jasper-version }} + + - name: checkout-jasper + if: steps.cache-jasper.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: jasper-software/jasper + path: jasper + ref: version-${{ matrix.jasper-version }} + + - name: build-jasper + if: steps.cache-jasper.outputs.cache-hit != 'true' + run: | + cd jasper + mkdir b && cd b + cmake .. -DCMAKE_INSTALL_PREFIX=~/jasper + make -j2 + make install + + - name: cache-bacio + id: cache-bacio + uses: actions/cache@v2 + with: + path: ~/bacio + key: bacio-${{ runner.os }}-v${{ matrix.bacio-version }} + + - name: checkout-bacio + if: steps.cache-bacio.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-bacio + path: bacio + ref: v${{ matrix.bacio-version }} + + - name: build-bacio + if: steps.cache-bacio.outputs.cache-hit != 'true' + run: | + cd bacio + mkdir build && cd build + cmake .. -DCMAKE_INSTALL_PREFIX=~/bacio + make -j2 + make install + + - name: cache-sp + id: cache-sp + uses: actions/cache@v2 + with: + path: ~/sp + key: sp-${{ runner.os }}-2.3.3-1 + + - name: checkout-sp + if: steps.cache-sp.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-sp + path: sp + ref: v2.3.3 + + - name: build-sp + if: steps.cache-sp.outputs.cache-hit != 'true' + run: | + cd sp + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=~/sp + make -j2 + make install + + - name: cache-w3emc + id: cache-w3emc + uses: actions/cache@v2 + with: + path: ~/w3emc + key: w3emc-${{ runner.os }}-${{ matrix.w3emc-version }}-bacio-${{ matrix.bacio-version }} + + - name: checkout-w3emc + if: steps.cache-w3emc.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-w3emc + path: w3emc + ref: v${{ matrix.w3emc-version }} + + - name: build-w3emc + if: steps.cache-w3emc.outputs.cache-hit != 'true' + run: | + cd w3emc + mkdir build + cd build + cmake .. -DCMAKE_PREFIX_PATH=~/bacio -DCMAKE_INSTALL_PREFIX=~/w3emc + make -j2 + make install + + - name: cache-ip + id: cache-ip + uses: actions/cache@v2 + with: + path: ~/ip + key: ip-${{ runner.os }}-3.3.3 + + - name: checkout-ip + if: steps.cache-ip.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-ip + path: ip + ref: v3.3.3 + + - name: build-ip + if: steps.cache-ip.outputs.cache-hit != 'true' + run: | + cd ip + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=~/ip -DCMAKE_PREFIX_PATH=~/sp + make -j2 + make install + + - name: checkout-g2c + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-g2c + path: g2c + ref: develop + + - name: build-g2c + run: | + cd g2c + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=~/g2c -DCMAKE_PREFIX_PATH="~/jasper" .. + make -j2 + make install + + - name: checkout-g2 + if: steps.cache-g2.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: NOAA-EMC/NCEPLIBS-g2 + path: g2 + ref: ${{ matrix.g2-version }} + + - name: build-g2 + run: | + cd g2 + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=~/g2 -DCMAKE_PREFIX_PATH="~/bacio;~/jasper;~/w3emc;~/g2c" .. + make -j2 + make install + + - name: checkout-grib_utils + uses: actions/checkout@v2 + with: + path: grib_utils + + - name: build-grib_utils + run: | + cd grib_utils + mkdir build && cd build + export LD_LIBRARY_PATH=/home/runner/jasper/lib + export PATH="~/g2c/bin:$PATH" + cmake -DCMAKE_PREFIX_PATH="~/bacio;~/jasper;~/sp;~/ip;~/w3emc;~/g2;~/g2c" .. + make -j2 VERBOSE=1 + ctest --output-on-failure --rerun-failed --verbose diff --git a/.github/workflows/Linux_versions.yml b/.github/workflows/Linux_versions.yml index e4358957..ac4e35b8 100644 --- a/.github/workflows/Linux_versions.yml +++ b/.github/workflows/Linux_versions.yml @@ -1,15 +1,17 @@ +# This is a GitHub actions workflow for the NCEPLIBS-grib_util project. +# +# This workflow builds on Linux with different versions of dependent +# packages. +# +# Ed Hartnett 1/19/23 name: Linux_versions on: push: branches: - develop - paths-ignore: - - README.md pull_request: branches: - develop - paths-ignore: - - README.md jobs: Linux_versions: diff --git a/.github/workflows/MacOS.yml b/.github/workflows/MacOS.yml index 0de66dd1..8938eb60 100644 --- a/.github/workflows/MacOS.yml +++ b/.github/workflows/MacOS.yml @@ -1,15 +1,16 @@ +# This is a GitHub actions workflow for the NCEPLIBS-grib_util project. +# +# This workflow builds on MacOS. +# +# Ed Hartnett 1/19/23 name: MacOS on: push: branches: - develop - paths-ignore: - - README.md pull_request: branches: - develop - paths-ignore: - - README.md jobs: MacOS: diff --git a/.github/workflows/developer.yml b/.github/workflows/developer.yml index 629ae9d4..7d943c9c 100644 --- a/.github/workflows/developer.yml +++ b/.github/workflows/developer.yml @@ -1,15 +1,18 @@ +# This is a GitHub actions CI workflow for the NCEPLIBS-grib_util +# project. +# +# This workflow tests the build as a developer would do it, with +# address sanitizer and documentation build. +# +# Ed Hartnett 1/9/23 name: developer on: push: branches: - develop - paths-ignore: - - README.md pull_request: branches: - develop - paths-ignore: - - README.md jobs: developer: @@ -34,7 +37,7 @@ jobs: with: repository: jasper-software/jasper path: jasper - ref: version-2.0.33 + ref: version-3.0.5 - name: cache-jasper id: cache-jasper @@ -67,14 +70,23 @@ jobs: make -j2 make install + - name: cache-sp + id: cache-sp + uses: actions/cache@v2 + with: + path: ~/sp + key: sp-developer-${{ runner.os }}-2.3.3 + - name: checkout-sp + if: steps.cache-sp.outputs.cache-hit != 'true' uses: actions/checkout@v2 with: repository: NOAA-EMC/NCEPLIBS-sp path: sp - ref: develop + ref: v2.3.3 - name: build-sp + if: steps.cache-sp.outputs.cache-hit != 'true' run: | cd sp mkdir build @@ -144,6 +156,7 @@ jobs: mkdir build cd build echo $LD_LIBRARY_PATH + export PATH="~/g2c/bin:$PATH" pwd cmake -DCMAKE_INSTALL_PREFIX=~/g2 -DCMAKE_PREFIX_PATH="~/bacio;~/jasper;~/w3emc;~/g2c" .. make -j2 @@ -160,6 +173,7 @@ jobs: mkdir build && cd build ls -l ~/jasper/lib export LD_LIBRARY_PATH=/home/runner/jasper/lib + export PATH="~/g2c/bin:$PATH" cmake -DENABLE_DOCS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="~/bacio;~/jasper;~/sp;~/ip;~/w3emc;~/g2;~/g2c" -DCMAKE_Fortran_FLAGS="-fprofile-arcs -ftest-coverage -O0 -Wall" -DCMAKE_C_FLAGS="-fprofile-arcs -ftest-coverage -O0 -Wall" .. make -j2 VERBOSE=1 ctest --output-on-failure --rerun-failed --verbose diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d3e9d26..2728a439 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,16 @@ find_package(w3emc 2.9.2 REQUIRED) find_package(g2 3.4.0 REQUIRED) if (g2_VERSION GREATER_EQUAL 3.5.0) find_package(g2c 1.7.0 REQUIRED) +else() + find_package(g2c 1.7.0) +endif() + +# See if the g2c_compare program is available. +find_program(G2C_COMPARE g2c_compare) +if (G2C_COMPARE) + message(STATUS "g2c_compare found: ${G2C_COMPARE}") +else() + message(STATUS "g2c_compare not found.") endif() # The name of the bacio library changed with the 2.5.0 release. The diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8bc75289..0f3363e5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -71,11 +71,16 @@ gu_copy_test_data(ref_gdaswave.t00z.wcoast.0p16.f000_2.grib2.idx) # Run these shell tests. gu_test(run_cnvgrib_tests) gu_test(run_copygb_tests) -gu_test(run_copygb2_tests) gu_test(run_degrib2_tests) gu_test(run_grbindex_tests) gu_test(run_grb2index_tests) +# This test depends on the g2c_compare utility, which may not be +# present. +if (G2C_COMPARE) + gu_test(run_copygb2_tests) +endif() + # Does the user want to get extra test files from the FTP site, and # run extra tests on them? if(FTP_TEST_FILES) diff --git a/tests/run_copygb2_tests.sh b/tests/run_copygb2_tests.sh index b15635a2..b94397d8 100755 --- a/tests/run_copygb2_tests.sh +++ b/tests/run_copygb2_tests.sh @@ -10,12 +10,8 @@ echo "*** Running copygb2 test" # Copy GRIB2 file. ../src/copygb2/copygb2 -x data/ref_gdaswave.t00z.wcoast.0p16.f000.grib2 test_gdaswave_2.grib2 -# Create an index of the copied file. -../src/grb2index/grb2index test_gdaswave_2.grib2 test_gdaswave_2.idx - -# Check against expected output. First 120 bytes contain differences, -# so ignore them. -cmp -i 120 test_gdaswave_2.idx data/ref_gdaswave_2.idx +# Are the files the same? +g2c_compare -v data/ref_gdaswave.t00z.wcoast.0p16.f000.grib2 test_gdaswave_2.grib2 echo "*** SUCCESS!" exit 0