Adrian Moennich 12f841a648 Use artifacts to pass env to jobs
That way we can do everything important in the setup job and just
download the artifact in each subsequent job.

We now also just cache the wheels instead of the virtualenv itself; that
way we are guaranteed to have a fresh indico copy from the main repo
instead of whatever got cached some time ago.
2021-02-08 18:48:10 +01:00

244 lines
6.8 KiB
YAML

name: CI
on:
push:
branches:
- master
- 2.3-maintenance
pull_request:
branches:
- master
- 2.3-maintenance
jobs:
setup:
runs-on: ubuntu-20.04
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v2
- name: Get upstream branch name
run: |
if [[ $GITHUB_EVENT_NAME == push ]]; then
upstream_branch="${GITHUB_REF#refs/heads/}"
elif [[ $GITHUB_EVENT_NAME == pull_request ]]; then
upstream_branch="${GITHUB_HEAD_REF#refs/heads/}"
else
echo "unsupported event: $GITHUB_EVENT_NAME"
exit 1
fi
if [[ $upstream_branch != master && $upstream_branch != *-maintenance ]]; then
echo "assuming there is no branch named ${upstream_branch} in indico; defaulting to master"
upstream_branch=master
else
echo "using indico upstream branch ${upstream_branch}"
fi
echo "INDICO_BRANCH=${upstream_branch}" >> "$GITHUB_ENV"
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install system dependencies
run: sudo apt-get install postgresql-client libpq-dev
- name: Create virtualenv
run: |
python3.9 -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 "::set-output name=dir::$(pip cache dir)"
- name: Cache pip
id: cache-pip
uses: actions/cache@v2
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: pip|${{ runner.os }}|3.9|${{ hashFiles('**/setup.cfg') }}
- uses: actions/cache@v2
id: cache-npm
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package*.json') }}
- name: Setup Node
uses: actions/setup-node@v1
if: steps.cache-npm.outputs.cache-hit != 'true'
with:
node-version: '14.x'
- name: Install Indico
run: |
pip install Babel
pip install git+https://github.com/indico/indico.git@${INDICO_BRANCH}#egg=indico[dev]
- 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@v2
with:
name: environment
retention-days: 1
path: /tmp/env.tar
lint:
needs: setup
runs-on: ubuntu-20.04
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v2
- name: Get upstream branch name
run: |
if [[ $GITHUB_EVENT_NAME == push ]]; then
upstream_branch="${GITHUB_REF#refs/heads/}"
elif [[ $GITHUB_EVENT_NAME == pull_request ]]; then
upstream_branch="${GITHUB_HEAD_REF#refs/heads/}"
else
echo "unsupported event: $GITHUB_EVENT_NAME"
exit 1
fi
if [[ $upstream_branch != master && $upstream_branch != *-maintenance ]]; then
echo "assuming there is no branch named ${upstream_branch} in indico; defaulting to master"
upstream_branch=master
else
echo "using indico upstream branch ${upstream_branch}"
fi
echo "INDICO_BRANCH=${upstream_branch}" >> "$GITHUB_ENV"
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Download environment
uses: actions/download-artifact@v2
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
run: isort --diff --check-only .
- name: Check headers
if: success() || failure()
run: |
wget "https://raw.githubusercontent.com/indico/indico/${INDICO_BRANCH}/bin/maintenance/update_header.py" -O /tmp/update_header.py
echo '::add-matcher::.github/matchers/headers-problem-matcher.json'
python /tmp/update_header.py --ci
echo '::remove-matcher owner=headers::'
- 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-20.04
defaults:
run:
shell: bash
services:
postgres:
image: postgres:11
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: livesync
- plugin: payment_paypal
- plugin: vc_zoom
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Download environment
uses: actions/download-artifact@v2
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 plugin
run: |
cd "${GITHUB_WORKSPACE}/${{ matrix.plugin }}"
pip install -e .
- 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