name: Run tests on: push: branches: - main paths-ignore: - 'apple/**' - 'android/**' pull_request: branches: - main paths-ignore: - 'apple/**' - 'android/**' env: NEXT_PUBLIC_APP_ENV: prod NEXT_PUBLIC_BASE_URL: http://localhost:3000 NEXT_PUBLIC_SERVER_BASE_URL: http://localhost:4000 NEXT_PUBLIC_HIGHLIGHTS_BASE_URL: http://localhost:3000 jobs: run-code-tests: name: Run Codebase tests runs-on: ${{ github.repository_owner == 'omnivore-app' && 'ubuntu-latest-m' || 'ubuntu-latest' }} services: postgres: image: ankane/pgvector env: POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432 redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 10 ports: - 6379 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Initialize the database run: | cp ./packages/api/.env.test ./packages/api/.env psql --host localhost --port ${{ job.services.postgres.ports[5432] }} --user postgres --password -c "CREATE DATABASE omnivore_test;" env: PGPASSWORD: postgres - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: 22.12.0 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(source ~/.nvm/nvm.sh && yarn cache dir)" - name: Install dependencies run: | source ~/.nvm/nvm.sh yarn install --frozen-lockfile - name: Database Migration run: | psql -h localhost -p ${{ job.services.postgres.ports[5432] }} -U postgres -c "CREATE USER app_user WITH ENCRYPTED PASSWORD 'app_pass';" yarn workspace @omnivore/db migrate psql -h localhost -p ${{ job.services.postgres.ports[5432] }} -U postgres -c "GRANT omnivore_user to app_user;" env: PG_HOST: localhost PG_PORT: ${{ job.services.postgres.ports[5432] }} PG_USER: postgres PG_PASSWORD: postgres PG_DB: omnivore_test PGPASSWORD: postgres # This is required for the psql command to work without a password prompt PG_EXTRA_OPTIONS: '-c lock_timeout=2000' - name: TypeScript Build and Lint run: | source ~/.nvm/nvm.sh yarn build yarn lint - name: Tests run: | source ~/.nvm/nvm.sh yarn test timeout-minutes: 10 env: PG_HOST: localhost PG_PORT: ${{ job.services.postgres.ports[5432] }} PG_USER: app_user PG_PASSWORD: app_pass PG_DB: omnivore_test PG_LOGGER: debug REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} MQ_REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} build-docker-images: name: Build docker images runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Build the API docker image run: 'docker build --file packages/api/Dockerfile .' - name: Build the content-fetch docker image run: 'docker build --file packages/content-fetch/Dockerfile .' - name: Build the inbound-email-handler docker image run: 'docker build --file packages/inbound-email-handler/Dockerfile .' - name: Build the tts docker image run: 'docker build --file packages/text-to-speech/Dockerfile .'