SaaS વગર હું Bluesky પોસ્ટ્સ કેવી રીતે શેડ્યૂલ કરું છું
હું GitHub Actions અને JSONL ફાઇલનો ઉપયોગ કરીને દરરોજ ત્રણ Bluesky પોસ્ટ્સ શેડ્યૂલ કરું છું. હું કોઈ બાહ્ય શેડ્યૂલિંગ સર્વિસનો ઉપયોગ કરતો નથી.
આ સિસ્ટમ એક જ ફાઇલનો ઉપયોગ કરીને કામ કરે છે: content/bluesky-queue.jsonl.
આ ફાઇલમાં દરેક લાઇન એક JSON ઓબ્જેક્ટ છે.
- જે લાઇન હજુ પોસ્ટ નથી થઈ તેમાં ફક્ત ટેક્સ્ટ હોય છે.
- જે લાઇન પોસ્ટ થઈ ગઈ છે તેમાં ટાઇમસ્ટેમ્પ અને પોસ્ટ URI શામેલ છે.
સ્ક્રિપ્ટ ફાઇલને ઉપરથી નીચે સુધી વાંચે છે. તે ટાઇમસ્ટેમ્પ વગરની પ્રથમ લાઇન શોધે છે, તેને પોસ્ટ કરે છે, અને પછી તે લાઇનને અપડેટ કરે છે.
હું ડેટાબેઝને બદલે JSONL શા માટે વાપરું છું:
- Git માં ફેરફારો ટ્રેક કરવા સરળ છે.
- કોઈપણ CI જોબ ફાઇલમાં નવી લાઇન ઉમેરી શકે છે.
- તે સેટઅપને સરળ અને મફત રાખે છે.
Handling Bluesky API Requirements Bluesky ને લિંક્સ અને હેશટેગ્સ માટે "facets" ની જરૂર હોય છે. તમે ફક્ત ટેક્સ્ટ જ મોકલી શકતા નથી. તમારે આ એલિમેન્ટ્સ માટે ચોક્કસ બાઇટ પોઝિશન (byte positions) આપવી પડે છે.
હું આ પોઝિશનની ગણતરી કરવા માટે સ્ક્રિપ્ટનો ઉપયોગ કરું છું. હું UTF-8 બાઇટ ઓફસેટ્સ મેળવવા માટે TextEncoder નો ઉપયોગ કરું છું. આનાથી ઇમોજીનો ઉપયોગ કરતી વખતે ભૂલો થતી અટકાવી શકાય છે. કેરેક્ટર્સ અને બાઇટ્સ એક સમાન નથી.
Optimizing GitHub Actions જો તમે કલાકની શરૂઆતમાં જ જોબ્સ શેડ્યૂલ કરો છો, તો GitHub Actions ઘણીવાર મોડું ચાલે છે. આને સુધારવા માટે, હું 'off-minute offset' નો ઉપયોગ કરું છું. 00:00 ને બદલે, હું 23:37 નો ઉપયોગ કરું છું. આનાથી વિલંબ ઘટે છે.
હું પોસ્ટ કરતા પહેલા 0 થી 5 મિનિટ વચ્ચે રેન્ડમ વિલંબ (random delay) પણ ઉમેરું છું. આનાથી પોસ્ટિંગ પેટર્ન વધુ માનવીય લાગે છે. તે ચોક્કસ મશીન ટાઇમિંગથી બચે છે જેને કેટલાક અલ્ગોરિધમ્સ ઓછું મહત્વ આપે છે.
Preventing Infinite Loops જ્યારે સ્ક્રિપ્ટ ક્યૂ (queue) ને અપડેટ કરે છે, ત્યારે તે ફેરફારને રિપોઝિટરીમાં કમિટ (commit) કરે છે. આનાથી વર્કફ્લો ફરીથી ટ્રિગર થઈ શકે છે.
હું આ સમસ્યાને કમિટ મેસેજ ગાર્ડ (commit message guard) દ્વારા ઉકેલું છું:
- સ્ક્રિપ્ટ કમિટ મેસેજમાં [skip bluesky-queue] ઉમેરે છે.
- વર્કફ્લો આ ટેગ તપાસે છે.
- જો ટેગ અસ્તિત્વમાં હોય, તો વર્કફ્લો ચાલતો નથી.
આ સિસ્ટમ AI-curated સાઇટ્સ સાથેના લાંબા ગાળાના પ્રયોગનો એક ભાગ છે. તે સરળ, સસ્તી અને વિશ્વસનીય રહે છે.
