Merge branch 'develop' into feature/build-container #11
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Push JEDI Container | |
| on: | |
| push: | |
| branches: [feature/build-container] | |
| schedule: | |
| # Runs at 19:00 UTC every Saturday | |
| - cron: '0 19 * * 6' | |
| workflow_dispatch: # Allows manual triggering | |
| concurrency: | |
| group: ${{ github.workflow }} | |
| cancel-in-progress: false | |
| env: | |
| REGISTRY: ghcr.io | |
| BASE_IMAGE: jcsda/docker-gnu-openmpi-dev:1.9 | |
| INSTALL_PREFIX: /opt/jedi | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Free disk space | |
| run: | | |
| sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc | |
| sudo docker image prune --all --force | |
| df -h | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Initialize required submodules | |
| run: | | |
| git submodule update --init --recursive \ | |
| sorc/jedicmake \ | |
| sorc/oops \ | |
| sorc/vader \ | |
| sorc/gsibec \ | |
| sorc/saber \ | |
| sorc/ioda \ | |
| sorc/ufo \ | |
| sorc/crtm \ | |
| sorc/bufr-query \ | |
| sorc/jcb | |
| - name: Temporary Patch oops_src_files for NormGradient.h | |
| run: | | |
| awk '/oops\/interface\/VariableChange.h/ { print; print " oops/interface/NormGradient.h"; next } 1' sorc/oops/src/CMakeLists.txt > sorc/oops/src/CMakeLists.txt.tmp | |
| mv sorc/oops/src/CMakeLists.txt.tmp sorc/oops/src/CMakeLists.txt | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Generate image metadata | |
| id: meta | |
| run: | | |
| IMAGE_NAME=$(echo "${{ env.REGISTRY }}/${{ github.repository }}" | tr '[:upper:]' '[:lower:]') | |
| DATE_TAG=$(date +'%Y%m%d') | |
| SHA_TAG=$(echo "${{ github.sha }}" | cut -c1-7) | |
| echo "image=${IMAGE_NAME}" >> $GITHUB_OUTPUT | |
| echo "date_tag=${DATE_TAG}" >> $GITHUB_OUTPUT | |
| echo "sha_tag=${SHA_TAG}" >> $GITHUB_OUTPUT | |
| - name: Build JEDI libraries in container | |
| run: | | |
| docker run --name jedi-build \ | |
| -v ${{ github.workspace }}:/src \ | |
| ${{ env.BASE_IMAGE }} \ | |
| bash -euo pipefail -c " | |
| source /opt/spack-environment/activate.sh | |
| export jedi_cmake_ROOT=/opt/view | |
| mkdir -p /build && cd /build | |
| ecbuild \ | |
| -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_PREFIX }} \ | |
| -DBUILD_JEDI=ON \ | |
| -DBUILD_GDAS=OFF \ | |
| -DBUILD_SOCA=OFF \ | |
| -DBUILD_GSIBEC=ON \ | |
| -DBUILD_TESTING=OFF \ | |
| -DCLONE_JCSDADATA=OFF \ | |
| /src/bundle | |
| make -j\$(nproc) install | |
| rm -rf /build | |
| " | |
| - name: Commit and tag container image | |
| run: | | |
| docker commit \ | |
| --change 'CMD ["/bin/bash"]' \ | |
| --change 'ENV JEDI_INSTALL_PREFIX=${{ env.INSTALL_PREFIX }}' \ | |
| --change 'ENV CMAKE_PREFIX_PATH=${{ env.INSTALL_PREFIX }}:/opt/view' \ | |
| --change 'ENV PATH=${{ env.INSTALL_PREFIX }}/bin:/opt/view/bin:$PATH' \ | |
| --change 'ENV LD_LIBRARY_PATH=${{ env.INSTALL_PREFIX }}/lib:/opt/view/lib:$LD_LIBRARY_PATH' \ | |
| --change 'ENV BASH_ENV=/opt/spack-environment/activate.sh' \ | |
| jedi-build ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.date_tag }} | |
| docker tag ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.date_tag }} \ | |
| ${{ steps.meta.outputs.image }}:latest | |
| docker tag ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.date_tag }} \ | |
| ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.sha_tag }} | |
| - name: Push container image | |
| run: | | |
| docker push ${{ steps.meta.outputs.image }}:latest | |
| docker push ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.date_tag }} | |
| docker push ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.sha_tag }} |