Skip to content

ci: Allow building/releasing a specific plugin #48

ci: Allow building/releasing a specific plugin

ci: Allow building/releasing a specific plugin #48

Workflow file for this run

name: CI
env:
PYTHON_VERSION: '3.12.2'
on:
push:
branches:
- master
- '*.x'
pull_request:
branches:
- master
- '*.x'
jobs:
setup:
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Pick Indico core repo
env:
GH_TOKEN: ${{ github.token }}
PR_BODY: ${{ github.event_name == 'pull_request' && github.event.pull_request.body }}
PR_BASE_REF: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref }}
run: python .github/utils/get_core_repo.py indico/indico INDICO
- name: Install system dependencies
run: sudo apt-get install postgresql-client libpq-dev
- name: Create virtualenv
run: |
python3.12 -m venv .venv
source .venv/bin/activate
pip install -U pip setuptools wheel
- name: Activate virtualenv for later steps
run: |
echo "VIRTUAL_ENV=$(pwd)/.venv" >> $GITHUB_ENV
echo "$(pwd)/.venv/bin" >> $GITHUB_PATH
- name: Get pip cache dir
id: pip-cache
run: echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT
- name: Cache pip
id: cache-pip
uses: actions/cache@v4
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: pip|${{ runner.os }}|3.12|${{ hashFiles('**/pyproject.toml') }}
- uses: actions/cache@v4
id: cache-npm
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package*.json') }}
- name: Setup Node
uses: actions/setup-node@v4
if: steps.cache-npm.outputs.cache-hit != 'true'
with:
node-version: '18.x'
- name: Install Indico
run: |
pip install Babel
pip install "indico[dev] @ git+https://github.com/${INDICO_REPO}.git@${INDICO_BRANCH}"
- name: Install node dependencies
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: Archive environment
run: tar cf /tmp/env.tar .venv node_modules
- name: Upload environment
uses: actions/upload-artifact@v4
with:
name: environment
retention-days: 1
path: /tmp/env.tar
lint:
needs: setup
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Download environment
uses: actions/download-artifact@v4
with:
name: environment
path: /tmp
- name: Restore environment
run: tar xf /tmp/env.tar
- name: Activate virtualenv for later steps
run: |
echo "VIRTUAL_ENV=$(pwd)/.venv" >> $GITHUB_ENV
echo "$(pwd)/.venv/bin" >> $GITHUB_PATH
- name: Check import sorting
if: success() || failure()
run: isort --diff --check-only .
- name: Check headers
if: success() || failure()
run: |
echo '::add-matcher::.github/matchers/headers-problem-matcher.json'
unbehead --check
echo '::remove-matcher owner=headers::'
- name: Run ruff
if: success() || failure()
run: |
ruff check --output-format github .
- name: Run flake8
if: success() || failure()
run: |
echo '::add-matcher::.github/matchers/flake8-problem-matcher.json'
flake8 --format '%(path)s:%(row)d:%(col)d: %(code)s %(text)s'
echo '::remove-matcher owner=flake8::'
test-plugin:
needs: setup
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
services:
postgres:
image: postgres:13
env:
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432
options: --health-cmd pg_isready --health-interval 5s --health-timeout 5s --health-retries 10
strategy:
matrix:
include:
- plugin: citadel
- plugin: livesync
- plugin: payment_paypal
- plugin: storage_s3
- plugin: vc_zoom
- plugin: prometheus
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Download environment
uses: actions/download-artifact@v4
with:
name: environment
path: /tmp
- name: Restore environment
run: tar xf /tmp/env.tar
- name: Activate virtualenv for later steps
run: |
echo "VIRTUAL_ENV=$(pwd)/.venv" >> $GITHUB_ENV
echo "$(pwd)/.venv/bin" >> $GITHUB_PATH
- name: Install extra dependencies
if: matrix.plugin == 'citadel' || matrix.plugin == 'prometheus'
run: |
pip install -e "${GITHUB_WORKSPACE}/livesync/"
- name: Install plugin
run: |
cd "${GITHUB_WORKSPACE}/${{ matrix.plugin }}"
pip install -e .
- name: Install redis
run: sudo apt-get install redis-server
- name: Setup database
run: |
export PGHOST=localhost
export PGPORT=${{ job.services.postgres.ports[5432] }}
export PGUSER=postgres
createuser indicotest
createdb -O indicotest indicotest
psql indicotest -c 'CREATE EXTENSION unaccent;'
psql indicotest -c 'CREATE EXTENSION pg_trgm;'
- name: Run tests
run: |
export INDICO_TEST_DATABASE_URI="postgresql://indicotest@localhost:${{ job.services.postgres.ports[5432] }}/indicotest"
cd "${GITHUB_WORKSPACE}/${{ matrix.plugin }}"
pytest --color=yes