Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 121 additions & 52 deletions .github/scripts/doc_release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -53,24 +62,61 @@
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/

Check warning on line 83 in .github/scripts/doc_release.sh

View check run for this annotation

codefactor.io / CodeFactor

.github/scripts/doc_release.sh#L83

Use "${var:?}" to ensure this never expands to /dev . (SC2115)
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'/"},'
Expand All @@ -85,42 +131,65 @@
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
git push origin $STORAGE_BRANCH
git checkout $CURRENT_BRANCH
fi
31 changes: 29 additions & 2 deletions .github/workflows/docs-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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."
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion doc/build-doc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ if [[ "$*" == *"--gh-pages"* ]]; then
export SOURCEDIR=sources

sphinx-build -b html $SPHINXOPTS $SOURCEDIR $BUILDDIR/$SPHINXPROJ/$DOC_VERSION
echo "<meta http-equiv=\"refresh\" content=\"0; URL='/$SPHINXPROJ/$DOC_VERSION/'\" / >" >> $BUILDDIR/$SPHINXPROJ/index.html
echo "<meta http-equiv=\"refresh\" content=\"0; URL='/$SPHINXPROJ/latest/'\" / >" >> $BUILDDIR/$SPHINXPROJ/index.html
else
make html
fi
Expand Down
Loading