Skip to content

Commit 0ccf91f

Browse files
feat(data): add automated organization snapshots
1 parent 900cbbf commit 0ccf91f

16 files changed

Lines changed: 1827 additions & 2 deletions

File tree

.convcommit

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# convcommit - Conventional Commit message builder
2+
# This file is read by the `convcommit` CLI tool to populate
3+
# the interactive selector menus.
4+
# Commit this file to share the project's commit vocabulary with the team.
5+
#
6+
# FORMAT
7+
# type:<value> — commit type option (e.g. fix, feat, docs)
8+
# scope:<value> — commit scope option
9+
# message:<value> — commit message template
10+
#
11+
# SPECIAL PREFIXES
12+
# ~<value> — marks the default selection
13+
# _ — enables free-text manual input (press ".")
14+
# [X]<value> — forces key letter X for this entry (e.g. [B]build, [W]wip)
15+
#
16+
# HOW TO USE (interactive)
17+
# Run `convcommit` in a git repo. A menu appears for type, scope, message.
18+
# Press the letter in brackets [A][B]... or [.] for free-text input.
19+
# Stage and push in one shot:
20+
# convcommit -a -p
21+
#
22+
# HOW TO USE (direct flags — scripts, AI agents)
23+
# Bypass the selector entirely with explicit flags:
24+
# convcommit --type fix --scope auth --message "fix null pointer" --push
25+
# convcommit -t feat -s api -m "add endpoint" -a -p
26+
#
27+
# SMART PATTERN — stage specific files and commit in one command
28+
# Use --add instead of nested command substitution.
29+
# Anti-pattern (avoid):
30+
# msg=$(convcommit --type fix --message "fix") && git commit -m "$msg" && git push
31+
# Recommended:
32+
# convcommit --add src/auth.sh --type fix --scope auth --message "fix null pointer" --push
33+
# Stage multiple files:
34+
# convcommit --add src/auth.sh --add tests/auth_test.sh -t test -s auth -m "add tests" -p
35+
#
36+
# HOW TO USE (pipe / non-interactive)
37+
# Pipe selections as lines: one per stage (type, scope, message).
38+
# Use the letter shown in the menu, or "." to trigger free-text input.
39+
# Examples:
40+
# printf "G\n.\nfix null pointer in login\n" | convcommit
41+
# printf "F\n\nadd endpoint\n" | convcommit -a -p
42+
# Capture just the formatted message:
43+
# msg=$(printf "G\n\nfix null pointer\n" | convcommit)
44+
#
45+
# OTHER USEFUL FLAGS
46+
# --reset Regenerate this file with the latest defaults
47+
# --help Show all options
48+
#
49+
# INSTALLATION
50+
# convcommit is a single bash file with no dependencies.
51+
# Install it locally in your project:
52+
# curl -fsSL https://raw.githubusercontent.com/francescobianco/convcommit/refs/heads/main/bin/convcommit \
53+
# -o bin/convcommit && chmod +x bin/convcommit
54+
# Or system-wide:
55+
# curl -fsSL https://raw.githubusercontent.com/francescobianco/convcommit/refs/heads/main/bin/convcommit \
56+
# -o /usr/local/bin/convcommit && chmod +x /usr/local/bin/convcommit
57+
type:[B]build
58+
type:~chore
59+
type:[D]docs
60+
type:deps
61+
type:feat
62+
type:fix
63+
type:ci
64+
type:init
65+
type:merge
66+
type:perf
67+
type:refactor
68+
type:revert
69+
type:security
70+
type:style
71+
type:test
72+
type:[W]wip
73+
scope:_
74+
scope:~
75+
message:_
76+
message:~_

.github/workflows/populate.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Populate organization snapshots
2+
3+
on:
4+
schedule:
5+
- cron: "17 2 * * *"
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
populate:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout repository
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
20+
- name: Populate data snapshots
21+
env:
22+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23+
run: make populate
24+
25+
- name: Commit and push changes
26+
run: |
27+
git config user.name "github-actions[bot]"
28+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
29+
git add data
30+
if git diff --cached --quiet; then
31+
echo "No data changes to commit"
32+
exit 0
33+
fi
34+
SNAPSHOT_DATE="$(date -u +%F)"
35+
git commit -m "Update organization snapshot ${SNAPSHOT_DATE}"
36+
git push

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
.idea/
22
.vscode/
3+
__pycache__/
4+
*.py[cod]

Makefile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
PORT ?= 8000
2+
HOST ?= 127.0.0.1
3+
ROOT ?= .
4+
QUERY ?= location:Italy type:org followers:>231
5+
MAX_ORGS ?= 100
6+
DATE_ARG := $(if $(SNAPSHOT_DATE),--date $(SNAPSHOT_DATE),)
7+
8+
.PHONY: serve populate
9+
serve:
10+
python3 -m http.server $(PORT) --bind $(HOST) --directory $(ROOT)
11+
12+
populate:
13+
GITHUB_SEARCH_QUERY='$(QUERY)' MAX_ORGS='$(MAX_ORGS)' python3 scripts/populate.py $(DATE_ARG)

README.md

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,84 @@
1-
# github
1+
# Registro GitHub Italia
2+
3+
Registro pubblico delle organizzazioni italiane presenti su GitHub.
4+
5+
L'obiettivo e' mantenere un indice semplice, verificabile e riusabile da persone, script e pagine statiche.
6+
7+
## Dati
8+
9+
- `data/organizations.json`: formato canonico.
10+
- `data/organizations.csv`: esportazione tabellare.
11+
- `docs/index.html`: interfaccia statica per consultare il registro.
12+
13+
## Campi
14+
15+
- `login`: nome dell'organizzazione su GitHub.
16+
- `name`: nome pubblico mostrato da GitHub.
17+
- `github_url`: URL dell'organizzazione.
18+
- `website`: sito ufficiale collegato.
19+
- `location`: localita' dichiarata su GitHub.
20+
- `sector`: classificazione sintetica.
21+
- `verified`: `true` se GitHub mostra l'organizzazione come verificata.
22+
- `description`: descrizione breve.
23+
- `source_url`: fonte usata per la verifica.
24+
- `last_checked`: data di ultimo controllo in formato `YYYY-MM-DD`.
25+
26+
## Criteri di inclusione
27+
28+
Sono incluse organizzazioni GitHub che rappresentano enti, aziende, fondazioni, comunita' o progetti italiani, oppure organizzazioni con sede o attivita' pubblica rilevante in Italia.
29+
30+
Ogni record deve avere almeno:
31+
32+
- login GitHub;
33+
- URL GitHub;
34+
- nome leggibile;
35+
- settore;
36+
- fonte verificabile.
37+
38+
## Aggiornare il registro
39+
40+
1. Aggiungere o modificare il record in `data/organizations.json`.
41+
2. Riflettere la stessa modifica in `data/organizations.csv`.
42+
3. Aggiornare `last_checked`.
43+
4. Verificare che la pagina in `docs/index.html` mostri correttamente i dati.
44+
45+
## Autopopolamento
46+
47+
Il registro puo' essere aggiornato automaticamente con:
48+
49+
```bash
50+
make populate
51+
```
52+
53+
Il target usa `scripts/populate.py`, interroga GitHub Search API con la query predefinita:
54+
55+
```text
56+
location:Italy type:org followers:>231
57+
```
58+
59+
Variabili utili:
60+
61+
```bash
62+
make populate QUERY='location:Italy type:org followers:>100' MAX_ORGS=200
63+
make populate SNAPSHOT_DATE=2026-05-25
64+
```
65+
66+
Se presenti, `GITHUB_TOKEN` o `GH_TOKEN` vengono usati per aumentare i limiti API.
67+
68+
Ogni esecuzione crea una fotografia in:
69+
70+
```text
71+
data/YYYY/MM/DD/
72+
```
73+
74+
con:
75+
76+
- `organizations.json`
77+
- `organizations.csv`
78+
- `metadata.json`
79+
80+
I file `data/organizations.json` e `data/organizations.csv` rappresentano sempre l'ultima fotografia disponibile. Questo permette di calcolare trend confrontando snapshot di date diverse, ad esempio follower, repository pubblici e variazioni di profilo.
81+
82+
## Automazione GitHub Actions
83+
84+
Il workflow `.github/workflows/populate.yml` esegue `make populate` ogni notte, committa le modifiche in `data/` solo se lo snapshot cambia e pusha sul branch corrente.

data/2026/05/25/metadata.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"snapshot_date": "2026-05-25",
3+
"query": "location:Italy type:org followers:>231",
4+
"max_orgs": 20,
5+
"records": 20,
6+
"generated_at": "2026-05-25T16:45:09.044188+00:00",
7+
"source": "GitHub Search API and Organizations API",
8+
"errors": []
9+
}

data/2026/05/25/organizations.csv

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
snapshot_date,login,name,github_url,website,location,sector,verified,description,followers,following,public_repos,public_gists,created_at,updated_at,archived_at,source_url,last_checked
2+
2026-05-25,OpenIPC,OpenIPC,https://github.com/OpenIPC,https://openipc.org,Italy,Da classificare,False,Alternative IP Camera firmware from an open community,2218,0,134,0,2018-12-22T15:41:17Z,2025-09-03T09:21:11Z,,https://github.com/OpenIPC,2026-05-25
3+
2026-05-25,italia,Developers Italia,https://github.com/italia,https://developers.italia.it,Italy,Pubblica amministrazione,True,Open source code and developers community of the Italian government,1854,0,426,0,2015-10-29T10:07:29Z,2026-05-24T12:04:11Z,,https://github.com/italia,2026-05-25
4+
2026-05-25,mybatis,MyBatis,https://github.com/mybatis,http://www.mybatis.org,"Canada, Colombia, Italy, Japan, Perú, Spain, Russia, Thailand, UK, Ukranie and USA",Da classificare,False,,1191,0,37,0,2012-02-28T21:21:10Z,2026-05-09T11:35:02Z,,https://github.com/mybatis,2026-05-25
5+
2026-05-25,unitn-drive,UniTN - DISI Drive,https://github.com/unitn-drive,,Italy,Da classificare,False,,791,0,5,0,2022-05-23T17:02:55Z,2023-06-16T11:36:14Z,,https://github.com/unitn-drive,2026-05-25
6+
2026-05-25,NyarchLinux,Nyarch Linux,https://github.com/NyarchLinux,https://nyarchlinux.moe,Italy,Da classificare,False,Nyarch Linux is a (meme) linux distribution based on Arch Linux made for very degenerated weebs,648,0,33,0,2022-12-30T13:39:51Z,2024-01-27T20:07:31Z,,https://github.com/NyarchLinux,2026-05-25
7+
2026-05-25,cheshire-cat-ai,Cheshire Cat AI,https://github.com/cheshire-cat-ai,,Italy,Da classificare,False,,623,0,25,0,2023-06-01T14:02:25Z,2024-03-06T16:11:54Z,,https://github.com/cheshire-cat-ai,2026-05-25
8+
2026-05-25,DevExpPlatform,Developer Experience Platform for Eng Group,https://github.com/DevExpPlatform,,Italy,Da classificare,False,Sperimentazione Piattaforma Corporate per gli sviluppatori,484,0,6,0,2024-06-17T13:32:11Z,2026-04-24T01:55:39Z,,https://github.com/DevExpPlatform,2026-05-25
9+
2026-05-25,Tiledesk,Tiledesk,https://github.com/Tiledesk,https://www.tiledesk.com,Italy,Da classificare,False,"Open-source platform to build and automate AI agents, streamline workflows and integrate seamlessly with your products through white-label solutions",418,0,41,0,2018-06-03T19:50:26Z,2025-09-14T17:10:10Z,,https://github.com/Tiledesk,2026-05-25
10+
2026-05-25,SPDM-Team,SPDM Team,https://github.com/SPDM-Team,spdmteam.com,Italy,Da classificare,False,Secret Police Department (mainly lego hacks department),398,0,3,0,2022-05-19T17:43:18Z,2022-05-19T17:49:35Z,,https://github.com/SPDM-Team,2026-05-25
11+
2026-05-25,robotology,Robotology,https://github.com/robotology,https://icub.iit.it,Italy,Da classificare,False,Group software repositories of the iCub eco-system (but code developed is not necessarily iCub specific!).,324,0,147,0,2012-03-29T13:49:13Z,2025-10-31T17:18:17Z,,https://github.com/robotology,2026-05-25
12+
2026-05-25,pagopa,PagoPA S.p.A.,https://github.com/pagopa,https://pagopa.it/,Italy,Societa pubblica,True,Software e servizi digitali pubblici gestiti da PagoPA S.p.A.,315,0,755,0,2019-11-14T05:21:03Z,2026-05-06T21:54:39Z,,https://github.com/pagopa,2026-05-25
13+
2026-05-25,sapienzastudentsnetwork,Sapienza Students Network,https://github.com/sapienzastudentsnetwork,https://sapienzastudents.net/,Italy,Da classificare,False,Organizzazione studentesca indipendente volta a promuovere iniziative collaborative e a favorire un senso di comunità,307,0,30,0,2021-11-30T16:47:18Z,2025-10-05T16:32:29Z,,https://github.com/sapienzastudentsnetwork,2026-05-25
14+
2026-05-25,cnr-isti-vclab,Visual Computing Lab - ISTI - CNR,https://github.com/cnr-isti-vclab,http://vcg.isti.cnr.it,Italy,Da classificare,False,,296,0,39,0,2015-07-17T08:45:26Z,2022-02-19T22:20:22Z,,https://github.com/cnr-isti-vclab,2026-05-25
15+
2026-05-25,cartabinaria,CartaBinaria,https://github.com/cartabinaria,https://cartabinaria.students.cs.unibo.it,Italy,Da classificare,False,Community of students from the Department of Computer Science and Engineering of the University of Bologna,279,0,198,0,2021-09-14T06:56:43Z,2024-10-25T15:49:36Z,,https://github.com/cartabinaria,2026-05-25
16+
2026-05-25,BendingSpoons,Bending Spoons,https://github.com/BendingSpoons,https://www.bendingspoons.com,"Milan, Italy",Da classificare,False,,274,0,3,0,2013-05-05T15:31:21Z,2026-04-24T00:52:57Z,,https://github.com/BendingSpoons,2026-05-25
17+
2026-05-25,ami-iit,Artificial and Mechanical Intelligence ,https://github.com/ami-iit,https://ami.iit.it/,Italy,Da classificare,False,,254,0,168,0,2017-05-04T15:42:54Z,2025-03-27T12:33:36Z,,https://github.com/ami-iit,2026-05-25
18+
2026-05-25,teamdigitale,Team Digitale,https://github.com/teamdigitale,https://teamdigitale.governo.it,"Rome, Italy",Pubblica amministrazione,True,Team per la Trasformazione Digitale - Presidenza del Consiglio dei Ministri - Italia,142,0,150,0,2017-01-12T14:12:28Z,2026-03-30T15:42:56Z,,https://github.com/teamdigitale,2026-05-25
19+
2026-05-25,ministero-salute,Ministero della Salute,https://github.com/ministero-salute,https://www.salute.gov.it,Italy,Pubblica amministrazione,False,Organizzazione GitHub del Ministero della Salute.,73,0,103,0,2021-04-27T13:13:21Z,2026-05-11T14:21:27Z,,https://github.com/ministero-salute,2026-05-25
20+
2026-05-25,openpolis,Openpolis,https://github.com/openpolis,http://www.openpolis.it,"Roma, Italia",Civic tech,False,"Open data, open government, open source.",49,0,71,0,2009-12-10T09:13:07Z,2020-06-01T18:16:26Z,,https://github.com/openpolis,2026-05-25
21+
2026-05-25,istat,istat,https://github.com/istat,https://www.istat.it,"Via Cesare Balbo 16, 00184 Rome",Ricerca e statistica,False,Organizzazione GitHub associata a Istat.,9,0,12,0,2023-02-10T14:31:40Z,2025-11-13T13:00:36Z,,https://github.com/istat,2026-05-25

0 commit comments

Comments
 (0)