لقد أصبحت معجبًا جدًا بتطبيقات CLI مؤخرًا. ربما يكون السبب هو جاذبية محطة طفولتي (بدءًا من DOS على 486/33 وجهاز Apple IIe القديم الخاص بوالدي). لقد ولدت متأخرًا بعض الشيء بالنسبة لعصر Gen X Commodore64، ولكن في الوقت المناسب لمعرفة المزيد عن Windows 95 فقط. لقد كان عصرًا مثيرًا للاهتمام، عندما كان الاتصال الهاتفي وأجهزة المودم 56 كيلو بايت هو الملك. أعلم أن معظم منشورات المدونات هذه الأيام تحتوي على مقدمة زغبية، لزيادة عدد الكلمات لتحسين محركات البحث، ولكن هذا هو السبب في أنني ما زلت أحب واجهة سطر الأوامر (CLI) عندما لا يعرف الكثير من الشباب هذه الأيام سوى تطبيقات واجهة المستخدم الرسومية (GUI). لا شيء يجعلني أكثر سعادة من رؤية أطفال الجيل Z وهم يقومون بتشغيل الجهاز، حتى في المهام البسيطة. يا رجل، انتظر حتى يكتشف الجنرال ألفا ما هو BBS. ربما سيقولون "أجهزة كمبيوتر الجد"؟ "اخرج من حديقتي" ✊✊
من المؤكد أن مشاريع مثل CoolRetroTerm لها مكان دافئ في قلبي، لاستعادة حب CLI. ما زلت أفضّل أن أقوم ببعض مدوناتي بلغة Micro على جهاز Netbook القديم الخاص بي، فلنركز حقًا على الكتابة فقط. أعتقد أن VSCode ZenMode و MarkText يقتربان؟
flowchart LR Build_App --> GH_Actions --> ??? --> Profit!!!
على أية حال، أنا استطرادا...
إذن بعد كتابة تطبيق CLI الصغير الخاص بي Stampy، واجهت مشكلة صغيرة، كيف يمكنني توزيعه؟ لقد كنت على الأقل ذكيًا بما يكفي للتفكير في كتابته في GoLang (بقدر ما كنت أرغب في بنائه في Python) لتجنب غضب Python Packaging المخيف. الشيء الوحيد الذي كان يحيرني دائمًا هو كيفية نشر الأشخاص لتطبيقات CLI الرائعة الخاصة بهم لأنظمة إدارة الحزم الفاخرة مثل APT وYUM.
عادةً لإنشاء تطبيقك، ما عليك سوى إجراء عملية إنشاء بسيطة. والازدهار، ثنائي فوري. على الرغم من روعة هذا بالنسبة للمطورين المحليين، إلا أنه لا يفيد كثيرًا عمليات التجميع عبر الأنظمة الأساسية. هناك بعض الإرشادات الرائعة التي توضح لك كيفية القيام بذلك، ولكن… tl;dr بالنسبة لي؟؟. لذلك قمت بمزيد من البحث، وكان لا بد من وجود أداة رائعة... وبالتأكيد، هناك GoReleaser!
بعد قراءة بعض الوثائق المكتوبة بشكل جيد للغاية، تمكنت من إنشاء بناء محلي سريع عبر الأنظمة الأساسية، وهو أمر سهل.
goreleaser --snapshot --clean
كان تنفيذ الإصدارات باستخدام إصدارات GitHub أمرًا سهلاً أيضًا، نظرًا لأنها تحتوي على إجراءات GH مكتوبة مسبقًا!
يمكن للمستخدمين الآن تثبيت تطبيقي باستخدام أدوات مثل eget (جيد) والحساء (طريقة أفضل)!
بينما يمكنك أيضًا تثبيت github.com/xxx، كل ما سيفعله هذا هو استنساخ الريبو، وإنشائه محليًا، ووضع السلة في مجلد GOBIN $ الخاص بك. لا تشبه حقًا أدوات إدارة الحزم المناسبة، ولكنها تعمل بشكل مناسب للأشخاص الذين قاموا بالفعل بتثبيت Go . ليس حقًا خيارًا للمستخدم العادي IMHO. ?
وليس ذلك فحسب، تقدم GoReleaser التغليف أيضًا! حتى الآن يمكنك بسهولة صياغة DEBs وRPMs. لقد كنت على بعد خطوة واحدة من apt-get install stampy الخائف. الشيء الوحيد المفقود هو كيفية إنشاء مستودع APT. هذا الجزء الرئيسي الأخير ليس سهلاً بالتأكيد. لقد أمضيت ساعة أو نحو ذلك في البحث عن كيفية استضافة هذا الأمر ذاتيًا باستخدام صفحات GitHub، وعلى الرغم من إمكانية تنفيذ ذلك، إلا أنه كان من الأسهل بكثير استخدام خدمة مجانية مثل Packagecloud للتعامل مع التوقيع واستضافة الريبو بتكلفة منخفضة منخفضة تبلغ 0 دولارًا أمريكيًا لكل شهر؟.
يمكنك مشاهدة مثال لسير العمل بأكمله هنا
سأقوم أيضًا بتضمين نسخة مختصرة منه هنا في مقطع برمجي، لأي شخص يعثر على مشاركة المدونة نفسها.
للحصول على نظرة عامة عالية المستوى، يقوم GHA بما يلي:
name: Release on: pull_request: push: # run only against tags tags: - "*" permissions: contents: write packages: write issues: write jobs: goreleaser: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: stable - name: Release config run: | cat /tmp/goreleaser-github.yaml project_name: EXAMPLE version: 2 builds: - env: [CGO_ENABLED=0] goos: - linux goarch: - amd64 nfpms: - maintainer: YOUbindir: /usr/local/bin description: Copy formatted timestamp to system clipboard homepage: https://github.com/USERNAME/REPO license: MIT formats: - deb release: draft: false # If set to true, will not auto-publish the release. replace_existing_draft: true replace_existing_artifacts: true target_commitish: "{{ .Commit }}" prerelease: auto make_latest: true mode: replace include_meta: true EOF - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser # 'latest', 'nightly', or a semver version: "~> v2" args: release --clean --verbose --config /tmp/goreleaser-github.yaml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload .deb artifact x86 uses: actions/upload-artifact@v3 with: name: deb-package path: dist/*amd64.deb pkgcld_amd64-deb: runs-on: ubuntu-latest needs: - goreleaser strategy: max-parallel: 3 matrix: distro: - debian/bookworm - ubuntu/noble - ubuntu/jammy steps: - name: Download .deb artifact uses: actions/download-artifact@v3 with: name: deb-package - name: Push package to packagecloud.io uses: computology/[email protected] with: package-name: ./*.deb packagecloud-username: USERNAME packagecloud-reponame: APP_NAME packagecloud-distro: ${{ matrix.distro }} packagecloud-token: ${{ secrets.PACKAGECLOUD_TOKEN }}
ℹ️ هام
ستحتاج إلى التأكد من إعداد أشياء مثل بنية البرنامج وملف go.mod بشكل صحيح، وإلا فسوف تواجه مشكلات في نشر تطبيقك بشكل صحيح.
ملاحظة جانبية: يمكنك أيضًا توزيع تطبيقك باستخدام Homebrew، لكنني لم أزعج نفسي بسبب التعقيد الإضافي لإجراءات GH الذي يتضمن أسرار PAT وحقيقة أنني مغطى جيدًا بـ Apt، يم، و يخنة… لذيذة! ?
يقودني هذا إلى الشيء الثاني المهم عند إصدار التطبيق. ?الوثائق? وReadme.md المهمل كثيرًا؟!
هناك بعض العناصر التي أعتقد أنه يجب أن يمتلكها أي ملف تمهيدي لائق، لأنها ستساعد تطبيقك على التميز من بين جميع التطبيقات مع القليل من الوثائق أو بدونها، أو الأسوأ من ذلك، وثائق سيئة.
أوصي بشدة باتباع هذا التنسيق لصياغة الملف التمهيدي الخاص بك! أنا من أشد المعجبين بالشارات الخاصة بالذوق، ولكني أرغب في الحصول على عرض توضيحي صغير لـ GIF يُظهر للأشخاص ما يدور حوله، تمامًا مثل إدراج لقطات شاشة لتطبيقات واجهة المستخدم الرسومية الخاصة بك. كان استخدام ASCIINEMA سهلاً بما فيه الكفاية، كما أن لديهم محول GIF الرائع أيضًا لجعل كل شيء يبدو على ما يرام.
؟ نصيحة
كملاحظة جانبية، طلبت من CodeGPT أن يكتب لي بعض اختبارات وحدة GoLang، والتي أعرف أنها عادة ما تكون مؤلمة عند كتابتها. إنه مكون إضافي رائع إذا كنت تستخدم مجموعة JetBrains.
على غرار ما حدث عندما شرعت في تعلم كيفية نشر تطبيقات Python، يسعدني أن أقول إنني أشعر أنني أستطيع توزيع أي تطبيق أكتبه في GoLang بشكل صحيح من الآن فصاعدا. إنها مهارة رائعة اكتسبتها، ومن خلال مشاركة المدونة هذه، آمل أن تساعد الآخرين على فعل الشيء نفسه! هتافات!
-جيلويتر
؟ المستودون | ؟ البريد الإلكتروني | ؟ التعليقات | ☕ اشتري لي قهوة
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3