feat: add display UI with splash screen, dashboard, and RSSI sparkline

Implement full SSD1306 OLED display support:
- Splash screen on boot (1.5s) with project name, version, board
- Dashboard showing radio state, config, counters, RSSI/SNR
- RSSI history sparkline (64-sample ring buffer, 2px-wide bars)
- DisplayOn/DisplayOff host commands routed via dedicated channel
- Pure render functions against generic DrawTarget (no hardware coupling)
- Display on/off control bypasses radio task entirely

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
swaitsandClaude Opus 4.6 committed 2026-03-29 20:42:54 -06:00
1 parent 7064110293
commit 3102fc747a
17624 files changed
+4564928 -38

No files matched your search

+45
View File
@@ -0,0 +1,45 @@
# Copyright © 2018–2025 Trevor Spiteri
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
skip_tags: true
branches:
except:
- www
environment:
MSRV: 1.83.0
matrix:
- TARGET: x86_64-pc-windows-msvc
- TARGET: x86_64-pc-windows-gnu
- TARGET: i686-pc-windows-msvc
cache:
- '%USERPROFILE%\.cargo\registry\cache'
install:
- set PATH=C:\msys64\usr\bin;%USERPROFILE%\.cargo\bin;%PATH%
- curl -sSf -o rustup-init.exe https://win.rustup.rs
- rustup-init.exe -y --default-host %TARGET% --default-toolchain none --no-modify-path
- rustup --version
- rustup toolchain install --profile minimal beta-%TARGET% %MSRV%-%TARGET%
- rustup component add --toolchain beta-%TARGET% clippy
build: false
before_test:
- bash -c "if [ -d $USERPROFILE/.cargo/registry/src ]; then rm -r $USERPROFILE/.cargo/src; fi"
- bash -c "if [ -d $USERPROFILE/.cargo/registry/cache ]; then cd $USERPROFILE/.cargo/registry; find cache -name \*.crate | sort; fi"
test_script:
- cargo +beta-%TARGET% clippy --all-targets --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +beta-%TARGET% test --release --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +%MSRV%-%TARGET% test --lib --features "fail-on-warnings num-traits std"
after_test:
# ugh, appveyor can't handle percentage signs, so we need to use $(sed 's/\.crate$//' <<< $s)
- bash -c "if [ -d $USERPROFILE/.cargo/registry/cache ]; then cd $USERPROFILE/.cargo/registry; for c in cache/*/*.crate; do s=src/${c#cache/}; if [ ! -e $(sed 's/\.crate$//' <<< $s) ]; then rm -v $c; fi; done; find cache -name \*.crate | sort; fi"
+181
View File
@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866668"
version="1.1"
id="svg8"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="fixed-src.svg"
inkscape:export-filename="fixed.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs2">
<inkscape:path-effect
effect="powerclip"
id="path-effect268"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<inkscape:path-effect
effect="powerclip"
id="path-effect1252"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath299">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;line-height:6.10576px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3 Bold';letter-spacing:0px;word-spacing:0px;fill:#0072b2;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="20.717939"
y="285.34137"
id="text303"><tspan
sodipodi:role="line"
id="tspan301"
x="20.717939"
y="285.34137"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3 Bold';fill:#0072b2;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-opacity:1">28</tspan></text>
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath318">
<circle
style="fill:#0072b2;fill-opacity:1;stroke:none;stroke-width:0.504669;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle320"
cx="16.933334"
cy="280.06665"
r="16.933334" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6568542"
inkscape:cx="13.523417"
inkscape:cy="72.920387"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:snap-nodes="true"
inkscape:snap-others="false"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:pagecheckerboard="0"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid10" />
<sodipodi:guide
position="4.2333333,4.4979168"
orientation="1,0"
id="guide839"
inkscape:locked="false" />
<sodipodi:guide
position="-1.3229166,4.2333334"
orientation="0,1"
id="guide916"
inkscape:locked="false" />
<sodipodi:guide
position="16.933333,24.077084"
orientation="1,0"
id="guide4539"
inkscape:locked="false" />
<sodipodi:guide
position="11.90625,16.933334"
orientation="0.009999519,-0.99995"
id="guide4541"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13331)">
<circle
style="display:inline;fill:#f7f1a1;fill-opacity:1;stroke:none;stroke-width:0.504668;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4492"
cx="16.933334"
cy="280.06665"
r="16.933334" />
<path
id="rect1588-3"
style="fill:#0072b2;stroke-width:0.529167"
d="m 15.345829,283.50622 h 3.175 c 0,0 0,0.79376 0.52917,1.8521 h -4.23333 c 0.52916,-1.05834 0.52916,-1.8521 0.52916,-1.8521 z"
sodipodi:nodetypes="ccccc" />
<circle
style="fill:#0072b2;fill-opacity:1;stroke:none;stroke-width:0.504668;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4492-3"
cx="16.933334"
cy="280.06665"
r="16.933334"
clip-path="url(#clipPath299)" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:33.8667px;line-height:12.2115px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3 Bold';letter-spacing:0px;word-spacing:0px;fill:#0072b2;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="11.853333"
y="283.75388"
id="text1010-7"><tspan
sodipodi:role="line"
id="tspan1008-9"
x="11.853333"
y="283.75388"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:33.8667px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3 Bold';fill:#0072b2;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-opacity:1">.</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;line-height:6.10576px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3, Bold';letter-spacing:0px;word-spacing:0px;fill:#0072b2;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
x="-4.6820688"
y="285.34137"
id="text1010"
clip-path="url(#clipPath318)"><tspan
sodipodi:role="line"
id="tspan1008"
x="-4.6820688"
y="285.34137"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333335px;font-family:'Source Sans 3';-inkscape-font-specification:'Source Sans 3, Bold';fill:#0072b2;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-opacity:1;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">06</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

+1
View File
@@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="b"><circle cx="16.933" cy="280.07" r="16.933" fill="#0072b2"/></clipPath><clipPath id="a"><circle cx="16.933" cy="280.07" r="16.933" fill="#0072b2"/></clipPath></defs><g transform="translate(0 -263.13)"><circle cx="16.933" cy="280.07" r="16.933" fill="#f7f1a1"/><g fill="#0072b2"><path d="m15.346 283.51h3.175s0 0.79376 0.52917 1.8521h-4.2333c0.52916-1.0583 0.52916-1.8521 0.52916-1.8521z" stroke-width=".52917"/><path d="m34.112 285.54c2.286 0 3.81-1.2869 3.81-2.9803 0-1.4224-0.82973-2.2521-1.8627-2.8109v-0.0677c0.74507-0.49107 1.4055-1.3208 1.4055-2.3537 0-1.778-1.3039-2.9464-3.2681-2.9464-1.9981 0-3.4375 1.1345-3.4375 2.9633 0 1.1345 0.6096 1.9135 1.4393 2.54v0.0677c-1.016 0.54187-1.8288 1.3377-1.8288 2.6416 0 1.7441 1.5917 2.9464 3.7423 2.9464zm0.67733-6.4685c-1.1007-0.42333-1.8457-0.84667-1.8457-1.7272 0-0.82973 0.54187-1.2361 1.2023-1.2361 0.8128 0 1.3039 0.5588 1.3039 1.3885 0 0.5588-0.23707 1.0837-0.6604 1.5748zm-0.62653 4.7413c-0.89746 0-1.6595-0.5588-1.6595-1.5071 0-0.6604 0.3556-1.27 0.82973-1.7103 1.3547 0.57573 2.2691 0.93133 2.2691 1.8796 0 0.89747-0.6096 1.3377-1.4393 1.3377z" clip-path="url(#b)"/><path d="m21.344 285.34h7.5692v-2.0997h-2.4045c-0.49107 0-1.2361 0.0677-1.7949 0.13547 1.9135-1.8796 3.6745-3.6407 3.6745-5.588 0-2.0489-1.4393-3.4036-3.556-3.4036-1.5071 0-2.5231 0.59267-3.556 1.7611l1.3039 1.2869c0.54187-0.57573 1.1345-1.1007 1.9135-1.1007 0.93133 0 1.524 0.57574 1.524 1.6256 0 1.5071-1.9643 3.4375-4.6736 5.842z"/><path d="m16.933 284.16c1.7272 0 3.0141-1.3547 3.0141-3.1157 0-1.7949-1.2869-3.1496-3.0141-3.1496-1.7272 0-3.0141 1.3547-3.0141 3.1496 0 1.7611 1.2869 3.1157 3.0141 3.1157z"/><path d="m8.9154 280.38c0.8128 0 1.4055 0.42334 1.4055 1.5579 0 1.2192-0.6096 1.7441-1.3547 1.7441s-1.4563-0.54186-1.6764-2.2352c0.44027-0.762 1.0668-1.0668 1.6256-1.0668zm0.1016 5.1647c1.9473 0 3.5729-1.3716 3.5729-3.6068 0-2.2691-1.3547-3.3189-3.2004-3.3189-0.6604 0-1.5917 0.42333-2.1505 1.1345 0.084667-2.5061 1.0329-3.3528 2.2183-3.3528 0.62653 0 1.3039 0.3556 1.6764 0.762l1.3039-1.4901c-0.67733-0.69427-1.7103-1.2869-3.1327-1.2869-2.2691 0-4.3519 1.8119-4.3519 5.8251 0 3.7761 1.9812 5.334 4.064 5.334z"/><path d="m-0.21167 285.54c2.3029 0 3.8439-1.9643 3.8439-5.6219s-1.5409-5.5372-3.8439-5.5372c-2.3029 0-3.8439 1.8796-3.8439 5.5372s1.5409 5.6219 3.8439 5.6219zm0-1.9304c-0.82973 0-1.4901-0.762-1.4901-3.6915 0-2.9464 0.6604-3.6068 1.4901-3.6068 0.84667 0 1.4901 0.6604 1.4901 3.6068 0 2.9295-0.64347 3.6915-1.4901 3.6915z" clip-path="url(#a)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+36
View File
@@ -0,0 +1,36 @@
PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzMuODY3IDMzLjg2NyIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjxjaXJjbGUgY3g9IjE2LjkzMyIg
Y3k9IjI4MC4wNyIgcj0iMTYuOTMzIiBmaWxsPSIjMDA3MmIyIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxjaXJjbGUg
Y3g9IjE2LjkzMyIgY3k9IjI4MC4wNyIgcj0iMTYuOTMzIiBmaWxsPSIjMDA3MmIyIi8+PC9jbGlwUGF0aD48L2RlZnM+PGcgdHJh
bnNmb3JtPSJ0cmFuc2xhdGUoMCAtMjYzLjEzKSI+PGNpcmNsZSBjeD0iMTYuOTMzIiBjeT0iMjgwLjA3IiByPSIxNi45MzMiIGZp
bGw9IiNmN2YxYTEiLz48ZyBmaWxsPSIjMDA3MmIyIj48cGF0aCBkPSJtMTUuMzQ2IDI4My41MWgzLjE3NXMwIDAuNzkzNzYgMC41
MjkxNyAxLjg1MjFoLTQuMjMzM2MwLjUyOTE2LTEuMDU4MyAwLjUyOTE2LTEuODUyMSAwLjUyOTE2LTEuODUyMXoiIHN0cm9rZS13
aWR0aD0iLjUyOTE3Ii8+PHBhdGggZD0ibTM0LjExMiAyODUuNTRjMi4yODYgMCAzLjgxLTEuMjg2OSAzLjgxLTIuOTgwMyAwLTEu
NDIyNC0wLjgyOTczLTIuMjUyMS0xLjg2MjctMi44MTA5di0wLjA2NzdjMC43NDUwNy0wLjQ5MTA3IDEuNDA1NS0xLjMyMDggMS40
MDU1LTIuMzUzNyAwLTEuNzc4LTEuMzAzOS0yLjk0NjQtMy4yNjgxLTIuOTQ2NC0xLjk5ODEgMC0zLjQzNzUgMS4xMzQ1LTMuNDM3
NSAyLjk2MzMgMCAxLjEzNDUgMC42MDk2IDEuOTEzNSAxLjQzOTMgMi41NHYwLjA2NzdjLTEuMDE2IDAuNTQxODctMS44Mjg4IDEu
MzM3Ny0xLjgyODggMi42NDE2IDAgMS43NDQxIDEuNTkxNyAyLjk0NjQgMy43NDIzIDIuOTQ2NHptMC42NzczMy02LjQ2ODVjLTEu
MTAwNy0wLjQyMzMzLTEuODQ1Ny0wLjg0NjY3LTEuODQ1Ny0xLjcyNzIgMC0wLjgyOTczIDAuNTQxODctMS4yMzYxIDEuMjAyMy0x
LjIzNjEgMC44MTI4IDAgMS4zMDM5IDAuNTU4OCAxLjMwMzkgMS4zODg1IDAgMC41NTg4LTAuMjM3MDcgMS4wODM3LTAuNjYwNCAx
LjU3NDh6bS0wLjYyNjUzIDQuNzQxM2MtMC44OTc0NiAwLTEuNjU5NS0wLjU1ODgtMS42NTk1LTEuNTA3MSAwLTAuNjYwNCAwLjM1
NTYtMS4yNyAwLjgyOTczLTEuNzEwMyAxLjM1NDcgMC41NzU3MyAyLjI2OTEgMC45MzEzMyAyLjI2OTEgMS44Nzk2IDAgMC44OTc0
Ny0wLjYwOTYgMS4zMzc3LTEuNDM5MyAxLjMzNzd6IiBjbGlwLXBhdGg9InVybCgjYikiLz48cGF0aCBkPSJtMjEuMzQ0IDI4NS4z
NGg3LjU2OTJ2LTIuMDk5N2gtMi40MDQ1Yy0wLjQ5MTA3IDAtMS4yMzYxIDAuMDY3Ny0xLjc5NDkgMC4xMzU0NyAxLjkxMzUtMS44
Nzk2IDMuNjc0NS0zLjY0MDcgMy42NzQ1LTUuNTg4IDAtMi4wNDg5LTEuNDM5My0zLjQwMzYtMy41NTYtMy40MDM2LTEuNTA3MSAw
LTIuNTIzMSAwLjU5MjY3LTMuNTU2IDEuNzYxMWwxLjMwMzkgMS4yODY5YzAuNTQxODctMC41NzU3MyAxLjEzNDUtMS4xMDA3IDEu
OTEzNS0xLjEwMDcgMC45MzEzMyAwIDEuNTI0IDAuNTc1NzQgMS41MjQgMS42MjU2IDAgMS41MDcxLTEuOTY0MyAzLjQzNzUtNC42
NzM2IDUuODQyeiIvPjxwYXRoIGQ9Im0xNi45MzMgMjg0LjE2YzEuNzI3MiAwIDMuMDE0MS0xLjM1NDcgMy4wMTQxLTMuMTE1NyAw
LTEuNzk0OS0xLjI4NjktMy4xNDk2LTMuMDE0MS0zLjE0OTYtMS43MjcyIDAtMy4wMTQxIDEuMzU0Ny0zLjAxNDEgMy4xNDk2IDAg
MS43NjExIDEuMjg2OSAzLjExNTcgMy4wMTQxIDMuMTE1N3oiLz48cGF0aCBkPSJtOC45MTU0IDI4MC4zOGMwLjgxMjggMCAxLjQw
NTUgMC40MjMzNCAxLjQwNTUgMS41NTc5IDAgMS4yMTkyLTAuNjA5NiAxLjc0NDEtMS4zNTQ3IDEuNzQ0MXMtMS40NTYzLTAuNTQx
ODYtMS42NzY0LTIuMjM1MmMwLjQ0MDI3LTAuNzYyIDEuMDY2OC0xLjA2NjggMS42MjU2LTEuMDY2OHptMC4xMDE2IDUuMTY0N2Mx
Ljk0NzMgMCAzLjU3MjktMS4zNzE2IDMuNTcyOS0zLjYwNjggMC0yLjI2OTEtMS4zNTQ3LTMuMzE4OS0zLjIwMDQtMy4zMTg5LTAu
NjYwNCAwLTEuNTkxNyAwLjQyMzMzLTIuMTUwNSAxLjEzNDUgMC4wODQ2NjctMi41MDYxIDEuMDMyOS0zLjM1MjggMi4yMTgzLTMu
MzUyOCAwLjYyNjUzIDAgMS4zMDM5IDAuMzU1NiAxLjY3NjQgMC43NjJsMS4zMDM5LTEuNDkwMWMtMC42NzczMy0wLjY5NDI3LTEu
NzEwMy0xLjI4NjktMy4xMzI3LTEuMjg2OS0yLjI2OTEgMC00LjM1MTkgMS44MTE5LTQuMzUxOSA1LjgyNTEgMCAzLjc3NjEgMS45
ODEyIDUuMzM0IDQuMDY0IDUuMzM0eiIvPjxwYXRoIGQ9Im0tMC4yMTE2NyAyODUuNTRjMi4zMDI5IDAgMy44NDM5LTEuOTY0MyAz
Ljg0MzktNS42MjE5cy0xLjU0MDktNS41MzcyLTMuODQzOS01LjUzNzJjLTIuMzAyOSAwLTMuODQzOSAxLjg3OTYtMy44NDM5IDUu
NTM3MnMxLjU0MDkgNS42MjE5IDMuODQzOSA1LjYyMTl6bTAtMS45MzA0Yy0wLjgyOTczIDAtMS40OTAxLTAuNzYyLTEuNDkwMS0z
LjY5MTUgMC0yLjk0NjQgMC42NjA0LTMuNjA2OCAxLjQ5MDEtMy42MDY4IDAuODQ2NjcgMCAxLjQ5MDEgMC42NjA0IDEuNDkwMSAz
LjYwNjggMCAyLjkyOTUtMC42NDM0NyAzLjY5MTUtMS40OTAxIDMuNjkxNXoiIGNsaXAtcGF0aD0idXJsKCNhKSIvPjwvZz48L2c+
PC9zdmc+Cg==
+142
View File
@@ -0,0 +1,142 @@
# Copyright © 2018–2025 Trevor Spiteri
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
variables:
MSRV: 1.83.0
before_script:
- getconf LONG_BIT
- rustup self update
- rustup --version
- if [ -d cargo/registry/cache ]; then rm -rf $CARGO_HOME/registry/cache; mkdir -p $CARGO_HOME/registry; cp -R cargo/registry/cache $CARGO_HOME/registry/; echo Copied registry/cache; fi
- if [ -d $CARGO_HOME/registry/src ]; then rm -r $CARGO_HOME/registry/src; fi
- if [ -d $CARGO_HOME/registry/cache ]; then (cd $CARGO_HOME/registry; find cache -name \*.crate | sort) fi
after_script:
- if [ -d $CARGO_HOME/registry/cache ]; then (cd $CARGO_HOME/registry; for c in cache/*/*.crate; do s=src/${c#cache/}; if [ ! -e ${s%.crate} ]; then rm -v $c; fi; done; find cache -name \*.crate | sort) fi
- rm -rf cargo
- mkdir -p cargo/registry
- if [ -d $CARGO_HOME/registry/cache ]; then cp -R $CARGO_HOME/registry/cache cargo/registry/; echo Updated registry/cache; fi
x86_64-gnulinux:
image: amd64/rust:1
variables:
TARGET: x86_64
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal beta-$TARGET $MSRV-$TARGET nightly-$TARGET
- cargo +beta-$TARGET test --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +beta-$TARGET test --release --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +$MSRV-$TARGET test --lib --features "fail-on-warnings num-traits std"
- cargo +$MSRV-$TARGET test --release --lib --features "fail-on-warnings num-traits std"
- cargo +nightly-$TARGET test --features "fail-on-warnings nightly-float"
only:
- ci
i686-gnulinux:
image: i386/rust:1
variables:
TARGET: i686
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal beta-$TARGET $MSRV-$TARGET nightly-$TARGET
- cargo +beta-$TARGET test --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +beta-$TARGET test --release --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +$MSRV-$TARGET test --lib --features "fail-on-warnings num-traits std"
- cargo +$MSRV-$TARGET test --release --lib --features "fail-on-warnings num-traits std"
- cargo +nightly-$TARGET test --features "fail-on-warnings nightly-float"
only:
- ci
x86_64-gnulinux-tidy:
image: amd64/rust:1
variables:
TARGET: x86_64
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal beta-$TARGET
- rustup component add --toolchain beta-$TARGET rustfmt clippy
- cargo +beta-$TARGET fmt -- --check
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings arbitrary"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings num-traits"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings borsh"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings serde"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings serde-str"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings std"
- cargo +beta-$TARGET clippy --all-targets --features fail-on-warnings
only:
- ci
i686-gnulinux-tidy:
image: i386/rust:1
variables:
TARGET: i686
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal beta-$TARGET
- rustup component add --toolchain beta-$TARGET rustfmt clippy
- cargo +beta-$TARGET fmt -- --check
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings arbitrary borsh num-traits serde std"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings arbitrary"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings num-traits"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings borsh"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings serde"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings serde-str"
- cargo +beta-$TARGET clippy --all-targets --features "fail-on-warnings std"
- cargo +beta-$TARGET clippy --all-targets --features fail-on-warnings
only:
- ci
x86_64-gnulinux-tarpaulin:
image: amd64/rust:1
variables:
TARGET: x86_64
REQ_COVERAGE: "70"
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal beta-$TARGET
- cargo +beta-$TARGET install --version 0.32.0 --locked cargo-tarpaulin
- cargo +beta-$TARGET tarpaulin --verbose --ignore-tests --fail-under $REQ_COVERAGE --exclude-files build.rs --features "arbitrary borsh num-traits serde std"
only:
- ci
pages:
image: amd64/rust:1
variables:
TARGET: x86_64
cache:
key: $CI_JOB_NAME
paths:
- cargo/
script:
- rustup toolchain install --profile minimal nightly-$TARGET
- rm -rf public
- mkdir public
- cp etc/index.html public
- cargo +nightly-$TARGET doc --no-deps --features "arbitrary borsh num-traits serde std" -Z rustdoc-map
- mv target/doc public/dev
artifacts:
paths:
- public
only:
- www
+17
View File
@@ -0,0 +1,17 @@
<!doctype html>
<html lang="en">
<head>
<title>Fixed-point numbers</title>
</head>
<body>
<div style="margin-right: auto; margin-left: auto; max-width: 600px;">
<h1>Fixed-point numbers</h1>
<p>The <a href="https://crates.io/crates/fixed"><i>fixed</i> crate</a> provides fixed-point numbers. Here you can find the documentation for the <a href="https://gitlab.com/tspiteri/fixed">current development version</a> of the crate.</p>
<h2>Documentation</h2>
<ul>
<li><a href="dev/fixed/index.html">Documentation for the current development version.</a></li>
<li><a href="https://docs.rs/fixed">Documentation for the published versions.</a></li>
</ul>
</div>
</body>
</html>