name: CI on: push: branches: - main pull_request: schedule: - cron: "17 3 * * 0" defaults: run: # required by https://github.com/snok/install-poetry#windows shell: bash concurrency: group: ${{ github.head_ref || github.ref_name }} cancel-in-progress: true jobs: lint: name: Lint and typecheck Python runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install Poetry uses: snok/install-poetry@v1.4.1 with: version: "1.8.2" virtualenvs-create: true #- name: Cache python dependencies # uses: actions/cache@v2 # id: cache # with: # path: ~/.cache/pypoetry # key: poetry-${{ hashFiles('**/poetry.lock') }}-${{ matrix.python-version }} # restore-keys: | # poetry-${{ hashFiles('**/poetry.lock') }}-${{ matrix.python-version }} - name: Install Dependencies run: poetry install # if: steps.cache.outputs.cache-hit != 'true' - name: "Ruff" run: | poetry run ruff check - uses: crate-ci/typos@master - name: "Set up local settings" run: cp local_settings_example.py local_settings.py - name: "Mypy" run: poetry run ./.ci/run-mypy.sh - name: "Safety" run: poetry run ./.ci/run-safety.sh - name: "Sphinx" run: | (cd doc; poetry run make html SPHINXOPTS="-W --keep-going -n") frontend: name: Lint JS/build frontend (Node ${{ matrix.node-version }}) runs-on: ubuntu-latest strategy: matrix: node-version: ['16', '18', '20'] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Install run: npm install - name: ESLint run: npx eslint frontend/js/*.js - name: Rollup build run: npm run build pytest: name: Python ${{ matrix.python-version }} - ${{ matrix.suite }} runs-on: ubuntu-latest strategy: matrix: python-version: ['3.10', '3.11', '3.x'] suite: ['base', 'postgres', 'expensive'] services: postgres: image: postgres env: POSTGRES_PASSWORD: relatepgpass POSTGRES_DB: test_relate options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install Poetry uses: snok/install-poetry@v1.4.1 with: version: "1.8.2" virtualenvs-create: true #- name: Cache python dependencies # uses: actions/cache@v2 # id: cache # with: # path: ~/.cache/pypoetry # key: poetry-${{ hashFiles('**/poetry.lock') }}-${{ matrix.python-version }} # restore-keys: | # poetry-${{ hashFiles('**/poetry.lock') }}-${{ matrix.python-version }} - name: Install Dependencies run: poetry install # if: steps.cache.outputs.cache-hit != 'true' - name: Install OS dependencies env: DEBIAN_FRONTEND: noninteractive run: | sudo apt-get install gettext - name: Run test suite env: RL_CI_TEST: ${{ matrix.suite }} run: | bash ./.ci/run-tests-for-ci.sh - name: Test command line tool if: matrix.suite == 'base' run: | git clone https://github.com/inducer/relate-sample cd relate-sample poetry run relate validate . poetry run relate test-code questions/autograded-python-example.yml poetry run relate expand-yaml flows/quiz-test.yml > /dev/null pytest-windows: name: Python - Windows runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install Poetry uses: snok/install-poetry@v1.4.1 with: version: "1.8.2" virtualenvs-create: true - name: Configure Poetry run: | poetry config virtualenvs.in-project true - name: Install Dependencies run: | poetry install - name: Run test suite run: | bash ./.ci/run-tests-for-ci.sh # vim: sw=2