हाल ही में मैं सीएलआई ऐप्स का काफी प्रशंसक बन गया हूं। शायद यह मेरे बचपन के टर्मिनल का आकर्षण है (486/33 पर DOS और मेरे पिता के पुराने Apple IIe से शुरू)। मैं जेन एक्स कमोडोर64 युग के लिए बहुत देर से पैदा हुआ था, लेकिन अभी विंडोज 95 के अलावा और अधिक जानने का समय है। यह दिलचस्प युग था, जब डायल अप और 56के मॉडेम राजा थे। मुझे पता है कि इन दिनों अधिकांश ब्लॉग पोस्ट में एसईओ के लिए शब्द गणना को कम करने के लिए इंट्रो फ़्लफ़ होता है, लेकिन वास्तव में यही कारण है कि मैं अभी भी सीएलआई को पसंद करता हूं, जबकि इन दिनों बहुत से युवा लोग केवल जीयूआई ऐप्स जानते हैं। जनरल ज़ेड के बच्चों को साधारण कार्यों के लिए भी टर्मिनल में आग उगलते हुए देखने से ज्यादा खुशी मुझे किसी और चीज़ से नहीं होती। यार, जनरल अल्फ़ा को यह पता चलने तक प्रतीक्षा करो कि बीबीएस क्या है। "दादाजी कंप्यूटर" वे शायद कहेंगे? "मेरे लॉन से हट जाओ" ✊✊
CLI प्यार को वापस लाने के लिए CoolRetroTerm जैसी परियोजनाएं निश्चित रूप से मेरे दिल में एक गर्मजोशी भरी जगह रखती हैं। मैं अभी भी माइक्रो में अपनी कुछ ब्लॉगिंग अपनी पुरानी नेटबुक पर करना पसंद करता हूं, आइए वास्तव में आप सिर्फ लिखने पर ध्यान केंद्रित करें। मुझे लगता है कि VSCode ZenMode और MarkText करीब आ गए हैं?
flowchart LR Build_App --> GH_Actions --> ??? --> Profit!!!
वैसे भी, मैं विषयांतर कर रहा हूं...
तो अपना छोटा सीएलआई ऐप स्टैम्पी लिखने के बाद मुझे एक छोटी सी समस्या का सामना करना पड़ा, इसे कैसे वितरित किया जाए? मैं कम से कम इतना समझदार था कि पाइथॉन पैकेजिंग के भयानक प्रकोप से बचने के लिए इसे GoLang में लिख सकता था (जितना मैं इसे पाइथॉन में बनाना चाहता था)। एक बात जिसने मुझे हमेशा आश्चर्यचकित किया है, वह यह कि लोग अपने अच्छे सीएलआई ऐप्स को एपीटी और वाईयूएम जैसे फैंसी पैकेज प्रबंधन सिस्टम पर कैसे प्रकाशित करते हैं।
आम तौर पर अपना ऐप बनाने के लिए आपको बस एक साधारण गो बिल्ड करना होगा। और बूम, तत्काल बाइनरी। यह स्थानीय विकास के लिए जितना अच्छा है, यह क्रॉस प्लेटफ़ॉर्म संकलन के लिए उतना अच्छा नहीं है। आपको यह कैसे करना है यह दिखाने के लिए कुछ अच्छे मार्गदर्शक हैं, लेकिन... tl;dr मेरे लिए ??। इसलिए मैंने कुछ और खोजबीन की, वहाँ एक अच्छा उपकरण होना चाहिए... और निश्चित रूप से, वहाँ GoReleaser है!
कुछ बहुत अच्छी तरह से लिखे गए दस्तावेज़ों को पढ़ने के बाद, मैं एक त्वरित स्थानीय क्रॉस प्लेटफ़ॉर्म निर्माण करने में सक्षम हुआ, जो आसान है।
goreleaser --snapshot --clean
GitHub रिलीज़ के साथ निर्माण करना भी आसान था, क्योंकि उनके पास पहले से लिखी गई अच्छी GH क्रियाएँ हैं!
उपयोगकर्ता अब ईगेट (अच्छा) और स्टू (बहुत बेहतर) जैसे टूल के साथ मेरा ऐप इंस्टॉल कर सकते हैं!
हालांकि आप github.com/xxx भी इंस्टॉल कर सकते हैं, बस रेपो को क्लोन करना होगा, इसे स्थानीय रूप से बनाना होगा, और बिन को अपने $GOBIN फ़ोल्डर में डालना होगा। वास्तव में उचित पैकेज प्रबंधन टूलींग के समान नहीं है, लेकिन उन लोगों के लिए चुटकी में काम करता है जिनके पास पहले से ही गो इंस्टॉल है । वास्तव में औसत उपयोगकर्ता IMHO के लिए कोई विकल्प नहीं है। ?
और इतना ही नहीं, GoReleaser पैकेजिंग भी प्रदान करता है! तो अब आप आसानी से DEB और RPM तैयार कर सकते हैं। मैं डरे हुए एप्ट-गेट इंस्टाल स्टैम्पी के एक कदम और करीब था। केवल एक चीज गायब थी कि एपीटी रेपो कैसे बनाया जाए। यह अंतिम मुख्य भाग निश्चित रूप से आसान नहीं है। मैंने लगभग एक घंटा यह जानने में बिताया कि GitHub पेजों के साथ इसे स्वयं कैसे होस्ट किया जाए, और हालांकि यह संभव है, $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 फ़ाइल जैसी चीजें ठीक से सेटअप हैं, या आपको अपने ऐप को ठीक से प्रकाशित करने में समस्याओं का सामना करना पड़ेगा।
साइड नोट: आप अपना ऐप होमब्रू के साथ भी वितरित कर सकते हैं, लेकिन पीएटी रहस्यों से जुड़ी अतिरिक्त जीएच क्रियाओं की जटिलता और इस तथ्य के कारण कि मैं एप्ट के साथ बहुत अच्छी तरह से कवर हूं, मुझे कोई परेशानी नहीं हुई। यम, और स्टू... स्वादिष्ट! ?
किसी ऐप को जारी करते समय यह मुझे दूसरी बड़ी चीज़ की ओर ले जाता है। ?दस्तावेज़ीकरण? और बहुत उपेक्षित Readme.md?!
कुछ ऐसे तत्व हैं जो मुझे लगता है कि किसी भी अच्छे रीडमी में होने चाहिए, क्योंकि वे आपके ऐप को उन सभी ऐप्स से अलग दिखने में मदद करेंगे जिनके पास बहुत कम या कोई दस्तावेज़ीकरण नहीं है, या इससे भी बदतर, खराब दस्तावेज़ीकरण है।
मैं अत्यधिक अनुशंसा करता हूं कि आप अपना स्वयं का रीडमी तैयार करने के लिए इस प्रारूप का पालन करें! मैं स्वभाव के लिए बैज का बहुत बड़ा प्रशंसक हूं, लेकिन मुझे ऐसा लगता है कि एक छोटा सा GIF डेमो वास्तव में लोगों को दिखाता है कि यह क्या है, जैसे आपके जीयूआई ऐप्स के स्क्रीनशॉट को सूचीबद्ध करना। ASCIINEMA का उपयोग करना काफी आसान था, और उनके पास सब कुछ सही दिखने के लिए एक अच्छा GIF कनवर्टर भी है।
? बख्शीश
एक साइड नोट के रूप में मैंने CodeGPT से मुझे कुछ GoLang यूनिट परीक्षण लिखने को कहा, जिनके बारे में मुझे पता है कि उन्हें लिखना आम तौर पर दर्दनाक होता है। यदि आप JetBrains सुइट पर हैं तो यह एक शानदार प्लगइन है।
जैसे ही मैंने पाइथॉन ऐप्स को प्रकाशित करना सीखा, मुझे यह कहते हुए खुशी हो रही है कि मुझे लगता है कि मैं आगे चलकर GoLang में लिखे गए किसी भी ऐप को ठीक से वितरित कर सकता हूं। यह एक अच्छा कौशल है जिसे मैंने सीखा है, और इस ब्लॉग पोस्ट के साथ, मुझे उम्मीद है कि यह दूसरों को भी ऐसा करने में मदद कर सकता है! प्रोत्साहित करना!
-जेलोईटर
? मैस्टोडॉन | ? ईमेल | ? टिप्पणियाँ | ☕ मेरे लिए एक कॉफ़ी खरीदें
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3