Skip to content

Commit

Permalink
add GitHub Actions workflow that is used to create Docker images that…
Browse files Browse the repository at this point in the history
… hold the conda environment used for the automated tests -- adding this to the default main_v5.1 branch so that it will become available to run for other branches as a workflow_dispatch workflow
  • Loading branch information
georgemccabe committed Sep 8, 2023
1 parent 0dcc1ac commit 1f081dd
Show file tree
Hide file tree
Showing 3 changed files with 311 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .github/jobs/build_conda_image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
DOCKER_ENV_DIR=${GITHUB_WORKSPACE}/internal/scripts/docker_env
cmd="docker build \
-t dtcenter/metplus-envs:${ENV_NAME}.${METPLUS_ENV_VERSION} \
--build-arg METPLUS_ENV_VERSION \
--build-arg BASE_ENV \
--build-arg ENV_NAME \
-f ${DOCKER_ENV_DIR}/${DOCKERFILE} ${DOCKER_ENV_DIR}"
echo $cmd
$cmd
4 changes: 4 additions & 0 deletions .github/jobs/push_conda_image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
cmd="docker push dtcenter/metplus-envs:${ENV_NAME}.${METPLUS_ENV_VERSION}"
echo $cmd
$cmd
298 changes: 298 additions & 0 deletions .github/workflows/create_conda_envs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
name: Create Conda Environments in Docker

on:
workflow_dispatch:
inputs:
subset:
description: 'Comma-separated list of environments to skip. Leave blank to build all.'
required: false
default: ''

env:
METPLUS_ENV_VERSION: v5.1
DOCKERFILE: Dockerfile
BASE_ENV: metplus_base
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}

jobs:
check:
name: Check inputs to determine what to run
runs-on: ubuntu-latest
steps:
- id: parse_list
run: |
run_str="${{ github.event.inputs.subset }}"
if [ "$run_str" == "" ]; then echo "no_skip=true" >> $GITHUB_OUTPUT; exit 0; fi
echo "no_skip=false" >> $GITHUB_OUTPUT
IFS=', ' read -r -a arr <<< "$run_str"
JSON="["
for item in ${arr[@]}; do JSON="$JSON\"$item\","; done
if [[ $JSON == *, ]]; then JSON="${JSON%?}"; fi
JSON="$JSON]"
echo "run_list=$( echo "$JSON" )" >> $GITHUB_OUTPUT
echo $JSON
outputs:
no_skip: ${{ steps.parse_list.outputs.no_skip }}
run_list: ${{ steps.parse_list.outputs.run_list }}

conda:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'conda'))
runs-on: ubuntu-latest
needs: [check]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.conda
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

metplus_base:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'metplus_base'))
runs-on: ubuntu-latest
needs: [check,conda]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.metplus_base
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

py_embed_base:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'py_embed_base'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.py_embed_base
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

h5py:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'h5py'))
runs-on: ubuntu-latest
needs: [check,py_embed_base]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: py_embed_base
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

metdataio:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'metdataio'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

pygrib:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'pygrib'))
runs-on: ubuntu-latest
needs: [check,py_embed_base]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: py_embed_base
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

cfgrib:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'cfgrib'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

netcdf4:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'netcdf4'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

xesmf:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'xesmf'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

spacetime:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'spacetime'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

metplotpy:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'metplotpy'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.cartopy
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

weatherregime:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'weatherregime'))
runs-on: ubuntu-latest
needs: [check,metplotpy]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: metplotpy
DOCKERFILE: Dockerfile.cartopy
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

cycloneplotter:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'cycloneplotter'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.cartopy
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

icecover:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'icecover'))
runs-on: ubuntu-latest
needs: [check,py_embed_base]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: py_embed_base
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

gempak:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'gempak'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.gempak_env
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

gfdl-tracker:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'gfdl-tracker'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
DOCKERFILE: Dockerfile.gfdl-tracker
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

geovista:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'geovista'))
runs-on: ubuntu-latest
needs: [check,metplus_base]
env:
ENV_NAME: ${{ github.job }}
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

pandac:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'pandac'))
runs-on: ubuntu-latest
needs: [check,metplotpy]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: metplotpy
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

diff:
if: |
always() && (needs.check.outputs.no_skip == 'true' ||
contains(fromJSON(needs.check.outputs.run_list), 'diff'))
runs-on: ubuntu-latest
needs: [check,netcdf4]
env:
ENV_NAME: ${{ github.job }}
BASE_ENV: netcdf4
steps:
- uses: actions/checkout@v4
- run: .github/jobs/build_conda_image.sh
- run: .github/jobs/push_conda_image.sh

0 comments on commit 1f081dd

Please sign in to comment.