Задача проста. Необходимо в зависимости от окружения разрешать ботам видеть сайт или нет.

Дано:

  1. Сайт на react, single page, Create-react-app
  2. Сайт бегает на AWS S3 и имеет Code pipeline + builder как CI/CD
  3. Берет переменные окружения из якобы файлика .env, но на самом деле они в процессе сборки подливаются из AWS secrets и тп

То есть предположим, что нам доступны переменные окружения из .env. Тогда мы создаем папку bin в корне проекта и там создаем файлик updateRobots.sh (все имена на ваше усмотрение). Даем права нашему скрипту выполняться с помощью

sudo chmod 554 updateRobots.sh

И тогда в нашем package.json мы можем добавить следующее

"scripts": {
    "update-robots": "./bin/updateRobots.sh",
    "build": "npm run update-robots && react-scripts build",
}

А что же мы пишем в самом скрипте? А вот

#!/usr/bin/env bash

if [ -f .env ]
  then
    export $(cat .env | sed 's/#.*//g' | xargs)
    echo -e "Updating robots.txt"
    echo ${REACT_APP_ENVR}

    if [ ${REACT_APP_ENVR} == "prod" ]
    then
        printf "User-agent: *\nAllow: /"> public/robots.txt
    else
        printf "User-agent: *\nDisallow: /"> public/robots.txt
    fi
  else
    echo -e "No ENV file found"
    printf "User-agent: *\nDisallow: /"> public/robots.txt
  fi

Значит так, здесь мы говорим, что нам нужен .env, если он есть, то мы ищем переменную окружения с названием REACT_APP_ENVR, если таковая имеется, то проверяем - если prod, то можно ботам показывать, а если нет, то нельзя.