mirror of
https://github.com/web3privacy/data
synced 2024-10-15 18:16:28 +02:00
update
This commit is contained in:
parent
276246b031
commit
be3825b5a1
9 changed files with 462 additions and 0 deletions
47
.github/workflows/deploy.yml
vendored
Normal file
47
.github/workflows/deploy.yml
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
name: Build and Deploy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main # Set a branch to deploy
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: denoland/setup-deno@v1
|
||||||
|
with:
|
||||||
|
deno-version: v1.x
|
||||||
|
|
||||||
|
- uses: szenius/set-timezone@v1.0
|
||||||
|
with:
|
||||||
|
timezoneLinux: "Europe/Prague"
|
||||||
|
|
||||||
|
- name: Cache
|
||||||
|
run: make cache
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: make test
|
||||||
|
|
||||||
|
- name: Build bundle
|
||||||
|
run: make build
|
||||||
|
|
||||||
|
#- name: Add custom domain
|
||||||
|
# run: "touch dist/CNAME && echo \"data.web3privacy.info\" >> dist/CNAME"
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
if: ${{ github.ref == 'refs/heads/main' }}
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./dist
|
13
Makefile
Normal file
13
Makefile
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
all: build
|
||||||
|
|
||||||
|
cache:
|
||||||
|
deno cache utils/build.js
|
||||||
|
|
||||||
|
build:
|
||||||
|
deno run --allow-all utils/build.js
|
||||||
|
|
||||||
|
test:
|
||||||
|
deno test --allow-all utils/test.js
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
deno fmt utils/*.js
|
257
data/events.yaml
Normal file
257
data/events.yaml
Normal file
|
@ -0,0 +1,257 @@
|
||||||
|
- id: w3ps1
|
||||||
|
type: summit
|
||||||
|
date: "2023-06-05"
|
||||||
|
city: Prague
|
||||||
|
country: cz
|
||||||
|
place: "[X10](https://www.divadlox10.cz/)"
|
||||||
|
confirmed: true
|
||||||
|
coincidence: "[ETHPrague](https://ethprague.com/)"
|
||||||
|
lead: Tree
|
||||||
|
slots: 16
|
||||||
|
visitors: 180
|
||||||
|
links:
|
||||||
|
web: https://prague.web3privacy.info/
|
||||||
|
git: https://github.com/web3privacy/w3ps1
|
||||||
|
|
||||||
|
- id: w3ps2
|
||||||
|
type: summit
|
||||||
|
date: "2023-10-05"
|
||||||
|
city: Rome
|
||||||
|
country: it
|
||||||
|
place: "[Villaggio Globale](https://maps.app.goo.gl/S7kUruNvbpjgHuSh9)"
|
||||||
|
confirmed: true
|
||||||
|
coincidence: "[ETHRome](https://ethrome.org/)"
|
||||||
|
lead: PG
|
||||||
|
slots: 10
|
||||||
|
visitors: 139
|
||||||
|
links:
|
||||||
|
web: https://lu.ma/web3privacynow_rome
|
||||||
|
|
||||||
|
- id: w3pm-prg1
|
||||||
|
type: meetup
|
||||||
|
date: "2023-11-14"
|
||||||
|
city: Prague
|
||||||
|
country: cz
|
||||||
|
place: "[Dílna](https://kafevdilne.cz/)"
|
||||||
|
confirmed: true
|
||||||
|
coincidence: "[DCxPrague](https://dcxprague.org/)"
|
||||||
|
lead: Tree
|
||||||
|
slots: 3
|
||||||
|
visitors: 15
|
||||||
|
links:
|
||||||
|
web: https://lu.ma/w3pm-prg1
|
||||||
|
|
||||||
|
- id: w3pm-bcn1
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Q1"
|
||||||
|
city: Barcelona
|
||||||
|
country: es
|
||||||
|
coincidence: ""
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- Mykola
|
||||||
|
optional: true
|
||||||
|
slots: 3
|
||||||
|
|
||||||
|
- id: w3pm-itxx
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Q1"
|
||||||
|
city: Italy (TBD)
|
||||||
|
country: it
|
||||||
|
coincidence: ""
|
||||||
|
lead: PG
|
||||||
|
optional: true
|
||||||
|
slots: 3
|
||||||
|
|
||||||
|
- id: w3pm-lib1
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Mar"
|
||||||
|
city: Liberec
|
||||||
|
country: cz
|
||||||
|
coincidence: "[ETHBohemia](https://ethbohemia.ethevents.club/)"
|
||||||
|
lead: Tree
|
||||||
|
optional: true
|
||||||
|
slots: 3
|
||||||
|
|
||||||
|
- id: w3pm-buc1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-03-28"
|
||||||
|
city: Bucharest
|
||||||
|
country: ro
|
||||||
|
# ETHBucharest 2024 - March 28-30 2024
|
||||||
|
coincidence: "[ETHBucharest](https://www.ethbucharest.xyz/)"
|
||||||
|
optional: true
|
||||||
|
slots: 3
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- Alina
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-bucharest1
|
||||||
|
|
||||||
|
- id: w3pm-ams1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-04-11"
|
||||||
|
city: Amsterdam
|
||||||
|
country: nl
|
||||||
|
lead: PG
|
||||||
|
helpers:
|
||||||
|
- Mykola
|
||||||
|
- Tree
|
||||||
|
- Alina
|
||||||
|
# ETHDam 2024 - April 12-14 2024
|
||||||
|
coincidence: "[ETHDam](https://www.ethdam.com/)"
|
||||||
|
slots: 3
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-ams1
|
||||||
|
|
||||||
|
- id: w3pm-tal1
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Apr"
|
||||||
|
city: Tallinn
|
||||||
|
country: ee
|
||||||
|
# ETHTallinn - April 19 - 21, 2024
|
||||||
|
coincidence: "[ETHTallinn](https://www.ethtallinn.org/)"
|
||||||
|
slots: 3
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
- id: w3pm-por1
|
||||||
|
type: meetup
|
||||||
|
date: "2024/May"
|
||||||
|
city: Porto
|
||||||
|
country: pt
|
||||||
|
coincidence: "[ETHPorto](https://ethporto.org/)"
|
||||||
|
slots: 3
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
- id: w3pm-ber1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-05-25"
|
||||||
|
city: Berlin
|
||||||
|
country: de
|
||||||
|
# ETHBerlin 4 - May 24-26, 2024
|
||||||
|
coincidence: "ETHBerlin"
|
||||||
|
lead: Tree
|
||||||
|
slots: 3
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-berlin1
|
||||||
|
|
||||||
|
- id: w3ps3
|
||||||
|
type: summit
|
||||||
|
date: "2024-06-04"
|
||||||
|
city: Prague
|
||||||
|
country: cz
|
||||||
|
coincidence: "ETHPrague"
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- PG
|
||||||
|
- Mykola
|
||||||
|
- Coinmandeer
|
||||||
|
slots: 16
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-summit-prague2
|
||||||
|
|
||||||
|
- id: w3ph1
|
||||||
|
type: hackathon
|
||||||
|
date: "2024-06-19"
|
||||||
|
days: 7
|
||||||
|
city: Bled
|
||||||
|
country: si
|
||||||
|
place: "[Subwork](https://subwork.xyz/)"
|
||||||
|
confirmed: true
|
||||||
|
coincidence: "W3PN Hackathon"
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- PG
|
||||||
|
- Mykola
|
||||||
|
- Coinmandeer
|
||||||
|
slots: 10
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-bled-hackathon1
|
||||||
|
|
||||||
|
- id: w3pm-lju1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-06-21"
|
||||||
|
city: Ljubljana
|
||||||
|
country: si
|
||||||
|
coincidence: "W3PN Hackathon"
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- PG
|
||||||
|
- Mykola
|
||||||
|
- Coinmandeer
|
||||||
|
slots: 5
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-ljubljana1
|
||||||
|
|
||||||
|
- id: w3pm-bcn2
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Jul"
|
||||||
|
city: Barcelona
|
||||||
|
country: es
|
||||||
|
coincidence: "ETHBarcelona"
|
||||||
|
slots: 3
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
- id: w3pm-bru1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-07-12"
|
||||||
|
city: Brussels
|
||||||
|
country: be
|
||||||
|
# EthCC 7 - July 8-11, 2024
|
||||||
|
coincidence: "[EthCC](https://www.ethcc.io/)"
|
||||||
|
slots: 3
|
||||||
|
lead: Mykola
|
||||||
|
helpers:
|
||||||
|
- Tree
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-bru1
|
||||||
|
|
||||||
|
- id: w3pm-waw1
|
||||||
|
type: meetup
|
||||||
|
date: "2024/Sep"
|
||||||
|
city: Warsaw
|
||||||
|
country: pl
|
||||||
|
coincidence: "ETHWarsaw"
|
||||||
|
lead: Tree
|
||||||
|
slots: 3
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
- id: w3pm-rom2
|
||||||
|
type: meetup
|
||||||
|
date: "2024-10-04"
|
||||||
|
city: Rome
|
||||||
|
country: it
|
||||||
|
coincidence: "ETHRome"
|
||||||
|
lead: PG
|
||||||
|
slots: 5
|
||||||
|
helpers:
|
||||||
|
- Mykola
|
||||||
|
- Alina
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-rome1
|
||||||
|
|
||||||
|
- id: w3ps4
|
||||||
|
type: summit
|
||||||
|
date: "2024-10-24"
|
||||||
|
city: Brno
|
||||||
|
country: cz
|
||||||
|
coincidence: "ETHBrno"
|
||||||
|
lead: Tree
|
||||||
|
helpers:
|
||||||
|
- PG
|
||||||
|
- Mykola
|
||||||
|
- Coinmandeer
|
||||||
|
slots: 16
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-summit-brno1
|
||||||
|
|
||||||
|
- id: w3pm-dc1
|
||||||
|
type: meetup
|
||||||
|
date: "2024-11-20"
|
||||||
|
city: SE Asia
|
||||||
|
country: xx
|
||||||
|
# Devcon 7 - probably November (?)
|
||||||
|
coincidence: "[Devcon](https://devcon.org/)"
|
||||||
|
slots: 5
|
||||||
|
links:
|
||||||
|
rsvp: https://lu.ma/w3pn-meetup-devcon7
|
6
data/index.yaml
Normal file
6
data/index.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
name: Web3Privacy Now
|
||||||
|
core-team:
|
||||||
|
- name: Tree
|
||||||
|
- name: Mykola
|
||||||
|
- name: PG
|
||||||
|
- name: Coinmandeer
|
55
schema/events.yaml
Normal file
55
schema/events.yaml
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
$defs:
|
||||||
|
event:
|
||||||
|
type: object
|
||||||
|
additionalProperties: false
|
||||||
|
required:
|
||||||
|
- id
|
||||||
|
- date
|
||||||
|
- city
|
||||||
|
- country
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- summit
|
||||||
|
- meetup
|
||||||
|
- hackathon
|
||||||
|
confirmed:
|
||||||
|
type: boolean
|
||||||
|
date:
|
||||||
|
type: string
|
||||||
|
days:
|
||||||
|
type: number
|
||||||
|
city:
|
||||||
|
type: string
|
||||||
|
country:
|
||||||
|
type: string
|
||||||
|
pattern: "^\\w{2}$"
|
||||||
|
place:
|
||||||
|
type: string
|
||||||
|
coincidence:
|
||||||
|
type: string
|
||||||
|
lead:
|
||||||
|
type: string
|
||||||
|
helpers:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
slots:
|
||||||
|
type: number
|
||||||
|
visitors:
|
||||||
|
type: number
|
||||||
|
optional:
|
||||||
|
type: boolean
|
||||||
|
links:
|
||||||
|
type: object
|
||||||
|
additionalProperties: false
|
||||||
|
patternProperties:
|
||||||
|
"^[\\w]+":
|
||||||
|
type: string
|
||||||
|
format: uri
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "#/$defs/event"
|
1
schema/index.yaml
Normal file
1
schema/index.yaml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
type: object
|
6
utils/build.js
Normal file
6
utils/build.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import { Engine } from "./engine.js";
|
||||||
|
|
||||||
|
const engine = new Engine();
|
||||||
|
await engine.init();
|
||||||
|
|
||||||
|
await engine.build();
|
52
utils/engine.js
Normal file
52
utils/engine.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import { join } from "https://deno.land/std@0.208.0/path/mod.ts";
|
||||||
|
import { emptyDir } from "https://deno.land/std@0.196.0/fs/empty_dir.ts";
|
||||||
|
import { parse, stringify } from "npm:yaml";
|
||||||
|
|
||||||
|
const SRC_DIR = "./data";
|
||||||
|
const DEST_DIR = "./dist";
|
||||||
|
const SCHEMA_DIR = "./schema";
|
||||||
|
|
||||||
|
export class Engine {
|
||||||
|
constructor() {
|
||||||
|
this.index = {};
|
||||||
|
this.db = {};
|
||||||
|
this.schemas = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
async init() {
|
||||||
|
// load schemas
|
||||||
|
for await (const dirEntry of Deno.readDir(SCHEMA_DIR)) {
|
||||||
|
const [fn, _] = dirEntry.name.split(".");
|
||||||
|
this.schemas[fn] = await readYamlFile(join(SCHEMA_DIR, dirEntry.name));
|
||||||
|
}
|
||||||
|
// load data
|
||||||
|
this.index = await readYamlFile(join(SRC_DIR, "index.yaml"));
|
||||||
|
for await (const dirEntry of Deno.readDir(SRC_DIR)) {
|
||||||
|
const [fn, ext] = dirEntry.name.split(".");
|
||||||
|
if (ext === "yaml" && fn !== "index") {
|
||||||
|
this.db[fn] = await readYamlFile(join(SRC_DIR, dirEntry.name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async build() {
|
||||||
|
await emptyDir(DEST_DIR);
|
||||||
|
await writeJSONFile(join(DEST_DIR, "index.json"), this.index);
|
||||||
|
await writeJSONFile(
|
||||||
|
join(DEST_DIR, "bundle.json"),
|
||||||
|
Object.assign({}, this.index, this.db),
|
||||||
|
);
|
||||||
|
for (const col of Object.keys(this.db)) {
|
||||||
|
await writeJSONFile(join(DEST_DIR, `${col}.json`), this.db[col]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function readYamlFile(fn) {
|
||||||
|
return parse(await Deno.readTextFile(fn));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function writeJSONFile(fn, data) {
|
||||||
|
console.log(`File written: ${fn}`);
|
||||||
|
return Deno.writeTextFile(fn, JSON.stringify(data, null, 2));
|
||||||
|
}
|
25
utils/test.js
Normal file
25
utils/test.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import Ajv from "npm:ajv@8.8.2";
|
||||||
|
import addFormats from "npm:ajv-formats@2.1.1";
|
||||||
|
|
||||||
|
import { Engine } from "./engine.js";
|
||||||
|
|
||||||
|
const engine = new Engine();
|
||||||
|
await engine.init();
|
||||||
|
|
||||||
|
const ajv = new Ajv({ strict: false });
|
||||||
|
addFormats(ajv);
|
||||||
|
|
||||||
|
function checkCollection (name, schema, data) {
|
||||||
|
Deno.test(name, () => {
|
||||||
|
const validator = ajv.compile(schema);
|
||||||
|
if (!validator(data)) {
|
||||||
|
throw validator.errors;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// check index
|
||||||
|
checkCollection("index", engine.schemas.index, engine.index)
|
||||||
|
for (const col of Object.keys(engine.db)) {
|
||||||
|
checkCollection(`collection: ${col}`, engine.schemas[col], engine.db[col])
|
||||||
|
}
|
Loading…
Reference in a new issue