Hexlet SICP

github action status Maintainability Codacy Badge codecov

Deploy

Читать на другом языке: English

Hexlet SICP — это сервис для тех, кто изучает книгу "Структура и интерпретация компьютерных программ". Отслеживайте свой прогресс и сравнивайте себя с другими в глобальной таблице лидеров.

Предварительно рекомендуем прочесть статью Как изучать Структуру и Интерпретацию Компьютерных Программ (SICP)

Участие в разработке

Известные ошибки

Q: Ошибка Illuminate\Session\TokenMismatchException: CSRF token mismatch.

A: Сбросить кеш конфига php artisan config:clear

Предварительные требования

Проверить зависимости PHP можно командой composer check-platform-reqs

Установка

Локальная установка

Для запуска на локальном интерпретаторе и SQLite:

make setup # первоначальная установка
make start # запуск сервера http://127.0.0.1:8000/
make test # запуск тестов

Запуск с БД PostgreSQL (разворачивается в Docker-контейнере)

  1. Установить зависимости и подготовить конфигурационный файл

    make setup
  2. Указать параметры подключения к БД в файле .env

    DB_CONNECTION=pgsql
    DB_HOST=localhost
    DB_PORT=54320
    DB_DATABASE=postgres
    DB_USERNAME=postgres
    DB_PASSWORD=secret
  3. Запустить контейнер с БД и сгенерировать записи

    make compose-start-database
    make db-prepare
  4. Запустить локальный веб-сервер

    make start

Установка в Docker

  1. Подготовить файл .env

    make env-prepare
  2. Указать параметры подключения к БД в файле .env

    DB_CONNECTION=pgsql
    DB_HOST=database
    DB_PORT=5432
    DB_DATABASE=postgres
    DB_USERNAME=postgres
    DB_PASSWORD=secret
  3. Собрать и запустить приложение

    make compose-setup # собрать проект
    make compose-start # запустить сервер http://127.0.0.1:8000/
    make compose-bash  # запустить сессию bash в docker-контейнере
    make test          # запустить тесты в docker-контейнере

Стандарты кодирования и прочие правила

  • Пулреквесты должны быть настолько маленькими, насколько это возможно с точки зрения здравого смысла
  • Весь код должен соответствовать стандартам кодирования PSR12 и Laravel (мы так же используем некоторые собственные правила, чтобы усложнить жизнь разработчика)
  • Пулреквест должен проходить все проверки CI
  • Все экшены контроллеров должны быть покрыты тестами (Начинаем писать тесты (правильно))
  • Формы делаются с помощью laraeast/laravel-bootstrap-forms
  • В подавляющем большинстве используется ресурсный роутинг. Что под него не подходит, сначала обсуждается (такое бывает крайне редко)
  • Тексты только через локали
  • Чтобы включить логирование Rollbar, необходимо установить переменную LOG_CHANNEL=rollbar и ROLLBAR_TOKEN= (документация)
  • Чтобы добавить упражнение, необходимо добавить его содержимое (код или картинка) по пути resources/views/exercise/listing/#_#.blade.php, а текстовое описание в resources/lang/{locale}/sicp.php под ключем exercises.#.# на соответствующем языке.
  • Для генерации хелперов (для автодополнения) используйте make ide-helper
  • Изучите список доступных команд php artisan!

Руководство по настройке авторизации через GitHub

Зарегистрируйте приложение на GitHub (подробнее https://developer.github.com/apps/about-apps/).

Для этого:

  • В меню учетной записи GitHub выберите пункт “Settings”
  • В открывшемся окне в панели навигации, справа, выберите “GitHub Apps”, затем нажмите кнопку “New GitHub App”
  • В открывшейся форме в поле "GitHub App name" введите название приложения (например, Hexlet-SICP)
  • В поле Homepage URL — адрес ресурса (например, https://hexlet-sicp.herokuapp.com)
  • В поле "User authorization callback URL" введите полный URL-адрес для перенаправления после того, как пользователь авторизует приложение на GitHub. (например, https://hexlet-sicp.herokuapp.com/oauth/github/callback)
  • В поле "Webhook URL" укажите URL-адрес, по которому будут отправляться события (например, https://hexlet-sicp.herokuapp.com/oauth/github/callback)
  • Откройте права на получение информации о e-mail пользователя (User permissions->Email addresses->Read only)
  • Сохраните данные регистрации приложения (кнопка "Create GitHub App")
  • На открывшейся странице приложения скопируйте Client ID и Client secret
  • Cгенерируйте закрытый ключ (кнопка Generate a private key)

В случае деплоя на Heroku, задайте переменные окружения для развернутого приложения.

Для этого:

  • Перейдите на вкладку "Settings"
  • В настройке "Config Vars" добавьте переменные GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET и GITHUB_URL_REDIRECT указав для них соответвенно значения Client ID, Client secret и User authorization callback URL
  • После чего выпольните сброс кеша конфигурации: heroku run php artisan config:cache

Альтернативный профиль БД для тестирования

  1. Создать отдельную тестовую базу postgres. Настройки параметров подключения можно посмотреть в секции pgsql_test конфигурации config/database.php

    Пример создания тестовой базы "с нуля":

    sudo apt install postgresql
    sudo -u postgres createuser --createdb $(whoami)
    sudo -u postgres createuser hexlet_sicp_test_user
    sudo -u postgres psql -c "ALTER USER hexlet_sicp_test_user WITH ENCRYPTED PASSWORD 'secret'"
    createdb hexlet_sicp_test
  2. Запустить тесты с альтернативным профилем DB_CONNECTION=pgsql_test make test

Добавить пре-комит хук

git config core.hooksPath .githooks

Hexlet Ltd. logo

Этот репозиторий создан и поддерживается командой и сообществом образовательного проекта Hexlet. Подробнее о Hexlet