एक लेखक के रूप में, जब नई सामग्री प्रकाशित करने की बात आती है तो मैं निरंतरता के महत्व को समझता हूँ। हालाँकि, ऐसे समय होते हैं जब जीवन रास्ते में आ जाता है, और एक नया ब्लॉग पोस्ट लिखना याद रखना चुनौतीपूर्ण हो सकता है। अपने शेयरिंग शेड्यूल के साथ ट्रैक पर बने रहने में मेरी मदद करने के लिए, मैंने GitHub Actions का उपयोग करके एक साधारण रिमाइंडर बनाया। इस पोस्ट में, मैं साझा करूँगा कि मैंने यह वर्कफ़्लो कैसे बनाया।
GitHub क्रियाएँ एक शक्तिशाली उपकरण है जो आपको अपने वर्कफ़्लोज़ को स्वचालित करने की अनुमति देता है। आप इसका उपयोग अपने कोड के निर्माण, परीक्षण और परिनियोजन के लिए कर सकते हैं। आप इसका उपयोग अन्य कार्यों की एक विस्तृत श्रृंखला करने के लिए भी कर सकते हैं, जैसे सूचनाएँ भेजना या अनुस्मारक शेड्यूल करना।
ब्लॉग पोस्ट लिखने के लिए रिमाइंडर बनाने के लिए, मैं README.md के GitHub विशेष भंडार का उपयोग कर रहा हूं और .github/workflows/blog-posts.yml नाम की एक फ़ाइल जोड़ी है। इस फ़ाइल में, मैंने उस वर्कफ़्लो को परिभाषित किया है जिसे GitHub क्रियाएँ निष्पादित करेंगी। यहाँ फ़ाइल की प्रारंभिक सामग्री है:
name: Blog Posts on: schedule: - cron: '0 0 * * 0' # Run at 00:00 every Sunday workflow_dispatch: jobs: update-posts: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Update post list run: | sleep 1m curl -LO https://blog.imam.dev/feed.xml node src/list-posts.js rm feed.xml - name: Commit changes run: | git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git add -A git diff-index --quiet HEAD || git commit -m "Update blog posts" - name: Pull changes run: git pull -r - name: Push changes uses: ad-m/github-push-action@0fafdd62b84042d49ec0cb92d9cac7f7ce4ec79e with: github_token: ${{ secrets.GITHUB_TOKEN }}
यह कार्यप्रवाह हर रविवार को 00:00 बजे ट्रिगर किया जाता है। यह तब एक स्क्रिप्ट चलाता है जो ब्लॉग पोस्ट की सूची को अपडेट करता है। स्क्रिप्ट जावास्क्रिप्ट में लिखी गई है और मेरे ब्लॉग के RSS फ़ीड को पार्स करने के लिए फ़ीड पैकेज का उपयोग करती है। यह तब ब्लॉग पोस्ट की एक सूची बनाता है और README.md फ़ाइल को अपडेट करता है। अंत में, यह परिवर्तन करता है और उन्हें GitHub पर धकेलता है। मैं इस कार्यप्रवाह के संदर्भ के रूप में ओउआन के रिपॉजिटरी का उपयोग कर रहा हूं।
रिमाइंडर कहाँ से आया है? यह वास्तव में list-posts.js फ़ाइल में है। मैंने ब्लॉग पोस्ट की सूची में एक रिमाइंडर जोड़ा है। यहाँ फ़ाइल की सामग्री है:
const { readFileSync, writeFileSync } = require('fs') /** * Convert XML string to JSON * @param {string} xmlString * @returns {object} json */ const xmlToJson = (xmlString) => { const regex = /<(\w+)([^>]*)>([\s\S]*?)<\/\1>/gm const matches = xmlString.matchAll(regex) const json = {} for (const match of matches) { const [, key, attributes, value] = match const subMatches = value.matchAll(regex) const subJson = {} for (const subMatch of subMatches) { const [, subKey, subAttributes, subValue] = subMatch if (subValue.match(regex)) { if (Array.isArray(subJson[subKey])) { subJson[subKey].push( xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey] ) } else if (subJson[subKey]) { subJson[subKey] = [ subJson[subKey], xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey], ] } else { subJson[subKey] = xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey] } } else if (Array.isArray(subJson[subKey])) { subJson[subKey].push(subValue) } else if (subJson[subKey]) { subJson[subKey] = [subJson[subKey], subValue] } else { subJson[subKey] = subValue } } if (json[key]) { if (Array.isArray(json[key])) { json[key].push(subJson) } else { json[key] = [json[key], subJson] } } else { json[key] = subJson } } return json } /** * Sort JSON by pubDate * @param {object} json * @returns {object} sortedJson */ const sortJson = (json) => { json.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate)) return json } // Read XML file and convert to JSON const xmlString = readFileSync('feed.xml', 'utf8') const feeds = sortJson(xmlToJson(xmlString).rss.channel.item) // Create Markdown list of posts const posts = feeds .slice(0, 5) .map( (item) => `- ${new Date(item.pubDate).toISOString().split('T')[0]} [${item.title}](${ item.link }?utm_source=GitHubProfile)` ) // Update README.md if posts have changed, // otherwise throw an error to remind me to write a blog post const readme = readFileSync('README.md', 'utf8') if (readme.includes(posts.join('\n'))) { throw new Error('No new blog posts') } else { const updatedReadme = readFileSync('README.md', 'utf8').replace( /(?<=<!--START_SECTION:blog-posts-->\n)[\s\S]*(?=\n<!--END_SECTION:blog-posts-->)/, posts.join('\n') ) writeFileSync('README.md', updatedReadme) console.log('Updated README.md') }
स्क्रिप्ट मेरे ब्लॉग के RSS फ़ीड को पढ़ती है और ब्लॉग पोस्ट की सूची तैयार करती है। यह तब ब्लॉग पोस्ट की सूची के साथ README.md फ़ाइल को अपडेट करता है। यदि कोई नया ब्लॉग पोस्ट नहीं है, तो यह मुझे ब्लॉग पोस्ट लिखने के लिए याद दिलाने के लिए एक एरर फेंकता है।
यह केवल एक त्रुटि है जो स्क्रिप्ट निष्पादित होने पर फेंक दी जाएगी, जबकि पोस्ट अभी भी वही है और यह एक अनुस्मारक नहीं है जो मेरे ईमेल पर भेजा जाएगा या कुछ ऐसा जो मुझे अधिक दिखाई दे रहा है। इसलिए, मैंने किसी भी विफल वर्कफ़्लो रन के लिए अधिसूचना को सक्षम करने का निर्णय लिया।
यह कैसे करना है:
अब, जब स्क्रिप्ट निष्पादित हो जाएगी और कोई नया ब्लॉग पोस्ट नहीं होगा तो मुझे एक सूचना मिलेगी। मैं गिटहब वेबसाइट पर अधिसूचना भी देख सकता हूं।
पिछला वर्कफ़्लो जो मैं आपको बताता हूँ वह एक संशोधित संस्करण है इसलिए मेरा README.md हमेशा अद्यतित रहता है। मैंने ब्लॉग पोस्ट लिखने के लिए रिमाइंडर बनाने का दूसरा तरीका भी खोजा। लेकिन, यह बिना किसी README.md अपडेट मैकेनिज्म के एक शुद्ध रिमाइंडर है, बस एक रिमाइंडर है।
ब्लॉग पोस्ट लिखने के लिए रिमाइंडर बनाने के लिए, मैंने एक नया GitHub रिपॉजिटरी बनाया और .github/workflows/remind.yml
नाम की एक फ़ाइल जोड़ी। इस फ़ाइल में, मैंने उस वर्कफ़्लो को परिभाषित किया है जिसे GitHub क्रियाएँ निष्पादित करेंगी। यहाँ फ़ाइल की सामग्री है:
name: Reminder to write a blog post on: schedule: - cron: '0 10 * * 1-5' jobs: remind: runs-on: ubuntu-latest steps: - name: Send a reminder uses: dawidd6/[email protected] with: server_address: smtp.gmail.com server_port: 465 username: ${{ secrets.EMAIL_USERNAME }} password: ${{ secrets.EMAIL_PASSWORD }} subject: 'Reminder to write a new blog post' body: "Don't forget to write a new blog post today!" to: [email protected]
यह कार्यप्रवाह मुझे प्रत्येक सप्ताह के दिन सुबह 10:00 बजे एक ईमेल रिमाइंडर भेजता है, जो मुझे एक नया ब्लॉग पोस्ट लिखने की याद दिलाता है। मैंने ईमेल भेजने के लिए एक तृतीय-पक्ष कार्रवाई, dawidd6/action-send-mail का उपयोग किया। मैंने गिटहब रहस्य के रूप में अपना ईमेल प्रमाण-पत्र प्रदान किया है, इसलिए वे वर्कफ़्लो फ़ाइल में दिखाई नहीं दे रहे हैं।
मैंने ब्लॉग पोस्ट लिखने के लिए रिमाइंडर बनाने के दो तरीके खोजे हैं। पहला तरीका मेरे GitHub प्रोफ़ाइल की README.md फ़ाइल को अपडेट करना है। दूसरा तरीका ईमेल रिमाइंडर भेजने का है। मैं वर्तमान में पहले तरीके का उपयोग कर रहा हूं क्योंकि यह दूसरे तरीके से अधिक दृश्यमान है। जब भी मैं अपनी GitHub प्रोफ़ाइल पर जाता हूं, तो मैं रिमाइंडर देख सकता हूं।
GitHub Actions का उपयोग करके ब्लॉग पोस्ट लिखने के लिए रिमाइंडर बनाना आपके ब्लॉगिंग शेड्यूल के साथ ट्रैक पर रहने का एक सरल और प्रभावी तरीका है। इस कार्यप्रवाह के साथ, आप फिर से एक नई पोस्ट लिखना कभी नहीं भूलेंगे। यदि आप अपना स्वयं का रिमाइंडर वर्कफ़्लो बनाने में रुचि रखते हैं, तो अधिक जानने के लिए GitHub क्रियाएँ दस्तावेज़ देखना सुनिश्चित करें। हैप्पी ब्लॉगिंग!