Skip to content

Build and test

Build and test #6389

Workflow file for this run

---
name: Build and test
on:
push:
branches:
- grass[0-9]+
pull_request:
schedule:
# 01:00 Pacific Time (in UTC), every day (late night PT)
- cron: 0 8 * * *
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress:
# Do not cancel on protected branches, like grass8
${{ github.ref_protected != true }}
permissions: {}
jobs:
build:
name: ${{ matrix.grass-version }} (Python ${{ matrix.python-version }})
runs-on: ubuntu-22.04
strategy:
matrix:
# Test with relevant active branches or tags and supported Python
# versions, but also limit the number of jobs by, e.g., testing only
# every second version or testing older GRASS versions with older Python
# only.
include:
- grass-version: main
python-version: "3.11"
- grass-version: releasebranch_8_4
python-version: "3.10"
fail-fast: false
env:
# renovate: datasource=github-tags depName=r-hub/R
R_VERSION: "4.5.2"
steps:
- name: Checkout core
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: OSGeo/grass
ref: ${{ matrix.grass-version }}
path: grass
persist-credentials: false
- name: Checkout addons
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: grass-addons
persist-credentials: false
- name: ccache
uses: hendrikmuhs/ccache-action@bfa03e1de4d7f7c3e80ad9109feedd05c4f5a716 # v1.2.19
with:
create-symlink: true
verbose: 2
evict-old-files: 7d
key: ${{ github.job }}-${{ matrix.grass-version }}-${{ matrix.python-version }}
- name: Get dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y wget git gawk findutils
xargs -a <(awk '! /^ *(#|$)/' "grass-addons/.github/workflows/apt.txt") -r -- \
sudo apt-get install -y --no-install-recommends --no-install-suggests
- name: Set up Python ${{ matrix.python-version }} as default Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ matrix.python-version }}
- name: Get Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r grass-addons/.github/workflows/requirements.txt
- name: Create installation directory
run: |
mkdir "$HOME/install"
- name: Set number of cores for compilation
run: |
echo "MAKEFLAGS=-j$(nproc)" >> "$GITHUB_ENV"
- name: Set LD_LIBRARY_PATH for GRASS GIS compilation
run: |
echo "LD_LIBRARY_PATH=$HOME/install/lib" >> "$GITHUB_ENV"
- name: Build GRASS GIS core
run: |
cd grass
../grass-addons/.github/workflows/build_grass.sh "$HOME/install"
- name: Add the bin directory to PATH
run: |
echo "$HOME/install/bin" >> "$GITHUB_PATH"
- name: Make simple grass command available (not needed in G8)
run: |
if [ ! -e "$HOME/install/bin/grass" ] ; then \
ln -s "$HOME"/install/bin/grass* "$HOME"/install/bin/grass ; fi
- name: Get extra Python dependencies
run: |
GDAL_VERSION="$(gdal-config --version)"
export GDAL_VERSION
UDUNITS2_XML_PATH=/usr/share/xml/udunits/udunits2.xml
export UDUNITS2_XML_PATH
pip install -r grass-addons/.github/workflows/extra_requirements.txt
- name: Build addons
run: |
cd grass-addons/src
GRASS_INSTALL="$("$HOME/install/bin/grass" --config | sed -n '4{p;q}')"
make MODULE_TOPDIR="$GRASS_INSTALL"
- name: Set up R
uses: r-lib/actions/setup-r@6f6e5bc62fba3a704f74e7ad7ef7676c5c6a2590 # v2.11.4
with:
r-version: ${{ env.R_VERSION }}
Ncpus: 4
- name: Configure ccache for R package builds
run: |
# R package sources are extracted as newly created files
echo "CCACHE_SLOPPINESS=include_file_ctime" >> "${GITHUB_ENV}"
# R temp directory name differs
echo "CCACHE_NOHASHDIR=true" >> "${GITHUB_ENV}"
- name: Get R dependencies
run: |
grass-addons/.github/workflows/install_r_packages.R
- name: Run tests
timeout-minutes: 45
run: |
cd grass-addons/src
../.github/workflows/test.sh --config ../.gunittest.cfg
- name: Make HTML test report available
if: ${{ always() }}
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
with:
name: testreport-grass-${{ matrix.grass-version }}-python-${{ matrix.python-version }}
path: grass-addons/src/testreport
retention-days: 3