Skip to content

Build workflows

Build workflows #7

Workflow file for this run

#
#
#
# This is a file generated by generate-workflows.py - DO NOT EDIT!!
#
#
#
name: downstream-ci
"on":
workflow_call:
inputs:
codecov_upload:
description: Whether to upload code coverage
type: boolean
required: false
atlas:
required: false
type: string
cfgrib:
required: false
type: string
earthkit:
required: false
type: string
earthkit-data:
required: false
type: string
earthkit-geo:
required: false
type: string
earthkit-meteo:
required: false
type: string
earthkit-regrid:
required: false
type: string
eccodes:
required: false
type: string
eccodes-python:
required: false
type: string
ecflow:
required: false
type: string
ecflow-light:
required: false
type: string
eckit:
required: false
type: string
fckit:
required: false
type: string
fdb:
required: false
type: string
infero:
required: false
type: string
metkit:
required: false
type: string
mir:
required: false
type: string
multio:
required: false
type: string
multiurl:
required: false
type: string
odc:
required: false
type: string
pdbufr:
required: false
type: string
plume:
required: false
type: string
pyfdb:
required: false
type: string
pyodc:
required: false
type: string
skinnywms:
required: false
type: string
thermofeel:
required: false
type: string
troika:
required: false
type: string
cascade:
required: false
type: string
skip_matrix_jobs:
description: List of matrix jobs to be skipped.
required: false
type: string
python_qa:
description: Whether to run code QA tasks.
type: boolean
required: false
clang_format:
description: Whether to run clang-format QA.
type: boolean
required: false
clang_format_ignore:
description: A list of paths to be skipped during formatting check.
type: string
required: false
jobs:
setup:
name: setup
runs-on: ubuntu-latest
outputs:
atlas: ${{ steps.prepare-inputs.outputs.atlas }}
atlas_matrix: ${{ steps.setup.outputs.atlas }}
cfgrib: ${{ steps.prepare-inputs.outputs.cfgrib }}
cfgrib_matrix: ${{ steps.setup.outputs.cfgrib }}
earthkit: ${{ steps.prepare-inputs.outputs.earthkit }}
earthkit_matrix: ${{ steps.setup.outputs.earthkit }}
earthkit-data: ${{ steps.prepare-inputs.outputs.earthkit-data }}
earthkit-data_matrix: ${{ steps.setup.outputs.earthkit-data }}
earthkit-geo: ${{ steps.prepare-inputs.outputs.earthkit-geo }}
earthkit-geo_matrix: ${{ steps.setup.outputs.earthkit-geo }}
earthkit-meteo: ${{ steps.prepare-inputs.outputs.earthkit-meteo }}
earthkit-meteo_matrix: ${{ steps.setup.outputs.earthkit-meteo }}
earthkit-regrid: ${{ steps.prepare-inputs.outputs.earthkit-regrid }}
earthkit-regrid_matrix: ${{ steps.setup.outputs.earthkit-regrid }}
eccodes: ${{ steps.prepare-inputs.outputs.eccodes }}
eccodes_matrix: ${{ steps.setup.outputs.eccodes }}
eccodes-python: ${{ steps.prepare-inputs.outputs.eccodes-python }}
eccodes-python_matrix: ${{ steps.setup.outputs.eccodes-python }}
ecflow: ${{ steps.prepare-inputs.outputs.ecflow }}
ecflow_matrix: ${{ steps.setup.outputs.ecflow }}
ecflow-light: ${{ steps.prepare-inputs.outputs.ecflow-light }}
ecflow-light_matrix: ${{ steps.setup.outputs.ecflow-light }}
eckit: ${{ steps.prepare-inputs.outputs.eckit }}
eckit_matrix: ${{ steps.setup.outputs.eckit }}
fckit: ${{ steps.prepare-inputs.outputs.fckit }}
fckit_matrix: ${{ steps.setup.outputs.fckit }}
fdb: ${{ steps.prepare-inputs.outputs.fdb }}
fdb_matrix: ${{ steps.setup.outputs.fdb }}
metkit: ${{ steps.prepare-inputs.outputs.metkit }}
metkit_matrix: ${{ steps.setup.outputs.metkit }}
mir: ${{ steps.prepare-inputs.outputs.mir }}
mir_matrix: ${{ steps.setup.outputs.mir }}
multio: ${{ steps.prepare-inputs.outputs.multio }}
multio_matrix: ${{ steps.setup.outputs.multio }}
multiurl: ${{ steps.prepare-inputs.outputs.multiurl }}
multiurl_matrix: ${{ steps.setup.outputs.multiurl }}
odc: ${{ steps.prepare-inputs.outputs.odc }}
odc_matrix: ${{ steps.setup.outputs.odc }}
pdbufr: ${{ steps.prepare-inputs.outputs.pdbufr }}
pdbufr_matrix: ${{ steps.setup.outputs.pdbufr }}
plume: ${{ steps.prepare-inputs.outputs.plume }}
plume_matrix: ${{ steps.setup.outputs.plume }}
pyfdb: ${{ steps.prepare-inputs.outputs.pyfdb }}
pyfdb_matrix: ${{ steps.setup.outputs.pyfdb }}
pyodc: ${{ steps.prepare-inputs.outputs.pyodc }}
pyodc_matrix: ${{ steps.setup.outputs.pyodc }}
skinnywms: ${{ steps.prepare-inputs.outputs.skinnywms }}
skinnywms_matrix: ${{ steps.setup.outputs.skinnywms }}
thermofeel: ${{ steps.prepare-inputs.outputs.thermofeel }}
thermofeel_matrix: ${{ steps.setup.outputs.thermofeel }}
troika: ${{ steps.prepare-inputs.outputs.troika }}
troika_matrix: ${{ steps.setup.outputs.troika }}
cascade: ${{ steps.prepare-inputs.outputs.cascade }}
cascade_matrix: ${{ steps.setup.outputs.cascade }}
dep_tree: ${{ steps.setup.outputs.build_package_dep_tree }}
trigger_repo: ${{ steps.setup.outputs.trigger_repo }}
py_codecov_platform: ${{ steps.setup.outputs.py_codecov_platform }}
steps:
- name: Prepare inputs
id: prepare-inputs
run: |-
echo atlas="${{ inputs.atlas }}" >> $GITHUB_OUTPUT
echo cfgrib="${{ inputs.cfgrib }}" >> $GITHUB_OUTPUT
echo earthkit="${{ inputs.earthkit }}" >> $GITHUB_OUTPUT
echo earthkit-data="${{ inputs.earthkit-data }}" >> $GITHUB_OUTPUT
echo earthkit-geo="${{ inputs.earthkit-geo }}" >> $GITHUB_OUTPUT
echo earthkit-meteo="${{ inputs.earthkit-meteo }}" >> $GITHUB_OUTPUT
echo earthkit-regrid="${{ inputs.earthkit-regrid }}" >> $GITHUB_OUTPUT
echo eccodes="${{ inputs.eccodes }}" >> $GITHUB_OUTPUT
echo eccodes-python="${{ inputs.eccodes-python }}" >> $GITHUB_OUTPUT
echo ecflow="${{ inputs.ecflow }}" >> $GITHUB_OUTPUT
echo ecflow-light="${{ inputs.ecflow-light }}" >> $GITHUB_OUTPUT
echo eckit="${{ inputs.eckit }}" >> $GITHUB_OUTPUT
echo fckit="${{ inputs.fckit }}" >> $GITHUB_OUTPUT
echo fdb="${{ inputs.fdb }}" >> $GITHUB_OUTPUT
echo metkit="${{ inputs.metkit }}" >> $GITHUB_OUTPUT
echo mir="${{ inputs.mir }}" >> $GITHUB_OUTPUT
echo multio="${{ inputs.multio }}" >> $GITHUB_OUTPUT
echo multiurl="${{ inputs.multiurl }}" >> $GITHUB_OUTPUT
echo odc="${{ inputs.odc }}" >> $GITHUB_OUTPUT
echo pdbufr="${{ inputs.pdbufr }}" >> $GITHUB_OUTPUT
echo plume="${{ inputs.plume }}" >> $GITHUB_OUTPUT
echo pyfdb="${{ inputs.pyfdb }}" >> $GITHUB_OUTPUT
echo pyodc="${{ inputs.pyodc }}" >> $GITHUB_OUTPUT
echo skinnywms="${{ inputs.skinnywms }}" >> $GITHUB_OUTPUT
echo thermofeel="${{ inputs.thermofeel }}" >> $GITHUB_OUTPUT
echo troika="${{ inputs.troika }}" >> $GITHUB_OUTPUT
echo cascade="${{ inputs.cascade }}" >> $GITHUB_OUTPUT
- name: checkout reusable wfs repo
uses: actions/checkout@v4
with:
repository: ecmwf-actions/downstream-ci
ref: main
- name: Run setup script
id: setup
env:
TOKEN: ${{ secrets.GH_REPO_READ_TOKEN }}
CONFIG: |
ecmwf/atlas:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.atlas }}
optional_matrix: null
ecmwf/cfgrib:
path: .github/ci-config.yml
python: true
master_branch: master
develop_branch: master
input: ${{ steps.prepare-inputs.cfgrib }}
optional_matrix: null
ecmwf/earthkit:
path: .github/ci-config.yml
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.earthkit }}
optional_matrix: null
ecmwf/earthkit-data:
path: .github/ci-config.yml
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.earthkit-data }}
optional_matrix: null
ecmwf/earthkit-geo:
path: ''
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.earthkit-geo }}
optional_matrix: null
ecmwf/earthkit-meteo:
path: ''
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.earthkit-meteo }}
optional_matrix: null
ecmwf/earthkit-regrid:
path: ''
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.earthkit-regrid }}
optional_matrix: null
ecmwf/eccodes:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.eccodes }}
optional_matrix: null
ecmwf/eccodes-python:
path: .github/ci-config.yml
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.eccodes-python }}
optional_matrix: null
ecmwf/ecflow:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.ecflow }}
optional_matrix: null
ecmwf/ecflow-light:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.ecflow-light }}
optional_matrix: null
ecmwf/eckit:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.eckit }}
optional_matrix: null
ecmwf/fckit:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.fckit }}
optional_matrix: null
ecmwf/fdb:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.fdb }}
optional_matrix: null
ecmwf/metkit:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.metkit }}
optional_matrix: null
ecmwf/mir:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.mir }}
optional_matrix: null
ecmwf/multio:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.multio }}
optional_matrix: null
ecmwf/multiurl:
path: ''
python: true
master_branch: main
develop_branch: main
input: ${{ steps.prepare-inputs.multiurl }}
optional_matrix: null
ecmwf/odc:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.odc }}
optional_matrix: null
ecmwf/pdbufr:
path: .github/ci-config.yml
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.pdbufr }}
optional_matrix: null
ecmwf/plume:
path: .github/ci-config.yml
python: false
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.plume }}
optional_matrix: null
ecmwf/pyfdb:
path: .github/ci-config.yml
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.pyfdb }}
optional_matrix: null
ecmwf/pyodc:
path: .github/ci-config.yml
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.pyodc }}
optional_matrix: null
ecmwf/skinnywms:
path: ''
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.skinnywms }}
optional_matrix: null
ecmwf/thermofeel:
path: ''
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.thermofeel }}
optional_matrix: null
ecmwf/troika:
path: ''
python: true
master_branch: master
develop_branch: develop
input: ${{ steps.prepare-inputs.troika }}
optional_matrix: null
ecmwf/cascade:
path: ''
python: true
master_branch: main
develop_branch: develop
input: ${{ steps.prepare-inputs.cascade }}
optional_matrix: null
SKIP_MATRIX_JOBS: ${{ inputs.skip_matrix_jobs }}
PYTHON_VERSIONS: |+
- '3.10'
PYTHON_JOBS: |+
[]
MATRIX: |
include:
- compiler: gnu
compiler_cc: gcc
compiler_cxx: g++
compiler_fc: gfortran
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-debian-11
name: gnu@debian-11
os: debian-11
- compiler: gnu-7
compiler_cc: gcc-7
compiler_cxx: g++-7
compiler_fc: gfortran-7
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-centos-7.9
name: [email protected]
os: centos-7.9
- compiler: gnu-8
compiler_cc: gcc-8
compiler_cxx: g++-8
compiler_fc: gfortran-8
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-centos-7.9
name: [email protected]
os: centos-7.9
- compiler: gnu
compiler_cc: gcc
compiler_cxx: g++
compiler_fc: gfortran
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-rocky-8.6
name: [email protected]
os: rocky-8.6
- compiler: clang
compiler_cc: clang
compiler_cxx: clang++
compiler_fc: gfortran
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-rocky-8.6
name: [email protected]
os: rocky-8.6
toolchain_file: /opt/actions-runner/files/toolchain-clang-rocky-8.6.cmake
- compiler: gnu
compiler_cc: gcc
compiler_cxx: g++
compiler_fc: gfortran
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-ubuntu-22.04
name: [email protected]
os: ubuntu-22.04
- compiler: gnu
compiler_cc: gcc
compiler_cxx: g++
compiler_fc: gfortran
env: |
BOOST_ROOT_DIR=/usr
BOOST_INCLUDE_DIR=/usr/include/boost169
BOOST_LIB_DIR=/usr/lib64/boost169
labels:
- self-hosted
- platform-builder-fedora-37
name: gnu@fedora-37
os: fedora-37
name:
- gnu@debian-11
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- gnu@fedora-37
OPTIONAL_MATRIX: |
null
...
run: python setup_downstream_ci.py
python-qa:
name: python-qa
needs:
- setup
if: ${{ inputs.python_qa }}
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
python -m pip install black flake8 isort
- name: Check isort
run: isort --check . --profile black
- name: Check black
run: black --check .
- name: Check flake8
run: flake8 .
clang-format:
name: clang-format
needs:
- setup
if: ${{ inputs.clang_format }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install clang-format
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main
sudo apt update
sudo apt install -y clang-format-16
- name: Run clang-format
shell: bash {0}
run: |-
ignore="./\($(echo "${{ inputs.clang_format_ignore }}" | sed ':a;N;$!ba;s/\n/\\|/g')\)"
echo "Ignore: $ignore"
files=$(find . -not \( -regex $ignore -prune \) -regex ".*\.\(cpp\|hpp\|cc\|cxx\|h\|c\)")
errors=0
if [ ! -e ".clang-format" ]
then
echo "::error::Missing .clang-format file"
exit 1
fi
for file in $files; do
clang-format-16 --dry-run --Werror --style=file --fallback-style=none $file
if [ $? -ne 0 ]; then
((errors++))
fi
done
if [ $errors -ne 0 ]; then
echo "::error::clang-format failed for $errors files"
exit 1
fi
atlas:
name: atlas
needs:
- fckit
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.atlas_matrix && (needs.setup.outputs.fckit || needs.setup.outputs.eckit || needs.setup.outputs.atlas) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.atlas_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.fckit }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
cfgrib:
name: cfgrib
needs:
- eccodes-python
- eccodes
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.cfgrib_matrix && (needs.setup.outputs.eccodes-python || needs.setup.outputs.eccodes || needs.setup.outputs.cfgrib) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.cfgrib_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eccodes }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: ${{ needs.setup.outputs.eccodes-python }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: ci/requirements-tests.in
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
earthkit:
name: earthkit
needs:
- earthkit-data
- cfgrib
- multiurl
- pdbufr
- eccodes-python
- eccodes
- pyodc
- odc
- eckit
- earthkit-geo
- earthkit-meteo
- earthkit-regrid
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.earthkit_matrix && (needs.setup.outputs.earthkit-data || needs.setup.outputs.cfgrib || needs.setup.outputs.multiurl || needs.setup.outputs.pdbufr || needs.setup.outputs.eccodes-python || needs.setup.outputs.eccodes || needs.setup.outputs.pyodc || needs.setup.outputs.odc || needs.setup.outputs.eckit || needs.setup.outputs.earthkit-geo || needs.setup.outputs.earthkit-meteo || needs.setup.outputs.earthkit-regrid || needs.setup.outputs.earthkit) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.earthkit_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.eccodes }}
${{ needs.setup.outputs.odc }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: |-
${{ needs.setup.outputs.earthkit-data }}
${{ needs.setup.outputs.cfgrib }}
${{ needs.setup.outputs.multiurl }}
${{ needs.setup.outputs.pdbufr }}
${{ needs.setup.outputs.eccodes-python }}
${{ needs.setup.outputs.pyodc }}
${{ needs.setup.outputs.earthkit-geo }}
${{ needs.setup.outputs.earthkit-meteo }}
${{ needs.setup.outputs.earthkit-regrid }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
test_cmd:
"_EKD_DIR=$(pwd) && cd .. && python -m pytest ${_EKD_DIR} -vv --cov=. --cov-report=html && cd -
"
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
earthkit-data:
name: earthkit-data
needs:
- cfgrib
- multiurl
- pdbufr
- eccodes-python
- eccodes
- pyodc
- odc
- eckit
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.earthkit-data_matrix && (needs.setup.outputs.cfgrib || needs.setup.outputs.multiurl || needs.setup.outputs.pdbufr || needs.setup.outputs.eccodes-python || needs.setup.outputs.eccodes || needs.setup.outputs.pyodc || needs.setup.outputs.odc || needs.setup.outputs.eckit || needs.setup.outputs.earthkit-data) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.earthkit-data_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.eccodes }}
${{ needs.setup.outputs.odc }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: |-
${{ needs.setup.outputs.cfgrib }}
${{ needs.setup.outputs.multiurl }}
${{ needs.setup.outputs.pdbufr }}
${{ needs.setup.outputs.eccodes-python }}
${{ needs.setup.outputs.pyodc }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
test_cmd: |
python -m pytest -vv -m 'not notebook and not no_cache_init' --cov=. --cov-report=xml
python -m pytest -v -m 'notebook'
python -m pytest --forked -vv -m 'no_cache_init'
python -m coverage report
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
earthkit-geo:
name: earthkit-geo
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.earthkit-geo_matrix && (needs.setup.outputs.earthkit-geo) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.earthkit-geo_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
earthkit-meteo:
name: earthkit-meteo
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.earthkit-meteo_matrix && (needs.setup.outputs.earthkit-meteo) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.earthkit-meteo_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
earthkit-regrid:
name: earthkit-regrid
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.earthkit-regrid_matrix && (needs.setup.outputs.earthkit-regrid) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.earthkit-regrid_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
eccodes:
name: eccodes
needs:
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.eccodes_matrix && (needs.setup.outputs.eccodes) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.eccodes_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
eccodes-python:
name: eccodes-python
needs:
- eccodes
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.eccodes-python_matrix && (needs.setup.outputs.eccodes || needs.setup.outputs.eccodes-python) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.eccodes-python_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eccodes }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
ecflow:
name: ecflow
needs:
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.ecflow_matrix && (needs.setup.outputs.ecflow) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.ecflow_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
ecflow-light:
name: ecflow-light
needs:
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.ecflow-light_matrix && (needs.setup.outputs.eckit || needs.setup.outputs.ecflow-light) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.ecflow-light_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
eckit:
name: eckit
needs:
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.eckit_matrix && (needs.setup.outputs.eckit) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.eckit_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
fckit:
name: fckit
needs:
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.fckit_matrix && (needs.setup.outputs.eckit || needs.setup.outputs.fckit) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.fckit_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
fdb:
name: fdb
needs:
- metkit
- eccodes
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.fdb_matrix && (needs.setup.outputs.metkit || needs.setup.outputs.eccodes || needs.setup.outputs.eckit || needs.setup.outputs.fdb) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.fdb_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.metkit }}
${{ needs.setup.outputs.eccodes }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
metkit:
name: metkit
needs:
- eccodes
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.metkit_matrix && (needs.setup.outputs.eccodes || needs.setup.outputs.eckit || needs.setup.outputs.metkit) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.metkit_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.eccodes }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
mir:
name: mir
needs:
- atlas
- fckit
- eckit
- eccodes
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.mir_matrix && (needs.setup.outputs.atlas || needs.setup.outputs.fckit || needs.setup.outputs.eckit || needs.setup.outputs.eccodes || needs.setup.outputs.mir) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.mir_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.atlas }}
${{ needs.setup.outputs.fckit }}
${{ needs.setup.outputs.eckit }}
${{ needs.setup.outputs.eccodes }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
multio:
name: multio
needs:
- fdb
- metkit
- mir
- atlas
- fckit
- eckit
- eccodes
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.multio_matrix && (needs.setup.outputs.fdb || needs.setup.outputs.metkit || needs.setup.outputs.mir || needs.setup.outputs.atlas || needs.setup.outputs.fckit || needs.setup.outputs.eckit || needs.setup.outputs.eccodes || needs.setup.outputs.multio) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.multio_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.fdb }}
${{ needs.setup.outputs.metkit }}
${{ needs.setup.outputs.mir }}
${{ needs.setup.outputs.atlas }}
${{ needs.setup.outputs.fckit }}
${{ needs.setup.outputs.eckit }}
${{ needs.setup.outputs.eccodes }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
multiurl:
name: multiurl
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.multiurl_matrix && (needs.setup.outputs.multiurl) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.multiurl_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
odc:
name: odc
needs:
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.odc_matrix && (needs.setup.outputs.eckit || needs.setup.outputs.odc) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.odc_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
pdbufr:
name: pdbufr
needs:
- eccodes-python
- eccodes
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.pdbufr_matrix && (needs.setup.outputs.eccodes-python || needs.setup.outputs.eccodes || needs.setup.outputs.pdbufr) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.pdbufr_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: ${{ needs.setup.outputs.eccodes }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: ${{ needs.setup.outputs.eccodes-python }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
requirements_path: tests/downstream-ci-requirements.txt
test_cmd: |
python -m pytest --cov=./ --cov-report=xml -k 'not test_notebooks'
python -m pytest -v -k 'test_notebooks'
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
plume:
name: plume
needs:
- atlas
- fckit
- eckit
- setup
- clang-format
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.plume_matrix && (needs.setup.outputs.atlas || needs.setup.outputs.fckit || needs.setup.outputs.eckit || needs.setup.outputs.plume) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.plume_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.atlas }}
${{ needs.setup.outputs.fckit }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload }}
pyfdb:
name: pyfdb
needs:
- fdb
- metkit
- eccodes
- eckit
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.pyfdb_matrix && (needs.setup.outputs.fdb || needs.setup.outputs.metkit || needs.setup.outputs.eccodes || needs.setup.outputs.eckit || needs.setup.outputs.pyfdb) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.pyfdb_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
FDB5_CONFIG:
'{"type":"local","engine":"toc","schema":"${{ github.workspace }}/tests/default_fdb_schema","spaces":[{"handler":"Default","roots":[{"path":"${{ github.workspace }}/data/fdb"}]}]}
'
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.fdb }}
${{ needs.setup.outputs.metkit }}
${{ needs.setup.outputs.eccodes }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- run: mkdir -p data/fdb
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
pyodc:
name: pyodc
needs:
- odc
- eckit
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.pyodc_matrix && (needs.setup.outputs.odc || needs.setup.outputs.eckit || needs.setup.outputs.pyodc) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.pyodc_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- name: Build dependencies
id: build-deps
uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2
with:
repository: ${{ matrix.owner_repo_ref }}
codecov_upload: false
build_package_inputs: "repository: ${{ matrix.owner_repo_ref }}"
build_config: ${{ matrix.config_path }}
build_dependencies: |-
${{ needs.setup.outputs.odc }}
${{ needs.setup.outputs.eckit }}
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
lib_path: ${{ steps.build-deps.outputs.lib_path }}
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
skinnywms:
name: skinnywms
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.skinnywms_matrix && (needs.setup.outputs.skinnywms) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.skinnywms_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
thermofeel:
name: thermofeel
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.thermofeel_matrix && (needs.setup.outputs.thermofeel) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.thermofeel_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
troika:
name: troika
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.troika_matrix && (needs.setup.outputs.troika) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.troika_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
test_cmd: |
pytest --cov=./ --cov-report=xml --basetemp=$RUNNER_TEMP/pytest_tmp
python -m coverage report
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}
cascade:
name: cascade
needs:
- setup
- python-qa
if: ${{ (always() && !cancelled()) && contains(join(needs.*.result, ','), 'success') && needs.setup.outputs.cascade_matrix && (needs.setup.outputs.cascade) }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.cascade_matrix) }}
env:
DEP_TREE: ${{ needs.setup.outputs.dep_tree }}
runs-on: ${{ matrix.labels }}
steps:
- uses: ecmwf-actions/reusable-workflows/ci-python@v2
with:
repository: ${{ matrix.owner_repo_ref }}
checkout: true
python_dependencies: ""
github_token: ${{ secrets.GH_REPO_READ_TOKEN }}
codecov_upload: ${{ needs.setup.outputs.trigger_repo == github.job && inputs.codecov_upload && needs.setup.outputs.py_codecov_platform == matrix.name }}
codecov_token: ${{ secrets.CODECOV_UPLOAD_TOKEN }}