diff --git a/.github/scripts/doc_release.sh b/.github/scripts/doc_release.sh
index 883a0ebc8d..1fafd6d0df 100644
--- a/.github/scripts/doc_release.sh
+++ b/.github/scripts/doc_release.sh
@@ -19,18 +19,27 @@
BUILD_DIR="doc/_build/scikit-learn-intelex"
STORAGE_BRANCH="doc_archive"
+# Parse command line arguments
+IS_DEV_MODE=false
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ --dev)
+ IS_DEV_MODE=true
+ shift
+ ;;
+ *)
+ echo "Unknown option: $1"
+ exit 1
+ ;;
+ esac
+done
+
# Check if TEMP_DOC_FOLDER is set
if [ -z "$TEMP_DOC_FOLDER" ]; then
echo "::error::TEMP_DOC_FOLDER environment variable is not set!"
exit 1
fi
-# Ensure the build directory exists
-if [ ! -d "$BUILD_DIR" ]; then
- echo "::error: Documentation build directory not found!"
- exit 1
-fi
-
rm -rf $TEMP_DOC_FOLDER
mkdir -p $TEMP_DOC_FOLDER
@@ -53,24 +62,61 @@ sync_from_branch $STORAGE_BRANCH
sync_from_branch "gh-pages"
##### Prepare new doc #####
-# Copy the new built version to $TEMP_DOC_FOLDER
-mkdir -p $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION
-cp -R doc/_build/scikit-learn-intelex/$SHORT_DOC_VERSION/* $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION/
-
-# Update latest
-rm -rf $TEMP_DOC_FOLDER/latest
-mkdir -p $TEMP_DOC_FOLDER/latest
-cp -R doc/_build/scikit-learn-intelex/$SHORT_DOC_VERSION/* $TEMP_DOC_FOLDER/latest/
+if [ "$IS_DEV_MODE" = true ]; then
+ # Dev mode: Build and update dev documentation
+ echo "Building dev documentation..."
+
+ # Ensure the build directory exists
+ if [ ! -d "$BUILD_DIR" ]; then
+ echo "::error: Documentation build directory not found!"
+ exit 1
+ fi
+
+ # Copy dev documentation from build directory
+ if [ ! -d "$BUILD_DIR/dev" ]; then
+ echo "::error: Dev documentation not found in build directory!"
+ exit 1
+ fi
+
+ rm -rf $TEMP_DOC_FOLDER/dev
+ mkdir -p $TEMP_DOC_FOLDER/dev
+ cp -R $BUILD_DIR/dev/* $TEMP_DOC_FOLDER/dev/
+else
+ # Release mode: Copy from dev to create new release version
+ echo "Creating release documentation for version $SHORT_DOC_VERSION from dev..."
+
+ if [ ! -d "$TEMP_DOC_FOLDER/dev" ]; then
+ echo "::error: Dev documentation not found! Cannot create release."
+ exit 1
+ fi
+
+ # Create versioned folder from dev
+ mkdir -p $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION
+ cp -R $TEMP_DOC_FOLDER/dev/* $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION/
+
+ # Update latest
+ rm -rf $TEMP_DOC_FOLDER/latest
+ mkdir -p $TEMP_DOC_FOLDER/latest
+ cp -R $TEMP_DOC_FOLDER/dev/* $TEMP_DOC_FOLDER/latest/
+fi
-# Copy index.html
-cp doc/_build/scikit-learn-intelex/index.html $TEMP_DOC_FOLDER/
+# Copy root index.html if it exists (only in dev mode, as release mode doesn't build)
+if [ "$IS_DEV_MODE" = true ] && [ -f "$BUILD_DIR/index.html" ]; then
+ cp $BUILD_DIR/index.html $TEMP_DOC_FOLDER/
+fi
# Generate versions.json
-mkdir -p $TEMP_DOC_FOLDER
echo "[" > $TEMP_DOC_FOLDER/versions.json
-# Add latest entry first
-echo ' {"name": "latest", "version": "'$SHORT_DOC_VERSION'", "url": "/scikit-learn-intelex/latest/"},' >> $TEMP_DOC_FOLDER/versions.json
-# Add all year.month folders
+# Add dev entry if it exists
+if [ -d "$TEMP_DOC_FOLDER/dev" ]; then
+ echo ' {"name": "dev (next release)", "version": "dev", "url": "/scikit-learn-intelex/dev/"},' >> $TEMP_DOC_FOLDER/versions.json
+fi
+# Add latest entry if it exists
+if [ -d "$TEMP_DOC_FOLDER/latest" ]; then
+ LATEST_VERSION=$(find $TEMP_DOC_FOLDER -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9].[0-9]*" | sort -rV | head -n 1 | xargs basename 2>/dev/null || echo "latest")
+ echo ' {"name": "latest", "version": "'$LATEST_VERSION'", "url": "/scikit-learn-intelex/latest/"},' >> $TEMP_DOC_FOLDER/versions.json
+fi
+# Add all versioned folders
for version in $(ls -d $TEMP_DOC_FOLDER/[0-9][0-9][0-9][0-9].[0-9]* 2>/dev/null || true); do
version=$(basename "$version")
echo ' {"name": "'$version'", "version": "'$version'", "url": "/scikit-learn-intelex/'$version'/"},'
@@ -85,42 +131,65 @@ cat $TEMP_DOC_FOLDER/versions.json
git checkout -- .github/scripts/doc_release.sh
##### Archive to doc_archive branch #####
-echo "Archiving version $SHORT_DOC_VERSION to branch $STORAGE_BRANCH..."
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
-# Check if storage branch exists
-if git ls-remote --heads origin "$STORAGE_BRANCH" | grep -q "$STORAGE_BRANCH"; then
- echo "Storage branch exists, fetching it..."
- git fetch origin $STORAGE_BRANCH
- git checkout $STORAGE_BRANCH
+if [ "$IS_DEV_MODE" = true ]; then
+ # Dev mode: Archive dev documentation
+ echo "Archiving dev documentation to branch $STORAGE_BRANCH..."
- # Add only the new version directory
- mkdir -p $SHORT_DOC_VERSION
- rsync -av $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION/ $SHORT_DOC_VERSION/
- git add $SHORT_DOC_VERSION
- git commit -m "Add documentation for version $SHORT_DOC_VERSION"
-else
- echo "Creating new storage branch with all current versions..."
- # Create an empty orphan branch
- git checkout --orphan $STORAGE_BRANCH
- git rm -rf .
-
- # Copy only version folders
- for version_dir in $(find $TEMP_DOC_FOLDER -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9].[0-9]*" 2>/dev/null); do
- version=$(basename "$version_dir")
- mkdir -p $version
- rsync -av "$version_dir/" $version/
- done
+ if git ls-remote --heads origin "$STORAGE_BRANCH" | grep -q "$STORAGE_BRANCH"; then
+ echo "Storage branch exists, updating dev documentation..."
+ git fetch origin $STORAGE_BRANCH
+ git checkout $STORAGE_BRANCH
+
+ rm -rf dev
+ mkdir -p dev
+ rsync -av $TEMP_DOC_FOLDER/dev/ dev/
+ git add dev
+ git commit -m "Update dev documentation" || echo "No changes to commit for dev"
+ else
+ echo "Creating new storage branch with dev documentation..."
+ git checkout --orphan $STORAGE_BRANCH
+ git rm -rf .
+
+ mkdir -p dev
+ rsync -av $TEMP_DOC_FOLDER/dev/ dev/
+ git add dev
+ git commit -m "Initialize doc archive branch with dev documentation"
+ fi
- # Git only add version folders
- git add -- [0-9][0-9][0-9][0-9].[0-9]*
- git commit -m "Initialize doc archive branch with all versions"
-fi
-
-# Push changes
-git push origin $STORAGE_BRANCH
+ git push origin $STORAGE_BRANCH
+ git checkout $CURRENT_BRANCH
+else
+ # Release mode: Archive versioned documentation
+ echo "Archiving version $SHORT_DOC_VERSION to branch $STORAGE_BRANCH..."
+
+ if git ls-remote --heads origin "$STORAGE_BRANCH" | grep -q "$STORAGE_BRANCH"; then
+ echo "Storage branch exists, fetching it..."
+ git fetch origin $STORAGE_BRANCH
+ git checkout $STORAGE_BRANCH
+
+ mkdir -p $SHORT_DOC_VERSION
+ rsync -av $TEMP_DOC_FOLDER/$SHORT_DOC_VERSION/ $SHORT_DOC_VERSION/
+ git add $SHORT_DOC_VERSION
+ git commit -m "Add documentation for version $SHORT_DOC_VERSION"
+ else
+ echo "Creating new storage branch..."
+ git checkout --orphan $STORAGE_BRANCH
+ git rm -rf .
+
+ for version_dir in $(find $TEMP_DOC_FOLDER -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9].[0-9]*" 2>/dev/null); do
+ version=$(basename "$version_dir")
+ mkdir -p $version
+ rsync -av "$version_dir/" $version/
+ done
+
+ git add -- [0-9][0-9][0-9][0-9].[0-9]*
+ git commit -m "Initialize doc archive branch with all versions"
+ fi
-# Return to original branch
-git checkout $CURRENT_BRANCH
\ No newline at end of file
+ git push origin $STORAGE_BRANCH
+ git checkout $CURRENT_BRANCH
+fi
\ No newline at end of file
diff --git a/.github/workflows/docs-release.yml b/.github/workflows/docs-release.yml
index 90001530a2..fee1803337 100644
--- a/.github/workflows/docs-release.yml
+++ b/.github/workflows/docs-release.yml
@@ -19,6 +19,18 @@ on:
push:
tags:
- '[0-9][0-9][0-9][0-9]\.[0-9][0-9]?\.[0-9]' # Trigger on tag pushes
+ pull_request:
+ # Trigger when PR is merged
+ types: [closed]
+ branches:
+ - main
+ paths:
+ - 'doc/**'
+ - 'sklearnex/**'
+ - 'daal4py/**'
+ - 'onedal/**'
+ - '.github/workflows/docs-release.yml'
+ - '.github/scripts/doc_release.sh'
workflow_dispatch:
inputs:
doc_version:
@@ -29,6 +41,8 @@ permissions: read-all
jobs:
build-docs:
+ # Skip if PR was closed without merging
+ if: github.event_name != 'pull_request' || github.event.pull_request.merged == true
runs-on: ubuntu-24.04
permissions:
contents: write
@@ -59,9 +73,14 @@ jobs:
if [ -n "${{ github.event.inputs.doc_version }}" ]; then
export DOC_VERSION="${{ github.event.inputs.doc_version }}"
echo "Manual dispatch detected with version: $DOC_VERSION"
- else
+ elif [ "${{ github.ref_type }}" = "tag" ]; then
export DOC_VERSION="${GITHUB_REF#refs/tags/}"
echo "Tag trigger detected with version: $DOC_VERSION"
+ else
+ echo "Push to main branch detected, building dev documentation"
+ echo "IS_DEV_BUILD=true" >> $GITHUB_ENV
+ echo "SHORT_DOC_VERSION=dev" >> $GITHUB_ENV
+ exit 0
fi
# Error out if cannot find version
if [ -z "$DOC_VERSION" ]; then
@@ -72,7 +91,9 @@ jobs:
# export env var in other files
echo "DOC_VERSION=$DOC_VERSION" >> $GITHUB_ENV
echo "SHORT_DOC_VERSION=$SHORT_DOC_VERSION" >> $GITHUB_ENV
+ echo "IS_DEV_BUILD=false" >> $GITHUB_ENV
- name: Checkout release branch
+ if: env.IS_DEV_BUILD == 'false'
run: |
if git checkout $DOC_VERSION 2>/dev/null; then
echo "Successfully checked out tag $DOC_VERSION."
@@ -87,11 +108,13 @@ jobs:
pip install -r dependencies-dev
pip install -r requirements-doc.txt
- name: Build daal4py/sklearnex
+ if: env.IS_DEV_BUILD == 'true'
run: |
export DALROOT=$(dirname $(dirname $(which python)))
export LD_LIBRARY_PATH=$(dirname $(dirname $(which python)))/lib:$LD_LIBRARY_PATH
./conda-recipe/build.sh
- name: Build scikit-learn-intelex Documentation
+ if: env.IS_DEV_BUILD == 'true'
run: |
export LD_LIBRARY_PATH=$(dirname $(dirname $(which python)))/lib:$LD_LIBRARY_PATH
cd doc
@@ -103,7 +126,11 @@ jobs:
- name: Prepare Documentation for Deployment
run: |
chmod +x .github/scripts/doc_release.sh
- ./.github/scripts/doc_release.sh
+ if [ "${{ env.IS_DEV_BUILD }}" = "true" ]; then
+ ./.github/scripts/doc_release.sh --dev
+ else
+ ./.github/scripts/doc_release.sh
+ fi
- name: Upload artifact for GitHub Pages
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
diff --git a/doc/build-doc.sh b/doc/build-doc.sh
index 14cab0555d..53ba9ec54d 100755
--- a/doc/build-doc.sh
+++ b/doc/build-doc.sh
@@ -49,7 +49,7 @@ if [[ "$*" == *"--gh-pages"* ]]; then
export SOURCEDIR=sources
sphinx-build -b html $SPHINXOPTS $SOURCEDIR $BUILDDIR/$SPHINXPROJ/$DOC_VERSION
- echo "" >> $BUILDDIR/$SPHINXPROJ/index.html
+ echo "" >> $BUILDDIR/$SPHINXPROJ/index.html
else
make html
fi