Merge pull request #561 from akrherz/231024 #1881
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Install and Test | |
on: | |
pull_request: | |
branches: | |
- main | |
push: | |
branches: | |
- main | |
jobs: | |
build-linux: | |
defaults: | |
run: | |
# Ensures environment gets sourced right | |
shell: bash -l {0} | |
name: Python (${{ matrix.PYTHON_VERSION }}) with IEM Data (${{ matrix.WITH_IEM_DATA }}) | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
PYTHON_VERSION: ["3.11"] | |
WITH_IEM_DATA: ["YES", "NO"] | |
env: | |
PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} | |
WITH_IEM_DATA: ${{ matrix.WITH_IEM_DATA }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Add /etc/hosts entries | |
run: | | |
cat .github/workflows/etchosts.txt | sudo tee -a /etc/hosts | |
- name: Copy PHP Settings | |
run: | | |
cp config/settings.inc.php.in config/settings.inc.php | |
# setup conda-forge with micromamba | |
- name: Setup Python | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-file: environment.yml | |
condarc: | | |
channels: | |
- conda-forge | |
- defaults | |
create-args: >- | |
python=${{ env.PYTHON_VERSION }} | |
environment-name: prod | |
cache-environment: true | |
- 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 | |
. .ci_tooling/postgres.sh | |
cd database; sh bootstrap.sh | |
python schema_manager.py | |
- name: Setup Memcached | |
run: | | |
. .ci_tooling/memcached.sh | |
- name: Setup Apache | |
run: | | |
# need apache2-dev for mod-wsgi to build | |
sudo apt-get install apache2 apache2-dev | |
- name: Install Python requirements from pip | |
run: | | |
# mod_wsgi is here and needs apxs from above | |
python -m pip install -r pip_requirements.txt | |
- name: Setup IEM Data | |
if: ${{ matrix.WITH_IEM_DATA }} == "YES" | |
run: | | |
python database/store_test_data.py | |
python scripts/dbutil/sync_stations.py | |
- name: Configure Webfarm Server | |
run: | | |
. .ci_tooling/iemwebfarm.sh | |
sudo mkdir -p /mesonet/www/logs | |
sudo ln -s `pwd` /opt/iem | |
sudo ln -s $HOME/micromamba /opt/miniconda3 | |
echo `pwd` | |
chmod 755 $HOME | |
sudo apt-get install librrd-dev | |
sudo service memcached start | |
sudo a2enmod headers rewrite proxy proxy_http proxy_balancer ssl lbmethod_byrequests cgi expires authz_groupfile | |
# we do things the old fashioned way, we earn it | |
sudo a2dissite 000-default.conf | |
sudo cp .github/ci_support/mod_wsgi.conf /etc/apache2/sites-enabled/ | |
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 | |
# This may be a requirement for mod-wsgi to properly find python tooling? | |
echo "export PATH=/home/runner/micromamba/envs/prod/bin:$PATH" | sudo tee -a /etc/apache2/envvars > /dev/null | |
# Newer PROJ needs this | |
echo "export PROJ_LIB=/home/runner/micromamba/envs/prod/share/proj" | sudo tee -a /etc/apache2/envvars > /dev/null | |
MOD_WSGI_SO=$(find $HOME/micromamba/envs/prod -type f -name 'mod_wsgi*.so') | |
echo $MOD_WSGI_SO | |
echo "LoadModule wsgi_module $MOD_WSGI_SO" | sudo tee -a /etc/apache2/mods-enabled/wsgi.load > /dev/null; | |
echo "WSGIApplicationGroup %{GLOBAL}" | sudo tee -a /etc/apache2/mods-enabled/wsgi.load > /dev/null; | |
# Create tmp folder for matplotlib | |
sudo mkdir -p /var/cache/matplotlib | |
sudo chown www-data /var/cache/matplotlib | |
# restart apache | |
sudo service apache2 stop | |
sudo service apache2 start | |
sudo systemctl status apache2.service -l | |
- name: Smoke Test mod_wsgi_startup.py | |
run: | | |
python /opt/iem/deployment/mod_wsgi_startup.py | |
- name: Run IEM Production checks | |
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 | |
run: | | |
set -e | |
pytest -n 4 test/test_mod_wsgi.py | |
- 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 |