Initialise le catalogue de jeux Skori
Validation du contenu / validate (push) Successful in 34s

- Structure games/<bggId>-<nom>/ : game.json, scoring.json, rules.fr.json
- 7 jeux intégrés à l'app (modèles de score), fiches de règles Azul et
  6 qui prend
- Schémas JSON générés depuis l'app (autocomplétion dans l'éditeur)
- CI : validation avec le validateur de l'app, schémas à jour
- Licence CC BY-SA 4.0, guide de contribution
This commit is contained in:
2026-10-18 21:19:01 +02:00
commit d823c1d0b9
25 changed files with 1128 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"schemaVersion": {
"type": "number",
"const": 1
},
"bggId": {
"type": "integer",
"exclusiveMinimum": 0
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60
},
"officialRulesUrl": {
"type": "string",
"format": "uri",
"pattern": "^https\\:\\/\\/"
}
},
"required": [
"schemaVersion",
"bggId",
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Jeu Skori (game.json)"
}
+64
View File
@@ -0,0 +1,64 @@
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"schemaVersion": {
"type": "number",
"const": 1
},
"locale": {
"type": "string",
"enum": [
"fr"
],
"default": "fr"
},
"summary": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"goal": {
"type": "string",
"maxLength": 1000,
"minLength": 1
},
"setup": {
"type": "string",
"maxLength": 3000
},
"turn": {
"type": "string",
"maxLength": 5000,
"minLength": 1
},
"end": {
"type": "string",
"maxLength": 2000
},
"scoring": {
"type": "string",
"maxLength": 3000
},
"tips": {
"type": "string",
"maxLength": 2000
},
"officialRulesUrl": {
"type": "string",
"format": "uri",
"pattern": "^https\\:\\/\\/"
}
},
"required": [
"schemaVersion",
"summary",
"goal",
"turn"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Fiche de règles Skori (rules.fr.json)"
}
+498
View File
@@ -0,0 +1,498 @@
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"schemaVersion": {
"type": "number",
"const": 2
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"bggId": {
"type": "integer",
"exclusiveMinimum": 0
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"description": {
"type": "string",
"maxLength": 400
},
"players": {
"type": "object",
"properties": {
"min": {
"type": "integer",
"minimum": 1,
"maximum": 30
},
"max": {
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
},
"winner": {
"type": "string",
"enum": [
"highest",
"lowest"
]
},
"aggregation": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "sum"
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "sum_with_reset"
},
"threshold": {
"type": "number"
},
"resetTo": {
"type": "number"
},
"oncePerPlayer": {
"type": "boolean"
}
},
"required": [
"type",
"threshold",
"resetTo",
"oncePerPlayer"
],
"additionalProperties": false
}
],
"default": {
"type": "sum"
}
},
"end": {
"type": "object",
"properties": {
"target": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "fixed"
},
"value": {
"type": "number"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "option"
},
"optionId": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"customValue": {
"type": "string"
},
"customOptionId": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
}
},
"required": [
"type",
"optionId"
],
"additionalProperties": false
}
]
},
"targetCondition": {
"type": "string",
"enum": [
"reaches",
"exceeds"
],
"default": "reaches"
},
"rounds": {
"type": "integer",
"exclusiveMinimum": 0
}
},
"additionalProperties": false,
"default": {}
},
"teams": {
"type": "object",
"properties": {
"rounds": {
"type": "integer",
"exclusiveMinimum": 0
},
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"required": [
"id",
"label",
"color"
],
"additionalProperties": false
},
"minItems": 2
}
},
"required": [
"rounds",
"list"
],
"additionalProperties": false
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"icon": {
"type": "string",
"maxLength": 40
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"requiresOption": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
}
},
"required": [
"id",
"label"
],
"additionalProperties": false
},
"default": []
},
"options": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "boolean"
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"default": {
"type": "boolean"
},
"visibleWhen": {
"type": "object",
"properties": {
"optionId": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"equals": {
"type": [
"boolean",
"number",
"string"
]
}
},
"required": [
"optionId",
"equals"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"label",
"default"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "number"
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"default": {
"type": "number"
},
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"visibleWhen": {
"type": "object",
"properties": {
"optionId": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"equals": {
"type": [
"boolean",
"number",
"string"
]
}
},
"required": [
"optionId",
"equals"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"label",
"default"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "select"
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"default": {
"type": "string"
},
"choices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"required": [
"value",
"label"
],
"additionalProperties": false
},
"minItems": 1
},
"visibleWhen": {
"type": "object",
"properties": {
"optionId": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"equals": {
"type": [
"boolean",
"number",
"string"
]
}
},
"required": [
"optionId",
"equals"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"label",
"default",
"choices"
],
"additionalProperties": false
}
]
},
"default": []
},
"icon": {
"type": "string",
"maxLength": 40
},
"colors": {
"type": "object",
"properties": {
"primary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"secondary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"required": [
"primary"
],
"additionalProperties": false
},
"assets": {
"type": "object",
"properties": {
"logo": {
"type": "string"
},
"banner": {
"type": "string"
},
"rules": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"schemaVersion",
"id",
"name",
"players",
"winner",
"colors"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Modèle de score Skori (scoring.json)"
}