Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
281 commits
Select commit Hold shift + click to select a range
9ea4821
fix: improve spacing between carousel UI elements
uxjulia May 5, 2026
b34b444
feat: display <hr> tags instead of ignoring them
uxjulia May 6, 2026
79061af
chore: update GitHub bug report template to include device type
uxjulia May 6, 2026
3eee192
ci: update release and release candidate workflows
uxjulia May 6, 2026
68b3b38
fix(reader): move reopened books to the front of recents to correctly…
uxjulia May 6, 2026
be93689
Merge branch 'main' into feature/lyra-carousel-updates
uxjulia May 6, 2026
939014d
fix: incorrect y-axis scale factor in jpeg nearest-neighbor downscale…
WuTofu May 6, 2026
4ea938b
chore: Update SDK to fork in CrossPoint org (#1836)
znelson May 6, 2026
cfe3a94
refactor: Simplify XtcReaderActivity with detectPageTurn (#1837)
znelson May 6, 2026
395e68e
refactor: Simplify isReaderActivity bookkeeping (#1838)
znelson May 6, 2026
ea9568c
feat: add toggleable recent books grid view
uxjulia May 6, 2026
d1c2570
fix: increase recent books view to 18 and use grid-style navigation
uxjulia May 6, 2026
88b8afe
fix: make recent books grid vertical navigation page-aware
uxjulia May 6, 2026
30a4707
Merge branch 'feature/lyra-carousel-theme' into dev
uxjulia May 6, 2026
8a3ee06
Merge branch 'feature/recent-books-view-with-covers' into dev
uxjulia May 6, 2026
eb2de5f
fix(i18n): add recent books view translations to all locales
uxjulia May 6, 2026
b46b38f
fix: update font size and weight of book title in recent books grid view
uxjulia May 6, 2026
12f4c4f
chore: update changelog
uxjulia May 6, 2026
574ec41
fix: serialize display and SD access on the shared SPI bus to prevent…
uxjulia May 6, 2026
8c2a973
fix: avoid synchronous redraw while render-locked (#83)
in4lio May 6, 2026
7b000b8
chore: update GitHub bug report template to include device type
uxjulia May 6, 2026
9ca64f7
ci: update release and release candidate workflows
uxjulia May 6, 2026
44b6241
chore: clang-format
uxjulia May 6, 2026
2194076
Merge branch 'main' into bugfix/page-load-error
uxjulia May 6, 2026
2698eae
fix: prevent blank alert and crash screens
uxjulia May 6, 2026
89d8bc4
fix: replace assert with runtime null-check in HalSpiBus mutex init
uxjulia May 6, 2026
d663537
fix: page load error (#99)
uxjulia May 6, 2026
99ca5a3
fix: harden epub section cache writes
uxjulia May 6, 2026
52828a7
fix: guard serialized string length reads
uxjulia May 6, 2026
3ef0749
fix: guard SPI bus lock acquisition failure
uxjulia May 6, 2026
04794fe
Merge branch 'dev' into feature/lyra-carousel-and-recent-books-grid
uxjulia May 6, 2026
17cac1c
fix: harden epub section cache writes
uxjulia May 6, 2026
ff879bc
fix: guard serialized string length reads
uxjulia May 6, 2026
7db792e
fix: guard SPI bus lock acquisition failure
uxjulia May 6, 2026
11bc36e
refactor: Use fixed-size integers for BookMetadataCache data (#1844)
znelson May 7, 2026
dadce51
fix: display empty lines in txt reader (#1841)
Uri-Tauber May 7, 2026
c15b5b9
fix: short-press power action triggered after screenshot combo releas…
pablohc May 7, 2026
83f0cee
fix: Roundraff theme home menu offset with no recent books (#1845)
znelson May 7, 2026
6709e5c
chore: merge upstream master into main
uxjulia May 7, 2026
ac42b24
feat: add custom auto page turn interval picker
uxjulia May 7, 2026
6ec0c1a
fix: clean up home recents and epub image refresh
uxjulia May 7, 2026
448699d
refactor: rename auto turn interval string key
uxjulia May 7, 2026
65a4f63
fix: restore reader-mode detection for stacked activities
uxjulia May 7, 2026
a1258f7
fix: avoid CSS cache rebuild crash after cache clear
uxjulia May 7, 2026
7b874f3
fix(epub): avoid reindexing for render-only reader options
uxjulia May 7, 2026
4a88b56
fix: harden image rendering and reader cache edge cases
uxjulia May 7, 2026
c7133a1
fix: bump EPUB section cache version
uxjulia May 7, 2026
aaa076a
fix: harden thumbnail generation and reader UI cleanup
uxjulia May 7, 2026
f9c4311
fix: render upscaled carousel side covers
uxjulia May 7, 2026
e841c84
refactor: Deduplicate Roundraff battery drawing (#1847)
znelson May 7, 2026
1e2f6e2
feat: enhance long press action to delete both files and directories …
WuTofu May 7, 2026
2dd3eeb
fix: remove redundant "reader" from english labels
uxjulia May 8, 2026
a45de2d
feat: show progress in recent books grid title
uxjulia May 8, 2026
7b89763
chore: bump version
uxjulia May 8, 2026
1282b04
chore: merge upstream master into main
uxjulia May 8, 2026
a17bc7c
fix: clear book metadata when deleting folders
uxjulia May 8, 2026
0d7772c
chore: merge carousel and book grid into release
uxjulia May 8, 2026
2d9caae
chore: update changelog version
uxjulia May 8, 2026
358f5d8
refactor: fix cppcheck style warnings
uxjulia May 8, 2026
e8d7153
feat: edit wifi networks in webui (#1743)
osteotek May 8, 2026
c4357d0
fix: render missing unicode reader glyphs (#104)
chriskd May 8, 2026
10e2ebf
Merge branch 'main' into release/v1.2.10
uxjulia May 8, 2026
9fa2aca
fix: keep list bullets attached to nested paragraphs
uxjulia May 8, 2026
e3fb3bb
feat(sleep-screen): add sleep screen orientation setting (#1748)
xiro-codes May 8, 2026
bb98c05
fix: open auto page turn picker from quick actions
uxjulia May 8, 2026
da7c9b8
fix: harden thumbnail caches and recent books state
uxjulia May 8, 2026
60d365f
fix: remove teensy font variant from no_emoji build to increase headroom
uxjulia May 8, 2026
0428834
fix: clamp legacy uiTheme values to current enum on binary load
uxjulia May 8, 2026
f2ceb86
fix: handle recent book update result
uxjulia May 8, 2026
2d01660
fix: align XTC thumbnail path naming
uxjulia May 8, 2026
4580ed0
fix: harden carousel cache header reads
uxjulia May 8, 2026
2f3691f
fix: keep CSS selector rules sorted during parsing
uxjulia May 8, 2026
ef80cb0
fix: guard GfxRenderer bitmap scratch buffers
uxjulia May 8, 2026
39ca777
fix: keep home recent cover updates on correct book slot
uxjulia May 8, 2026
16ca77f
fix: harden thumbnail cache path template handling
uxjulia May 8, 2026
7963478
fix: log css parse failure context before clearing partial rules
uxjulia May 8, 2026
9137ea9
fix: generate exact EPUB thumbnail dimensions even when a legacy heig…
uxjulia May 8, 2026
a6bde54
fix: retain prewarmed font slots for mixed-style pages
uxjulia May 8, 2026
a48ad3c
chore: Updated docs to reflect DESTRUCTOR_CLOSES_FILE=1 (#1878)
znelson May 8, 2026
b463966
Revert "feat(sleep-screen): add sleep screen orientation setting" (#1…
pablohc May 8, 2026
e803b89
feat: allow toggling hidden files from within the file browser
uxjulia May 8, 2026
3195e38
feat: add simulator sleep shortcut
uxjulia May 8, 2026
29fd29f
feat: Status bar for XTC files (#1849)
leecming82 May 8, 2026
e11e792
fix(epub): render simple inline black backgrounds; fix(web): preserve…
uxjulia May 8, 2026
3c34de0
chore: merge upstream crosspoint
uxjulia May 8, 2026
4b027f7
fix: clean up Lyra Carousel menu overlay rendering
uxjulia May 9, 2026
7abfb37
fix: align home menu selection with roundedraff's continue reading bu…
uxjulia May 9, 2026
7993b2b
feat: add SD card font support with on-device download and web manage…
adriancaruana May 9, 2026
bb3a44f
Merge branch 'master' into release/1.3.0
znelson May 9, 2026
e64155e
fix: free Epub RAM and simplify KOSync navigation via ActivityManager…
wylanswets May 9, 2026
9b2d838
Merge branch 'master' into release/1.3.0
znelson May 9, 2026
e21beb0
perf(epub): lower large spine indexing threshold
uxjulia May 9, 2026
fd71a4c
fix(home): preserve reusable recent cover paths
uxjulia May 9, 2026
0213d84
fix(epub): limit inline black backgrounds to whitespace tokens
uxjulia May 9, 2026
7450070
fix: clip synthetic glyph drawing
uxjulia May 9, 2026
6f0cd3d
test(epub): add synthetic unicode glyph fixture
uxjulia May 9, 2026
ccdbf57
fix(home): fill recent books grid cover slots
uxjulia May 9, 2026
455b1b1
fix: honor hidden files setting in web file access
uxjulia May 9, 2026
2b865a5
fix: avoid building lyra carousel when low on memory
uxjulia May 9, 2026
ca27870
fix(file-browser): trigger delete confirmation for folders on long-pr…
uxjulia May 9, 2026
fef1cfd
fix(fonts): show visible replacement for missing glyphs
uxjulia May 9, 2026
89ee082
fix(home): fill XTC recent grid covers
uxjulia May 9, 2026
628794f
fix: Add common ligatures to SD font conversion ranges
znelson May 9, 2026
bf894fd
fix: improve KOSync bidirectional position matching accuracy (#1897)
wylanswets May 9, 2026
f03d3a8
fix: missing requirement (#1896)
steka May 9, 2026
8ab0621
Merge branch 'codex/xtc-grid-cover-fill' into release/v1.2.10
uxjulia May 9, 2026
ceb3fed
fix: remove duplicate 'Download Fonts' menu entry and improve navigat…
zgredex May 9, 2026
fbfc596
fix: validate KOReader sync JSON responses
uxjulia May 9, 2026
77b1945
chore: merge upstream crosspoint
uxjulia May 9, 2026
884afd7
fix: allow cancelling WiFi scan and connect screens
uxjulia May 9, 2026
c85b5ed
fix: keep RoundedRaff settings menu reachable
uxjulia May 9, 2026
29eeb8c
Merge branch 'main' into release/v1.2.10
uxjulia May 9, 2026
46bf0d1
fix: preserve RoundedRaff button labels in UTF-8 locales
uxjulia May 9, 2026
684946c
fix(theme): improve padding in roundedraff
uxjulia May 9, 2026
bf30964
fix: overlap in download font list layout (#1900)
pablohc May 9, 2026
6ca17a3
fix: restore simulator build configuration
uxjulia May 10, 2026
debda6a
fix: prevent Reader Options crash when filtering settings
uxjulia May 10, 2026
6c97061
Merge branch 'master' into release/1.3.0
znelson May 10, 2026
a7b5c1e
test: add simulator smoke tests
uxjulia May 10, 2026
e0be2c2
chore: merge upstream crosspoint
uxjulia May 10, 2026
3efc863
feat: verify CRC32 checksum for font files (#1904)
WuTofu May 10, 2026
d3e0aeb
feat: allow unnamed intervals (#1903)
steka May 10, 2026
c7ad14e
fix: swedish translation (#1888)
steka May 10, 2026
58eef4b
chore: remove unused BaseTheme list variable
uxjulia May 10, 2026
91de6ac
fix: two roundedraff bugs (#1851)
Uri-Tauber May 10, 2026
c882bb1
docs: update readme
uxjulia May 10, 2026
6f2dfb7
chore: merge upstream crosspoint
uxjulia May 10, 2026
66ea1ee
fix: improve RoundedRaff keyboard key padding
uxjulia May 10, 2026
8e01b4b
docs: clean up v1.2.10 changelog
uxjulia May 10, 2026
c5d2dc2
feat: cap compressed group size at 64 KB (#1913)
jpirnay May 10, 2026
5d5533b
fix: capture instantiateVariableFont return value (#1911)
jpirnay May 10, 2026
0c6bebd
fix: reject non-Crossink EPUB caches
uxjulia May 10, 2026
5917c56
fix: build-script bug fixes for fontconvert{,_sdcard}.py (#1910)
jpirnay May 10, 2026
cff54d7
feat: increase default weight of Bitter font for improved rendering (…
uxjulia May 10, 2026
45441e0
feat: closest-pt size selection instead of ordinal slot (#1912)
jpirnay May 10, 2026
aba393f
fix: Polish translation (#1909)
th0m4sek May 10, 2026
fcb8793
Merge branch 'master' into release/1.3.0
znelson May 10, 2026
74b8cac
chore: Add verbose mode to build-sd-fonts.py (#1923)
znelson May 10, 2026
2ff6388
fix: Restore performance in fontconvert_sdcard.py (#1924)
znelson May 10, 2026
4e5e2fe
feat: focus reading (#1670)
vjapolitzer May 10, 2026
dd06e71
fix: remove percent rendering from activities (#1901)
mcrosson May 10, 2026
3ac1ab1
fix: distribute justifyExtra to non-breaking space tokens (#1783)
prawnwhoyawns May 10, 2026
181ed6c
fix: gracefully resolve fonts missing variants (#1921)
Uri-Tauber May 10, 2026
20fee84
fix: Missing navigation button labels in Roundedraff theme (#1905)
Uri-Tauber May 10, 2026
b303a0e
chore: merge upstream crosspoint
uxjulia May 10, 2026
2f77ee6
perf(epub): omit empty guide dot metadata vectors
uxjulia May 10, 2026
6e2f6dd
fix(epub): reduce text layout memory during section rebuilds
uxjulia May 10, 2026
3ff43cc
chore(epub): add heap diagnostics for section rebuilds
uxjulia May 10, 2026
3ad57bd
fix(epub): skip optional rebuilds under low heap
uxjulia May 10, 2026
492b8ef
fix(epub): centralize low-memory rebuild guards
uxjulia May 10, 2026
e778534
fix(settings): gate lyra carousel behind build flag
uxjulia May 10, 2026
0217104
Merge branch 'feat/memory-improvements' into feat/v1.3-with-memory-im…
uxjulia May 10, 2026
64b8448
fix: roundedraff padding in recent books grid and list view
uxjulia May 11, 2026
38d2c8a
docs: update readme
uxjulia May 11, 2026
89ed8d8
fix(koreader): prevent EPUB sync handoff crash; fix(reader): trigger …
uxjulia May 11, 2026
376b66a
fix(home): avoid epub cache rebuilds for missing thumbnails
uxjulia May 11, 2026
828fb72
Update release catalog for v1.2.10-rc-2
uxjulia May 11, 2026
849f4e2
Revert "Update release catalog for v1.2.10-rc-2"
uxjulia May 11, 2026
2007b8f
Merge branch 'fix/rounded-raff-padding-fixes' into release/v1.2.10-rc
uxjulia May 11, 2026
a0037ce
feat: add font family deletion functionality (#1919)
WuTofu May 11, 2026
90874da
fix: sd font folder paths in documentation (#1944)
mcrosson May 11, 2026
2c639d5
ci: restrict release tags to main
uxjulia May 11, 2026
99ac1c5
fix: sd font download urls in docs (#1945)
mcrosson May 11, 2026
26250c0
fix: Ukrainian translation (#1939)
KymAndriy May 11, 2026
accd50b
fix: Ukrainian-translation (#1946)
KymAndriy May 11, 2026
2cf69c7
fix(reader): reduce SD font advance cache memory
uxjulia May 11, 2026
63e92ec
fix: make script help paths lightweight (#1937)
sabraman May 11, 2026
2497704
docs: fix hyphenation updater script name (#1931)
sabraman May 11, 2026
63d5094
Revert "feat: closest-pt size selection instead of ordinal slot" (#1949)
znelson May 11, 2026
0308e8c
fix(reader): release SD font caches before EPUB image extraction
uxjulia May 11, 2026
ed2f73b
fix(epub): release SD font caches only under memory pressure
uxjulia May 11, 2026
e04c45e
Merge branch 'feat/sd-card-memory-improvements' into release/v1.2.10
uxjulia May 11, 2026
d83b8ad
fix(epub): guard layout against super long text runs
uxjulia May 11, 2026
e00b6f4
fix(epub): fail safely when text layout exhausts heap
uxjulia May 11, 2026
e8292e4
fix(epub): let layout error alerts return home
uxjulia May 11, 2026
c65deee
fix(web): align fonts page styling with CrossInk pages
uxjulia May 11, 2026
b55aa89
fix(git): remove tracked worktree
uxjulia May 11, 2026
3091620
feat(controls): add more granular front button orientation modes
uxjulia May 11, 2026
baf36f7
fix: restore X3 power wake filtering
uxjulia May 11, 2026
5f930a3
Merge branch 'feat/auto-button-orientation' into release/v1.2.10
uxjulia May 11, 2026
c43413b
refactor: share lyra list rendering logic and reduce padding in contr…
uxjulia May 12, 2026
ae54741
feat: add tilt page turn reader shortcuts
uxjulia May 12, 2026
79d7b64
feat: add shortcut to tilt page turn option for x3
uxjulia May 12, 2026
d34160a
chore: merge upstream crosspoint
uxjulia May 12, 2026
da47e25
fix: adjust padding to fit all control menu items without scrolling o…
uxjulia May 12, 2026
537838e
build: update default simiulator to x4
uxjulia May 12, 2026
ad1df1c
Release v1.2.10
uxjulia May 12, 2026
df0223d
Update release catalog for v1.2.10
uxjulia May 12, 2026
8d1b86a
feat: add next / prev labels to bmp viewer (#1852)
Telemaniaka May 12, 2026
a8cfdd6
docs: clean up v1.2.10 changelog
uxjulia May 12, 2026
bc6e090
feat: separate into "Download All" and "Update All" in font manager (…
WuTofu May 12, 2026
3c34a83
docs: fix KOReader sync guide link (#1930)
sabraman May 12, 2026
b145e44
Merge remote-tracking branch 'upstream/master' into release/1.3.0
znelson May 12, 2026
30a209d
fix: Characters from unsupported characterset are overlapping (#1958)
Uri-Tauber May 12, 2026
db3bb85
fix: handle fallbacks for advance table and prewarm (#1929)
leecming82 May 12, 2026
bc57e5d
fix: jump page on hold in font family and language selection (#1925)
zgredex May 12, 2026
6f7f4c5
refactor: Eliminated relative path includes (#1961)
znelson May 13, 2026
30b14f2
refactor: Removed SdCardFontGlobals.h (#1962)
znelson May 13, 2026
71518b3
fix: KOSync authentication with Calibre-Web-Automated (#1951)
drbourbon May 13, 2026
9a9054c
perf(home): reduce Lyra Carousel RAM frame cache
uxjulia May 13, 2026
bdc65f2
feat(home): update Lyra Carousel progress footer
uxjulia May 13, 2026
5852201
fix(web): preserve file extensions when sanitizing uploads
uxjulia May 13, 2026
0cb91c3
feat: add custom sleep timer picker
uxjulia May 13, 2026
7ab7e4f
fix(epub): clip partially offscreen inline images #136
uxjulia May 13, 2026
1d44879
fix(power): disable wifi sooner when entering deep sleep
uxjulia May 13, 2026
bc96ba1
fix(web): allow longer uploaded filenames
uxjulia May 13, 2026
6196b4e
Merge branch 'development'
uxjulia May 13, 2026
91f11a0
feat: add minimal theme
uxjulia May 13, 2026
0c7e11a
style(theme): adjust width of reading stat bar in lyra carousel
uxjulia May 13, 2026
c0a5622
style(theme): reduce font size of setting categories in minimal theme
uxjulia May 13, 2026
b9fc7d6
changed: align reader options with reader settings menu
uxjulia May 13, 2026
30e0523
feat: add in-reader controls options shortcut
uxjulia May 13, 2026
79b3aa1
fix: prevent font picker reopening after selection
uxjulia May 13, 2026
b2a2d7e
fix: fixed in-reader font-size changes not working for custom sd card…
uxjulia May 13, 2026
3390d47
chore: merge upstream crosspoint
uxjulia May 13, 2026
57f5213
docs: update changelog
uxjulia May 13, 2026
8377ac9
refactor: Added utils for non-throwing memory allocation and scoped c…
znelson May 14, 2026
4c3aaa3
feat: allow deleting bookmarks from the bookmarks list
uxjulia May 14, 2026
f17569a
feat: allow deleting a book's cache from the file browser
uxjulia May 14, 2026
4e6bd63
fix(settings): ignore legacy sleep timeout after migration
uxjulia May 14, 2026
aa43bd3
chore: Removed unused icon header files (#1975)
znelson May 14, 2026
5fa5a71
feat: Add Polish hyphenation support (#1590)
IjonFryderyk May 14, 2026
19457f4
fix(epub): relax low-memory guard for JPEG chapter images
uxjulia May 14, 2026
c3d04a9
fix: bump max jpeg image width allowed from 2048 to 4096
uxjulia May 14, 2026
f39a11f
feat: improve progressive jpeg cover support
broemp May 14, 2026
a27ee05
feat(file-browser): add mark finished action
uxjulia May 14, 2026
886a2ae
feat: improve progressive jpeg cover support
uxjulia May 14, 2026
6d85308
fix: add confirmation popup when deleting a book's cache
uxjulia May 14, 2026
21edd3a
fix(reader): rebuild EPUB layout after SD font changes so new fonts t…
uxjulia May 14, 2026
b2d3047
Merge branch 'feat/improve-image-memory-alloc' into release/v1.2.11
uxjulia May 14, 2026
f3ad1ed
Release v1.2.11
uxjulia May 15, 2026
59a7572
chore: merge upstream crosspoint
uxjulia May 15, 2026
1ee1c99
Update release catalog for v1.2.11
uxjulia May 15, 2026
99712bf
fix: enable lyra carousel theme
uxjulia May 15, 2026
54eec08
fix: omit medium font from xlarge build to get it under size limit
uxjulia May 15, 2026
eaa0926
docs: update changelog
uxjulia May 15, 2026
5414830
docs: update readme
uxjulia May 15, 2026
b186529
fix: Prepare SD card font caches from txt reader (#1973)
znelson May 15, 2026
a7586f2
fix: Prepare SD card font caches from txt reader (#1973)
znelson May 15, 2026
74e7574
Update to @Uri-Tauber's README.md
znelson May 15, 2026
16e5e5f
Update flasher links for X3 support
znelson May 15, 2026
43b20bd
fix: Add documentation for USB-locked Xteink devices (#1990)
itsthisjustin May 15, 2026
c26e410
fix: Add documentation for USB-locked Xteink devices (#1990)
itsthisjustin May 15, 2026
b971f7b
correct broken internal anchor
znelson May 15, 2026
fd79074
fix: handle fallbacks for advance table and prewarm (#1929)
leecming82 May 12, 2026
29b1697
chore: fix medium font cppcheck warning
uxjulia May 15, 2026
c09b621
docs: update changelog
uxjulia May 15, 2026
f8ecf0a
chore: merge upstream crosspoint
uxjulia May 15, 2026
0c1c4c5
Merge branch 'master'
uxjulia May 15, 2026
cdf0fcd
feat: merge upstream CrossInk v1.2.11.1, release FlexBLE 1.0.0
imshentastic May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 12 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ body:
value: |
Thanks for taking the time to report this bug! Please fill out the details below.

- type: dropdown
id: device-type
attributes:
label: Device
description: Which device is this affecting?
options:
- X4
- X3
- Both
validations:
required: true

- type: input
id: version
attributes:
Expand Down
4 changes: 3 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## Summary

- **What changes are included?**
### **What changes are included?**


106 changes: 106 additions & 0 deletions .github/workflows/release-fonts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Build & Publish SD Card Fonts

# Fonts change rarely — run manually when font sources or the conversion
# pipeline are updated. Publishes .cpfont files + fonts.json manifest as
# GitHub Release assets on the crosspoint-fonts repo so font releases don't
# clutter the firmware releases page.
#
# Requires a repository secret FONTS_REPO_TOKEN — a fine-grained PAT (or
# classic PAT) with contents:write permission on the target fonts repo.
on:
workflow_dispatch:

env:
FONTS_REPO: crosspoint-reader/crosspoint-fonts

jobs:
build-fonts:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
with:
submodules: recursive

- uses: actions/setup-python@v6
with:
python-version: '3.14'

- name: Install font tools
run: pip install freetype-py fonttools pyyaml

- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libfreetype6-dev

- name: Read version constants
id: versions
run: |
cd lib/EpdFont/scripts
echo "binary=$(python3 -c 'from cpfont_version import CPFONT_VERSION; print(CPFONT_VERSION)')" >> "$GITHUB_OUTPUT"
echo "metadata=$(python3 -c 'from cpfont_version import FONTS_MANIFEST_VERSION; print(FONTS_MANIFEST_VERSION)')" >> "$GITHUB_OUTPUT"

- name: Build SD card fonts
run: python3 lib/EpdFont/scripts/build-sd-fonts.py --clean --verbose -j 1

- name: Flatten output for release assets
run: |
mkdir -p dist
find lib/EpdFont/scripts/output -name '*.cpfont' -exec cp {} dist/ \;

- name: Compute release tags
id: tags
env:
GH_TOKEN: ${{ secrets.FONTS_REPO_TOKEN }}
run: |
BASE="sd-fonts-m${{ steps.versions.outputs.metadata }}-b${{ steps.versions.outputs.binary }}"
echo "base=$BASE" >> "$GITHUB_OUTPUT"

# Find the highest existing revision for this m/b pair
LAST=$(gh release list --repo "${{ env.FONTS_REPO }}" \
--json tagName --jq \
'[.[] | select(.tagName | startswith("'"${BASE}-r"'")) | .tagName | split("-r")[1] | tonumber] | max // 0')
NEXT=$((LAST + 1))
echo "revision=$NEXT" >> "$GITHUB_OUTPUT"
echo "versioned=${BASE}-r${NEXT}" >> "$GITHUB_OUTPUT"

- name: Generate manifest
run: |
python3 scripts/generate-font-manifest.py \
--input dist \
--base-url "https://github.com/${{ env.FONTS_REPO }}/releases/download/${{ steps.tags.outputs.base }}/" \
--output dist/fonts.json \
--descriptions-from lib/EpdFont/scripts/sd-fonts.yaml

- name: Publish versioned release to fonts repo
env:
GH_TOKEN: ${{ secrets.FONTS_REPO_TOKEN }}
run: |
VERSIONED="${{ steps.tags.outputs.versioned }}"
TITLE="SD Card Fonts (${VERSIONED#sd-fonts-})"

gh release create "$VERSIONED" dist/* \
--repo "${{ env.FONTS_REPO }}" \
--title "$TITLE" \
--notes "Pre-built \`.cpfont\` font files for CrossPoint Reader.

Download individual files or use **Settings > System > Manage Fonts** on the device.

See [SD Card Fonts documentation](https://github.com/${{ github.repository }}/blob/main/docs/sd-card-fonts.md) for details."

- name: Update stable tag for device downloads
env:
GH_TOKEN: ${{ secrets.FONTS_REPO_TOKEN }}
run: |
BASE="${{ steps.tags.outputs.base }}"

# Delete the old stable release for this m/b pair (the versioned releases are kept)
gh release delete "$BASE" --repo "${{ env.FONTS_REPO }}" --yes 2>/dev/null || true

gh release create "$BASE" dist/* \
--repo "${{ env.FONTS_REPO }}" \
--title "SD Card Fonts (${BASE#sd-fonts-})" \
--notes "Current font build for manifest v${{ steps.versions.outputs.metadata }}, binary format v${{ steps.versions.outputs.binary }}. Devices with this firmware version download from this release.

This is revision **${{ steps.tags.outputs.revision }}** — see [\`${{ steps.tags.outputs.versioned }}\`](https://github.com/${{ env.FONTS_REPO }}/releases/tag/${{ steps.tags.outputs.versioned }}) for the immutable copy.

Download individual files or use **Settings > System > Manage fonts** on the device."
53 changes: 41 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ on:
workflow_dispatch:
inputs:
version:
description: "Release version, without the leading v. Example: 1.2.9.1"
description: "Compile release builds"
required: true
type: string
push:
tags:
- "v*"
- 'v[0-9]+.[0-9]+.[0-9]+'

permissions:
contents: write
Expand All @@ -20,6 +20,14 @@ jobs:
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0

- name: Verify release tag is on main
if: github.event_name == 'push'
run: |
git fetch origin main:refs/remotes/origin/main
TAG_COMMIT="$(git rev-list -n 1 "$GITHUB_REF_NAME")"
git merge-base --is-ancestor "$TAG_COMMIT" origin/main

- uses: actions/setup-python@v6
with:
Expand Down Expand Up @@ -53,26 +61,47 @@ jobs:
echo "RELEASE_VERSION=$VERSION" >> "$GITHUB_ENV"
sed -i "s/crossink_version = .*/crossink_version = $VERSION/" platformio.ini

- name: Build CrossInk-Carousel
- name: Build CrossPoint
env:
CROSSPOINT_RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
run: pio run -e tiny -e xlarge -e no_emoji

- name: Rename binaries with carousel prefix
- name: Generate release catalog
run: |
python3 scripts/generate_release_catalog.py \
--version "${{ env.RELEASE_VERSION }}" \
--repo "${{ github.repository }}" \
--firmware ".pio/build/tiny/firmware-tiny-v${{ env.RELEASE_VERSION }}.bin" \
--firmware ".pio/build/xlarge/firmware-xlarge-v${{ env.RELEASE_VERSION }}.bin" \
--firmware ".pio/build/no_emoji/firmware-no_emoji-v${{ env.RELEASE_VERSION }}.bin" \
--output ".pio/build/catalog"

- name: Publish catalog to GitHub Pages source
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
run: |
for v in tiny xlarge no_emoji; do
cp ".pio/build/$v/firmware-$v-v${RELEASE_VERSION}.bin" \
".pio/build/$v/carousel-firmware-$v-v${RELEASE_VERSION}.bin"
done
git config user.name "uxjulia"
git config user.email "julia@uxj.io"
git fetch origin "$DEFAULT_BRANCH"
git worktree add ../crossink-pages "origin/$DEFAULT_BRANCH"
cp ".pio/build/catalog" "../crossink-pages/docs/catalog"
cd ../crossink-pages
if git diff --quiet -- docs/catalog; then
echo "docs/catalog is already current"
exit 0
fi
git add docs/catalog
git commit -m "Update release catalog for v${RELEASE_VERSION}"
git push origin "HEAD:$DEFAULT_BRANCH"

- name: Create GitHub Release
uses: softprops/action-gh-release@v3
with:
token: ${{ secrets.RELEASE_PAT }}
tag_name: v${{ env.RELEASE_VERSION }}
target_commitish: ${{ github.sha }}
draft: true
generate_release_notes: true
files: |
.pio/build/tiny/carousel-firmware-tiny-v${{ env.RELEASE_VERSION }}.bin
.pio/build/xlarge/carousel-firmware-xlarge-v${{ env.RELEASE_VERSION }}.bin
.pio/build/no_emoji/carousel-firmware-no_emoji-v${{ env.RELEASE_VERSION }}.bin
.pio/build/tiny/firmware-tiny-v${{ env.RELEASE_VERSION }}.bin
.pio/build/xlarge/firmware-xlarge-v${{ env.RELEASE_VERSION }}.bin
.pio/build/no_emoji/firmware-no_emoji-v${{ env.RELEASE_VERSION }}.bin
1 change: 1 addition & 0 deletions .github/workflows/release_candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ jobs:
- name: Create GitHub RC Prerelease
uses: softprops/action-gh-release@v3
with:
token: ${{ secrets.RELEASE_PAT }}
tag_name: ${{ env.RC_TAG }}
target_commitish: ${{ github.sha }}
name: RC ${{ env.RC_BRANCH_SAFE }} ${{ env.RC_HASH_SHORT }}
Expand Down
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,8 @@ fs_/
releases/

# scratchpad used as release notes for next crossink version
release.md
release.md
*.cpfont
lib/EpdFont/scripts/downloaded_fonts/
lib/EpdFont/scripts/instanced_fonts/
lib/EpdFont/scripts/output/
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "open-x4-sdk"]
path = open-x4-sdk
url = https://github.com/open-x4-epaper/community-sdk.git
url = https://github.com/crosspoint-reader/community-sdk.git
25 changes: 18 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Project: Open-source e-reader firmware for Xteink X4 (ESP32-C3).
6. Prefer `constexpr` for compile-time constants.
7. Reserve `std::vector` capacity before push loops.
8. Debounce persistent writes. Do not write progress on every page turn.
9. `new` is not nothrow on ESP32. With exceptions disabled, bare `new` calls `abort()` on allocation failure instead of returning `nullptr`. Use `new (std::nothrow)` or `makeUniqueNoThrow<T>()` from `lib/Memory/Memory.h` for fallible allocations.

## HAL And Platform Rules

Expand Down Expand Up @@ -84,11 +85,21 @@ Project: Open-source e-reader firmware for Xteink X4 (ESP32-C3).

## Changelog

When new features are added or issues are fixed, make sure to add an entry to `CHANGELOG.md`. Types of changes should have their own section:
When new features are added or issues are fixed, make sure to add an entry to `CHANGELOG.md` with the user-facing description of the change. Types of changes should have their own section.

Added - for new features.
Changed - for changes in existing functionality.
Deprecated - for soon-to-be removed features.
Removed - for now removed features.
Fixed - for any bug fixes.
Security - in case of vulnerabilities.
### Changelog Guiding Principles

- Changelogs are _for humans_, not machines.
- There should be an entry for every single version.
- The same types of changes should be grouped.
- Versions and sections should be linkable.
- The latest version comes first.
- The release date of each version is displayed.

### Types of Changelog Changes
- Added - for new features.
- Changed - for changes in existing functionality.
- Deprecated - for soon-to-be removed features.
- Removed - for now removed features.
- Fixed - for any bug fixes.
- Security - in case of vulnerabilities.
Loading
Loading