Skip to content

Commit 43abdae

Browse files
authored
Add docs (#16)
* Add docs * Fetch doxygen css files directly from GH repo * Add link for LICENSE
1 parent 3890925 commit 43abdae

File tree

8 files changed

+3081
-1
lines changed

8 files changed

+3081
-1
lines changed

.github/workflows/docs.yaml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: doxygen-docs
2+
on: [push, pull_request]
3+
4+
defaults:
5+
run:
6+
shell: bash -e -l {0}
7+
jobs:
8+
build_docs:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- name: Checkout repository
13+
uses: actions/checkout@v4
14+
15+
- name: Set conda environment
16+
uses: mamba-org/setup-micromamba@main
17+
with:
18+
environment-name: myenv
19+
environment-file: environment-dev.yml
20+
init-shell: bash
21+
cache-downloads: true
22+
23+
- name: Configure using CMake
24+
run: cmake -G Ninja -Bbuild -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DBUILD_DOCS=ON
25+
26+
- name: Build docs target
27+
run: cmake --build build --target docs
28+
29+
- name: Upload Pages artifact
30+
uses: actions/upload-pages-artifact@v3
31+
with:
32+
path: build/docs/html
33+
34+
35+
deploy:
36+
# only run on main branch
37+
if: github.ref == 'refs/heads/main' && github.repository == 'QuantStack/sparrow-ipc'
38+
39+
# Add a dependency to the build job
40+
needs: build_docs
41+
42+
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
43+
permissions:
44+
contents: read # to read the Pages artifact
45+
pages: write # to deploy to Pages
46+
id-token: write # to verify the deployment originates from an appropriate source
47+
48+
# Deploy to the github-pages environment
49+
environment:
50+
name: github-pages
51+
url: ${{ steps.deployment.outputs.page_url }}
52+
53+
# Specify runner + deployment step
54+
runs-on: ubuntu-latest
55+
steps:
56+
- name: Deploy to GitHub Pages
57+
id: deployment
58+
uses: actions/deploy-pages@v4 # or specific "vX.X.X" version tag for this action

CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ endif()
4444
OPTION(SPARROW_IPC_BUILD_TESTS "Build sparrow-ipc test suite" OFF)
4545
MESSAGE(STATUS "🔧 Build tests: ${SPARROW_IPC_BUILD_TESTS}")
4646

47+
OPTION(BUILD_DOCS "Build sparrow-ipc documentation" OFF)
48+
MESSAGE(STATUS "🔧 Build docs: ${BUILD_DOCS}")
49+
4750
set(SPARROW_IPC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
4851
set(SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
4952

@@ -153,8 +156,17 @@ target_link_libraries(sparrow-ipc
153156

154157
add_dependencies(sparrow-ipc generate_flatbuffers_headers)
155158

159+
# Tests
160+
# =====
156161
if(SPARROW_IPC_BUILD_TESTS)
157162
message(STATUS "🧪 Create tests targets")
158163
enable_testing()
159164
add_subdirectory(tests)
160165
endif()
166+
167+
# Docs
168+
# ====
169+
if(BUILD_DOCS)
170+
message(STATUS "📚 Create docs targets")
171+
add_subdirectory(docs)
172+
endif()

conanfile.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@ class SparrowIPCRecipe(ConanFile):
1818
topics = ("arrow", "apache arrow", "columnar format", "dataframe", "ipc", "serialization", "deserialization", "flatbuffers")
1919
package_type = "library"
2020
settings = "os", "arch", "compiler", "build_type"
21-
exports_sources = "include/*", "src/*", "cmake/*", "CMakeLists.txt", "LICENSE"
21+
exports_sources = "include/*", "src/*", "cmake/*", "docs/*", "CMakeLists.txt", "LICENSE"
2222
options = {
2323
"shared": [True, False],
2424
"fPIC": [True, False],
2525
"build_tests": [True, False],
26+
"generate_documentation": [True, False],
2627
}
2728
default_options = {
2829
"shared": False,
2930
"fPIC": True,
3031
"build_tests": False,
32+
"generate_documentation": False,
3133
}
3234

3335
_flatbuffers_version = "24.12.23"
@@ -48,6 +50,8 @@ def requirements(self):
4850

4951
def build_requirements(self):
5052
self.tool_requires("cmake/[>=3.28.1 <4.2.0]")
53+
if self.options.get_safe("generate_documentation"):
54+
self.tool_requires("doxygen/[>=1.9.4 <2.0.0]", options={"enable_app": "True"})
5155
self.tool_requires(f"flatbuffers/{self._flatbuffers_version}")
5256

5357
@property
@@ -84,6 +88,7 @@ def generate(self):
8488
tc = CMakeToolchain(self)
8589
tc.variables["SPARROW_IPC_BUILD_SHARED"] = self.options.shared
8690
tc.variables["SPARROW_IPC_BUILD_TESTS"] = self.options.build_tests
91+
tc.variables["BUILD_DOCS"] = self.options.generate_documentation
8792
tc.generate()
8893

8994
def build(self):

docs/CMakeLists.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
find_package(Doxygen REQUIRED)
2+
3+
set(DOXYGEN_AWESOME_DIR ${CMAKE_CURRENT_BINARY_DIR}/doxygen-awesome-css)
4+
file(MAKE_DIRECTORY ${DOXYGEN_AWESOME_DIR})
5+
6+
set(BASE_URL "https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v2.3.4")
7+
8+
set(FILES_TO_DOWNLOAD
9+
LICENSE
10+
doxygen-awesome-darkmode-toggle.js
11+
doxygen-awesome-fragment-copy-button.js
12+
doxygen-awesome-interactive-toc.js
13+
doxygen-awesome-paragraph-link.js
14+
doxygen-awesome-sidebar-only-darkmode-toggle.css
15+
doxygen-awesome-sidebar-only.css
16+
doxygen-awesome-tabs.js
17+
doxygen-awesome.css
18+
)
19+
20+
foreach(FILE ${FILES_TO_DOWNLOAD})
21+
if(NOT EXISTS ${DOXYGEN_AWESOME_DIR}/${FILE})
22+
message(STATUS "Downloading ${FILE}")
23+
file(DOWNLOAD ${BASE_URL}/${FILE} ${DOXYGEN_AWESOME_DIR}/${FILE} STATUS status)
24+
endif()
25+
endforeach()
26+
27+
set(DOXYGEN_AWESOME_CSS_PATH "${DOXYGEN_AWESOME_DIR}/doxygen-awesome.css")
28+
29+
# Configure the doxygen.in file
30+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
31+
32+
# Add a target to generate API documentation with Doxygen
33+
add_custom_target(docs
34+
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
35+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
36+
COMMENT "Generating API documentation with Doxygen"
37+
VERBATIM
38+
)
39+
40+
# Add install capabilities
41+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)

0 commit comments

Comments
 (0)