name: Run tests on: push: branches: - main paths-ignore: - 'apple/**' pull_request: branches: - main paths-ignore: - 'apple/**' jobs: run-code-tests: name: Run Codebase tests runs-on: 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 elastic: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.1 env: discovery.type: single-node http.cors.allow-origin: '*' http.cors.enabled: true http.cors.allow-headers: 'X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization' http.cors.allow-credentials: true options: >- --health-cmd "curl http://0.0.0.0:9200/_cluster/health" --health-interval 10s --health-timeout 5s --health-retries 10 ports: - 9200 redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 10 ports: - 6379 steps: - uses: actions/checkout@v2 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@v2 with: node-version: 18.16 - 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: | yarn workspace @omnivore/db migrate psql -h localhost -p ${{ job.services.postgres.ports[5432] }} -U postgres -c "CREATE USER app_user WITH ENCRYPTED PASSWORD 'app_pass';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 ELASTIC_URL: http://localhost:${{ job.services.elastic.ports[9200] }}/ PGPASSWORD: postgres # This is required for the psql command to work without a password prompt - name: TypeScript, Lint, Tests run: | source ~/.nvm/nvm.sh yarn build yarn lint env: PG_HOST: localhost PG_PORT: ${{ job.services.postgres.ports[5432] }} PG_USER: app_user PG_PASSWORD: app_pass PG_DB: omnivore_test PG_POOL_MAX: 10 ELASTIC_URL: http://localhost:${{ job.services.elastic.ports[9200] }}/ REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} - name: Tests run: | source ~/.nvm/nvm.sh yarn test env: PG_HOST: localhost PG_PORT: ${{ job.services.postgres.ports[5432] }} PG_USER: app_user PG_PASSWORD: app_pass PG_DB: omnivore_test PG_POOL_MAX: 10 ELASTIC_URL: http://localhost:${{ job.services.elastic.ports[9200] }}/ REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} build-docker-images: name: Build docker images runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 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 content-fetch cloud function docker image run: 'docker build --file packages/content-fetch/Dockerfile-gcf .'