Автоматизация настройки плагина Discourse с помощью gem `create-discourse-plugin`

:mega: Этот плагин теперь включён в ядро Discourse. Использовать этот gem больше не нужно.
Для создания нового плагина используйте:
rake plugin:create[plugin-name]

С тех пор как я начал разрабатывать плагины для Discourse, мне казалось, что общую настройку можно сделать более простой. Мы должны обеспечить лучший опыт разработчика при создании плагина.

В этом духе я в свободное время создал gem под названием create-discourse-plugin

Что он делает?

Он клонирует и создаёт копию discourse-plugin-skeleton под вашим именем пользователя или организацией в зависимости от выбранного вами варианта. После этого он заменяет все заполнители на имя вашего плагина, делая его готовым к началу разработки.

Как использовать?

В том же духе, что и npx create-next-app или npx meteor

 gem exec create-discourse-plugin <plugin-name>

Требования

  • Установленный и рабочий GH CLI

Вклад

16 лайков

Спасибо! Я думал об этом каждый раз, когда создавал новый плагин за последние пару лет! Похоже, вы сделали это намного лучше, чем я мог бы. Не могу дождаться, чтобы попробовать!

6 лайков

Это так круто, так когда же ты настолько разозлишься, чтобы сделать

 gem exec create-discourse-theme <theme-name>

? :wink:

6 лайков

Это будет discourse_theme new :wink:


@grubba, как вы смотрите на то, чтобы интегрировать это в ядро в виде задачи Rake? Например:

bin/rake plugin:create

В любом случае, для работы с плагинами нужно иметь рабочую среду разработки ядра, так что это кажется логичным решением? Это также сделало бы процесс более «официальным» и упростило бы поддержку всей командой.

Интересно, не лучше ли сделать это полностью на основе Git, вместо того чтобы полагаться на использование GitHub (и наличие CLI gh)? Некоторые люди используют другие сервисы для хостинга своих плагинов, а также могут не хотеть, чтобы они сразу становились общедоступными.

В discourse_theme мы поддерживаем локальный кэш шаблона темы, поэтому это работает даже офлайн!

6 лайков

Дьявол! Я всегда использую только watch! И, кажется, когда я пробовал это давным-давно, я не помню. Но я забыл об этом. :exploding_head:

2 лайка

Думаю, это имеет смысл! Люди уже протестировали это, я получил несколько жалоб и отзывов, а также внес некоторые правки. Считайте, что оно уже в довольно хорошем состоянии, чтобы стать «официальным». В ближайшие несколько дней я займусь его добавлением в ядро.

Я согласен, что использование gh не является идеальным решением, и я найду способ это исправить. Возможно, то, что делает discourse_theme new, — это именно то, что мне нужно…

5 лайков

У меня отличные новости! Я только что объединил эту новую задачу Rake в основную ветку:

rake plugin:create[name]

Она работает аналогично гему, но не отправляет изменения в GitHub, оставляя вам выбор дальнейших действий — точно так же, как discourse_theme new.

Я помечу этот гем как устаревший, поскольку у нас теперь есть более официальное решение.

10 лайков

РЕДАКТ: Я удалил Gemfile.lock из .gitignore, как и было сказано. Теперь всё работает.

В .gitignore не допускается Gemfile.lock
Клонирование 'https://github.com/discourse/discourse-plugin-skeleton' в '/home/pfaffman/src/discourse-repos/discourse/plugins/discourse-public-bookmark-timers'...
Инициализация репозитория Git...
Инициализирован пустой репозиторий Git в /home/pfaffman/src/discourse-repos/discourse/plugins/discourse-public-bookmark-timers/.git/
Следующие пути игнорируются одним из ваших файлов .gitignore:
Gemfile.lock
подсказка: Используйте -f, если вы действительно хотите добавить их.
подсказка: Отключите это сообщение, выполнив
подсказка: "git config advice.addIgnoredFile false"
rake aborted!
Команда завершилась с ошибкой 1: git
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/plugin.rake:352:in `system'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/plugin.rake:352:in `block (2 levels) in <main>'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/plugin.rake:344:in `chdir'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/plugin.rake:344:in `block in <main>'
Задачи: TOP => plugin:create
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)

Я попытался снова после выполнения git config advice.addIgnoredFile false, но результат остался прежним.

А также:

$ gem exec create-discourse-theme discourse-public-bookmark-timers

ОШИБКА: Не удалось найти валидный gem 'create-discourse-theme' (>= 0) ни в одном репозитории
ОШИБКА: Возможные альтернативы: create-discourse-plugin, discourse_theme, askclass-course-theme, date_discreter, opensource-theme
1 лайк