[Mod] prebuilt api docs and refactor build-env
diff --git a/Dockerfile b/Dockerfile
index 34a3ecc..8982154 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,54 +1,71 @@
-# Stage 1: Install dependencies
-FROM node:16.20.2-bullseye AS deps
+# SGX Docs stage
+FROM teaclave/teaclave-build-ubuntu-1804-sgx-2.14:latest AS sgx-docs
+WORKDIR /app
+COPY sgx-sdk-api-docs /app/sgx-sdk-api-docs
+RUN . "$HOME/.cargo/env" && cd sgx-sdk-api-docs && cargo doc
+RUN mkdir -p /prebuilt_docs && \
+ cp -r sgx-sdk-api-docs/target/doc /prebuilt_docs/sgx-sdk-docs
-# Install system dependencies
-RUN apt-get update && apt-get install -y \
- git \
- python3 \
- python3-pip \
- curl \
- build-essential \
- openssh-client \
- && rm -rf /var/lib/apt/lists/*
+# TODO: Add Trustzone Docs stage
-# Install Rust toolchain and xargo
-RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \
- . "$HOME/.cargo/env" && \
- rustup install nightly-2022-10-22 && \
- rustup default nightly-2022-10-22 && \
- cargo install xargo
-
-ENV PATH="/root/.cargo/bin:${PATH}"
-
-# Install Python dependencies including ghp-import
-RUN pip3 install grpcio-tools grpclib pdoc ghp-import
-
-# Set working directory
+# Teaclave Docs stage
+FROM teaclave/teaclave-build-ubuntu-2004-sgx-2.17.1:0.2.0 AS teaclave-docs
WORKDIR /app
-# Copy package files
-COPY site/package*.json site/
+# Prepare Teaclave Repo
+RUN git clone https://github.com/apache/incubator-teaclave.git teaclave
+RUN cd teaclave && git submodule update --init
-# Install npm dependencies
+# Build Python SDK docs
+RUN pip3 install grpcio-tools grpclib pdoc
+RUN python3 -m grpc_tools.protoc \
+ --proto_path=teaclave/services/proto/src/proto \
+ --python_out=teaclave/sdk/python \
+ --grpclib_python_out=teaclave/sdk/python \
+ teaclave/services/proto/src/proto/*.proto
+RUN PYTHONPATH=teaclave/sdk/python pdoc teaclave/sdk/python/teaclave.py -o /tmp/client-sdk-python-docs
+
+# Build Teaclave docs
+RUN . /opt/sgxsdk/environment && \
+ . /root/.cargo/env && \
+ cd teaclave && \
+ mkdir build && \
+ cd build && \
+ cmake .. && \
+ make doc -j$(nproc)
+
+# Copy all docs to prebuilt directory
+RUN mkdir -p /prebuilt_docs/teaclave-docs && \
+ cp -r /tmp/client-sdk-python-docs /prebuilt_docs/teaclave-docs/client-sdk-python && \
+ cd teaclave/release/ && \
+ cp -r ./docs/enclave /prebuilt_docs/teaclave-docs/enclave && \
+ cp -r ./docs/app /prebuilt_docs/teaclave-docs/app && \
+ cp -r ./docs/unix /prebuilt_docs/teaclave-docs/client-sdk-rust
+
+# clean up
+RUN rm -rf teaclave/build
+
+# Dependencies stage
+FROM node:16.20.2-bullseye AS deps
+WORKDIR /app
+COPY site/package*.json site/
RUN cd site && npm install
-# Stage 2: Development environment
-FROM node:16.20.2-bullseye
+# Final stage
+FROM node:16.20.2-bullseye as teaclave-docs-site
-# Copy installed dependencies from deps stage
-COPY --from=deps /root/.cargo /root/.cargo
-COPY --from=deps /usr/local/lib/python3.9/dist-packages /usr/local/lib/python3.9/dist-packages
COPY --from=deps /app/site/node_modules /app/site/node_modules
+COPY --from=sgx-docs /prebuilt_docs/sgx-sdk-docs /prebuilt_docs/sgx-sdk-docs
+COPY --from=teaclave-docs /prebuilt_docs/teaclave-docs /prebuilt_docs/teaclave-docs
-# Set up environment
ENV PATH="/root/.cargo/bin:${PATH}"
ENV PYTHONPATH="/usr/local/lib/python3.9/dist-packages:${PYTHONPATH}"
-# Set working directory
WORKDIR /app
-
-# Install VuePress globally
RUN npm install -g vuepress@1.7.1
-# Create a volume for the build output
-VOLUME ["/app/site/.vuepress/dist"]
+RUN apt-get update && apt-get install -y \
+ python3 \
+ python3-pip \
+ curl
+RUN pip3 install ghp-import
\ No newline at end of file
diff --git a/site/Makefile b/site/Makefile
index 43af6c4..7ab642a 100644
--- a/site/Makefile
+++ b/site/Makefile
@@ -8,7 +8,8 @@
init-repo:
git clone https://github.com/apache/incubator-teaclave.git teaclave
- git clone -b v2.0.0-preview https://github.com/apache/incubator-teaclave-sgx-sdk.git teaclave-sgx-sdk
+ # v2.0.0-preview branch does not have documents folder, we use master branch instead
+ git clone -b master https://github.com/apache/incubator-teaclave-sgx-sdk.git teaclave-sgx-sdk
git clone https://github.com/apache/incubator-teaclave-trustzone-sdk.git teaclave-trustzone-sdk
check-repo:
@@ -22,51 +23,44 @@
cd teaclave-sgx-sdk && git pull
cd teaclave-trustzone-sdk && git pull
-sgx-sdk-api-docs: teaclave-docs
- cd ../sgx-sdk-api-docs && cargo doc
- cp -r ../sgx-sdk-api-docs/target/doc .vuepress/dist/api-docs/sgx-sdk
- @echo "<meta http-equiv=refresh content=0;url=`echo sgx_tstd | cut -d '/' -f 2`/index.html>" > .vuepress/dist/api-docs/sgx-sdk/index.html
+sgx-sdk-api-docs: site-build
+ mkdir -p .vuepress/dist/api-docs/sgx-sdk-docs
+ cp -r /prebuilt_docs/sgx-sdk-docs/* .vuepress/dist/api-docs/sgx-sdk-docs/
+ @echo "<meta http-equiv=refresh content=0;url=`echo sgx_tstd | cut -d '/' -f 2`/index.html>" > .vuepress/dist/api-docs/sgx-sdk-docs/index.html
-trustzone-sdk-api-docs: teaclave-docs
- cd teaclave-trustzone-sdk && ./setup.sh
- bash -c "cd teaclave-trustzone-sdk && source environment && cd optee-utee && xargo doc --target aarch64-unknown-optee-trustzone --no-deps"
- bash -c "cd teaclave-trustzone-sdk && source environment && cd optee-teec && cargo doc --target aarch64-unknown-linux-gnu --no-deps"
- mkdir -p .vuepress/dist/api-docs/trustzone-sdk
- cp -r teaclave-trustzone-sdk/optee-utee/target/aarch64-unknown-optee-trustzone/doc .vuepress/dist/api-docs/trustzone-sdk/optee-utee
- cp -r teaclave-trustzone-sdk/optee-teec/target/aarch64-unknown-linux-gnu/doc .vuepress/dist/api-docs/trustzone-sdk/optee-teec
- @echo "<meta http-equiv=refresh content=0;url=`echo optee_utee | cut -d '/' -f 2`/index.html>" > .vuepress/dist/api-docs/trustzone-sdk/optee-utee/index.html
- @echo "<meta http-equiv=refresh content=0;url=`echo optee_teec | cut -d '/' -f 2`/index.html>" > .vuepress/dist/api-docs/trustzone-sdk/optee-teec/index.html
+trustzone-sdk-api-docs: site-build
+ @echo "Trustzone SDK API docs not supported yet"
-client-sdk-python-docs: teaclave-docs
- python3 -m grpc_tools.protoc --proto_path=teaclave/services/proto/src/proto --python_out=teaclave/sdk/python --grpclib_python_out=teaclave/sdk/python teaclave/services/proto/src/proto/*.proto
- PYTHONPATH=teaclave/sdk/python pdoc teaclave/sdk/python/teaclave.py -o .vuepress/dist/api-docs/client-sdk-python
+client-sdk-python-docs: site-build
+ cp -r /prebuilt_docs/teaclave-docs/client-sdk-python .vuepress/dist/api-docs/client-sdk-python
@echo "<meta http-equiv=refresh content=0;url=python/teaclave.html>" > .vuepress/dist/api-docs/client-sdk-python/index.html
-client-sdk-rust-docs: teaclave-docs
- (cd teaclave && git submodule update --init third_party/rust-sgx-sdk)
- rustup default nightly-2022-10-22
- cargo doc --no-deps --manifest-path teaclave/sdk/rust/Cargo.toml
- cp -r teaclave/sdk/rust/target/doc .vuepress/dist/api-docs/client-sdk-rust
- @rm -rf teaclave/third_party/rust-sgx-sdk
+client-sdk-rust-docs: site-build
+ cp -r /prebuilt_docs/teaclave-docs/client-sdk-rust .vuepress/dist/api-docs/client-sdk-rust
@echo "<meta http-equiv=refresh content=0;url=`echo teaclave_client_sdk | cut -d '/' -f 2`/index.html>" > .vuepress/dist/api-docs/client-sdk-rust/index.html
-crate-docs:
- cp ${TEACLAVE_TARGET_DIR}/docs/enclave .vuepress/dist/api-docs/crates-enclave -r
- cp ${TEACLAVE_TARGET_DIR}/docs/app .vuepress/dist/api-docs/crates-app -r
+teaclave-crates-docs: site-build
+ cp -r /prebuilt_docs/teaclave-docs/enclave .vuepress/dist/api-docs/crates-enclave
+ cp -r /prebuilt_docs/teaclave-docs/app .vuepress/dist/api-docs/crates-app
-teaclave-docs: update-repo
+teaclave-docs: teaclave-crates-docs client-sdk-python-docs client-sdk-rust-docs
+
+site-build: update-repo
vuepress build
-dev: update-repo
- cd teaclave-trustzone-sdk
+dev:
vuepress dev
preview:
cd .vuepress/dist && python3 -m http.server
-build: teaclave-docs sgx-sdk-api-docs trustzone-sdk-api-docs client-sdk-python-docs client-sdk-rust-docs crate-docs
+build: teaclave-docs sgx-sdk-api-docs trustzone-sdk-api-docs
cp ../.asf.yaml .vuepress/dist
-clean:
- rm -rf .vuepress/dist teaclave teaclave-sgx-sdk teaclave-trustzone-sdk
+clean-repo:
+ rm -rf teaclave
+ rm -rf teaclave-sgx-sdk
+ rm -rf teaclave-trustzone-sdk
+clean: clean-repo
+ rm -rf .vuepress/dist