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.
Files changed (48) hide show
  1. fabric_arcade-0.1.0/.github/workflows/ci.yml +181 -0
  2. fabric_arcade-0.1.0/.github/workflows/preview.yml +45 -0
  3. fabric_arcade-0.1.0/.github/workflows/release.yml +193 -0
  4. fabric_arcade-0.1.0/.github/workflows/static.yml +46 -0
  5. fabric_arcade-0.1.0/.gitignore +52 -0
  6. fabric_arcade-0.1.0/CONTRIBUTING.md +153 -0
  7. fabric_arcade-0.1.0/LICENSE +21 -0
  8. fabric_arcade-0.1.0/PKG-INFO +204 -0
  9. fabric_arcade-0.1.0/README.md +164 -0
  10. fabric_arcade-0.1.0/catalog/city-builder/README.md +339 -0
  11. fabric_arcade-0.1.0/catalog/fabric-racing-game/README.md +330 -0
  12. fabric_arcade-0.1.0/catalog/fabric-racing-game/eventstream/definition.json +34 -0
  13. fabric_arcade-0.1.0/catalog/fabric-racing-game/manifest.json +132 -0
  14. fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_dashboard.ipynb +322 -0
  15. fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_simulator.ipynb +286 -0
  16. fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/race_simulator.py +716 -0
  17. fabric_arcade-0.1.0/catalog/fabric-racing-game/notebooks/racing_game.ipynb +339 -0
  18. fabric_arcade-0.1.0/catalog/fabric-racing-game/schemas/GameEvents.kql +35 -0
  19. fabric_arcade-0.1.0/catalog/mission-artemis-2/eventstream/definition.json +86 -0
  20. fabric_arcade-0.1.0/catalog/mission-artemis-2/manifest.json +143 -0
  21. fabric_arcade-0.1.0/catalog/mission-artemis-2/notebooks/artemis_simulator.ipynb +360 -0
  22. fabric_arcade-0.1.0/catalog/mission-artemis-2/notebooks/mission_control.ipynb +290 -0
  23. fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/CrewVitals.kql +39 -0
  24. fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/EnvironmentalConditions.kql +37 -0
  25. fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/MissionEvents.kql +33 -0
  26. fabric_arcade-0.1.0/catalog/mission-artemis-2/schemas/VehicleTelemetry.kql +39 -0
  27. fabric_arcade-0.1.0/catalog/quest-pipeline/README.md +261 -0
  28. fabric_arcade-0.1.0/catalog/sports-tracker/README.md +193 -0
  29. fabric_arcade-0.1.0/catalog_index.json +59 -0
  30. fabric_arcade-0.1.0/css/style.css +634 -0
  31. fabric_arcade-0.1.0/docs/getting-started.md +166 -0
  32. fabric_arcade-0.1.0/fabric_arcade/__init__.py +50 -0
  33. fabric_arcade-0.1.0/fabric_arcade/catalog.py +229 -0
  34. fabric_arcade-0.1.0/fabric_arcade/cli.py +185 -0
  35. fabric_arcade-0.1.0/fabric_arcade/core.py +232 -0
  36. fabric_arcade-0.1.0/fabric_arcade/deploy.py +164 -0
  37. fabric_arcade-0.1.0/fabric_arcade/engine.py +586 -0
  38. fabric_arcade-0.1.0/fabric_arcade/fabric_api.py +410 -0
  39. fabric_arcade-0.1.0/index.html +283 -0
  40. fabric_arcade-0.1.0/js/main.js +211 -0
  41. fabric_arcade-0.1.0/pyproject.toml +100 -0
  42. fabric_arcade-0.1.0/templates/README.template.md +98 -0
  43. fabric_arcade-0.1.0/templates/manifest.template.json +76 -0
  44. fabric_arcade-0.1.0/tests/__init__.py +3 -0
  45. fabric_arcade-0.1.0/tests/test_catalog.py +126 -0
  46. fabric_arcade-0.1.0/website/css/style.css +634 -0
  47. fabric_arcade-0.1.0/website/index.html +283 -0
  48. 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.