Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge website, doxygen pages, and wiki? #4111

Open
derekbruening opened this issue Feb 16, 2020 · 21 comments
Open

Merge website, doxygen pages, and wiki? #4111

derekbruening opened this issue Feb 16, 2020 · 21 comments

Comments

@derekbruening
Copy link
Contributor

Split from #3194

Most of our user-facing content is prose inside the doxygen pages, leaving just a few pages on the main website. And the two have completely different styles and layout. We could consider merging in one direction or another: we could remove all the non-API content from doxygen control and move it to the Pages and embed the API content in an iframe (maybe remove the navbar, etc. there); or we could go the other way and try to put all the top-level pages inside doxygen auto-generation.

We could also consider removing the wiki and moving its content into the website, to have everything integrated in one place.

@derekbruening
Copy link
Contributor Author

The downside of moving content out of doxygen is that the local docs in a package or local build would then lose that content. However, I do not know that the typical user looks at the local docs in any case. It may be better to have nicer online docs.

@derekbruening
Copy link
Contributor Author

@AssadHashmi , @johnfxgalea -- looking for some more opinions.

Also, now that the website is editable by others in the dynamorio.github.io repository, it can be improved by the community: e.g., #4112, or other style changes.

@derekbruening
Copy link
Contributor Author

Another downside of moving the tool docs is that they would no longer live next to their code: e.g., instead of drcachesim.dox.in right in the drcachesim/ code directory, it would live in the separate dynamorio.github.io repository. (I suppose we could have dynamorio be a submodule of the docs repo and have jekyll pull out just some targeted tool doc files.)

@derekbruening
Copy link
Contributor Author

An upside is that we could add a search box over all the docs, versus the current search box in the doxygen-generated html which searches only the code tokens and does not search the prose at all.

@derekbruening
Copy link
Contributor Author

I'm leaning toward:

  1. Moving all the wiki pages into the website and removing the wiki.

  2. Putting in the work to integrate the doxygen output into the jekyll site. This would involve removing the side frame and having doxygen generate plain html pages, pushing them into a subdir of dynamorio.github.io with a script from Travis, and building up navigation menus using the doxygen file names. This could allow us to keep the content in both release packages and online.

derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Feb 16, 2021
Integrates the doxygen-generated documentation into the top-level web site.

Switches the web site to use the same javascript-powered navigation
menu system that doxygen uses.  Rather than re-generating the "skip
list" index file system for locating menu items, inlines all the menu
arrays using jekyll into a single array and then does a depth-first
search to find the current page.

Changes the color of the navigation panel to light blue-green with a
right border.

Adds the most recent doxygen output snapshot into the docs/ directory,
with some modifications for integration.

Moves the synch toggle down below the menu.

Future work will automate updating the site with the latest doxygen
output.

Issue: DynamoRIO/dynamorio#4111
derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Feb 16, 2021
Integrates the doxygen-generated documentation into the top-level web site.

Switches the web site to use the same javascript-powered navigation
menu system that doxygen uses.  Rather than re-generating the "skip
list" index file system for locating menu items, inlines all the menu
arrays using jekyll into a single array and then does a depth-first
search to find the current page.

Changes the color of the navigation panel to light blue-green with a
right border.

Adds the most recent doxygen output snapshot into the docs/ directory,
with some modifications for integration.

Moves the synch toggle down below the menu.

Future work will automate updating the site with the latest doxygen
output.

Issue: DynamoRIO/dynamorio#4111
@derekbruening derekbruening self-assigned this Feb 17, 2021
@derekbruening
Copy link
Contributor Author

derekbruening commented Feb 17, 2021

My new plan is to duplicate:

  • Keep the wiki, but place a copy of it (updated w/ the weekly cronbuild) inside the web site.
  • Generate both standalone framed doxygen html and doxygen suitable for embedding.

I put some work into integration of doxygen and put it up on dynamorio.org.

I have a menu system using doxygen's own javascript modified to be extendable (had to scrap their "skip list" indexing and inline all the submenus).

I added a whole-site search using lunr which searches the prose docs and the other pages. However it is not perfect for API searches: #4740.

Still to do beyond improving search which as mentioned is #4740:

@johnfxgalea
Copy link
Contributor

johnfxgalea commented Feb 17, 2021

Another option might be to move the wiki & website to Docusaurus, which supports document search powered by Algolia DocSearch (or perhaps use this directly). However, I'm not sure if it works on HTML produced by doxygen, and might be an overkill anyways given our current setup.

https://v2.docusaurus.io/docs/search

derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Feb 21, 2021
Updates to a doxygen snapshot from forthcoming automation.
Includes prefixes on the type search keywords.

Issue: DynamoRIO/dynamorio#4111
derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Feb 21, 2021
Updates to a doxygen snapshot from forthcoming automation.
Includes prefixes on the type search keywords.

Issue: DynamoRIO/dynamorio#4111
derekbruening added a commit that referenced this issue Feb 21, 2021
Creates a second version of the doxygen html output suitable for
embedding in our jekyll-based web site.  This version turns off the
doxygen treeview, but then borrows the javascript menu files from the
treeview version.  We then edit the html to remove the headers, and
edit the menu files for inlining into our web site's single array.

Furthermore, we generate keyword search term data so that searches
using lunr for functions or types result in direct links to their
anchors within their pages.  It generates keyword tokens for each
component of an underscore-separated multi-word type, along with
tokens for each prefix (e.g., so that "dr_mutex" will find
"dr_mutex_*").

Adds installation into a "docs_embed" directory.

Adds deployment logic to package.cmake to copy the embedded html to a
top level "html_embed", along with new steps in the ci-package GA
workflow to take the embedded html files and push them to the
dynamorio.github.io repository.

Issue: #4111
derekbruening added a commit that referenced this issue Feb 21, 2021
Creates a second version of the doxygen html output suitable for
embedding in our jekyll-based web site.  This version turns off the
doxygen treeview, but then borrows the javascript menu files from the
treeview version.  We then edit the html to remove the headers, and
edit the menu files for inlining into our web site's single array.

Furthermore, we generate keyword search term data so that searches
using lunr for functions or types result in direct links to their
anchors within their pages.  It generates keyword tokens for each
component of an underscore-separated multi-word type, along with
tokens for each prefix (e.g., so that "dr_mutex" will find
"dr_mutex_*").

Adds installation into a "docs_embed" directory.

Adds deployment logic to package.cmake to copy the embedded html to a
top level "html_embed", along with new steps in the ci-package GA
workflow to take the embedded html files and push them to the
dynamorio.github.io repository.

Issue: #4111, #4740
@derekbruening
Copy link
Contributor Author

derekbruening commented Feb 21, 2021

The doxygen docs are now nicely integrated.

But I'm looking for help deciding what to do with the wiki.

I added Debugging to the live web site with menu entries for all sections in
DynamoRIO/dynamorio.github.io@02e5f61 to visualize what it would look like.

There are a couple of goals here:

  • Better navigation for wiki pages. Currently they are very long. We would like a table of contents and sidebar menus for each.
  • Better integration of content. Some wiki content is relevant to users: debugging, etc., and should perhaps be integrated into the doxygen pages.
  • Searching integrated with all the other content.

I was hoping we could just make a copy of the wiki markup files and they would work as-is for jekyll. But there are complications:

  • Some are mediawiki format which would require a converter. IIRC we only used that format to get a table of contents inserted.
  • We need to insert the jekyll header on every file.
  • We need to generate the javascript menu files.

So we need a script for all that. Github Pages disallows jekyll plugins, so we have to do it ahead of time. So either we build a script to generate JS menus, insert header + toc, and convert mediawiki and run at package deploy time, or we move the wiki content instead of having a copy.

Pros of deleting the wiki and moving its content into the web pages:

  • Have TOC and sidebar menus for all content
  • No fiddly, fragile script to get copy looking good
  • No converting from mediawiki to kramdown for jekyll
  • No 1-week delay before changes appear on the web site

Cons of moving:

  • Editing web menus is currently manual: could be painful when
    adding/changing subsections
  • No WYSIWYG easy editing interface: but how often do we edit anyway?
  • Broken old wiki links: but that's temporary

An alternative is to move the wiki into the doxygen pages to get auto-menu-generation, better content integration (e.g., Debugging should be with the rest of the user docs). But, the doxygen prose pages are not quite as nice to edit as the jekyll markdown.

We could also move some existing web content into doxygen: e.g., Tutorials and the API Usage Tutorial should perhaps be combined.

Any opinions?

@derekbruening
Copy link
Contributor Author

Editing web menus is currently manual: could be painful when
adding/changing subsections

Although I abandoned menu generation with Liquid when it had to generate all the expansion and highlighting, maybe we can use Liquid to auto-generate the JavaScript arrays for the wiki pages. If that works out, I would lean toward deleting the wiki and moving its content into dynamorio.github.io.

@johnfxgalea
Copy link
Contributor

@derekbruening What are the cons of moving everything to Doxygen? Seems to be the easiest option to integrate everything, no?

@derekbruening
Copy link
Contributor Author

@derekbruening What are the cons of moving everything to Doxygen? Seems to be the easiest option to integrate everything, no?

Yes, it may well be the best option. Given that we will always have some doxygen output for our function and data structure interfaces, we'll always have to deal with integrating it somehow. I also ended up using doxygen's javascript-based menu system for the web site, because it has the most pages and a ready-made system.

The only cons IMHO are:

  • We have less control over high-level layout: doxygen puts all prose pages as peers of API docs, while we might want a layer on top of that as we have now. That may be harder to accomplish with post-doxygen editing as we might have to rip out menus instead of just adding/tweaking, but still doable.
  • It feels a little uglier using the doxygen markup inside a C comment for large amounts of prose versus using jekyll's kramdown markup: but not a major issue.
  • We have less direct control over some html output details that doxygen controls: but we can auto-edit the files in build post-processing (already doing that for some things) and tweak the web site style files to override doxygen and get it looking how we want.

@derekbruening
Copy link
Contributor Author

Looks like doxygen 1.8.0+ has new support for markdown that looks more like the wiki or jekyll kramdown .md: https://www.doxygen.nl/manual/markdown.html

GA CI is using 1.8.11 so we could switch to this (instead of raw html <a href=, <em>, etc.); it shoul dmake it easier to move wiki pages to doxygen.

@derekbruening
Copy link
Contributor Author

I played with moving some wiki pages into doxygen with the new markdown and it worked pretty well. I plan to go ahead and do that for all the wiki pages.

@AssadHashmi
Copy link
Contributor

New integrated website looks really good!
Improved layout and navigation features 👍

derekbruening added a commit that referenced this issue Mar 19, 2021
The daily docs cronbuilds are steadily increasing the size of the
repo, due to timestamps in every single file changing every time.
Given that we rarely make docs changes that we want to make live
immediately, we reduce the cronbuild to coincide with the package
build, and rely on manually-triggered docs builds for anything else.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 19, 2021
The daily docs cronbuilds are steadily increasing the size of the
repo, due to timestamps in every single file changing every time.
Given that we rarely make docs changes that we want to make live
immediately, we reduce the cronbuild to coincide with the package
build, and rely on manually-triggered docs builds for anything else.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 21, 2021
The dynamorio_docs repository has been deleted and we now only deploy
embedded docs to the dynamorio.github.io repository.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 21, 2021
The dynamorio_docs repository has been deleted and we now only deploy
embedded docs to the dynamorio.github.io repository.

Issue: #4111
derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Mar 21, 2021
Adds more redirects for all the generated API reference type pages.

Issue: DynamoRIO/dynamorio#4111
derekbruening added a commit to DynamoRIO/dynamorio.github.io that referenced this issue Mar 21, 2021
Adds more redirects for all the generated API reference type pages.

Issue: DynamoRIO/dynamorio#4111
derekbruening added a commit that referenced this issue Mar 22, 2021
Updates the menu entries for directory pages, replacing the hashed
names from the treeview generation with the hashed names for the
embedded generation.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 22, 2021
Updates the menu entries for directory pages, replacing the hashed
names from the treeview generation with the hashed names for the
embedded generation.

Issue: #4111
sapostolakis pushed a commit that referenced this issue Mar 22, 2021
The dynamorio_docs repository has been deleted and we now only deploy
embedded docs to the dynamorio.github.io repository.

Issue: #4111
sapostolakis pushed a commit that referenced this issue Mar 22, 2021
Updates the menu entries for directory pages, replacing the hashed
names from the treeview generation with the hashed names for the
embedded generation.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 26, 2021
Adds doxygen comments to the instrlist_t typedef so we can add links
to the docs, although it is an opaque type.  Renames the underlying struct to better match the final name.

Also converts the regular comment on DRWRAP_CALLCONV_MASK to a doxygen
comment.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 26, 2021
Adds doxygen comments to the instrlist_t typedef so we can add links
to the docs, although it is an opaque type.  Renames the underlying struct to better match the final name.

Also converts the regular comment on DRWRAP_CALLCONV_MASK to a doxygen
comment.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 27, 2021
Moves the License page to a top-level entry and renames the sections
for shorter menu entries.

Fixes other misc layout issues:
+ Removes the bt.dox samples TOC entry since that is now on another page
+ Adds missing start/stop API entries
+ Removes a duplicate Disassembly Tool list entry

Issue: #4111
derekbruening added a commit that referenced this issue Mar 27, 2021
Moves the License page to a top-level entry and renames the sections
for shorter menu entries.

Fixes other misc layout issues:
+ Removes the bt.dox samples TOC entry since that is now on another page
+ Adds missing start/stop API entries
+ Removes a duplicate Disassembly Tool list entry

Issue: #4111
derekbruening added a commit that referenced this issue Mar 27, 2021
Adds search entries for section headers which target the anchor links
directly.

Issue: #4111
derekbruening added a commit that referenced this issue Mar 27, 2021
Adds search entries for section headers which target the anchor links
directly.

Issue: #4111
derekbruening added a commit that referenced this issue Apr 15, 2021
Adds a direct link to the rseq limitations list from the rseq design
doc, which we can easily do now that everything is merged in one
place.

Issue: #4111
derekbruening added a commit that referenced this issue Apr 15, 2021
Adds a direct link to the rseq limitations list from the rseq design
doc, which we can easily do now that everything is merged in one
place.

Issue: #4111
AssadHashmi added a commit that referenced this issue Nov 16, 2023
The Arm Instruction Emulator home page on developer.arm.com has moved.
Link to it at https://dynamorio.org/index.html updated.

Issue: #4111
AssadHashmi added a commit that referenced this issue Nov 21, 2023
The Arm Instruction Emulator home page on developer.arm.com has moved.
Link to it at https://dynamorio.org/index.html updated.

Issue: #4111
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants