You've already forked pedini.dev
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fe427b4c95 | |||
| a69b0c2c93 | |||
| eaca350067 | |||
| dbc1a9d927 | |||
| d52b3301f7 | |||
| 06bdf69b5f | |||
| d2dc3a0a9e | |||
| f202b2d58c | |||
| d395c219f6 |
37
.gitea/workflows/build.yaml
Normal file
37
.gitea/workflows/build.yaml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: Build website to check for errors
|
||||||
|
concurrency:
|
||||||
|
group: build
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install latest Hugo
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
tag="$(curl --silent --show-error --location --fail-with-body \
|
||||||
|
-H 'Accept: application/vnd.github+json' \
|
||||||
|
https://api.github.com/repos/gohugoio/hugo/releases/latest \
|
||||||
|
| jq -r '.tag_name // empty')"
|
||||||
|
[ -n "$tag" ] || { echo "no tag_name in gohugoio/hugo releases/latest" >&2; exit 1; }
|
||||||
|
export HUGO_VERSION="$tag"
|
||||||
|
export HUGO_VERSION_SHORT="${HUGO_VERSION#v}"
|
||||||
|
wget "https://github.com/gohugoio/hugo/releases/download/${HUGO_VERSION}/hugo_${HUGO_VERSION_SHORT}_linux-amd64.deb"
|
||||||
|
dpkg -i hugo_*.deb
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- run: make
|
||||||
|
env:
|
||||||
|
APP_VERSION: ${{ env.GITEA_REF_NAME }}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: Deploy website on production server when committing on main
|
name: Deploy website on production server on a tag
|
||||||
concurrency:
|
concurrency:
|
||||||
group: deploy-website
|
group: deploy
|
||||||
cancel-in-progress: false
|
cancel-in-progress: false
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- '*'
|
- '*'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
@@ -17,10 +17,17 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- name: Install latest Hugo
|
||||||
export HUGO_VERSION=$(curl --silent -I https://github.com/gohugoio/hugo/releases/latest | grep location | sed 's|.*tag/||' | tr -d '\r')
|
run: |
|
||||||
export HUGO_VERSION_SHORT=$(echo ${HUGO_VERSION} | sed 's/v//')
|
set -euo pipefail
|
||||||
wget https://github.com/gohugoio/hugo/releases/download/${HUGO_VERSION}/hugo_${HUGO_VERSION_SHORT}_linux-amd64.deb
|
tag="$(curl --silent --show-error --location --fail-with-body \
|
||||||
|
-H 'Accept: application/vnd.github+json' \
|
||||||
|
https://api.github.com/repos/gohugoio/hugo/releases/latest \
|
||||||
|
| jq -r '.tag_name // empty')"
|
||||||
|
[ -n "$tag" ] || { echo "no tag_name in gohugoio/hugo releases/latest" >&2; exit 1; }
|
||||||
|
export HUGO_VERSION="$tag"
|
||||||
|
export HUGO_VERSION_SHORT="${HUGO_VERSION#v}"
|
||||||
|
wget "https://github.com/gohugoio/hugo/releases/download/${HUGO_VERSION}/hugo_${HUGO_VERSION_SHORT}_linux-amd64.deb"
|
||||||
dpkg -i hugo_*.deb
|
dpkg -i hugo_*.deb
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +1,6 @@
|
|||||||
[submodule "themes/hugo-coder"]
|
[submodule "themes/hugo-coder"]
|
||||||
path = themes/hugo-coder
|
path = themes/hugo-coder
|
||||||
url = https://github.com/luizdepra/hugo-coder.git
|
url = https://github.com/luizdepra/hugo-coder.git
|
||||||
|
[submodule "themes/risotto"]
|
||||||
|
path = themes/risotto
|
||||||
|
url = https://github.com/joeroe/risotto
|
||||||
|
|||||||
4
.vars
4
.vars
@@ -1,4 +1,4 @@
|
|||||||
#/usr/bin/env bash
|
#/usr/bin/env bash
|
||||||
|
|
||||||
export DEPLOYMENT_HOST=docker.infra.bjphoster.cloud
|
export DEPLOYMENT_HOST=vps01.hostit.infra.bjphoster.cloud
|
||||||
export DEPLOYMENT_PATH=/opt/pedini.dev
|
export DEPLOYMENT_PATH=/srv/pedini.dev
|
||||||
|
|||||||
25
content/_index.md
Normal file
25
content/_index.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
```shell
|
||||||
|
$ cat content/about.md
|
||||||
|
```
|
||||||
|
|
||||||
|
# About me
|
||||||
|
I'm just a guy passionate about ICT and networking, increasing their knowledge every day, and always looking forward to solve new challenges life might arise.
|
||||||
|
More info in the [about page](/about/).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cat content/projects.md
|
||||||
|
```
|
||||||
|
|
||||||
|
# Projects (just a summary)
|
||||||
|
- pedini.dev:
|
||||||
|
This is my personal website, built with [Hugo](https://gohugo.io) and hosted on a private [Gitea](https://gitea.io) instance.
|
||||||
|
The deployment is automated through an Act Runner workflow, the Gitea version of Github Actions.
|
||||||
|
- ansible:
|
||||||
|
On [this repo](https://git.bjphoster.com/ansible/ansible) you can find my Ansible playbooks. There's anything ranging from updating the system, to converting Debian to Proxmox, to configuring every new server of mine. That last one tho is actually done with the help of [the Debian automation](https://git.bjphoster.com/automation/debian-unattended), which lets me boot a system from a custom Debian ISO and configure everything from a template file already in place in the image.
|
||||||
|
- docker:
|
||||||
|
I'm a big fan, using it for a while now, built a lot of things with it. What else to say? All the repos are available [here](https://git.bjphoster.com/deployments).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cat content/contact.md
|
||||||
|
```
|
||||||
|
What? There's a dedicated page for that! Go [there](/contact/).
|
||||||
13
content/about.md
Normal file
13
content/about.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
+++
|
||||||
|
title = "About me and my career"
|
||||||
|
url = "/about/"
|
||||||
|
+++
|
||||||
|
|
||||||
|
I started working as an "IT manager as a service" back in 2019 just after graduating from college, basically my entire company was a consultant for a couple clients, B2C and B2B as well, and each of us had their specific role in which they thrived.
|
||||||
|
|
||||||
|
Then, in 2021, I moved to a larger company based in Milan for just over a year, where I provided support for my colleagues and our customers working on a PBX system developed entirely in-house.
|
||||||
|
|
||||||
|
I was then called by a telco provider based in Reggio Emilia in 2022, and decided why not, I was actually gonna do it. I remained there for more than two and a half years, up until the end of 2024. There, I started with singlehandedly managing a large migration of three PBX systems that nobody wanted to do, merging two of those into the 3rd, then I moved on to customer support, then NOC administration (basically customer support for the provider itself, where my customers were my colleagues), and in the end, I carried the entire cloud department of the company until I trained a new replacment, became the specialist in 80% of what there was to do tech-wise, programmed a couple of internal tools and scripts for my fellow colleagues, and then was told my mind was "wasted" there, that I had "too much potential" and I should probably find better opportunities elsewhere, and then was harrassed by management three to four times a week asking if I was gonna leave, or when, or if I found a better job, etc. Until one day I actually did. :)
|
||||||
|
|
||||||
|
Starting from 2025, I decided to start my own business, acquire my first couple of customers, and start building my own story.
|
||||||
|
We're now in 2026, I'm working on a couple of projects, I'm still learning new stuff - as one in this field should always be - and even if the work is hard, it's still fun, which I think is the most important thing.
|
||||||
84
content/blog/20260730-lettera-aperta-agcom.md
Normal file
84
content/blog/20260730-lettera-aperta-agcom.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
title: "Lettera aperta ad AGCOM: fermatevi, non funziona, e ci costa"
|
||||||
|
date: 2026-07-30T00:00:00+02:00
|
||||||
|
slug: "lettera-aperta-agcom"
|
||||||
|
---
|
||||||
|
Qualche giorno fa mi è arrivata voce della delibera n. 171/26/CONS, con cui AGCOM ha ordinato ai provider italiani il blocco DNS del sito Escort Advisor, in attuazione del cd. Decreto Caivano e delle indicazioni sulla verifica dell'età già definite nella delibera n. 96/25/CONS.
|
||||||
|
|
||||||
|
Non ho potuto fare a meno di scrivere. Non per il singolo sito bloccato, ma per la logica che c'è dietro, e per dove quella logica ci sta portando.
|
||||||
|
|
||||||
|
## "Think of the children" non è una politica, è un paravento
|
||||||
|
|
||||||
|
"Tutela dei minori" è una frase che dovrebbe pesare. Invece sta diventando, in Italia come altrove, la formula con cui si costruiscono infrastrutture di identificazione e controllo degli adulti, il cui costo reale non lo pagano i minori: lo paghiamo noi, in privacy, in libertà di accesso a servizi legali, e - come spiego più sotto - anche in tasse.
|
||||||
|
|
||||||
|
Non serve andare lontano per vedere dove porta questa strada. Basta guardare agli Stati Uniti, dove la stessa retorica - sicurezza pubblica, recupero di veicoli rubati, riduzione della criminalità - ha giustificato l'installazione di oltre 80.000 telecamere Flock Safety in migliaia di città. Sistemi che non leggono solo le targhe: usano l'intelligenza artificiale per riconoscere un'auto da ammaccature, adesivi, portapacchi, dettagli che nessun umano potrebbe incrociare su quella scala ma che una macchina gestisce senza sforzo.
|
||||||
|
|
||||||
|
E cosa è successo dopo l'installazione? Il sistema, venduto come scudo di sicurezza, è stato usato da agenti come motore di ricerca personale: a Milwaukee un agente ha interrogato il database 179 volte per rintracciare una persona con cui aveva una relazione e il suo ex; a Sedgwick, Kansas, un capo della polizia si è dimesso dopo oltre 200 ricerche sull'ex e sul suo nuovo compagno; in Florida un agente ha piazzato un tracker GPS su un'auto dopo aver seguito la ex-partner con le telecamere; in Texas il sistema è stato usato per rintracciare una donna sospettata di aver interrotto una gravidanza. Tutto documentato, tutto fuori da qualunque finalità dichiarata al momento dell'installazione.
|
||||||
|
|
||||||
|
Il punto non è la tecnologia. Il punto è che un'infrastruttura, una volta costruita, viene usata per ciò che consente di fare, non per ciò che era stato promesso.
|
||||||
|
|
||||||
|
## La direzione in cui stiamo andando
|
||||||
|
|
||||||
|
Il mio timore è che l'Italia stia percorrendo una traiettoria pericolosa: dalla verifica dell'età al filtro obbligatorio, dal filtro obbligatorio all'ispezione di ciò che ciascuno produce o consulta. Quando ci si arriva, succedono due cose prevedibili: un contenzioso ampio e perdente per l'amministrazione, sproporzionato alla tenuta tecnica e giuridica delle misure, e la fuga di competenze e imprese tecnologiche verso altri Paesi.
|
||||||
|
|
||||||
|
## Le nostre tasse meritano di meglio
|
||||||
|
|
||||||
|
Il blocco DNS di un sito costa tempo, denaro pubblico e credibilità istituzionale, per un risultato pratico prossimo allo zero: chi vuole aggirarlo - con una VPN, un DNS alternativo, strumenti legali e ampiamente diffusi - sa perfettamente come farlo. Chi resta esposto è chi non sa come aggirarlo, l'esatto opposto della "protezione" promessa.
|
||||||
|
|
||||||
|
Le stesse risorse potrebbero essere spese meglio. Ad esempio:
|
||||||
|
|
||||||
|
- imponendo ai grandi fornitori di piattaforme (Google, Amazon, Meta, ByteDance) contromisure reali, definite con un tavolo tecnico di esperti del settore, invece di "verificare l'età di tutti per escludere i minori";
|
||||||
|
- rafforzando la moderazione contro il cyberbullismo, che è un problema vero e misurabile;
|
||||||
|
- finanziando corsi per i genitori su tecnologie, rischi, mitigazioni e strumenti di parental control;
|
||||||
|
- finanziando corsi reali di educazione sessuale rivolti ai minori, invece di lasciare questo compito ai soli genitori o, come accade oggi nella maggior parte dei casi, ai minori stessi e alla loro curiosità, che finiscono per informarsi da soli su internet, dove trovano perlopiù rappresentazioni distorte ed esagerate, a partire proprio dalla pornografia.
|
||||||
|
|
||||||
|
Tutto questo è più utile - e più onesto - che bloccare un sito a cui un cittadino ha diritto di accedere perché non è illegale.
|
||||||
|
|
||||||
|
## L'email che ho inviato
|
||||||
|
|
||||||
|
Ho scritto tutto questo in una email formale, inviata all'Ufficio competente di AGCOM. Qui sotto la riporto integralmente: è pronta per essere inviata così com'è, oppure modificata e personalizzata a piacimento.
|
||||||
|
|
||||||
|
```
|
||||||
|
to: info@agcom.it
|
||||||
|
|
||||||
|
Spett.le Autorità,
|
||||||
|
|
||||||
|
vi scrivo a titolo personale, quale cittadino e professionista, in merito alla delibera n. 171/26/CONS del 7 luglio 2026, con cui avete ordinato ai fornitori di accesso italiani il blocco DNS del sito Escort Advisor in attuazione dell'art. 13-bis del cd. Decreto Caivano e delle indicazioni della delibera n. 96/25/CONS sulla verifica dell'età.
|
||||||
|
|
||||||
|
La presente non contesta la finalità dichiarata, tuttavia il fatto che "tutela dei minori" e "think of the children" siano diventati, in Italia come altrove, la cornice con cui si costruiscono infrastrutture di identificazione e profilazione degli adulti, il cui costo reale ricade non sui minori ma sulla privacy e sulla libertà di chi accede a servizi e contenuti perfettamente leciti.
|
||||||
|
|
||||||
|
Un esempio istruttivo arriva dagli Stati Uniti: con la stessa giustificazione - sicurezza pubblica, recupero di veicoli rubati, riduzione della criminalità, protezione della collettività - sono state installate in decine di migliaia di città reti di telecamere automatiche "powered by AI" (i sistemi Flock Safety, oltre 80.000 apparati). Questi tuttavia non si limitano a leggere le targhe: usano l'intelligenza artificiale per identificare e tracciare un veicolo anche attraverso ammaccature, adesivi, portapacchi e altri dettagli che nessun operatore umano potrebbe incrociare manualmente su quella scala, ma che un sistema automatizzato gestisce senza difficoltà.
|
||||||
|
|
||||||
|
Il punto rilevante è cosa è successo dopo l'introduzione di tale sistema. Questo, venduto come strumento di sicurezza, è stato invece usato in modo documentato dagli agenti come motore di ricerca personale:
|
||||||
|
- a Milwaukee, l'agente Josue Ayala è stato incriminato per aver interrogato il database 179 volte per rintracciare la persona con cui aveva una relazione e il suo ex partner, giustificando ogni ricerca con una sola parola generica;
|
||||||
|
- a Sedgwick (Kansas) un capo della polizia si è dimesso dopo aver interrogato oltre 200 volte le targhe dell'ex e del nuovo compagno di lei;
|
||||||
|
- a Orange City (Florida) un agente ha usato le telecamere per pedinare l'ex, arrivando a mostrarle le riprese e a piazzarle un tracker GPS;
|
||||||
|
- in Texas il sistema è stato usato per rintracciare una donna sospettata di aver interrotto una gravidanza, seguita attraverso più Stati;
|
||||||
|
- è emerso inoltre l'uso dei dati per finalità di controllo migratorio e ricerche a sfondo discriminatorio.
|
||||||
|
|
||||||
|
Gli audit interni mostrano ricerche giustificate con termini vaghi ("investigation", "suspicious") o addirittura con nessuna motivazione. Usi non solo estranei alla finalità dichiarata al momento dell'installazione, bensì illegittimi. La lezione è semplice: una volta costruita, l'infrastruttura viene usata per ciò che consente di fare, non per ciò che era stato promesso. L'unico argine reale non è l'auto-disciplina di chi vi ha accesso, ma le limitazioni tecniche dell'apparato, appunto, molto vaste e ben superiori a quanto pubblicamente dichiarato.
|
||||||
|
|
||||||
|
Piccolo appunto sulla direzione di marcia: lo stesso Paese oltreoceano offre un secondo esempio, ancora più utile a capire dove porta questa logica quando incontra l'incompetenza tecnica del regolatore. Diversi Stati americani (California con l'AB 2047, New York con il budget S.9005/A.10005, Washington con l'HB 2320) stanno legiferando per imporre alle stampanti 3D un "censorware" di Stato: un algoritmo, certificato dall'autorità, che analizza ogni file di stampa e blocca la macchina se "riconosce" la geometria di un componente d'arma. Le stesse proposte criminalizzano la distribuzione di file CAD e, di fatto, mettono fuori legge il software open source, perché un firmware libero e ispezionabile, di fatto, non può essere costretto a montare quel filtro. Organizzazioni come la Electronic Frontier Foundation hanno spiegato, su base tecnica concreta e non "fuffa da pubblicità istituzionale", perché il blocco alla stampa non funziona e produce solo sorveglianza sistematica di ogni oggetto stampato, e come questo crei solo danno all'innovazione e criminalizzazione di attività del tutto legittime.
|
||||||
|
|
||||||
|
È il tipo di norma che si scrive quando si spara sul mucchio sperando di centrare qualcosa, senza avere la più pallida idea di come la tecnologia funzioni davvero. Il mio timore concreto è che l'Italia arrivi molto presto allo stesso punto, seguendo la medesima traiettoria: dalla verifica dell'età a tappeto al filtro obbligatorio, dal filtro obbligatorio all'ispezione di ciò che ciascuno produce o consulta sul web. Quando si arriva lì, succedono due cose tanto semplici quanto prevedibili: la prima è un contenzioso ampio e perdente per l'amministrazione, di gran lunga sproporzionato alla scarsa tenuta tecnica e giuridica delle misure. La seconda è la fuga delle competenze: cittadini, professionisti e imprese del settore, tecnologico e non, che scelgono semplicemente di operare altrove, sommandosi a chi il Paese lo lascia già oggi per ragioni economiche e fiscali, e tenore di vita. Non aggiungiamoci anche l'oppressione privacy da "grande fratello".
|
||||||
|
|
||||||
|
Chiedo quindi due cose, con rispetto ma senza giri di parole.
|
||||||
|
|
||||||
|
Primo: che si chiamino le misure con il loro nome. Un obbligo di verifica dell'età è un sistema di identificazione e profilazione degli adulti. Discuterlo apertamente come tale - con una valutazione onesta dei rischi di abuso, di data breach e di uso secondario dei dati raccolti - è sicuramente più serio che presentarlo unicamente come scudo per i minori, che può essere legittimamente il pensiero e l'intento del legislatore, ma abbiamo già diversi riscontri di come non corrisponda affatto alla realtà dei fatti.
|
||||||
|
|
||||||
|
Secondo: che si prenda atto che la pornografia e i servizi per adulti sono attività lecite. Escort Advisor è un servizio informativo su prestazioni che in Italia non costituiscono reato. Non vedo quindi su quale base l'Autorità debba frapporre oneri di identificazione tra un adulto che sceglie liberamente di usufruire di un servizio perfettamente legale e chi quel servizio lo offre altrettanto legalmente.
|
||||||
|
|
||||||
|
La tutela dei minori si persegue con strumenti proporzionati, non trasformando ogni adulto in un soggetto da schedare e ogni tecnologia in un sospetto da filtrare. Le risorse economiche e di tempo che questi blocchi assorbono - denaro che, in ultima analisi, esce dalle casse dello Stato e quindi dalle tasche dei cittadini, sottoscritto compreso - sarebbero impiegate assai meglio altrove. A titolo puramente esemplificativo e non esaustivo: imponendo ai grandi fornitori di piattaforme (Google, Amazon, Meta, ByteDance e simili) contromisure reali e verificabili definite in un tavolo tecnico con esperti del settore, invece di "verificare l'età di tutti per escludere i minori" - approccio del quale conosciamo già l'esito; rafforzando la moderazione contro il cyberbullismo; finanziando progetti e corsi rivolti ai genitori per formarli sulle tecnologie attuali, sui rischi, sulle mitigazioni e sugli strumenti di parental control. Tutte misure più utili che spendere una parte del gettito fiscale per bloccare servizi ai quali ho diritto di accedere in quanto non illegali.
|
||||||
|
|
||||||
|
Aggiungo in ultimo, senza reticenze, il dato tecnico che rende il tutto ancora più problematico: questi blocchi sono banalmente aggirabili con VPN, DNS alternativi e strumenti analoghi, che esistono, sono legali e vengono normalmente utilizzati, dunque chi vuole aggirarli, sa perfettamente come farlo, e non impiega neppure troppo sforzo. L'effetto pratico della delibera è quindi prossimo allo zero sul piano della reale protezione dei minori, mentre impone a un adulto di dotarsi di contromisure tecniche per esercitare un diritto legittimo, oppure di venire sorvegliato se non è tecnicamente capace di farlo. Non è tutela: è una semplice facciata istituzionale che consuma risorse pubbliche senza raggiungere l'obiettivo dichiarato.
|
||||||
|
|
||||||
|
Caldeggio infine Autorità e legislatore a fermarsi e a ripensare l'approccio. Resto a disposizione per un confronto e vi ringrazio per l'attenzione.
|
||||||
|
|
||||||
|
Cordiali saluti,
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unisciti alla causa
|
||||||
|
|
||||||
|
Non costa nulla. Non serve essere avvocati, non serve essere esperti di diritto o di tecnologia. Basta un indirizzo email e la volontà di dire, con le proprie parole, che non siamo d'accordo con questa direzione.
|
||||||
|
|
||||||
|
Ogni voce in più aiuta il nostro Paese ad andare, forse, in una direzione più appropriata per il nostro quieto vivere, nel rispetto della nostra privacy e dei nostri diritti.
|
||||||
3
content/blog/_index.md
Normal file
3
content/blog/_index.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
title: "Personal Blog"
|
||||||
|
---
|
||||||
10
content/contact.md
Normal file
10
content/contact.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
+++
|
||||||
|
title = "Contact Information"
|
||||||
|
url = "/contact/"
|
||||||
|
+++
|
||||||
|
|
||||||
|
- Email: [bryan@pedini.dev](mailto:bryan@pedini.dev)
|
||||||
|
- Telegram: [@bryanpedini](https://45r.it/pedini-tg)
|
||||||
|
- LinkedIn: [bryanpedini](https://45r.it/pedini-li)
|
||||||
|
- Gitea: [private server](https://45r.it/bjphoster-git)
|
||||||
|
- Instagram: [bryanp_og](https://45r.it/pedini-ig)
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
+++
|
+++
|
||||||
date = "2024-08-21T20:58:34+02:00"
|
|
||||||
title = "Version Information"
|
title = "Version Information"
|
||||||
url = "/version"
|
url = "/version/"
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Version: VAR_VERSION
|
- Version: VAR_VERSION
|
||||||
Commit ID: [VAR_COMMIT_ID](VAR_COMMIT_URL)
|
- Commit ID: [VAR_COMMIT_ID](VAR_COMMIT_URL)
|
||||||
Theme Commit ID: [VAR_THEME_COMMIT](VAR_THEME_URL)
|
- Theme Commit ID: [VAR_THEME_COMMIT](VAR_THEME_URL)
|
||||||
|
|||||||
64
hugo.yaml
64
hugo.yaml
@@ -1,8 +1,9 @@
|
|||||||
---
|
---
|
||||||
baseURL: "https://pedini.dev"
|
baseURL: "https://pedini.dev"
|
||||||
languageCode: "en-us"
|
languageCode: "us"
|
||||||
|
theme: "risotto"
|
||||||
title: "Bryan Joshua Pedini"
|
title: "Bryan Joshua Pedini"
|
||||||
theme: "hugo-coder"
|
copyright: "Copyright © 2019 Bryan Joshua Pedini - All Rights Reserved"
|
||||||
|
|
||||||
markup:
|
markup:
|
||||||
goldmark:
|
goldmark:
|
||||||
@@ -10,67 +11,42 @@ markup:
|
|||||||
hardWraps: true
|
hardWraps: true
|
||||||
|
|
||||||
params:
|
params:
|
||||||
author: "Bryan Joshua Pedini"
|
theme:
|
||||||
info: "FullStack Developer - Integration Manager - Cloud/PBX/Network/Docker Specialist - DevOps Enthusiast - Kubernetes/Ceph Apprentice"
|
palette: "base16-dark"
|
||||||
description: "Bryan's personal website / blog"
|
about:
|
||||||
keywords: "blog,personal,developer,networking,docker,devops,k8s,kubernetes"
|
title: "Bryan Joshua Pedini"
|
||||||
gravatar: "bryan@pedini.dev"
|
description: "Developer, Network Specialist, Cloud Architect, Right to Repair/Ownership Advocate, Self Employed."
|
||||||
since: 2019
|
logo_image: ""
|
||||||
commit: "https://git.bjphoster.com/source/pedini.dev/"
|
#keywords: "blog,personal,developer,networking,docker,devops,k8s,kubernetes"
|
||||||
colorScheme: "dark"
|
|
||||||
|
|
||||||
csp:
|
socialLinks:
|
||||||
childsrc:
|
- title: "Git"
|
||||||
- self
|
|
||||||
fontsrc:
|
|
||||||
- self
|
|
||||||
formaction:
|
|
||||||
- self
|
|
||||||
framesrc:
|
|
||||||
- self
|
|
||||||
imgsrc:
|
|
||||||
- self
|
|
||||||
objectsrc:
|
|
||||||
- self
|
|
||||||
stylesrc:
|
|
||||||
- self
|
|
||||||
scriptsrc:
|
|
||||||
- self
|
|
||||||
connectsrc:
|
|
||||||
- self
|
|
||||||
|
|
||||||
social:
|
|
||||||
- name: "Git"
|
|
||||||
icon: "fa-brands fa-git fa-2x"
|
icon: "fa-brands fa-git fa-2x"
|
||||||
weight: 1
|
|
||||||
url: "https://45r.it/bjphoster-git"
|
url: "https://45r.it/bjphoster-git"
|
||||||
- name: "Instagram"
|
- title: "Instagram"
|
||||||
icon: "fa-brands fa-instagram fa-2x"
|
icon: "fa-brands fa-instagram fa-2x"
|
||||||
weight: 2
|
|
||||||
url: "https://45r.it/pedini-ig"
|
url: "https://45r.it/pedini-ig"
|
||||||
- name: "Telegram"
|
- title: "Telegram"
|
||||||
icon: "fa-brands fa-telegram fa-2x"
|
icon: "fa-brands fa-telegram fa-2x"
|
||||||
weight: 3
|
|
||||||
url: "https://45r.it/pedini-tg"
|
url: "https://45r.it/pedini-tg"
|
||||||
- name: "LinkedIn"
|
- title: "LinkedIn"
|
||||||
icon: "fa-brands fa-linkedin fa-2x"
|
icon: "fa-brands fa-linkedin fa-2x"
|
||||||
weight: 4
|
|
||||||
url: "https://45r.it/pedini-li"
|
url: "https://45r.it/pedini-li"
|
||||||
|
|
||||||
menu:
|
menu:
|
||||||
main:
|
main:
|
||||||
- name: "About me"
|
- name: "About me"
|
||||||
weight: 1
|
weight: 1
|
||||||
url: "about/"
|
url: "/about/"
|
||||||
- name: "Blog"
|
- name: "Blog"
|
||||||
weight: 2
|
weight: 2
|
||||||
url: "blog/"
|
url: "/blog/"
|
||||||
- name: "Contacts"
|
- name: "Contact"
|
||||||
weight: 3
|
weight: 3
|
||||||
url: "contacts/"
|
url: "/contact/"
|
||||||
- name: "Version"
|
- name: "Version"
|
||||||
weight: 4
|
weight: 4
|
||||||
url: "version/"
|
url: "/version/"
|
||||||
|
|
||||||
taxonomies:
|
taxonomies:
|
||||||
category: "categories"
|
category: "categories"
|
||||||
|
|||||||
4
makefile
4
makefile
@@ -5,11 +5,11 @@ default: build
|
|||||||
prep:
|
prep:
|
||||||
git submodule foreach --recursive bash -c "git checkout \$$(git remote show origin | grep HEAD | sed 's/.*\: //'); git pull"
|
git submodule foreach --recursive bash -c "git checkout \$$(git remote show origin | grep HEAD | sed 's/.*\: //'); git pull"
|
||||||
|
|
||||||
build: prep
|
build:
|
||||||
/usr/bin/env bash version.sh
|
/usr/bin/env bash version.sh
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
/usr/bin/env bash deploy.sh
|
/usr/bin/env bash deploy.sh
|
||||||
|
|
||||||
run: prep
|
run:
|
||||||
hugo server
|
hugo server
|
||||||
|
|||||||
1
themes/risotto
Submodule
1
themes/risotto
Submodule
Submodule themes/risotto added at bd4c2c5b2f
@@ -19,13 +19,13 @@ fi
|
|||||||
|
|
||||||
# Get project commit id and URL
|
# Get project commit id and URL
|
||||||
COMMIT_ID=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
|
COMMIT_ID=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
|
||||||
COMMIT_URL="$(git remote get-url origin | sed 's/\.git$//g;s/:/\//;s/git@/https:\/\//')/commit/${COMMIT_ID}"
|
COMMIT_URL="$(git remote get-url origin | sed 's/\.git$//')/commit/${COMMIT_ID}"
|
||||||
|
|
||||||
# Get the theme used and its commit id and URL
|
# Get the theme used and its commit id and URL
|
||||||
THEME=$(cat hugo.yaml | grep "theme:" | awk '{print $2}' | sed 's/"//g')
|
THEME=$(cat hugo.yaml | grep "theme:" | awk '{print $2}' | sed 's/"//g')
|
||||||
pushd themes/${THEME} &>/dev/null
|
pushd themes/${THEME} &>/dev/null
|
||||||
THEME_COMMIT=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
|
THEME_COMMIT=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
|
||||||
THEME_URL="$(git remote get-url origin | sed 's/\.git$//g')/commit/${THEME_COMMIT}"
|
THEME_URL="$(git remote get-url origin | sed 's/\.git$//')/commit/${THEME_COMMIT}"
|
||||||
popd &>/dev/null
|
popd &>/dev/null
|
||||||
|
|
||||||
# Create version tag (if provided)
|
# Create version tag (if provided)
|
||||||
|
|||||||
Reference in New Issue
Block a user