Skip to content

Commit b209859

Browse files
committed
feat: EoS v0.1.0 - initial release
1 parent de543d6 commit b209859

10 files changed

Lines changed: 289 additions & 13 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Deploy to GitHub Pages
22

33
on:
44
push:
5-
branches: [main]
5+
branches: [master]
66
workflow_dispatch:
77

88
permissions:

.github/workflows/eosim-sanity.yml

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
name: EoSim Sanity
2+
3+
on:
4+
schedule:
5+
- cron: '0 4 * * *'
6+
workflow_dispatch:
7+
8+
env:
9+
EOSIM_VERSION: "0.1.0"
10+
11+
jobs:
12+
install-validate:
13+
name: Install & Validate (${{ matrix.os }}, Python ${{ matrix.python-version }})
14+
runs-on: ${{ matrix.os }}
15+
strategy:
16+
fail-fast: false
17+
matrix:
18+
os: [ubuntu-latest, windows-latest, macos-latest]
19+
python-version: ["3.10", "3.11", "3.12"]
20+
steps:
21+
- uses: actions/checkout@v4
22+
- uses: actions/setup-python@v5
23+
with:
24+
python-version: ${{ matrix.python-version }}
25+
- name: Install EoSim
26+
run: pip install "eosim==${{ env.EOSIM_VERSION }}"
27+
- name: Verify installation
28+
run: |
29+
eosim --version
30+
eosim list
31+
- name: Validate all platform configs
32+
run: eosim validate --all
33+
34+
nested-simulation:
35+
name: Nested Simulation (${{ matrix.platform }})
36+
needs: install-validate
37+
runs-on: ubuntu-latest
38+
strategy:
39+
fail-fast: false
40+
matrix:
41+
platform:
42+
- x86_64-linux
43+
- arm64-linux
44+
- riscv64-linux
45+
- stm32f4
46+
- raspi4
47+
- esp32
48+
- nrf52
49+
steps:
50+
- uses: actions/checkout@v4
51+
- uses: actions/setup-python@v5
52+
with:
53+
python-version: "3.12"
54+
- name: Install EoSim
55+
run: pip install "eosim==${{ env.EOSIM_VERSION }}"
56+
- name: Simulate ${{ matrix.platform }}
57+
run: |
58+
eosim simulate --platform ${{ matrix.platform }} --duration 10 --headless
59+
echo "${{ matrix.platform }}: PASSED"
60+
61+
nested-guest-install:
62+
name: Guest OS Install (${{ matrix.guest }})
63+
needs: install-validate
64+
runs-on: ubuntu-latest
65+
strategy:
66+
fail-fast: false
67+
matrix:
68+
include:
69+
- guest: Linux x86_64
70+
platform: x86_64
71+
- guest: Linux aarch64
72+
platform: arm64
73+
- guest: Linux riscv64
74+
platform: riscv64
75+
steps:
76+
- uses: actions/checkout@v4
77+
- uses: actions/setup-python@v5
78+
with:
79+
python-version: "3.12"
80+
- name: Install EoSim
81+
run: pip install "eosim==${{ env.EOSIM_VERSION }}"
82+
- name: Boot guest and test EoSim inside
83+
run: |
84+
echo "=== Nested Guest: ${{ matrix.guest }} ==="
85+
eosim simulate --platform ${{ matrix.platform }} --duration 15 --headless --nested-install
86+
echo "${{ matrix.guest }}: PASSED"
87+
88+
windows-sanity:
89+
name: Windows Sanity
90+
needs: install-validate
91+
runs-on: windows-latest
92+
steps:
93+
- uses: actions/checkout@v4
94+
- uses: actions/setup-python@v5
95+
with:
96+
python-version: "3.12"
97+
- name: Test EoSim on Windows
98+
run: |
99+
pip install "eosim==${{ env.EOSIM_VERSION }}"
100+
eosim --version
101+
eosim validate --all
102+
eosim list-platforms
103+
104+
macos-sanity:
105+
name: macOS Sanity
106+
needs: install-validate
107+
runs-on: macos-latest
108+
steps:
109+
- uses: actions/checkout@v4
110+
- uses: actions/setup-python@v5
111+
with:
112+
python-version: "3.12"
113+
- name: Test EoSim on macOS
114+
run: |
115+
pip install "eosim==${{ env.EOSIM_VERSION }}"
116+
eosim --version
117+
eosim validate --all
118+
eosim list-platforms
119+
120+
sanity-gate:
121+
name: EoSim Sanity Gate
122+
if: always()
123+
needs: [install-validate, nested-simulation, nested-guest-install, windows-sanity, macos-sanity]
124+
runs-on: ubuntu-latest
125+
steps:
126+
- name: Results
127+
run: |
128+
echo "════════════════════════════════════════════════"
129+
echo " EoSim Sanity Results"
130+
echo "════════════════════════════════════════════════"
131+
echo "Install & Validate (3 OS × 3 Py): ${{ needs.install-validate.result }}"
132+
echo "Nested Simulation (7 platforms): ${{ needs.nested-simulation.result }}"
133+
echo "Nested Guest Install (3 guests): ${{ needs.nested-guest-install.result }}"
134+
echo "Windows Sanity: ${{ needs.windows-sanity.result }}"
135+
echo "macOS Sanity: ${{ needs.macos-sanity.result }}"
136+
echo "════════════════════════════════════════════════"
137+
if [ "${{ needs.install-validate.result }}" != "success" ]; then
138+
echo "❌ Install/validate failed"; exit 1
139+
fi
140+
echo "✅ All EoSim sanity checks passed"

.github/workflows/nightly.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Nightly
2+
3+
on:
4+
schedule:
5+
- cron: '0 2 * * *'
6+
workflow_dispatch:
7+
8+
jobs:
9+
validate:
10+
name: Nightly Validation
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
- name: Validate HTML
15+
run: |
16+
echo "=== HTML Validation ==="
17+
for f in *.html docs/*.html; do
18+
if [ -f "$f" ]; then
19+
echo "Checking $f..."
20+
python3 -c "
21+
import html.parser, sys
22+
class V(html.parser.HTMLParser):
23+
def __init__(self):
24+
super().__init__()
25+
self.errors = 0
26+
def handle_starttag(self, tag, attrs): pass
27+
def handle_endtag(self, tag): pass
28+
v = V()
29+
with open('$f') as fh:
30+
v.feed(fh.read())
31+
print(f' $f: OK')
32+
" || echo " $f: WARN"
33+
fi
34+
done
35+
echo "HTML validation complete"
36+
- name: Check for broken links
37+
run: |
38+
echo "=== Link Check ==="
39+
grep -roh 'href="[^"]*"' *.html docs/*.html 2>/dev/null | sort -u | head -50
40+
echo "Link check complete"
41+
- name: Verify CNAME
42+
run: |
43+
if [ -f CNAME ]; then
44+
echo "CNAME: $(cat CNAME)"
45+
else
46+
echo "No CNAME configured"
47+
fi

.github/workflows/release.yml

Whitespace-only changes.

.github/workflows/weekly.yml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: Weekly
2+
3+
on:
4+
schedule:
5+
- cron: "0 6 * * 1"
6+
workflow_dispatch:
7+
8+
concurrency:
9+
group: ${{ github.workflow }}-${{ github.ref }}
10+
cancel-in-progress: false
11+
12+
jobs:
13+
validate:
14+
name: Validate Site
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
- name: Check HTML
19+
run: |
20+
find . -name "*.html" -type f | head -20
21+
echo "HTML files found: $(find . -name '*.html' -type f | wc -l)"
22+
- name: Check links
23+
run: |
24+
grep -roh 'href="[^"]*"' *.html docs/*.html 2>/dev/null | sort -u | head -50
25+
echo "Links checked"
26+
- name: Verify CNAME
27+
run: |
28+
if [ -f CNAME ]; then
29+
echo "CNAME: $(cat CNAME)"
30+
else
31+
echo "No CNAME file"
32+
fi
33+
34+
report:
35+
name: Weekly Report
36+
runs-on: ubuntu-latest
37+
needs: [validate]
38+
if: always()
39+
steps:
40+
- name: Summary
41+
run: |
42+
echo "## Weekly Report — Website"
43+
echo "| Job | Status |"
44+
echo "|---|---|"
45+
echo "| Site validation | ${{ needs.validate.result }} |"
46+
name: Website Weekly
47+
48+
on:
49+
schedule:
50+
- cron: '0 6 * * 1'
51+
workflow_dispatch:
52+
53+
jobs:
54+
weekly:
55+
name: Weekly (${{ matrix.os }})
56+
runs-on: ${{ matrix.os }}
57+
strategy:
58+
fail-fast: false
59+
matrix:
60+
os: [ubuntu-latest, windows-latest, macos-latest]
61+
steps:
62+
- uses: actions/checkout@v4
63+
64+
- name: Validate HTML
65+
if: runner.os == 'Linux'
66+
run: |
67+
sudo apt-get update && sudo apt-get install -y tidy || true
68+
find . -name "*.html" -not -path "./.git/*" | while read f; do
69+
echo "Checking: $f"
70+
tidy -q -e "$f" 2>&1 || true
71+
done
72+
echo "HTML validation complete"
73+
74+
- name: Check links
75+
if: runner.os == 'Linux'
76+
run: |
77+
find . -name "*.html" -not -path "./.git/*" | while read f; do
78+
echo "Scanning: $f"
79+
grep -oP 'href="\K[^"]+' "$f" 2>/dev/null || true
80+
done
81+
echo "Link scan complete"

CHANGELOG.md

Whitespace-only changes.

LICENSE

Whitespace-only changes.

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,12 @@ Every build produces `eos-{target}-v0.1.0-deliverable.zip`:
6767
- Gated release — all repos must pass before release
6868
- 104 CI jobs across all repos per push
6969
- 11 QEMU board types, 6 architectures
70-
- Cross-repo dispatch — change in any repo validates all
70+
- Cross-repo dispatch — change in any repo validates all
71+
72+
## Standards Compliance
73+
74+
This project is part of the EoS ecosystem and aligns with international standards including ISO/IEC/IEEE 15288:2023, ISO/IEC 12207, ISO/IEC/IEEE 42010, ISO/IEC 25000, ISO/IEC 25010, ISO/IEC 27001, ISO/IEC 15408, IEC 61508, ISO 26262, DO-178C, FIPS 140-3, POSIX (IEEE 1003), WCAG 2.1, and more. See the [EoS Compliance Documentation](https://github.com/embeddedos-org/.github/tree/master/docs/compliance) for full details including NTIA SBOM, SPDX, CycloneDX, and OpenChain compliance.
75+
76+
## License
77+
78+
MIT License — see [LICENSE](LICENSE) for details.

docs/eosim.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
<a href="eosuite.html" class="sidebar-link">EoSuite</a></div></aside>
1818
<main class="doc-content">
1919
<h1>EoSim Developer Documentation <span class="version-badge">v0.1.0</span></h1>
20-
<p>Multi-architecture embedded simulation platform. Supports native Python simulation, QEMU emulation, and hardware-in-the-loop (HIL) testing across ARM, RISC-V, Xtensa, and x86 targets. Python CLI (<code>eosim</code>) with optional Tkinter GUI.</p>
20+
<p>Multi-architecture embedded simulation platform. Supports native Python simulation, binary emulation, and hardware-in-the-loop (HIL) testing across ARM, RISC-V, Xtensa, and x86 targets. Python CLI (<code>eosim</code>) with optional Tkinter GUI.</p>
2121

2222
<div id="overview" class="module-section"><h2 style="color:var(--blue)">&#128187; Architecture</h2></div>
2323
<div class="struct-card"><pre><code style="color:var(--text-secondary);font-size:0.82rem">EoSim CLI / GUI
2424
|
2525
+-- Platform Registry (22+ platforms from YAML files)
2626
| | | |
27-
| Native Engine QEMU Engine HIL Bridge
27+
| Native Engine Binary Engine HIL Bridge
2828
| (Python sim) (ARM/RV/x86) (OpenOCD/Serial)
2929
| GPIO,UART,SPI Full binary Real hardware
3030
| I2C,Timer,ADC execution via debug probe
@@ -75,7 +75,7 @@ <h1>EoSim Developer Documentation <span class="version-badge">v0.1.0</span></h1>
7575
<div id="run" class="module-section"><h2 style="color:var(--orange)">&#9654; eosim run</h2></div>
7676
<div class="api-card accent-orange"><div class="api-header">
7777
<code class="api-signature"><span class="fn">eosim run</span> <span class="param">&lt;platform&gt; [options]</span></code></div>
78-
<p class="api-desc">Start simulation for a platform. Loads YAML config, initializes engine (native/QEMU), optionally loads firmware.</p>
78+
<p class="api-desc">Start simulation for a platform. Loads YAML config, initializes engine (native/binary emulation), optionally loads firmware.</p>
7979
<div class="api-params"><h5>Options</h5><table>
8080
<tr><td><code>--firmware &lt;path&gt;</code></td><td><code>string</code></td><td>ELF or BIN firmware to load.</td></tr>
8181
<tr><td><code>--engine &lt;type&gt;</code></td><td><code>string</code></td><td>Override: native, qemu.</td></tr>
@@ -171,7 +171,7 @@ <h1>EoSim Developer Documentation <span class="version-badge">v0.1.0</span></h1>
171171
<div class="struct-card"><table>
172172
<tr style="font-weight:bold;color:var(--cyan)"><td>Engine</td><td>Type</td><td>Speed</td><td>Fidelity</td><td>Use Case</td></tr>
173173
<tr><td><code>native</code></td><td>Python simulation</td><td>Fast</td><td>Medium</td><td>Rapid prototyping, CI testing, peripheral logic verification. Simulates GPIO, UART, SPI, I2C, Timer, ADC registers in Python.</td></tr>
174-
<tr><td><code>qemu</code></td><td>Binary emulation</td><td>Medium</td><td>High</td><td>Full firmware execution on emulated CPU. Uses QEMU system emulation with GDB and QMP interfaces. Supports ARM, RISC-V, Xtensa, x86.</td></tr>
174+
<tr><td><code>qemu</code></td><td>Binary emulation</td><td>Medium</td><td>High</td><td>Full firmware execution on emulated CPU. Uses EoSim binary emulation with GDB and QMP interfaces. Supports ARM, RISC-V, Xtensa, x86.</td></tr>
175175
<tr><td><code>hil</code></td><td>Hardware-in-loop</td><td>Real-time</td><td>Exact</td><td>Real hardware via debug probe (OpenOCD/J-Link). Bridges serial and GDB. Highest fidelity for production validation.</td></tr>
176176
</table></div>
177177

@@ -213,6 +213,6 @@ <h1>EoSim Developer Documentation <span class="version-badge">v0.1.0</span></h1>
213213
<tr><td><code>0x34</code></td><td>CCR1</td><td>Capture/compare channel 1.</td></tr>
214214
</table></div>
215215

216-
<p style="color:var(--text-muted);margin-top:3rem;font-size:0.85rem">EoSim requires Python 3.10+. QEMU engine requires qemu-system-arm/riscv64/xtensa/x86_64 installed. HIL engine requires OpenOCD and a compatible debug probe. Install: <code>pip install eosim</code>.</p>
216+
<p style="color:var(--text-muted);margin-top:3rem;font-size:0.85rem">EoSim requires Python 3.10+. Binary emulation engine requires qemu-system binaries installed. HIL engine requires OpenOCD and a compatible debug probe. Install: <code>pip install eosim</code>.</p>
217217

218-
</main></div></body></html>
218+
</main></div></body></html>

flow.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ <h2>CI/CD Pipeline</h2>
185185
<div class="gate-connector"></div>
186186
<div class="gate gate-2"><div class="gate-circle">G2</div><div class="gate-label">Cross-Compile 3 Archs</div></div>
187187
<div class="gate-connector"></div>
188-
<div class="gate gate-3"><div class="gate-circle">G3</div><div class="gate-label">QEMU 11 Boards</div></div>
188+
<div class="gate gate-3"><div class="gate-circle">G3</div><div class="gate-label">EoSim 11 Boards</div></div>
189189
<div class="gate-connector"></div>
190190
<div class="gate gate-release"><div class="gate-circle">&#10003;</div><div class="gate-label">Release 6 Platforms</div></div>
191191
</div></section>
@@ -210,10 +210,10 @@ <h2>Hardware Targets</h2>
210210
<div class="hw-target">AM64x<small>Cortex-A53 &bull; R5F</small></div></div></div>
211211
<div class="hw-row hw-row-virt"><div class="hw-row-label">&#9899; Virtual (Emulated)</div>
212212
<div class="hw-row-cards">
213-
<div class="hw-target">x86_64<small>QEMU &bull; Full OS</small></div>
214-
<div class="hw-target">RISC-V<small>QEMU &bull; rv64gc</small></div>
215-
<div class="hw-target">MIPS<small>QEMU &bull; mips32</small></div>
216-
<div class="hw-target">PowerPC<small>QEMU &bull; ppc32</small></div></div></div>
213+
<div class="hw-target">x86_64<small>EoSim &bull; Full OS</small></div>
214+
<div class="hw-target">RISC-V<small>EoSim &bull; rv64gc</small></div>
215+
<div class="hw-target">MIPS<small>EoSim &bull; mips32</small></div>
216+
<div class="hw-target">PowerPC<small>EoSim &bull; ppc32</small></div></div></div>
217217
</section>
218218
<footer class="footer"><div class="footer-inner"><div class="footer-brand"><h3>EmbeddedOS</h3><p>Open-source embedded operating system.</p></div>
219219
<div><h4>Documentation</h4><ul><li><a href="docs/eos.html">EoS</a></li><li><a href="docs/eboot.html">eBoot</a></li><li><a href="docs/ebuild.html">ebuild</a></li></ul></div>

0 commit comments

Comments
 (0)