طريقة رائعة لتشغيل بيئة تطوير

مرحباً بالجميع، أشارك معكم سكربت مفيد قمت بإعداده لمساعدتي في تشغيل بيئة التطوير الخاصة بـ Discourse.

يقوم بسحب جميع التغييرات الأخيرة، وسحب التحديثات من الإضافات المثبتة، وتشغيل جميع عمليات الترحيل، بالإضافة إلى تثبيت الجيمات (gems) وحزم pnpm اللازمة.

العيب في السكربت هو أنه يسحب أيضًا الإضافات المضمنة مع النواة (core)، والتي لن تفعل شيئًا من الناحية الفنية نظرًا لأنه سيتم تحديثها مع أول git pull. لا بأس.

ملاحظة: ساعدني موقع chatgpt.com في كتابة منطق عبارة if (تجاربي الأولية فشلت).
~/rundiscourse.sh:

#!/bin/bash

cd ~/discourse
git pull
cd plugins
PLUGIN_DIR=~/discourse/plugins

for folder in "$PLUGIN_DIR"/*; do
  if [ -d "$folder/.git" ]; then
    output=$(git -C "$folder" pull)
    if ! echo "$output" | grep -q "Already up to date."; then
      echo "[$(basename "$folder")] $output"
    fi
  fi
done
cd ~/discourse
bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u

ثم، قم بتشغيل:

chmod +x rundiscourse.sh

ثم، انتقل إلى ملف ~/.bashrc (باستخدام nano، أو أي محرر آخر)، وأضف هذا الجزء إذا لم يكن موجودًا بالفعل (يكون بالقرب من الأسفل)

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

ثم، أضف ما يلي إلى ملف ~/.bash_aliases:

alias discourse="~/rundiscourse.sh"

أغلق الطرفية وأعد فتحها.
الآن، عند تشغيل discourse في الطرفية، يجب أن تبدأ بيئة التطوير الخاصة بك!


آمل أن يكون هذا مفيدًا! أيضًا، لا تتردد في إخباري إذا كنت أفعل شيئًا خاطئًا، أو إذا كان يمكن تحسينه. شكرًا!

إعجاب واحد (1)

لطيف. بعض الاقتراحات.

يجب أن يكون الـ shebang #!/usr/bin/env sh، وهو الأكثر قابلية للنقل. لا يستخدم البرنامج النصي أي bash-isms لذا يجب أن يعمل في أي shell متوافق مع Bourne shell، وليس فقط bash.

بعد الـ shebang أضف set -e. سيؤدي هذا إلى خروج البرنامج النصي إذا فشلت أي من الأوامر. وإلا فإنه سيستمر بسعادة في تنفيذ الأوامر والفشل لاحقًا لأن شيئًا مثل bundle install فشل، وقد اختفى ناتج الخطأ الآن من شاشة المستخدم.

الآن سحب git للمكون الإضافي يمثل مشكلة أكبر قليلاً لأن الأخطاء المكتوبة إلى STDERR وتنفيذ git الفاشل لن يتم التعامل معها بشكل صحيح. لذلك دفعت STDERR أيضًا إلى STDOUT وتتبعت رمز الخروج.

لا حاجة لمجموعة من أوامر cd، أو تعيين متغير PLUGIN_DIR.

#!/usr/bin/env sh
set -e

cd ~/discourse
git pull

for folder in plugins/*; do
  if [ -d "$folder/.git" ]; then
    exitcode=0
    output=$(git -C "$folder" pull 2>&1) || exitcode=$?
    if echo "$output" | grep -q -v "Already up to date."; then
      echo "[$(basename "$folder")]"
      echo "$output"
      [ "$exitcode" -ne 0 ] && exit "$exitcode"
    fi
  fi
done

bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u

كان لدي بالفعل برنامج نصي مشابه، باستثناء سحب git لأنني لا أريد أن يحدث ذلك في كل مرة.

إعجاب واحد (1)

شكرا على هذه الرؤية! سأجرب ذلك!