Omnibus #3016
Workflow file for this run
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: 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 |