Skip to content

Commit

Permalink
Convert tests and doctests from Cirrus to GHA (#415)
Browse files Browse the repository at this point in the history
* created ci-tests

* added caches
  • Loading branch information
ESadek-MO committed Apr 15, 2024
1 parent c5f53b9 commit 9a8b2f4
Show file tree
Hide file tree
Showing 7 changed files with 281 additions and 130 deletions.
130 changes: 0 additions & 130 deletions .cirrus.yml

This file was deleted.

131 changes: 131 additions & 0 deletions .github/workflows/ci-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# reference:
# - https://github.com/actions/cache
# - https://github.com/actions/checkout
# - https://github.com/marketplace/actions/setup-miniconda

name: ci-tests

on:
push:
branches:
- "main"
- "v*x"
tags:
- "v*"
pull_request:
branches:
- "*"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
tests:
name: "${{ matrix.session }} (py${{ matrix.python-version }} ${{ matrix.os }}) [${{ matrix.iris-source }}]"

runs-on: ${{ matrix.os }}

defaults:
run:
shell: bash -l {0}

strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
python-version: ["3.11"]
session: ["doctest"]
# conda-forge doesn't fit within nose char limits, change with pytest
iris-source : ["condaforge"]
include:
- os: "ubuntu-latest"
python-version: "3.11"
session: "tests"
iris-source: "condaforge"
- os: "ubuntu-latest"
python-version: "3.11"
session: "tests"
iris-source: "source"
- os: "ubuntu-latest"
python-version: "3.10"
session: "tests"
iris-source: "condaforge"
- os: "ubuntu-latest"
python-version: "3.9"
session: "tests"
iris-source: "condaforge"

env:
IRIS_TEST_DATA_VERSION: "2.24"
ENV_NAME: "ci-tests"

steps:
- name: "checkout"
uses: actions/checkout@v4

- name: "environment configure"
env:
# Maximum cache period (in weeks) before forcing a cache refresh.
CACHE_WEEKS: 2
run: |
echo "CACHE_PERIOD=$(date +%Y).$(expr $(date +%U) / ${CACHE_WEEKS})" >> ${GITHUB_ENV}
echo "LOCK_FILE=requirements/locks/py$(echo ${{ matrix.python-version }} | tr -d '.')-linux-64.lock" >> ${GITHUB_ENV}
- name: "data cache"
uses: ./.github/workflows/composite/iris-data-cache
with:
cache_build: 0
env_name: ${{ env.ENV_NAME }}
version: ${{ env.IRIS_TEST_DATA_VERSION }}

- name: "conda package cache"
uses: ./.github/workflows/composite/conda-pkg-cache
with:
cache_build: 0
cache_period: ${{ env.CACHE_PERIOD }}
env_name: ${{ env.ENV_NAME }}

- name: "conda install"
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
channels: conda-forge,defaults
activate-environment: ${{ env.ENV_NAME }}
auto-update-conda: false
use-only-tar-bz2: true

- name: "conda environment cache"
uses: ./.github/workflows/composite/conda-env-cache
with:
cache_build: 0
cache_period: ${{ env.CACHE_PERIOD }}
env_name: ${{ env.ENV_NAME }}
install_packages: "cartopy nox pip"

- name: "conda info"
run: |
conda info
conda list
- name: "cartopy cache"
uses: ./.github/workflows/composite/cartopy-cache
with:
cache_build: 0
cache_period: ${{ env.CACHE_PERIOD }}
env_name: ${{ env.ENV_NAME }}

- name: "nox cache"
uses: ./.github/workflows/composite/nox-cache
with:
cache_build: 0
env_name: ${{ env.ENV_NAME }}
lock_file: ${{ env.LOCK_FILE }}

- name: "iris ${{ matrix.session }}"
env:
PY_VER: ${{ matrix.python-version }}
IRIS_SOURCE: ${{ matrix.iris-source }}
run: |
nox --session ${{ matrix.session }} -- --test-data-dir ${HOME}/iris-test-data/test_data
41 changes: 41 additions & 0 deletions .github/workflows/composite/cartopy-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: "cartopy-cache"
description: "create and cache cartopy assets"

#
# Assumes the environment contains the following variables:
# - CONDA
#
inputs:
cache_build:
description: "conda environment cache build number"
required: false
default: "0"
cache_period:
description: "conda environment cache timestamp"
required: true
env_name:
description: "environment name"
required: true

runs:
using: "composite"
steps:
- uses: actions/cache@v3
id: cartopy-cache
with:
path: ~/.local/share/cartopy
key: ${{ runner.os }}-cartopy-${{ inputs.env_name }}-p${{ inputs.cache_period }}-b${{ inputs.cache_build }}

- if: steps.cartopy-cache.outputs.cache-hit != 'true'
env:
CARTOPY_SHARE_DIR: ~/.local/share/cartopy
CARTOPY_FEATURE: https://raw.githubusercontent.com/SciTools/cartopy/v0.20.0/tools/cartopy_feature_download.py
shell: bash
run: |
# Require to explicitly activate the environment within the composite action.
source ${{ env.CONDA }}/etc/profile.d/conda.sh >/dev/null 2>&1
conda activate ${{ inputs.env_name }}
wget --quiet ${CARTOPY_FEATURE}
mkdir -p ${CARTOPY_SHARE_DIR}
# Requires a pre-installed version of cartopy within the environment.
python cartopy_feature_download.py physical --output ${CARTOPY_SHARE_DIR} --no-warn
35 changes: 35 additions & 0 deletions .github/workflows/composite/conda-env-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: "conda-env-cache"
description: "create and cache the conda environment"

#
# Assumes the environment contains the following variables:
# - CONDA
#
inputs:
cache_build:
description: "conda environment cache build number"
required: false
default: "0"
cache_period:
description: "conda environment cache timestamp"
required: true
env_name:
description: "environment name"
required: true
install_packages:
description: "conda packages to install into environment"
required: true

runs:
using: "composite"
steps:
- uses: actions/cache@v3
id: conda-env-cache
with:
path: ${{ env.CONDA }}/envs/${{ inputs.env_name }}
key: ${{ runner.os }}-conda-env-${{ inputs.env_name }}-p${{ inputs.cache_period }}-b${{ inputs.cache_build }}

- if: steps.conda-env-cache.outputs.cache-hit != 'true'
shell: bash
run: |
conda install --quiet --name ${{ inputs.env_name }} ${{ inputs.install_packages }}
22 changes: 22 additions & 0 deletions .github/workflows/composite/conda-pkg-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: "conda-pkg-cache"
description: "cache the conda environment packages"

inputs:
cache_build:
description: "conda environment cache build number"
required: false
default: "0"
cache_period:
description: "conda environment cache timestamp"
required: true
env_name:
description: "environment name"
required: true

runs:
using: "composite"
steps:
- uses: actions/cache@v3
with:
path: ~/conda_pkgs_dir
key: ${{ runner.os }}-conda-pkgs-${{ inputs.env_name }}-p${{ inputs.cache_period }}-b${{ inputs.cache_build }}
30 changes: 30 additions & 0 deletions .github/workflows/composite/iris-data-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: "iris-data-cache"
description: "create and cache the iris test data"

inputs:
cache_build:
description: "data cache build number"
required: false
default: "0"
env_name:
description: "environment name"
required: true
version:
description: "iris test data version"
required: true

runs:
using: "composite"
steps:
- uses: actions/cache@v3
id: data-cache
with:
path: ~/iris-test-data
key: ${{ runner.os }}-iris-test-data-${{ inputs.env_name }}-v${{ inputs.version }}-b${{ inputs.cache_build }}

- if: steps.data-cache.outputs.cache-hit != 'true'
shell: bash
run: |
wget --quiet https://github.com/SciTools/iris-test-data/archive/v${{ inputs.version }}.zip -O iris-test-data.zip
unzip -q iris-test-data.zip
mv iris-test-data-${{ inputs.version }} ~/iris-test-data

0 comments on commit 9a8b2f4

Please sign in to comment.