name: CI Features - Admin

on: [pull_request]

jobs:
  rspec:
    runs-on: ubuntu-latest
    services:
      db:
        image: postgres
        env:
          ##
          # The Postgres service fails its docker health check unless you
          # specify these environment variables
          #
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: growstuff_test
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    env:
      APP_DOMAIN_NAME: localhost:3000
      APP_PROTOCOL: http
      CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
      DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
      DEVISE_SECRET_KEY: secret
      ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
      GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
      GROWSTUFF_FLICKR_KEY: secretkey"
      GROWSTUFF_FLICKR_SECRET: secretsecret
      GROWSTUFF_SITE_NAME: "Growstuff (travis)"
      RAILS_ENV: test
      RAILS_SECRET_TOKEN: supersecret

    steps:
      - name: Checkout this repo
        uses: actions/checkout@v5

      - name: Configure sysctl limits
        run: |
          sudo swapoff -a
          sudo sysctl -w vm.swappiness=1
          sudo sysctl -w fs.file-max=262144
          sudo sysctl -w vm.max_map_count=262144

      - name: Start Elasticsearch
        uses: elastic/elastic-github-actions/elasticsearch@master
        with:
          stack-version: 7.5.1

      ##
      # Cache Yarn modules
      #
      # See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
      #
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - name: Setup yarn cache
        uses: actions/cache@v4
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Install required OS packages
        run: |
          sudo apt-get -y install libpq-dev google-chrome-stable

      - name: Install NodeJS
        uses: actions/setup-node@v5
        with:
          node-version: '12'

      - name: Install Ruby (version given by .ruby-version) and Bundler
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true

      - name: Install required JS packages
        run: yarn install

      - name: install chrome
        run: sudo apt-get install google-chrome-stable

      - name: Prepare database for testing
        run: bundle exec rails db:prepare

      - name: precompile assets
        run: bundle exec rails assets:precompile

      - name: index into elastic search
        run: bundle exec rails search:reindex

      - name: Run rspec (places/)
        run: bundle exec rspec spec/features/places/ -fd

      - name: Upload screenshots
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: screenshots
          path: tmp/screenshots
