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('**/setup.cfg') }} - 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 manifests run: python .github/utils/check_manifests.py - 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