Skip to content

Omnibus

Omnibus #3016

Workflow file for this run

name: IEM CI
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build:
defaults:
run:
# Ensures environment gets sourced right
shell: bash -l -e {0}
name: Python (${{ matrix.PYTHON_VERSION }}) Data (${{ matrix.WITH_IEM_DATA }}) Test Web (${{ matrix.TEST_WEB }})
runs-on: ubuntu-latest
strategy:
matrix:
PYTHON_VERSION: ["3.11"]
WITH_IEM_DATA: ["YES", "NO"]
TEST_WEB: ["YES", "NO"]
exclude:
- PYTHON_VERSION: "3.11"
TEST_WEB: "NO"
WITH_IEM_DATA: "NO"
env:
PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }}
WITH_IEM_DATA: ${{ matrix.WITH_IEM_DATA }}
TEST_WEB: ${{ matrix.TEST_WEB }}
steps:
- uses: actions/checkout@v4
# Lots of daryl's codes use aliases defined in /etc/hosts
- name: Add /etc/hosts entries
run: |
cat .github/workflows/etchosts.txt | sudo tee -a /etc/hosts
# setup conda-forge with micromamba
- name: Setup Python
uses: mamba-org/setup-micromamba@v2
with:
environment-file: environment.yml
condarc: |
channels:
- conda-forge
- defaults
create-args: >-
python=${{ env.PYTHON_VERSION }}
environment-name: prod
cache-environment: true
# Get postgresql running and setup the database
- name: Setup Postgres
run: |
git clone --depth 1 https://github.com/akrherz/iem-database.git database
git clone --depth 1 https://github.com/akrherz/ci_tooling.git .ci_tooling
cd .ci_tooling
. postgres.sh
cd ..
cd database; sh bootstrap.sh
python schema_manager.py
# Copy repo's default settings into the real position
- name: Copy PHP Setting Defaults
run: |
cp config/settings.inc.php.in config/settings.inc.php
# conda-forge does not have everything we need, yet
- name: Install Python requirements from pip
run: |
python -m pip install -r pip_requirements.txt
- name: Setup Directory Paths
run: sh .github/setuppaths.sh
- name: Setup IEM Data
if: ${{ matrix.WITH_IEM_DATA == 'YES' }}
run: sh .github/setupdata.sh
# Get memcached running
- name: Setup Memcached
run: |
cd .ci_tooling
. memcached.sh
# Get apache running, which is needed to build mod_wsgi
- name: Configure IEM Webfarm Server
run: |
cd .ci_tooling
. iemwebfarm.sh
- name: Configure Webfarm Server
run: |
echo '<VirtualHost *:80>' | sudo tee /etc/apache2/sites-enabled/iem.conf > /dev/null
cat config/mesonet.inc | sudo tee -a /etc/apache2/sites-enabled/iem.conf > /dev/null
echo '</VirtualHost>' | sudo tee -a /etc/apache2/sites-enabled/iem.conf > /dev/null
# ci_tooling places a mod_wsgi conf with startup disabled, we enable it
sudo sed -i 's/# WSGIImportScript/WSGIImportScript/' /etc/apache2/sites-enabled/mod_wsgi.conf
# restart apache
sudo service apache2 restart
sudo systemctl status apache2.service -l
- name: Smoke Test mod_wsgi_startup.py
if: ${{ matrix.TEST_WEB == 'YES' }}
run: |
python /opt/iem/deployment/mod_wsgi_startup.py
- name: Run IEM Production checks
if: ${{ matrix.TEST_WEB == 'YES' }}
run: |
git clone --depth 1 https://github.com/akrherz/iem-production-checks.git .ipc
SERVICE=http://iem.local pytest -n 4 .ipc/tests/test_*.py
- name: Run mod_wsgi smoke test
if: ${{ matrix.TEST_WEB == 'YES' }}
run: pytest -n 4 tests/test_mod_wsgi.py
# - name: Setup upterm session
# if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_IEM_DATA == 'YES' }}
# uses: lhotari/action-upterm@v1
# with:
# limit-access-to-actor: true
- name: Run IEMWeb Python Check
if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_IEM_DATA == 'YES' }}
run: |
export PYTHONPATH=/opt/iem/pylib
python -m pytest --mpl --cov=iemweb -n 4 tests/iemweb/
python -m coverage xml
- name: Upload to Codecov
if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_IEM_DATA == 'YES' }}
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: coverage.xml
- name: View Apache Logs
if: ${{ failure() }}
run: |
sudo systemctl status apache2 -l
sudo cat /var/log/apache2/error.log
- name: View PHP-FPM Logs
if: ${{ failure() }}
run: |
sudo cat /var/log/php*-fpm.log