# Use the latest 2.1 version of CircleCI pipeline process engine. # See: https://circleci.com/docs/2.0/configuration-reference version: 2.1 # Define a job to be invoked later in a workflow. # See: https://circleci.com/docs/2.0/configuration-reference/#jobs jobs: api-tests-3-11: docker: - image: cimg/python:3.11 - image: cimg/postgres:15.6 environment: POSTGRES_USER: postgres POSTGRES_DB: wrolpi POSTGRES_PASSWORD: "wrolpi" resource_class: medium steps: - checkout - run: sudo apt-get update - run: sudo apt-get install -y ffmpeg catdoc - restore_cache: key: deps-3.11-{{ checksum "requirements.txt" }}-4 - run: name: Install Requirements command: | python3 -m venv venv . venv/bin/activate pip install -r requirements.txt - save_cache: key: deps-3.11-{{ checksum "requirements.txt" }}-4 paths: - "venv" - run: command: './venv/bin/pytest -svv --junitxml=test-results.xml' - store_test_results: path: test-results.xml api-alembic-migrations: docker: - image: cimg/python:3.11 - image: cimg/postgres:15.6 environment: POSTGRES_USER: wrolpi POSTGRES_DB: wrolpi POSTGRES_PASSWORD: "wrolpi" resource_class: medium steps: - checkout - restore_cache: key: deps-3.11-{{ checksum "requirements.txt" }}-4 - run: name: Install Requirements command: | python3 -m venv venv . venv/bin/activate pip install -r requirements.txt - save_cache: key: deps-3.11-{{ checksum "requirements.txt" }}-4 paths: - "venv" - run: command: ./venv/bin/python ./main.py db upgrade api-tests-3-12: docker: - image: cimg/python:3.12 - image: cimg/postgres:15.6 environment: POSTGRES_USER: postgres POSTGRES_DB: wrolpi POSTGRES_PASSWORD: "wrolpi" resource_class: medium steps: - checkout - run: sudo apt-get update - run: sudo apt-get install -y ffmpeg catdoc - restore_cache: key: deps-3.12-{{ checksum "requirements.txt" }}-4 - run: name: Install Requirements command: | python3 -m venv venv . venv/bin/activate pip install -r requirements.txt - save_cache: key: deps-3.12-{{ checksum "requirements.txt" }}-4 paths: - "venv" - run: command: './venv/bin/pytest -svv' sanic-api-start: docker: - image: cimg/python:3.11 steps: - checkout - restore_cache: key: deps-3.11-{{ checksum "requirements.txt" }}-4 - run: name: Install dependencies command: | python -m venv venv . venv/bin/activate pip install -r requirements.txt sudo mkdir -p /media/wrolpi - run: name: Start Sanic API command: | . venv/bin/activate sanic main:api_app -H 0.0.0.0 -p 8081 background: true - run: name: Test Sanic API command: | sleep 20 curl http://0.0.0.0:8081/api/echo - run: name: Stop Sanic API command: pkill -f sanic react-app-start: docker: - image: cimg/node:20.13 resource_class: large steps: - checkout - restore_cache: key: app-{{ checksum "app/package-lock.json" }} - run: cd app && npm install --legacy-peer-deps - save_cache: key: app-{{ checksum "app/package-lock.json" }} paths: - ./app/node_modules - run: name: Build React App command: cd app && DISABLE_ESLINT_PLUGIN=true npm run build - run: name: Start React App command: cd app && DISABLE_ESLINT_PLUGIN=true npm run start background: true - run: name: Test React App command: | sleep 20 curl http://0.0.0.0:3000/manifest.json - run: name: Stop React App command: pkill -f npm react-app-cypress-components-chrome: docker: - image: cypress/browsers:node-20.18.0-chrome-130.0.6723.69-1-ff-131.0.3-edge-130.0.2849.52-1 resource_class: small steps: - checkout - restore_cache: key: app-{{ checksum "app/package-lock.json" }} - run: cd app && npm install --legacy-peer-deps - run: name: Run Cypress component tests command: | cd app npx cypress run --component --browser chrome --reporter junit --reporter-options "mochaFile=test-results.xml" - store_artifacts: path: app/cypress/videos - store_artifacts: path: app/cypress/screenshots - store_test_results: path: app/test-results.xml react-app-cypress-components-firefox: docker: - image: cypress/browsers:node-20.18.0-chrome-130.0.6723.69-1-ff-131.0.3-edge-130.0.2849.52-1 resource_class: small steps: - checkout - restore_cache: key: app-{{ checksum "app/package-lock.json" }} - run: cd app && npm install --legacy-peer-deps - run: name: Run Cypress component tests command: | cd app npx cypress run --component --browser firefox --reporter junit --reporter-options "mochaFile=test-results.xml" - store_artifacts: path: app/cypress/videos - store_artifacts: path: app/cypress/screenshots - store_test_results: path: app/test-results.xml react-app-cypress-components-edge: docker: - image: cypress/browsers:node-20.18.0-chrome-130.0.6723.69-1-ff-131.0.3-edge-130.0.2849.52-1 resource_class: small steps: - checkout - restore_cache: key: app-{{ checksum "app/package-lock.json" }} - run: cd app && npm install --legacy-peer-deps - run: name: Run Cypress component tests command: | cd app npx cypress run --component --browser edge --reporter junit --reporter-options "mochaFile=test-results.xml" - store_artifacts: path: app/cypress/videos - store_artifacts: path: app/cypress/screenshots - store_test_results: path: app/test-results.xml workflows: wrolpi-api-tests: jobs: - sanic-api-start - api-tests-3-11 - api-alembic-migrations # - api-tests-3-12 Sanic does not yet support 3.12. wrolpi-app-test: jobs: - react-app-start - react-app-cypress-components-chrome - react-app-cypress-components-firefox - react-app-cypress-components-edge