SWUpdates-Alert: rimani aggiornato sul rilascio delle applicazioni

| |

Telegram

Ti aspetto nel canale Telegram dedicato agli aggiornamenti software attualmente sotto monitoraggio, @SWUpdate.
Suggeriscine di nuovi da tenere sotto controllo, scopri come fare leggendo l’articolo qui di seguito!

Ci sono una serie di software che ho bisogno di tenere d’occhio poiché, in caso di rilascio aggiornamento, mi serve farne pacchetti di distribuzione adatti al sistema che utilizziamo attualmente in azienda (Quest Kace). Ci sono diverse possibilità per arrivare allo stesso scopo: delegare l’azione al sistema di distribuzione (per i software compresi nella sua lista di rilascio / patching), iscriversi ai feed RSS quando e se disponibili, impostare un rilevamento delle modifiche a un particolare sito web.

Io ho optato per riprendere in mano quanto fatto – di base – per Firefox ESR / stabile in PYr2z (Mozilla Italia: migrazione di r2z, Dict e nuovo PYr2z) e allargarne lo scopo anche ad altro, mettendo in mezzo anche un canale Telegram da utilizzare come sistema di notifica vero e proprio.

gioxx / SWUpdates-Alert

Si chiama SWUpdates-Alert perché quel giorno lì avevo terminato la fantasia e non sono riuscito a passare al mercato rionale per acquistarne dell’altra, ma alla fin fine è lo scopo ultimo che deve farla da padrone, con buona pace dell’inesistente reparto marketing di questo blog. È di base uno script Python che serve a tenere d’occhio un particolare URL (principalmente si parla di lettura JSON quando possibile), una funzione che permette l’invio di messaggi in Telegram (passando dalle sue API web) e un’azione GitHub che possa programmare ed eseguire il tutto senza l’intervento umano.

Scendiamo insieme nel dettaglio se vuoi, altrimenti abbandona la nave adesso perché qui di seguito ci saranno solo tecnicismi che non interessano ai più.

Firefox

SWUpdates-Alert: rimani aggiornato sul rilascio delle applicazioni 1

Ci avevo già lavorato, nulla quindi di rivoluzionario. Lo script che si occupa di tenere sotto monitor Firefox ESR e Firefox in versione stabile lo trovi all’indirizzo github.com/gioxx/SWUpdates-Alert/blob/main/sw_firefox.py.

Una volta portati a bordo i requirements (pochi), lo script si occupa di andare a scaricare una copia del file JSON di rilascio ufficiale (https://product-details.mozilla.org/1.0/firefox_versions.json) prendendo i numeri di versione di Firefox ESR (FIREFOX_ESR) e della versione stabile (LATEST_FIREFOX_VERSION).
Salva quel dato nel file updates/FIREFOX_ESR e – se differisce da quello che aveva precedentemente – invia una notifica al canale Telegram (appoggiandosi allo script include_tgram.py (github.com/gioxx/SWUpdates-Alert/blob/main/include_tgram.py) e aggiorna quel dato nel file di aggiornamento, così da non allarmarsi nuovamente fino a quando la versione cambierà ancora una volta:

import requests
import urllib.request
import base64
import json
import os
import os.path
import sys
from jsondiff import diff
from include_tgram import *

def sourceJson(path,channel):
    urllib.request.urlretrieve(path,"firefox_versions.json")
    with open("firefox_versions.json", 'r') as f:
        response = json.load(f)
    os.remove("firefox_versions.json")
    return response[channel]

def checkrepo(updates_file):
    with open(updates_file, "r") as f:
        content = f.read()
        first_line = content.split('\n', 1)[0]
    return first_line

def checkversion(fxversion,channel):
    if (fxversion != checkrepo(os.path.join("updates",channel))):
        print("New version of " + channel + " is available: %s, i'm updating version file." % fxversion)
        writenewversion(os.path.join("updates",channel),fxversion)
        if (channel == "FIREFOX_ESR"):
            sendtotelegram("👨🏽‍💻 Firefox ESR: new version available! %s \nDownload from https://www.mozilla.org/firefox/enterprise/#download" % fxversion)
        elif (channel == "LATEST_FIREFOX_VERSION"):
            sendtotelegram("👨🏽‍💻 Firefox (Stable): new version available! %s \nDownload from https://www.mozilla.org/firefox/new/" % fxversion)
        else:
            sendtotelegram("👨🏽‍💻 %s: new version available! %s \nDownload from https://www.mozilla.org/firefox/browsers/" % channel,fxversion)
    else:
        print("Latest " + channel + " is the same of the repository, skip.")

def writenewversion(updates_file,newversion):
    with open(updates_file, "w") as readversion:
        readversion.write(newversion)
    return

channel = "FIREFOX_ESR"
fxversion = sourceJson("https://product-details.mozilla.org/1.0/firefox_versions.json",channel)
checkversion(fxversion,channel)

channel = "LATEST_FIREFOX_VERSION"
fxversion = sourceJson("https://product-details.mozilla.org/1.0/firefox_versions.json",channel)
checkversion(fxversion,channel)

FileZilla

SWUpdates-Alert: rimani aggiornato sul rilascio delle applicazioni

Simile a Firefox se non fosse per chi annuncia l’aggiornamento disponibile. Non esiste una fonte ufficiale da consultare riguardo la disponibilità di aggiornamenti del noto client FTP. Avrei potuto puntare a uno scraping della pagina web ma gironzolando per GitHub mi sono imbattuto in un progetto di uno sviluppatore cinese che ha realizzato un prodotto PowerShell per l’aggiornamento delle applicazioni Windows. Tra le sue fonti monitorate c’è anche FileZilla ed è proprio l’autore che rilascia un file JSON che io posso utilizzare per tenere d’occhio la disponibilità di nuove versioni di FileZilla (github.com/akirco/aki-apps/blob/master/bucket/filezilla.json).

Il resto non varia rispetto al paragrafo dedicato a Firefox. Versione tracciata in updates/LATEST_FILEZILLA e messaggio di allerta nel canale Telegram solo nel caso in cui la versione rilevata nel JSON differisca da quella che conservo nel file di aggiornamento.

Se vuoi dare un’occhiata al codice dello script di check FileZilla punta il browser all’indirizzo github.com/gioxx/SWUpdates-Alert/blob/main/sw_filezilla.py.

Notepad++

Notepad++: eliminare tutto ciò che c'è prima di una parola 1

L’unico diverso. Qui viene in aiuto GitHub stesso dato che Notepad++ è un progetto ospitato dal portale di proprietà Microsoft. La cosa bella è che in questa maniera posso usare le API di GitHub per capire quando viene effettuato il rilascio di una nuova versione dell’editor di testo, più precisamente basterà bussare all’indirizzo api.github.com/repos/notepad-plus-plus/notepad-plus-plus/releases/latest per ottenere un file JSON che posso tranquillamente gestire. Parlo del campo tag, è quello che gli stessi autori utilizzano per dichiarare la versione prodotto.

Il risultato è così servito all’interno del mio script sw_npp.py (github.com/gioxx/SWUpdates-Alert/blob/main/sw_npp.py). Versione tracciata in updates/LATEST_NPP e aggiornamento inviato a Telegram solo nel caso in cui la versione rilevata su GitHub differisca da quella da me tenuta da parte.

Se vuoi dare un’occhiata al codice dello script di check Notepad++ punta il browser all’indirizzo github.com/gioxx/SWUpdates-Alert/blob/main/sw_npp.py.

Cos’altro vuoi sapere?

Automatizzazione

Via GitHub Actions. Eseguo gli script di check alle 9:30 di ogni giorno e mando in commit le modifiche della sola cartella updates nel caso in cui ci siano delle novità, altrimenti lascio tutto invariato e amici come prima. Se vuoi dare una sbirciata ti basterà curiosare in github.com/gioxx/SWUpdates-Alert/tree/main/.github/workflows. Qui di seguito il codice eseguito per Notepad++ (gli altri sono pressoché identici):

name: Sw Check - Notepad++

on:
  schedule:
  - cron: '30 9 * * *'
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Check Software Update
      run: python sw_npp.py
      env:
          TGRAMTOKEN: ${{ secrets.TGRAMTOKEN }}
          TGRAMCHATID: ${{ secrets.TGRAMCHATID }}
          
    - name: Commit changes
      uses: stefanzweifel/git-auto-commit-action@v4.14.1
      with:
        commit_message: Update Notepad++ version file
        push_options: '--force'
        skip_dirty_check: false
        skip_fetch: true
        skip_checkout: true
        disable_globbing: true
        file_pattern: updates/*

Altri software

Attualmente non pervenuti. Potenzialmente ce ne potrebbero essere molti altri, vuoi suggerirne? Ben venga, apri una nuova richiesta direttamente su GitHub oppure lascia un commento al termine di questo articolo. Meglio ancora se sei capace di fornire una fonte JSON (o equivalente) da tenere d’occhio, altrimenti la cercherò io ammesso sia disponibile.

Il canale

Hai ragione, quasi dimenticavo, lo puoi raggiungere tramite Telegram all’indirizzo t.me/SWUpdate. È silenzioso per definizione e gli unici messaggi che compariranno saranno quelli dedicati ai nuovi rilasci delle applicazioni tenute sotto monitor. Le comunicazioni non verranno inviate dal mio account bensì da quelle del bot @SWRelease_bot che parlerà esclusivamente nel canale, non sono previste funzioni private che l’utente può sfruttare in chat uno-a-uno con il bot.
Il canale è aperto a tutti, sei il benvenuto se vuoi entrarne a far parte! :-)

Io resto a disposizione per ogni ulteriore dubbio, consiglio o chiacchiera davanti a una birra, cheers 🍻.

#StaySafe


Immagine di copertina John Schnobrich on Unsplash

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments