fabric-arcade 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fabric_arcade-0.1.0/.github/workflows/ci.yml +181 -0
- fabric_arcade-0.1.0/.github/workflows/preview.yml +45 -0
- fabric_arcade-0.1.0/.github/workflows/release.yml +193 -0
- fabric_arcade-0.1.0/.github/workflows/static.yml +46 -0
- fabric_arcade-0.1.0/.gitignore +52 -0
- fabric_arcade-0.1.0/CONTRIBUTING.md +153 -0
- fabric_arcade-0.1.0/LICENSE +21 -0
- fabric_arcade-0.1.0/PKG-INFO +204 -0
- fabric_arcade-0.1.0/README.md +164 -0
- fabric_arcade-0.1.0/catalog/city-builder/README.md +339 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/README.md +330 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/eventstream/definition.json +34 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/manifest.json +132 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_dashboard.ipynb +322 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_simulator.ipynb +286 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_simulator.py +716 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/racing_game.ipynb +339 -0
- fabric_arcade-0.1.0/catalog/fabric-racing-game/schemas/GameEvents.kql +35 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/eventstream/definition.json +86 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/manifest.json +143 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/notebooks/artemis_simulator.ipynb +360 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/notebooks/mission_control.ipynb +290 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/CrewVitals.kql +39 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/EnvironmentalConditions.kql +37 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/MissionEvents.kql +33 -0
- fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/VehicleTelemetry.kql +39 -0
- fabric_arcade-0.1.0/catalog/quest-pipeline/README.md +261 -0
- fabric_arcade-0.1.0/catalog/sports-tracker/README.md +193 -0
- fabric_arcade-0.1.0/catalog_index.json +59 -0
- fabric_arcade-0.1.0/css/style.css +634 -0
- fabric_arcade-0.1.0/docs/getting-started.md +166 -0
- fabric_arcade-0.1.0/fabric_arcade/__init__.py +50 -0
- fabric_arcade-0.1.0/fabric_arcade/catalog.py +229 -0
- fabric_arcade-0.1.0/fabric_arcade/cli.py +185 -0
- fabric_arcade-0.1.0/fabric_arcade/core.py +232 -0
- fabric_arcade-0.1.0/fabric_arcade/deploy.py +164 -0
- fabric_arcade-0.1.0/fabric_arcade/engine.py +586 -0
- fabric_arcade-0.1.0/fabric_arcade/fabric_api.py +410 -0
- fabric_arcade-0.1.0/index.html +283 -0
- fabric_arcade-0.1.0/js/main.js +211 -0
- fabric_arcade-0.1.0/pyproject.toml +100 -0
- fabric_arcade-0.1.0/templates/README.template.md +98 -0
- fabric_arcade-0.1.0/templates/manifest.template.json +76 -0
- fabric_arcade-0.1.0/tests/__init__.py +3 -0
- fabric_arcade-0.1.0/tests/test_catalog.py +126 -0
- fabric_arcade-0.1.0/website/css/style.css +634 -0
- fabric_arcade-0.1.0/website/index.html +283 -0
- fabric_arcade-0.1.0/website/js/main.js +211 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Fabric Arcade - CI Workflow
|
|
2
|
+
# Runs tests, linting, and type checking on every push and PR
|
|
3
|
+
|
|
4
|
+
name: CI
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [main, develop]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [main]
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
PYTHON_VERSION: "3.11"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
# ============================================
|
|
17
|
+
# Lint and Type Check
|
|
18
|
+
# ============================================
|
|
19
|
+
lint:
|
|
20
|
+
name: ๐ Lint & Type Check
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: ๐ฅ Checkout code
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: ๐ Set up Python
|
|
28
|
+
uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
31
|
+
cache: 'pip'
|
|
32
|
+
|
|
33
|
+
- name: ๐ฆ Install dependencies
|
|
34
|
+
run: |
|
|
35
|
+
python -m pip install --upgrade pip
|
|
36
|
+
pip install ruff mypy
|
|
37
|
+
pip install -e ".[dev]"
|
|
38
|
+
|
|
39
|
+
- name: ๐ Run Ruff linter
|
|
40
|
+
run: ruff check fabric_arcade/
|
|
41
|
+
|
|
42
|
+
- name: ๐ Run Ruff formatter check
|
|
43
|
+
run: ruff format --check fabric_arcade/
|
|
44
|
+
|
|
45
|
+
- name: ๐ฌ Run MyPy type check
|
|
46
|
+
run: mypy fabric_arcade/ --ignore-missing-imports
|
|
47
|
+
|
|
48
|
+
# ============================================
|
|
49
|
+
# Unit Tests
|
|
50
|
+
# ============================================
|
|
51
|
+
test:
|
|
52
|
+
name: ๐งช Tests (Python ${{ matrix.python-version }})
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
strategy:
|
|
55
|
+
fail-fast: false
|
|
56
|
+
matrix:
|
|
57
|
+
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
|
58
|
+
|
|
59
|
+
steps:
|
|
60
|
+
- name: ๐ฅ Checkout code
|
|
61
|
+
uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: ๐ Set up Python ${{ matrix.python-version }}
|
|
64
|
+
uses: actions/setup-python@v5
|
|
65
|
+
with:
|
|
66
|
+
python-version: ${{ matrix.python-version }}
|
|
67
|
+
cache: 'pip'
|
|
68
|
+
|
|
69
|
+
- name: ๐ฆ Install dependencies
|
|
70
|
+
run: |
|
|
71
|
+
python -m pip install --upgrade pip
|
|
72
|
+
pip install -e ".[dev]"
|
|
73
|
+
|
|
74
|
+
- name: ๐งช Run pytest
|
|
75
|
+
run: |
|
|
76
|
+
pytest tests/ -v --cov=fabric_arcade --cov-report=xml --cov-report=term
|
|
77
|
+
|
|
78
|
+
- name: ๐ Upload coverage to Codecov
|
|
79
|
+
if: matrix.python-version == '3.11'
|
|
80
|
+
uses: codecov/codecov-action@v4
|
|
81
|
+
with:
|
|
82
|
+
files: ./coverage.xml
|
|
83
|
+
fail_ci_if_error: false
|
|
84
|
+
|
|
85
|
+
# ============================================
|
|
86
|
+
# Build Package
|
|
87
|
+
# ============================================
|
|
88
|
+
build:
|
|
89
|
+
name: ๐ฆ Build Package
|
|
90
|
+
runs-on: ubuntu-latest
|
|
91
|
+
needs: [lint, test]
|
|
92
|
+
|
|
93
|
+
steps:
|
|
94
|
+
- name: ๐ฅ Checkout code
|
|
95
|
+
uses: actions/checkout@v4
|
|
96
|
+
|
|
97
|
+
- name: ๐ Set up Python
|
|
98
|
+
uses: actions/setup-python@v5
|
|
99
|
+
with:
|
|
100
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
101
|
+
|
|
102
|
+
- name: ๐ฆ Install build tools
|
|
103
|
+
run: |
|
|
104
|
+
python -m pip install --upgrade pip
|
|
105
|
+
pip install build twine
|
|
106
|
+
|
|
107
|
+
- name: ๐๏ธ Build package
|
|
108
|
+
run: python -m build
|
|
109
|
+
|
|
110
|
+
- name: โ
Check package
|
|
111
|
+
run: twine check dist/*
|
|
112
|
+
|
|
113
|
+
- name: ๐ค Upload build artifacts
|
|
114
|
+
uses: actions/upload-artifact@v4
|
|
115
|
+
with:
|
|
116
|
+
name: dist
|
|
117
|
+
path: dist/
|
|
118
|
+
retention-days: 5
|
|
119
|
+
|
|
120
|
+
# ============================================
|
|
121
|
+
# Validate Catalog
|
|
122
|
+
# ============================================
|
|
123
|
+
validate-catalog:
|
|
124
|
+
name: ๐ Validate Game Catalog
|
|
125
|
+
runs-on: ubuntu-latest
|
|
126
|
+
|
|
127
|
+
steps:
|
|
128
|
+
- name: ๐ฅ Checkout code
|
|
129
|
+
uses: actions/checkout@v4
|
|
130
|
+
|
|
131
|
+
- name: ๐ Set up Python
|
|
132
|
+
uses: actions/setup-python@v5
|
|
133
|
+
with:
|
|
134
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
135
|
+
|
|
136
|
+
- name: ๐ฆ Install package
|
|
137
|
+
run: |
|
|
138
|
+
python -m pip install --upgrade pip
|
|
139
|
+
pip install -e .
|
|
140
|
+
|
|
141
|
+
- name: ๐ Validate catalog entries
|
|
142
|
+
run: |
|
|
143
|
+
python -c "
|
|
144
|
+
from fabric_arcade.catalog import get_catalog, get_game
|
|
145
|
+
|
|
146
|
+
print('๐ฎ Validating Fabric Arcade Catalog...')
|
|
147
|
+
print('=' * 50)
|
|
148
|
+
|
|
149
|
+
catalog = get_catalog()
|
|
150
|
+
print(f'Total games: {len(catalog)}')
|
|
151
|
+
|
|
152
|
+
for game in catalog:
|
|
153
|
+
print(f' โ
{game.icon} {game.name} ({game.id})')
|
|
154
|
+
# Validate game can be retrieved
|
|
155
|
+
assert get_game(game.id) is not None
|
|
156
|
+
|
|
157
|
+
print('=' * 50)
|
|
158
|
+
print('โ
All catalog entries valid!')
|
|
159
|
+
"
|
|
160
|
+
|
|
161
|
+
- name: ๐ Validate manifest files
|
|
162
|
+
run: |
|
|
163
|
+
python -c "
|
|
164
|
+
import json
|
|
165
|
+
from pathlib import Path
|
|
166
|
+
|
|
167
|
+
print('๐ Validating manifest.json files...')
|
|
168
|
+
|
|
169
|
+
catalog_dir = Path('catalog')
|
|
170
|
+
for manifest_path in catalog_dir.glob('*/manifest.json'):
|
|
171
|
+
with open(manifest_path) as f:
|
|
172
|
+
manifest = json.load(f)
|
|
173
|
+
|
|
174
|
+
required_fields = ['id', 'name', 'version', 'type', 'workloads']
|
|
175
|
+
for field in required_fields:
|
|
176
|
+
assert field in manifest, f'Missing {field} in {manifest_path}'
|
|
177
|
+
|
|
178
|
+
print(f' โ
{manifest_path}')
|
|
179
|
+
|
|
180
|
+
print('โ
All manifests valid!')
|
|
181
|
+
"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Fabric Arcade - PR Preview Workflow
|
|
2
|
+
# Deploys preview of website changes for PRs
|
|
3
|
+
|
|
4
|
+
name: PR Preview
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
pull_request:
|
|
8
|
+
types: [opened, synchronize, reopened]
|
|
9
|
+
paths:
|
|
10
|
+
- 'website/**'
|
|
11
|
+
- 'catalog/**'
|
|
12
|
+
- 'docs/**'
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
preview:
|
|
16
|
+
name: ๐ Deploy Preview
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
permissions:
|
|
19
|
+
pull-requests: write
|
|
20
|
+
contents: read
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: ๐ฅ Checkout code
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: ๐๏ธ Build preview
|
|
27
|
+
run: |
|
|
28
|
+
mkdir -p preview
|
|
29
|
+
cp -r website/* preview/
|
|
30
|
+
|
|
31
|
+
- name: ๐ Deploy to Netlify
|
|
32
|
+
uses: nwtgck/actions-netlify@v2
|
|
33
|
+
with:
|
|
34
|
+
publish-dir: './preview'
|
|
35
|
+
production-deploy: false
|
|
36
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
37
|
+
deploy-message: "PR Preview for #${{ github.event.pull_request.number }}"
|
|
38
|
+
enable-pull-request-comment: true
|
|
39
|
+
enable-commit-comment: false
|
|
40
|
+
overwrites-pull-request-comment: true
|
|
41
|
+
env:
|
|
42
|
+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
|
43
|
+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
|
|
44
|
+
timeout-minutes: 5
|
|
45
|
+
continue-on-error: true # Don't fail if Netlify not configured
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Fabric Arcade - Release & Deploy Workflow
|
|
2
|
+
# Publishes to PyPI and deploys website on release
|
|
3
|
+
|
|
4
|
+
name: Release & Deploy
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
release:
|
|
8
|
+
types: [published]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
inputs:
|
|
11
|
+
deploy_website:
|
|
12
|
+
description: 'Deploy website only'
|
|
13
|
+
type: boolean
|
|
14
|
+
default: false
|
|
15
|
+
publish_pypi:
|
|
16
|
+
description: 'Publish to PyPI'
|
|
17
|
+
type: boolean
|
|
18
|
+
default: false
|
|
19
|
+
|
|
20
|
+
env:
|
|
21
|
+
PYTHON_VERSION: "3.11"
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
# ============================================
|
|
25
|
+
# Publish to PyPI
|
|
26
|
+
# ============================================
|
|
27
|
+
publish-pypi:
|
|
28
|
+
name: ๐ฆ Publish to PyPI
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
if: github.event_name == 'release' || inputs.publish_pypi
|
|
31
|
+
environment:
|
|
32
|
+
name: pypi
|
|
33
|
+
url: https://pypi.org/project/fabric-arcade/
|
|
34
|
+
permissions:
|
|
35
|
+
id-token: write # For trusted publishing
|
|
36
|
+
|
|
37
|
+
steps:
|
|
38
|
+
- name: ๐ฅ Checkout code
|
|
39
|
+
uses: actions/checkout@v4
|
|
40
|
+
|
|
41
|
+
- name: ๐ Set up Python
|
|
42
|
+
uses: actions/setup-python@v5
|
|
43
|
+
with:
|
|
44
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
45
|
+
|
|
46
|
+
- name: ๐ฆ Install build tools
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install --upgrade pip
|
|
49
|
+
pip install build
|
|
50
|
+
|
|
51
|
+
- name: ๐๏ธ Build package
|
|
52
|
+
run: python -m build
|
|
53
|
+
|
|
54
|
+
- name: ๐ค Publish to PyPI
|
|
55
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
56
|
+
# Uses trusted publishing - no token needed
|
|
57
|
+
|
|
58
|
+
# ============================================
|
|
59
|
+
# Deploy Website to GitHub Pages
|
|
60
|
+
# ============================================
|
|
61
|
+
deploy-website:
|
|
62
|
+
name: ๐ Deploy Website
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
if: github.event_name == 'release' || inputs.deploy_website
|
|
65
|
+
permissions:
|
|
66
|
+
contents: read
|
|
67
|
+
pages: write
|
|
68
|
+
id-token: write
|
|
69
|
+
environment:
|
|
70
|
+
name: github-pages
|
|
71
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
72
|
+
|
|
73
|
+
steps:
|
|
74
|
+
- name: ๐ฅ Checkout code
|
|
75
|
+
uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: ๐ง Setup Pages
|
|
78
|
+
uses: actions/configure-pages@v4
|
|
79
|
+
|
|
80
|
+
- name: ๐ฆ Build website
|
|
81
|
+
run: |
|
|
82
|
+
# Copy website files
|
|
83
|
+
mkdir -p _site
|
|
84
|
+
cp -r website/* _site/
|
|
85
|
+
|
|
86
|
+
# Generate game pages from catalog
|
|
87
|
+
python -c "
|
|
88
|
+
import json
|
|
89
|
+
from pathlib import Path
|
|
90
|
+
|
|
91
|
+
# Create games directory
|
|
92
|
+
games_dir = Path('_site/games')
|
|
93
|
+
games_dir.mkdir(exist_ok=True)
|
|
94
|
+
|
|
95
|
+
# Generate page for each game
|
|
96
|
+
catalog_dir = Path('catalog')
|
|
97
|
+
for game_dir in catalog_dir.iterdir():
|
|
98
|
+
if not game_dir.is_dir():
|
|
99
|
+
continue
|
|
100
|
+
|
|
101
|
+
readme = game_dir / 'README.md'
|
|
102
|
+
manifest = game_dir / 'manifest.json'
|
|
103
|
+
|
|
104
|
+
if readme.exists() and manifest.exists():
|
|
105
|
+
with open(manifest) as f:
|
|
106
|
+
meta = json.load(f)
|
|
107
|
+
|
|
108
|
+
# Create simple redirect/info page
|
|
109
|
+
html = f'''<!DOCTYPE html>
|
|
110
|
+
<html>
|
|
111
|
+
<head>
|
|
112
|
+
<title>{meta['name']} - Fabric Arcade</title>
|
|
113
|
+
<meta http-equiv=\"refresh\" content=\"0; url=../docs/{meta['id']}.html\">
|
|
114
|
+
<link rel=\"stylesheet\" href=\"../css/style.css\">
|
|
115
|
+
</head>
|
|
116
|
+
<body>
|
|
117
|
+
<div style=\"text-align:center; padding:50px;\">
|
|
118
|
+
<h1>{meta.get('icon', '๐ฎ')} {meta['name']}</h1>
|
|
119
|
+
<p>Redirecting to documentation...</p>
|
|
120
|
+
</div>
|
|
121
|
+
</body>
|
|
122
|
+
</html>'''
|
|
123
|
+
|
|
124
|
+
(games_dir / f\"{meta['id']}.html\").write_text(html)
|
|
125
|
+
print(f' โ
Generated {meta[\"id\"]}.html')
|
|
126
|
+
"
|
|
127
|
+
|
|
128
|
+
- name: ๐ค Upload artifact
|
|
129
|
+
uses: actions/upload-pages-artifact@v3
|
|
130
|
+
with:
|
|
131
|
+
path: _site
|
|
132
|
+
|
|
133
|
+
- name: ๐ Deploy to GitHub Pages
|
|
134
|
+
id: deployment
|
|
135
|
+
uses: actions/deploy-pages@v4
|
|
136
|
+
|
|
137
|
+
# ============================================
|
|
138
|
+
# Create GitHub Release Assets
|
|
139
|
+
# ============================================
|
|
140
|
+
release-assets:
|
|
141
|
+
name: ๐ Upload Release Assets
|
|
142
|
+
runs-on: ubuntu-latest
|
|
143
|
+
if: github.event_name == 'release'
|
|
144
|
+
permissions:
|
|
145
|
+
contents: write
|
|
146
|
+
|
|
147
|
+
steps:
|
|
148
|
+
- name: ๐ฅ Checkout code
|
|
149
|
+
uses: actions/checkout@v4
|
|
150
|
+
|
|
151
|
+
- name: ๐ Set up Python
|
|
152
|
+
uses: actions/setup-python@v5
|
|
153
|
+
with:
|
|
154
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
155
|
+
|
|
156
|
+
- name: ๐ฆ Build package
|
|
157
|
+
run: |
|
|
158
|
+
pip install build
|
|
159
|
+
python -m build
|
|
160
|
+
|
|
161
|
+
- name: ๐ Create catalog bundle
|
|
162
|
+
run: |
|
|
163
|
+
# Create a zip of the catalog for offline use
|
|
164
|
+
zip -r fabric-arcade-catalog.zip catalog/
|
|
165
|
+
|
|
166
|
+
- name: ๐ค Upload release assets
|
|
167
|
+
uses: softprops/action-gh-release@v1
|
|
168
|
+
with:
|
|
169
|
+
files: |
|
|
170
|
+
dist/*.whl
|
|
171
|
+
dist/*.tar.gz
|
|
172
|
+
fabric-arcade-catalog.zip
|
|
173
|
+
|
|
174
|
+
# ============================================
|
|
175
|
+
# Notify on Success
|
|
176
|
+
# ============================================
|
|
177
|
+
notify:
|
|
178
|
+
name: ๐ข Notify
|
|
179
|
+
runs-on: ubuntu-latest
|
|
180
|
+
needs: [publish-pypi, deploy-website]
|
|
181
|
+
if: always() && github.event_name == 'release'
|
|
182
|
+
|
|
183
|
+
steps:
|
|
184
|
+
- name: ๐ข Post release summary
|
|
185
|
+
run: |
|
|
186
|
+
echo "## ๐ฎ Fabric Arcade Release Summary" >> $GITHUB_STEP_SUMMARY
|
|
187
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
188
|
+
echo "**Version:** ${{ github.event.release.tag_name }}" >> $GITHUB_STEP_SUMMARY
|
|
189
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
190
|
+
echo "### Links" >> $GITHUB_STEP_SUMMARY
|
|
191
|
+
echo "- ๐ฆ [PyPI Package](https://pypi.org/project/fabric-arcade/)" >> $GITHUB_STEP_SUMMARY
|
|
192
|
+
echo "- ๐ [Website](https://fabricarcade.github.io/fabric-arcade/)" >> $GITHUB_STEP_SUMMARY
|
|
193
|
+
echo "- ๐ [Documentation](https://fabricarcade.github.io/fabric-arcade/docs/)" >> $GITHUB_STEP_SUMMARY
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Simple workflow for deploying static content to GitHub Pages
|
|
2
|
+
name: Deploy static content to Pages
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
# Runs on pushes targeting the default branch
|
|
6
|
+
push:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
|
|
9
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
|
19
|
+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
|
20
|
+
concurrency:
|
|
21
|
+
group: "pages"
|
|
22
|
+
cancel-in-progress: false
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
# Single deploy job since we're just deploying
|
|
26
|
+
deploy:
|
|
27
|
+
environment:
|
|
28
|
+
name: github-pages
|
|
29
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- name: Checkout
|
|
33
|
+
uses: actions/checkout@v4
|
|
34
|
+
- name: Setup Pages
|
|
35
|
+
uses: actions/configure-pages@v5
|
|
36
|
+
- name: Upload artifact
|
|
37
|
+
uses: actions/upload-pages-artifact@v3
|
|
38
|
+
with:
|
|
39
|
+
# Upload entire repository
|
|
40
|
+
path: './website'
|
|
41
|
+
- name: Deploy to GitHub Pages
|
|
42
|
+
id: deployment
|
|
43
|
+
uses: actions/deploy-pages@v5
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
ENV/
|
|
27
|
+
|
|
28
|
+
# IDE
|
|
29
|
+
.vscode/
|
|
30
|
+
.idea/
|
|
31
|
+
*.swp
|
|
32
|
+
*.swo
|
|
33
|
+
|
|
34
|
+
# Testing
|
|
35
|
+
.pytest_cache/
|
|
36
|
+
.coverage
|
|
37
|
+
htmlcov/
|
|
38
|
+
.tox/
|
|
39
|
+
.nox/
|
|
40
|
+
|
|
41
|
+
# MyPy
|
|
42
|
+
.mypy_cache/
|
|
43
|
+
|
|
44
|
+
# Ruff
|
|
45
|
+
.ruff_cache/
|
|
46
|
+
|
|
47
|
+
# OS
|
|
48
|
+
.DS_Store
|
|
49
|
+
Thumbs.db
|
|
50
|
+
|
|
51
|
+
# Netlify
|
|
52
|
+
.netlify/
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Contributing to Fabric Arcade ๐ฎ
|
|
2
|
+
|
|
3
|
+
Grazie per voler contribuire a Fabric Arcade! Questo documento spiega come creare nuovi giochi per il catalogo.
|
|
4
|
+
|
|
5
|
+
## ๐ฏ Tipi di Contributi
|
|
6
|
+
|
|
7
|
+
### 1. Nuovo Gioco
|
|
8
|
+
Crea un nuovo progetto gamificato per imparare Fabric.
|
|
9
|
+
|
|
10
|
+
### 2. Miglioramento Gioco Esistente
|
|
11
|
+
Aggiungi feature, correggi bug, o migliora la documentazione.
|
|
12
|
+
|
|
13
|
+
### 3. Traduzione
|
|
14
|
+
Traduci i giochi in altre lingue.
|
|
15
|
+
|
|
16
|
+
## ๐ฎ Creare un Nuovo Gioco
|
|
17
|
+
|
|
18
|
+
### Step 1: Scegli il Tipo
|
|
19
|
+
|
|
20
|
+
| Tipo | Durata | Complessitร | Ideale per |
|
|
21
|
+
|------|--------|-------------|------------|
|
|
22
|
+
| **Mission** | 30-60 min | Multi-workload | Scenari completi end-to-end |
|
|
23
|
+
| **Challenge** | 15-30 min | Singolo workload | Focus su skill specifiche |
|
|
24
|
+
| **Arcade** | 5-15 min | Beginner | Demo rapide e divertenti |
|
|
25
|
+
|
|
26
|
+
### Step 2: Definisci la Storia
|
|
27
|
+
|
|
28
|
+
Ogni gioco deve avere:
|
|
29
|
+
- **Tema accattivante**: Spazio, sport, fantasy, simulazione...
|
|
30
|
+
- **Obiettivo chiaro**: Cosa costruisce l'utente?
|
|
31
|
+
- **Progressione**: Capitoli/livelli con difficoltร crescente
|
|
32
|
+
- **Achievement**: Badge per motivare il completamento
|
|
33
|
+
|
|
34
|
+
### Step 3: Struttura Cartelle
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
catalog/
|
|
38
|
+
โโโ my-game-name/
|
|
39
|
+
โโโ manifest.json # Metadata obbligatorio
|
|
40
|
+
โโโ README.md # Documentazione gioco
|
|
41
|
+
โโโ architecture.svg # Diagramma architettura
|
|
42
|
+
โโโ notebooks/
|
|
43
|
+
โ โโโ 01_setup.py
|
|
44
|
+
โ โโโ 02_main.py
|
|
45
|
+
โ โโโ 03_analysis.py
|
|
46
|
+
โโโ definitions/ # Fabric item definitions (opzionale)
|
|
47
|
+
โ โโโ eventhouse.json
|
|
48
|
+
โ โโโ eventstream.json
|
|
49
|
+
โโโ data/
|
|
50
|
+
โ โโโ sample_data.json
|
|
51
|
+
โโโ assets/
|
|
52
|
+
โโโ game_icon.png
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Step 4: Crea il manifest.json
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"$schema": "https://arcade.fabric.example.com/schemas/game-manifest-v1.json",
|
|
60
|
+
"id": "my-game-name",
|
|
61
|
+
"name": "My Game Name",
|
|
62
|
+
"version": "1.0.0",
|
|
63
|
+
"description": "Brief description of what players will learn and build",
|
|
64
|
+
"type": "mission|challenge|arcade",
|
|
65
|
+
"workloads": ["RTI", "DE", "PBI", "DS", "DF", "DW"],
|
|
66
|
+
"difficulty": 1-3,
|
|
67
|
+
"duration_minutes": 15-60,
|
|
68
|
+
"icon": "๐ฎ",
|
|
69
|
+
"tags": ["tag1", "tag2"],
|
|
70
|
+
"prerequisites": {
|
|
71
|
+
"fabric_capacity": "F2",
|
|
72
|
+
"python_packages": [],
|
|
73
|
+
"skills": []
|
|
74
|
+
},
|
|
75
|
+
"learning_objectives": [
|
|
76
|
+
"Objective 1",
|
|
77
|
+
"Objective 2"
|
|
78
|
+
],
|
|
79
|
+
"achievements": [
|
|
80
|
+
{
|
|
81
|
+
"id": "achievement-id",
|
|
82
|
+
"name": "Achievement Name",
|
|
83
|
+
"description": "How to earn it",
|
|
84
|
+
"icon": "๐"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"items": [
|
|
88
|
+
{
|
|
89
|
+
"type": "Eventhouse|Eventstream|Notebook|etc",
|
|
90
|
+
"name": "item-name",
|
|
91
|
+
"description": "What this item does"
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"story": {
|
|
95
|
+
"intro": "The narrative hook",
|
|
96
|
+
"chapters": [
|
|
97
|
+
{
|
|
98
|
+
"title": "Chapter 1",
|
|
99
|
+
"description": "What happens in this chapter"
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Step 5: Scrivi la Documentazione
|
|
107
|
+
|
|
108
|
+
Il README.md deve includere:
|
|
109
|
+
|
|
110
|
+
1. **Titolo e Badge** - Nome, difficoltร , durata, workload
|
|
111
|
+
2. **Storia/Briefing** - Il contesto narrativo
|
|
112
|
+
3. **Learning Objectives** - Cosa impareranno
|
|
113
|
+
4. **Prerequisites** - Requisiti tecnici
|
|
114
|
+
5. **Quick Start** - Come installare e avviare
|
|
115
|
+
6. **Capitoli Dettagliati** - Guide step-by-step con codice
|
|
116
|
+
7. **Achievement** - Badge guadagnabili
|
|
117
|
+
8. **Architettura** - Diagramma ASCII o SVG
|
|
118
|
+
9. **Risorse** - Link a documentazione Fabric
|
|
119
|
+
|
|
120
|
+
### Step 6: Crea i Notebook
|
|
121
|
+
|
|
122
|
+
Linee guida per i notebook:
|
|
123
|
+
- Usa celle magic `%md` per spiegazioni
|
|
124
|
+
- Includi output di esempio dove possibile
|
|
125
|
+
- Aggiungi emoji per rendere visivamente accattivante
|
|
126
|
+
- Testa su Fabric prima di committare
|
|
127
|
+
|
|
128
|
+
## ๐ Checklist Pre-Submit
|
|
129
|
+
|
|
130
|
+
- [ ] manifest.json valido
|
|
131
|
+
- [ ] README.md completo
|
|
132
|
+
- [ ] Tutti i notebook testati su Fabric
|
|
133
|
+
- [ ] Nessuna credenziale hardcoded
|
|
134
|
+
- [ ] Achievement definiti
|
|
135
|
+
- [ ] Diagramma architettura incluso
|
|
136
|
+
|
|
137
|
+
## ๐ Code Review
|
|
138
|
+
|
|
139
|
+
Il tuo PR sarร revisionato per:
|
|
140
|
+
- Correttezza tecnica
|
|
141
|
+
- Qualitร della narrazione
|
|
142
|
+
- Completezza della documentazione
|
|
143
|
+
- Test funzionali
|
|
144
|
+
|
|
145
|
+
## ๐ Licenza
|
|
146
|
+
|
|
147
|
+
Contribuendo accetti che il tuo codice sia rilasciato sotto licenza MIT.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
**Domande?** Apri una Issue o contattaci su Discord!
|
|
152
|
+
|
|
153
|
+
*"Every game makes Fabric more fun to learn!"* ๐ฎ
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Fabric Gaming Community
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|