Skip to content

Merge branch 'develop' into feature/build-container #11

Merge branch 'develop' into feature/build-container

Merge branch 'develop' into feature/build-container #11

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 }}