Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
426 commits
Select commit Hold shift + click to select a range
6d13b19
Updated the lock of the installed packages after adding jsdom.
Aug 4, 2026
c8da186
Merge branch 'fix/closure_20260804'
Aug 4, 2026
19e5c02
Renamed the product as OpenDocument Viewer.
Aug 4, 2026
dbdf03a
Kept every request of the viewer of android on the device.
Aug 4, 2026
7bd5861
Told how to run the add-ons from their directory.
Aug 4, 2026
e6479fd
Looked for android along with the programs only.
Aug 4, 2026
37e31c2
Merge branch 'fix/rhino_191'
Aug 4, 2026
be8ec6c
Clarified description of webext.
Aug 4, 2026
f8cb170
Built an apk that installs, to run the viewer of android.
Aug 4, 2026
a6cd390
Ran the add-on of Chrome as a test.
Aug 4, 2026
4139aa3
Updated readme for building.
Aug 4, 2026
8f2a62c
Updated readmes.
Aug 4, 2026
7400825
Wrote the texts of the stores for android, in the layout of fastlane.
Aug 4, 2026
09a15c4
Named the product as a viewer of OpenDocument for android.
Aug 4, 2026
a99c3d7
Renamed the add-ons of the browsers to odfviewer-webext.
Aug 4, 2026
fc9d740
Merge branch 'fix/building'
Aug 4, 2026
da19310
Prépared the readmes for next improvements.
Aug 4, 2026
b1f7b1c
Added the screenshots of the store for android.
Aug 4, 2026
0e538c0
Named the deprecated api the viewer of android used, and dropped it.
Aug 4, 2026
97dde01
Merge branch 'fix/browsers'
Aug 4, 2026
397b85b
Added a menu to the viewer.
Aug 4, 2026
5d71ddb
Gave android an adaptive icon, from the drawing in 512 pixels.
Aug 4, 2026
65f407c
Finalized base viewer with file manager opened on background.
Aug 4, 2026
902156c
Updated readmes.
Aug 4, 2026
410e890
Allowed to read the attachment of a message in the tab.
Aug 4, 2026
ff58d09
Added the icons of the stores, transparent for F-Droid and opaque for…
Aug 4, 2026
2311901
Cleaned remaining android files in cordova.
Aug 4, 2026
c15df4a
Set white the default background of a page.
Aug 4, 2026
e678edf
Added help in the android viewer.
Aug 4, 2026
1866b05
Set the icon of the add-on to the usual 128 pixels.
Aug 4, 2026
3f77746
Merge branch 'fix/android'
Aug 4, 2026
95e25b6
Upddated the name of the viewer as reader for French.
Aug 4, 2026
c02fb24
Read the version again when a commit is made.
Aug 4, 2026
5f01f31
Updated readmes.
Aug 4, 2026
48ed635
Fixed css rules of the page from reaching the body of the document.
Aug 4, 2026
b8fe0c5
Found the sdk of android in more places and kept it in the cache.
Aug 4, 2026
223c5cd
Wrote the documentation with jsdoc 4 in both builds.
Aug 4, 2026
4228f20
Managed presentation for slides separately with white background.
Aug 4, 2026
d847aa0
Merge branch 'fix/publication'
Aug 4, 2026
11f8a91
Rebuild qtjsruntime from scratch with qt6.
Aug 4, 2026
428a904
Updated strings of the scripts to be used as template.
Aug 4, 2026
93679f7
Prepared the readmes for next improvements.
Aug 4, 2026
87e29dd
Wrote a viewer of OpenDocument for the desktop.
Aug 4, 2026
cc398b4
Added the add-on for Thunderbird, that opens an attachment from its m…
Aug 4, 2026
61a3cdb
Merge branch 'fix/viewer_android'
Aug 4, 2026
a44c55b
Adapted the desktop viewer for windows.
Aug 4, 2026
1907c08
Wrote the page of the welcome, one for the browsers and one for Thund…
Aug 4, 2026
11ca414
Updated readmes.
Aug 4, 2026
1a615b3
Adapted the desktop viewer for macos.
Aug 4, 2026
3262b1c
Merge branch 'feat/thunderbird'
Aug 4, 2026
abddd14
Built the shell of the viewer for iOS in swift.
Aug 4, 2026
03e9131
Merge branch 'feat/desktop'
Aug 4, 2026
9928cce
Rebuilt docnosis to check documents against the standard.
Aug 4, 2026
70fea29
Merge branch 'feat/viewer_ios'
Aug 4, 2026
16c26ef
Merge branch 'feat/docnosis'
Aug 4, 2026
d602699
Updated tests in rhino, left out since 2013.
Aug 4, 2026
aa46220
Broke a text over pages only where reader asks it.
Aug 4, 2026
6c22821
Updated rhino to test compiled js.
Aug 4, 2026
244d867
Fit one page to the window, and set a note beside the page it belongs…
Aug 4, 2026
e6e4c25
Fixed memory issue when destroying annotations.
Aug 4, 2026
d81ad02
Built the viewer on linux, windows and mac via a runner to avoid lice…
Aug 4, 2026
80a1220
Set a frame anchored to a page against the page it belongs to.
Aug 4, 2026
d3c014b
Clarified distinction between sheet and page.
Aug 4, 2026
cfeb786
Named the hash of the archives, downloaded again at every build.
Aug 4, 2026
3fb0d8b
Laid the pages one under another, cutting the text where a page ends.
Aug 4, 2026
d45e4a8
Displayed header and footer on every page.
Aug 4, 2026
84ff779
Measured the four documents in one table, and told how to run it whole.
Aug 4, 2026
2819d7c
Written on the next page what a page cannot hold and cannot cut.
Aug 4, 2026
9574092
Clarified distinction between left/right page.
Aug 4, 2026
d78c256
Told that a document does not fit the schema, instead of an object.
Aug 4, 2026
b4f8b2b
Read what an element holds rather than what it says of itself, to cut…
Aug 4, 2026
7046e55
Clarified distinction between first/next pages.
Aug 4, 2026
d49d403
Told in android what the viewer is, from the page that asks for a doc…
Aug 4, 2026
9ed1d29
Broken a text into pages a few at a time, and given the first of them…
Aug 4, 2026
6b14316
Filled header with data from document fields.
Aug 4, 2026
de1bf46
Dropped the interface of sencha touch, that no product carried any more.
Aug 4, 2026
3d77c0a
Cut a table between two of its rows, and write its head again.
Aug 4, 2026
65a781b
Managed shapes of the master page on every page.
Aug 4, 2026
3b64c38
Emptied the attic, whose tenants the viewers of today replace.
Aug 4, 2026
0f8ec7f
Drawn a text over pages laid one under another, and dropped the boxes…
Aug 4, 2026
5670acf
Held a table to the width the document gives it.
Aug 4, 2026
b7feb34
Clarified management of watermark and stamp.
Aug 4, 2026
337b113
Updated .gitignore.
Aug 4, 2026
5227d1c
Read a document as a book, two pages to a row.
Aug 4, 2026
cf45aa5
Drawn the notes of the annotations over the pane that carries them.
Aug 4, 2026
36c440c
Painted each page of a text on its own.
Aug 4, 2026
e469125
Merge branch vandenoever/pagination
Aug 4, 2026
933a22f
Asked of the pages what is of the document, not what is of the machine.
Aug 4, 2026
1d33581
Drawn a text in the margins of the page it is written on.
Aug 4, 2026
fd9975e
Wrote the type of a callback as the compiler reads it, in the editors.
Aug 4, 2026
9a8e185
Managed size of each page and defaulted to master page.
Aug 4, 2026
676ebf3
Finalized pagination.
Aug 4, 2026
151372c
Written the head of a table again, once, and only where a head belongs.
Aug 4, 2026
c40c42d
Said plainly that a document is being read, and say it where it is seen.
Aug 4, 2026
2059877
Simplified building of products in one place.
Aug 4, 2026
5d60e96
Merge branch 'feat/structure_page'
Aug 4, 2026
0ec16b0
Written a page and a section in the columns they ask for.
Aug 4, 2026
a8f4f13
Drawn the pages in firefox, and taken the number of pages from the do…
Aug 4, 2026
46e0674
Set the lines of a header at the height of what is written in them.
Aug 4, 2026
013e468
Added output for linux archive and packages.
Aug 4, 2026
317abf3
Reordered documents in contextuel menu of thunderbird.
Aug 4, 2026
aa07e90
Drawn a table wider than the page to the width of the text.
Aug 4, 2026
8c6da7b
Named the types the strict check asks for in the sheet of the layout.
Aug 4, 2026
f72be87
Placed a table where the document sets it between the margins.
Aug 4, 2026
df9da24
Skipped output while while a document is being read.
Aug 4, 2026
edcc558
Merge branch 'feat/simple_build'
Aug 4, 2026
e181f2b
Written the numbers of the lists and of the headings again as they ch…
Aug 4, 2026
f55a602
Read the style a paragraph names once, not once for every paragraph.
Aug 4, 2026
5e998cb
Read the columns of a table as the table and not as its content.
Aug 4, 2026
19fba3d
Given back to the text the pixel the boxes of the pages took from it.
Aug 4, 2026
8bf64c4
Built the layer of dojo with a minifier that leaves its modules alone.
Aug 4, 2026
471ae7b
Merge branch 'vandenoever/rng2conf'
Aug 4, 2026
eaf933e
Drawn a document that holds no styles of its own.
Aug 4, 2026
7ae69a2
Read what the lines are drawn with before writing a rule for any of t…
Aug 4, 2026
ceaa85c
Broken a page where the document asks for one.
Aug 4, 2026
d549371
Begun a new page where the document asks for one.
Aug 4, 2026
b646318
Let the gap between two pages be seen again, that the text painted over.
Aug 4, 2026
e0c8336
Opened the editors again, that a page of grey was all they showed.
Aug 4, 2026
29ccadb
Improved output about what the schema says of an element.
Aug 4, 2026
daf6439
Added the spacings of two paragraphs that follow one another.
Aug 4, 2026
f42ab3d
Read the style of an element from an attribute of its own.
Aug 4, 2026
6713dd2
Said what is wrong when node answers nothing, rather than fail on a s…
Aug 4, 2026
46188f9
Set the line of the foot right once the count of pages is known.
Aug 4, 2026
ff1ba62
Kept the boxes of the pages counted once a document is drawn small.
Aug 4, 2026
ed37559
Set the parts of a header and of a footer against their tab stops.
Aug 4, 2026
4e88cb7
Build the whole toolbar of the editor again.
Aug 4, 2026
ae89bb4
Read a document via data: as base64 or as url argument.
Aug 4, 2026
948c242
Left qmake unsaid where none was found, for the plugin to look itself.
Aug 4, 2026
b7d98ab
Drawn the head and the foot of a page once, and copied them after.
Aug 4, 2026
21f0bec
Run the tests without a screen, that no window opens in anyone's face.
Aug 4, 2026
ab89c1e
Listed the viewer of the desktop among the products of the build.
Aug 4, 2026
64673c1
Written the rules a page is cut by into the sheet of the document.
Aug 4, 2026
b9cb3d5
Read a break from the first style that speaks of one.
Aug 4, 2026
d1076b3
Wrote a header and a footer in the font the document asks for.
Aug 4, 2026
b337830
Packed the way dojo looks an element up, that the editor asks a serve…
Aug 4, 2026
343252f
Dropped the prefixes no engine reads any more, and keep the two that …
Aug 4, 2026
6c9c8b0
Given the pages their size again once the furniture was drawn.
Aug 4, 2026
16ab714
Laid the tabs before the pages are broken, and keep what waits.
Aug 4, 2026
c8418f5
Kept the page a heading asks for, and never cut a word in two.
Aug 4, 2026
a0525c4
Built the flatpak beside the sources, against the base app of qt.
Aug 4, 2026
d86f62f
Made every product of the build with one command, and named what is w…
Aug 4, 2026
a9e3979
Left no line of a paragraph alone at the end of a page.
Aug 4, 2026
0746360
Broken a text into columns, one column to a page.
Aug 4, 2026
fe512d8
Kept every line of a header, wherever the document writes its tabs.
Aug 4, 2026
2f7be25
Merge branch 'feat/editor_dojo'
Aug 4, 2026
5fdaddf
Scaled the document to the window only when the reader asks it.
Aug 4, 2026
5b1a19f
Written again what each part of the library leans on.
Aug 4, 2026
8795f94
Laid the tabs of the text at the stops the document writes.
Aug 4, 2026
4d9b163
Read a spreadsheet, a presentation and a drawing of their own extension.
Aug 4, 2026
1001d8e
Said what the viewer is to a store of software, and named what is pac…
Aug 4, 2026
e94fd66
Left the flatpak out where the machine cannot write it.
Aug 4, 2026
b3c0308
Copied the package of this build alone into the products.
Aug 4, 2026
b579b43
Written a heading on the page of the text it heads.
Aug 4, 2026
43d9210
Drawn the pages of every size a document writes, in columns.
Aug 4, 2026
ac99a54
Merge branch 'feat/page_furniture'
Aug 4, 2026
ad3342d
Given the text back the room a taller foot took from it.
Aug 4, 2026
2ee50c5
Written a part at a stop on the left in the flow of its line.
Aug 4, 2026
42be9ec
Numbered a heading as its own level is written, and carried on the co…
Aug 4, 2026
f2bedb6
Read a page from what was written last, not from its head.
Aug 4, 2026
b2ecf81
Read the same files in the description, the entry and the dialog.
Aug 4, 2026
8460884
Asked java for the checks alone, and downloaded its jars only where i…
Aug 4, 2026
c7403c2
Named the package that was written, not the one CPack names after.
Aug 4, 2026
0a3f3e8
Left the text the room the furniture of the page takes.
Aug 4, 2026
a7640ea
Merge branch 'feat/columns'
Aug 4, 2026
481120a
Written what the first page came to when the pages are drawn.
Aug 4, 2026
dd2b6ec
Drawn a tab stop that stands off the page against its edge.
Aug 4, 2026
6ef76f4
Let the numbers of the lists run on from page to page.
Aug 4, 2026
d314e5e
Measured the nodes a page was given in one reading, not one by one.
Aug 4, 2026
8065c29
Read the documents an office writes, in the tests.
Aug 4, 2026
b3ad3e2
Opened a drawing, that is a run of pages like a presentation.
Aug 4, 2026
be57205
Given the sandbox the library that was built, rather than node to bui…
Aug 4, 2026
6951335
Kept in the directory of the products what this build wrote alone.
Aug 4, 2026
22404ab
Merge branch 'feat/pagination'
Aug 4, 2026
9466cbf
Drawn the formulas a text holds.
Aug 4, 2026
7c0cdbd
Left out the spacing under the last thing a page holds.
Aug 4, 2026
21c2ec7
Written a table whole where it may not be cut between its rows.
Aug 4, 2026
65aa551
Worked out the labels of the lists once, and written them on the elem…
Aug 4, 2026
2cfe061
Set the height of the text on the text, not in the sheet of the layout.
Aug 4, 2026
573f7fb
Kept the documents the tests read apart from the tests themselves.
Aug 4, 2026
6968528
Said nothing of what the AppImage cannot find and does not need.
Aug 4, 2026
6743189
Told the plugin of qt where qmake is, or tell it nothing at all.
Aug 4, 2026
a8c0e6a
Merge branch 'feat/products'
Aug 4, 2026
a7cf1ce
Given a formula to every copy of the frame that holds it.
Aug 4, 2026
14e1283
Set the pages right as soon as the fonts have truly landed.
Aug 4, 2026
a4fba96
Put a row of two pages in the middle of the reader.
Aug 4, 2026
8be382f
Numbered a list where it stands, not once the list it stands in is done.
Aug 4, 2026
4b39cde
Taken back what a page cannot hold, and not the whole of what it was …
Aug 4, 2026
184b676
Written what a test writes to a directory of its own.
Aug 4, 2026
5b451dc
Written the metadata of a store as a store reads it.
Aug 4, 2026
7e2f7d7
Merge branch 'feat/qt_viewer'
Aug 4, 2026
aa24120
Taken the spacings from what a cut left holding nothing.
Aug 4, 2026
736bc7c
Set right at once the pages broken before the fonts landed.
Aug 4, 2026
88463ff
Said why the plugin of qt warns of the qml the viewer has none of.
Aug 4, 2026
b2b1e28
Read where a page ends once, and taken back what is over at one go.
Aug 4, 2026
21bb322
Parted an element of thousands of nodes before writing it on a page.
Aug 4, 2026
ab3b9bf
Read the standard of schema of OpenDocument 1.4 for tests (800 pages).
Aug 4, 2026
a1dc46f
Merge branch 'feat/store_metadata'
Aug 4, 2026
3f6daeb
Drawn the pages of a drawing, that were drawn of no size at all.
Aug 4, 2026
1ea0e77
Set the pages right as they are drawn, and not at the end of the text.
Aug 4, 2026
98d278e
Drawn a page on the whole of its paper, margins included.
Aug 4, 2026
149ef75
Followed the links of a document when a reader clicks one.
Aug 4, 2026
27d64e4
Looked for a break of page inside what holds a paragraph.
Aug 4, 2026
0c7b0b1
Drawn the first pages as soon as they are broken, and grow the slices…
Aug 4, 2026
8243e55
Merge branch 'test/documents'
Aug 4, 2026
1fb5c0e
Given a page of A4 where a master page names no layout.
Aug 4, 2026
4b65025
Asked for the fonts of the document before breaking it into pages.
Aug 4, 2026
4f5db0a
Put a row of two pages in the middle and scaled it to the window.
Aug 4, 2026
5f8e2cc
Drawn a header in its style, and held a number away from its heading.
Aug 4, 2026
00eaea2
Numbered the chapters, that a document numbers by its outline style.
Aug 4, 2026
2f79b52
Merge branch 'perf/layout'
Aug 4, 2026
d866e34
Kept one way of setting the pages right when the fonts land.
Aug 4, 2026
05d23a9
Set right only the pages of the slice that was drawn.
Aug 4, 2026
7e029ce
Added an entry to close the document to the menu of the file.
Aug 4, 2026
ddad5e8
Read a document one page at a time, or two as a book is read.
Aug 4, 2026
b23bda3
Merge branch 'feat/layout_numbering'
Aug 4, 2026
8c093fc
Taken the measures a layout leans on out of the layout itself.
Aug 4, 2026
a5e9521
Left the pages away from the window undrawn until they come near.
Aug 4, 2026
27e8999
Drawn the notes of the foot at the foot of the page they are called on.
Aug 4, 2026
0a2db27
Merge branch 'feat/layout_two_pages'
Aug 4, 2026
1768113
Taken what is drawn around a page out of what breaks the text.
Aug 4, 2026
d2164a0
Added the spacings of an index alone, and left the text as it was.
Aug 4, 2026
3808f66
Merge branch 'feat/layout_footnotes'
Aug 4, 2026
9b0d622
Read a drawing and a formula in the add-ons, as the viewer does.
Aug 4, 2026
1ca806d
Merge branch 'feat/layout_schema'
Aug 4, 2026
c7c725a
Merge branch 'feat/layout_drawing_formulas'
Aug 4, 2026
97844eb
Removed old traces.
Aug 4, 2026
55bddef
Finalized view building before subscribing to event.
Aug 4, 2026
943b011
Answered the back of the system as android 13 asks, and as before.
Aug 4, 2026
18546a9
Built the library when the package is installed from its sources.
Aug 4, 2026
5149252
Named who wrote what was written anew in these files.
Aug 4, 2026
049b138
Updated the named the maintainer and the url of some packages.
Aug 4, 2026
2bdad85
Named the places the sources and the reports live in, in every header.
Aug 4, 2026
eff6849
Added a readme about the public api.
Aug 4, 2026
d0fdadb
Updated readmes.
Aug 4, 2026
84f010f
Fixed translation.
Aug 4, 2026
c55b269
Updated dependencies.
Aug 24, 2026
54baf51
Updated github actions.
Aug 24, 2026
3289292
Fixed remaining double sources.
Aug 24, 2026
c82a5c1
Fixed runing github actions.
Aug 24, 2026
efccea1
Fixed tests for font size.
Aug 24, 2026
e1a76b1
Fixed release number.
Aug 24, 2026
eaae358
Fixed macos name.
Aug 24, 2026
e6d1b6d
Removed patch for dojo on windows.
Aug 24, 2026
a9d6286
Managed jsdoc by node, so windows can find it.
Aug 24, 2026
cc2a4b4
Added publication of product with github release.
Aug 31, 2026
952c55f
Added publication of product with gitlab release.
Aug 31, 2026
e982749
Replaced debian:trixie with an image with node 22.
Aug 31, 2026
c240514
Removed "-dirty" from the names of released files.
Aug 31, 2026
5b2556f
Updated readme.
Aug 31, 2026
c16a0ec
Released version 0.6.0.
Aug 31, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Set default behaviour for some text-like files, in case users don't have core.autocrlf set.
# Set default behaviour for some text-like files, in case users don't have webodfcore.autocrlf set.


*.cmake text eol=native
Expand Down
125 changes: 125 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Builds the viewer of OpenDocument for the desktop on the three systems it
# runs on, and runs the tests of the library in the webengine of qt on each of
# them. Two of those systems are ones no one of this project owns, which is
# what this is for: the branches "if (WIN32)" and "if (APPLE)" of the build are
# never run anywhere else.
name: Viewer of the desktop

on:
push:
branches: [master]
pull_request:
workflow_dispatch:

jobs:
desktop:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- name: Linux
runner: ubuntu-latest
qt: linux_gcc_64
- name: Windows
runner: windows-latest
qt: win64_msvc2022_64
# The runner is held at macos 15: the sdk of macos 26 dropped the
# framework AGL, that the configuration of Qt 6.8 still asks for,
# and the link of the runtime fails without it.
- name: macOS
runner: macos-15
qt: clang_64

steps:
# The whole history: the version of the build comes from "git describe",
# which a shallow checkout gives nothing to describe.
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-node@v5
with:
node-version: 22
cache: npm

# A java runtime runs the closure compiler and rhino.
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21

# Qt WebEngine is an extension since 6.8, in a repository of its own; the
# action asks for it as a module, and webchannel and positioning come
# with it.
- uses: jurplel/install-qt-action@v4
with:
version: 6.8.2
arch: ${{ matrix.qt }}
modules: qtwebengine qtwebchannel qtpositioning
cache: true

# The webengine reads these on linux, where a runner carries no desktop.
- name: Libraries the engine reads
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
libnss3 libxkbcommon-x11-0 libxcomposite1 libxdamage1 \
libxrandr2 libxtst6 libasound2t64 fonts-dejavu-core

- name: Dependencies of the build
run: npm ci

# No generator is named, so cmake takes the one of visual studio on
# windows, which finds the compiler of microsoft itself: nothing has to
# put it in the environment beforehand. MinGW, that Qt WebEngine does
# not compile with, is never the one taken.
- name: Configure
run: >
cmake -S . -B build
-DWEBODF_DESKTOP=ON
-DWEBODF_QTJSRUNTIME=ON
-DCMAKE_BUILD_TYPE=Release

# "--config" holds for the generators of more than one configuration,
# the one of visual studio among them, that pay no heed to
# "CMAKE_BUILD_TYPE"; the others take no harm from it.

# The library first: a viewer built on a library that fails its tests is
# worth nothing. The target runs every suite, in node, in rhino, on the
# sources and on the file the compiler wrote, and in the webengine of qt.
- name: Tests of the library
env:
QT_QPA_PLATFORM: offscreen
QTWEBENGINE_CHROMIUM_FLAGS: --disable-gpu --no-sandbox
run: cmake --build build --config Release --target webodf.js-tests

- name: Viewer
run: cmake --build build --config Release --target product-opendocumentviewer-desktop

# What the tools of the platform gather beside the program: the whole of
# it runs on a machine where qt is not installed.
# The prefix is absolute: the script that qt writes to deploy the
# libraries builds the path of "qt.conf" from it and refuses a relative
# one.
- name: Install what is deployed
run: >
cmake --install build --config Release
--prefix ${{ github.workspace }}/build/dist

# An archive rather than the files: a bundle of macos holds symbolic
# links, that an artifact of loose files loses.
- name: Gather what was installed
run: cmake -E tar czf ../opendocumentviewer-${{ matrix.name }}.tar.gz .
working-directory: build/dist

# "archive: false" hands the file over as it is: an artifact is wrapped
# in a zip otherwise, and whoever downloads it unpacks twice. The name
# of the artifact is then the name of the file.
- uses: actions/upload-artifact@v7
with:
path: build/opendocumentviewer-${{ matrix.name }}.tar.gz
archive: false
if-no-files-found: error
59 changes: 59 additions & 0 deletions .github/workflows/library.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Builds the library the short way, with node alone, and runs what that build
# runs: the tests in node, the same ones in rhino, and the check of the types.
# It is the short one, that answers on every push, where the build of the
# viewers is the long one.
name: Library

on:
push:
branches: [master]
pull_request:
workflow_dispatch:

jobs:
library:
name: Library, with node
runs-on: ubuntu-latest

steps:
# The whole history: the version of the build comes from "git describe",
# which a shallow checkout gives nothing to describe.
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-node@v5
with:
node-version: 22
cache: npm

# A java runtime runs the closure compiler and rhino.
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21

- name: Dependencies of the build
run: npm ci

- name: Types of the library and of the tests
run: |
npm run check
npm run check:tests

- name: Tests, in node
run: npm test

- name: Tests, in rhino
run: npm run test:rhino

- name: Library
run: npm run build

# "archive: false" hands the library over as it is, where an artifact
# is wrapped in a zip otherwise.
- uses: actions/upload-artifact@v7
with:
path: dist/webodf.js
archive: false
if-no-files-found: error
154 changes: 154 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Builds every product a machine without a key can make, and publishes them
# with the release of github. Gitlab builds and publishes its own, see
# ".gitlab-ci.yml": neither forge pushes a file to the other. What needs a
# signature is left out: the apk of android, the bundle of macos and the
# application of ios, whose keys belong to whoever publishes them, see
# "README-Products.md".
name: Release

on:
push:
tags: ['v*']
workflow_dispatch:

jobs:
release:
name: Release of github
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-node@v5
with:
node-version: 22
cache: npm

# The library, that no machine of the matrix writes: it is the package
# the other projects depend on.
- name: Package of the library
run: |
npm ci
mkdir -p products
npm pack --pack-destination products

# The release is opened before the products are built, so that each
# machine has one to hand its own to. A release that stands already is
# written to rather than opened again, so that the workflow can be run
# a second time on the same tag.
- name: Release of github
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.ref_name }}
run: |
if gh release view "$TAG" >/dev/null 2>&1; then
gh release upload "$TAG" products/* --clobber
else
gh release create "$TAG" --title "$TAG" \
--notes "The products of $TAG." products/*
fi

products:
name: Products of ${{ matrix.name }}
needs: release
runs-on: ${{ matrix.runner }}
permissions:
contents: write

strategy:
fail-fast: false
matrix:
include:
- name: Linux
runner: ubuntu-latest
qt: linux_gcc_64
- name: Windows
runner: windows-latest
qt: win64_msvc2022_64
# The runner is held at macos 15: the sdk of macos 26 dropped the
# framework AGL, that the configuration of Qt 6.8 still asks for,
# and the link of the runtime fails without it.
- name: macOS
runner: macos-15
qt: clang_64

steps:
# The whole history: the version of the build comes from "git describe",
# which a shallow checkout gives nothing to describe.
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-node@v5
with:
node-version: 22
cache: npm

# A java runtime runs the closure compiler and rhino.
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21

# Qt WebEngine is an extension since 6.8, in a repository of its own; the
# modules are the ones the viewer links against.
- uses: jurplel/install-qt-action@v4
with:
version: 6.8.2
arch: ${{ matrix.qt }}
modules: qtwebengine qtwebchannel qtpositioning
cache: true

# The tools that write the packages of linux: what is not found is
# skipped by the build, which says so at the end.
- name: Tools of the packages
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
rpm libnss3 libxkbcommon-x11-0 libxcomposite1 libxdamage1 \
libxrandr2 libxtst6 libasound2t64 fonts-dejavu-core

- name: Dependencies of the build
run: npm ci

# No generator is named, so cmake takes the one of visual studio on
# windows, which finds the compiler of microsoft itself: nothing has to
# put it in the environment beforehand. MinGW, that Qt WebEngine does
# not compile with, is never the one taken.
- name: Configure
run: >
cmake -S . -B build
-DWEBODF_DESKTOP=ON
-DWEBODF_PROGRAMS=ON
-DWEBODF_QTJSRUNTIME=ON
-DCMAKE_BUILD_TYPE=Release

# The library first: a product built on a library that fails its tests is
# worth nothing.
- name: Tests of the library
env:
QT_QPA_PLATFORM: offscreen
QTWEBENGINE_CHROMIUM_FLAGS: --disable-gpu --no-sandbox
run: cmake --build build --config Release --target webodf.js-tests

# One target gathers them all in "build/products", and names what this
# machine had no tool to write.
- name: Products
run: cmake --build build --config Release --target products

# Each machine hands its own products to the release, one file at a
# time: an artifact would wrap them in a zip of its own, and whoever
# downloads a package of debian wants that file and not a zip holding
# it.
# The shell is named: powershell, the one of windows, hands the star
# over as it stands rather than naming the files it stands for.
- name: Products of this machine, in the release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: gh release upload ${{ github.ref_name }} build/products/* --clobber
Loading