Skip to content

Commit 6f53894

Browse files
committed
Check if multicodec table is in sync with the multiaddr table
1 parent c950ec4 commit 6f53894

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: Check that we are in sync with the Multicodec repo
2+
on: [pull_request]
3+
jobs:
4+
check-multicodec-in-sync:
5+
runs-on: ubuntu-latest
6+
steps:
7+
- name: Check out repository code
8+
uses: actions/checkout@v3
9+
- name: Checkout tools repo
10+
uses: actions/checkout@v3
11+
with:
12+
repository: multiformats/multicodec
13+
path: multicodec
14+
- name: List files in the repository
15+
run: |
16+
ls ${{ github.workspace }}
17+
- name: Install babashka
18+
uses: just-sultanov/setup-babashka@v2
19+
with:
20+
version: '0.4.6'
21+
- name: Run checker
22+
run: bb multicodec-sync-check/check.clj

multicodec-sync-check/check.clj

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/usr/bin/env bb
2+
(ns check
3+
(:require [babashka.fs :as fs]
4+
[clojure.data.csv :as csv]
5+
[clojure.java.io :as io]
6+
clojure.string
7+
clojure.pprint))
8+
9+
(def multiaddr-dir (.getParent (io/file (.getParent (io/file *file*)))))
10+
11+
(def multicodec-csv-file
12+
(cond
13+
(fs/exists? (io/file multiaddr-dir "../multicodec")) (io/file multiaddr-dir "../multicodec/table.csv")
14+
(fs/exists? (io/file multiaddr-dir "./multicodec")) (io/file multiaddr-dir "./multicodec/table.csv")
15+
:else
16+
(do
17+
(println "Can't find multicodec repo")
18+
(System/exit 1))))
19+
20+
(defn parseHex [h]
21+
(-> h
22+
(clojure.string/split #"0x")
23+
second
24+
(Integer/parseInt 16)))
25+
26+
(defn parse-csv [reader code-parser]
27+
(let [data (csv/read-csv reader)
28+
headers (map (comp keyword clojure.string/trim) (first data))
29+
body (map #(map clojure.string/trim %) (rest data))]
30+
(doall
31+
(->>
32+
body
33+
(map (partial zipmap headers))
34+
(map #(update % :code code-parser))))))
35+
36+
(def multicodec-contents
37+
(with-open [reader (io/reader multicodec-csv-file)]
38+
(parse-csv reader parseHex)))
39+
40+
(def multiaddr-contents
41+
(with-open [reader (io/reader (io/file multiaddr-dir "protocols.csv"))]
42+
(parse-csv reader #(Integer/parseInt %))))
43+
44+
(defn to-codec-map [table] (reduce #(assoc %1 (:code %2) %2) {} table))
45+
46+
(def missing-multicodecs
47+
(let [multicodec-map (to-codec-map multicodec-contents)]
48+
(reduce
49+
(fn [acc multiaddr]
50+
(if-not (contains? multicodec-map (:code multiaddr))
51+
(conj acc multiaddr)
52+
acc))
53+
[] multiaddr-contents)))
54+
55+
56+
(when (> (count missing-multicodecs) 0)
57+
(println "Some protocols in the multiadddr table are not registered with multicodecs:")
58+
(clojure.pprint/print-table missing-multicodecs)
59+
(System/exit 1))

0 commit comments

Comments
 (0)