Gitea को स्वचालित रूप से अपडेट करना चाहता हूँ

5 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

नमस्ते, मैं अक्षम हूँ।
आज भी मैंने टाइपो किया, लेकिन मैं इसे ऐसे ही रहने दूँगा।

मूल रूप से, मैं Git सर्वर को ज्यादा छेड़ना नहीं चाहता और न ही बहुत अधिक परिचालन संबंधी बातों के बारे में सोचना चाहता हूँ, इसलिए मैं इसे स्वचालित रूप से अपडेट करना चाहता हूँ।
यह Gitea का एक अच्छा और बुरा पहलू भी है, लेकिन Gitea एक एकल बाइनरी है जो फ्रंटएंड और बैकएंड दोनों को सरल बनाता है।
तो, मुझे बस बाइनरी खींचने की जरूरत है।

बाइनरी को स्थायी रूप से कैसे सहेजें

तो, मैं बाइनरी को स्थायी रूप से सहेजना चाहता हूँ, और ऐसा लगता है कि इसे Releases से प्राप्त किया जा सकता है। Releases · go-gitea/gitea · GitHub
इसका मतलब है कि मुझे बस यहाँ से सेव डेस्टिनेशन URL खींचना होगा।

API को कॉल करने का प्रयास करें

नीचे डाउनलोड डेस्टिनेशन URL प्राप्त किया जा सकता है।

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'

आदर्श रूप से, मैं इसे यहाँ से jq के साथ और अधिक फ़िल्टर करना चाहता हूँ, लेकिन json के key:value को देखते हुए, ऐसा लगता है कि यह संभव नहीं है, इसलिए मुझे बस इसके बाद वांछित बाइनरी को grep करना होगा। *1


*1 hymkor (HAYAMA_Kaoru) · GitHub ने मुझे बताया कि ऐसा नहीं हो सकता, इसलिए मुझे हाल ही में काम पर jq का उपयोग करते समय याद आया और मैं नीचे दिए गए तरीके से केवल लक्षित ऑब्जेक्ट को निकाल पाया।

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '

या

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '

तो, यह कहना गलत था कि यह नहीं किया जा सकता (तेहेपेरो)
बाकी को मेरी बकवास समझें।


तो, मैंने ऐसा किया।

$ curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url' | grep linux-amd64$ 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  171k    0  171k    0     0   291k      0 --:--:-- --:--:-- --:--:--  291k
https://github.com/go-gitea/gitea/releases/download/v1.23.4/gitea-1.23.4-linux-amd64

वर्तमान संस्करण से अंतर

हर बार एक नई बाइनरी तैनात करने से ट्रैफ़िक बर्बाद होगा, इसलिए इसे यहाँ से निर्धारित करना आवश्यक है।
सबसे आसान तरीका Gitea के वर्तमान संस्करण की जाँच करना और उसे grep -qi करना होगा।

$ gitea -v | awk '{printf $3}'
1.22.4

इसे एक वेरिएबल में संग्रहीत करें।

पूर्ण

तो, यह ऐसा हो गया।

#!/bin/bash

# give me root

BINARY_URL=$(curl https://api.github.com/repos/go-gitea/gitea/releases/latest |\
  jq -r '.assets[].browser_download_url' |\
  grep linux-amd64$ )

NOW_GITEA_V=$(gitea -v | awk '{printf $3}')
DAEMON_RESTART="service gitea restart"

if ! echo $BINARY_URL | grep -qi $NOW_GITEA_V ; then
  wget -O gitea $BINARY_URL
  chmod +x gitea || exit 2
  mv gitea /usr/local/bin/gitea
  $DAEMON_RESTART 
else
  exit 0
fi

यदि इसे रूट के क्रॉनटैब में रखा जाता है, तो यह एक आवधिक स्क्रिप्ट के रूप में चलेगा।
सबसे पहले, यदि chmod विफल हो जाता है, तो यह exit 2 के साथ बाहर निकल जाएगा, इसलिए कोई अजीब व्यवहार होने की संभावना नहीं है।

मैं खुद महसूस करता हूँ कि Gitea बहुत समृद्ध है, फिर भी मैं इसका उपयोग कर रहा हूँ, यह मेरी कमी है।

Related Posts