diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 00000000000..4509cd55f6b --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,61 @@ +name: Deploy site +on: + workflow_dispatch: + push: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +permissions: + id-token: write + contents: read + +jobs: + build: + name: Build (and deploy) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3.1.0 + with: + fetch-depth: 0 + + # this step uses the `.ruby-version` file + - uses: ruby/setup-ruby@v1 + + - name: Build Jekyll Site + run: | + bundle install + bundle exec jekyll build + + - uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ vars.AWS_ROLE_ARN }} + aws-region: ${{ vars.AWS_REGION }} + role-duration-seconds: 7200 # 2h + + - name: Fetch doc files from S3 + run: ci/download_from_s3.sh + + - name: Post-process docs + run: ci/post-process.sh + + - name: Deploy site + env: + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_API_TOKEN }} + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_DOCS_SITE_ID }} + run: | + npm install --global --force @aschmidt8/netlify-cli + + ARGS="" + if [ "$GITHUB_REF_NAME" = "main" ]; then + ARGS="--prod" + fi + netlify deploy "$ARGS" \ + --dir=_site diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 00000000000..be94e6f53db --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.2.2 diff --git a/CNAME b/CNAME deleted file mode 100644 index c598ca02faa..00000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.rapids.ai \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 61e3f4beda6..62d5512711b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,24 +9,6 @@ ## Development -> **Note:** Jekyll will throw an error if you try to serve the project with symlinks enabled. -To temporarily remove symlinks, run `./update_symlinks.sh rm` from the project's root directory. Make sure not to commit the removed symlinks. Re-add them with `./update_symlinks.sh 17`, where `17` is the latest nightly version number. - -### Preferred - Excluding API docs - -Given the size of the API docs the following config file setup will greatly -speed up renderings: - -``` -bundle exec jekyll serve --config _config_ignore_api.yml -``` - -### Alternative - Including API docs - -The folder `api/` has a lot of files and can cause the initial and subsequent -renderings to take 30 seconds or more. Running the following command will -include the API docs which can be necessary for debugging purposes: - ``` bundle exec jekyll serve ``` diff --git a/Gemfile b/Gemfile index 56de16dec44..8197051a907 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' gem 'github-pages', group: :jekyll_plugins -gem "just-the-docs" +gem "just-the-docs", "= 0.3.3" gem "webrick", "~> 1.8" diff --git a/Gemfile.lock b/Gemfile.lock index a386175e2e2..1a68e4acce0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,12 @@ GEM remote: https://rubygems.org/ specs: - activesupport (6.0.6.1) + activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.8.1) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) coffee-script (2.4.1) coffee-script-source @@ -15,9 +14,9 @@ GEM coffee-script-source (1.11.1) colorator (1.1.0) commonmarker (0.23.9) - concurrent-ruby (1.2.0) - dnsruby (1.61.9) - simpleidn (~> 0.1) + concurrent-ruby (1.2.2) + dnsruby (1.70.0) + simpleidn (~> 0.2.1) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -25,19 +24,19 @@ GEM ffi (>= 1.15.0) eventmachine (1.2.7) execjs (2.8.1) - faraday (2.7.1) + faraday (2.7.4) faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) ffi (1.15.5) forwardable-extended (2.6.0) gemoji (3.0.1) - github-pages (227) + github-pages (228) github-pages-health-check (= 1.17.9) - jekyll (= 3.9.2) + jekyll (= 3.9.3) jekyll-avatar (= 0.7.0) jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.2.0) + jekyll-commonmark-ghpages (= 0.4.0) jekyll-default-layout (= 0.1.4) jekyll-feed (= 0.15.1) jekyll-gist (= 1.5.0) @@ -71,7 +70,7 @@ GEM jemoji (= 0.12.0) kramdown (= 2.3.2) kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.3) + liquid (= 4.0.4) mercenary (~> 0.3) minima (= 2.5.1) nokogiri (>= 1.13.6, < 2.0) @@ -87,13 +86,13 @@ GEM activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) - i18n (0.9.5) + i18n (1.12.0) concurrent-ruby (~> 1.0) - jekyll (3.9.2) + jekyll (3.9.3) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (~> 0.7) + i18n (>= 0.7, < 2) jekyll-sass-converter (~> 1.0) jekyll-watch (~> 2.0) kramdown (>= 1.17, < 3) @@ -109,11 +108,11 @@ GEM coffee-script-source (~> 1.11.1) jekyll-commonmark (1.4.0) commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.2.0) - commonmarker (~> 0.23.4) + jekyll-commonmark-ghpages (0.4.0) + commonmarker (~> 0.23.7) jekyll (~> 3.9.0) jekyll-commonmark (~> 1.4.0) - rouge (>= 2.0, < 4.0) + rouge (>= 2.0, < 5.0) jekyll-default-layout (0.1.4) jekyll (~> 3.0) jekyll-feed (0.15.1) @@ -205,21 +204,17 @@ GEM rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.1) + liquid (4.0.4) + listen (3.8.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.8.0) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.17.0) - nokogiri (1.13.10) - mini_portile2 (~> 2.8.0) - racc (~> 1.4) - nokogiri (1.13.10-x86_64-linux) + minitest (5.18.0) + nokogiri (1.14.3-x86_64-linux) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) @@ -227,7 +222,7 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (4.0.7) - racc (1.6.1) + racc (1.6.2) rake (13.0.6) rb-fsevent (0.11.2) rb-inotify (0.10.1) @@ -249,26 +244,23 @@ GEM unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (1.2.11) - thread_safe (~> 0.1) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) unf (0.1.4) unf_ext unf_ext (0.0.8.2) unicode-display_width (1.8.0) webrick (1.8.1) - zeitwerk (2.6.7) PLATFORMS - ruby x86_64-linux DEPENDENCIES github-pages - just-the-docs + just-the-docs (= 0.3.3) webrick (~> 1.8) BUNDLED WITH - 2.2.17 + 2.4.10 diff --git a/_config.yml b/_config.yml index 8eee5729c15..8420b4b2ab6 100644 --- a/_config.yml +++ b/_config.yml @@ -12,10 +12,7 @@ exclude: - CONTRIBUTING.md - README.md - release_checklist.md - - customization/ - - update_symlinks.sh - - _config_ignore_api.yml - - rm_old_docs.sh + - ci/ include: - _sources - _static diff --git a/_config_ignore_api.yml b/_config_ignore_api.yml deleted file mode 100644 index 1e0c6edcd1c..00000000000 --- a/_config_ignore_api.yml +++ /dev/null @@ -1,57 +0,0 @@ -# theme used -remote_theme: pmarsceill/just-the-docs -#theme: just-the-docs - -title: RAPIDS Docs -description: RAPIDS demo, process, and technical documentation. -baseurl: "/" # the subpath of your site, e.g. /blog -url: "https://docs.rapids.ai" - -permalink: pretty -exclude: - - CONTRIBUTING.md - - README.md - - release_checklist.md - - customization/ - - update_symlinks.sh - - _config_ignore_api.yml - - api/ - - rm_old_docs.sh -include: - - _sources - - _static - - _images - - _sphinx_javascript_frameworks_compat.js - -collections: - notices: - output: true - -aux_links: - "View Docs on GitHub": - - "https://github.com/rapidsai/docs" - -nav_external_links: - - title: Deployment Guides - url: /deployment/stable/ - -social: - twitter: - name: Twitter - username: rapidsai - url: https://twitter.com/rapidsai - fa-icon-class: fab fa-twitter - slack: - name: Slack - url: https://join.slack.com/t/rapids-goai/shared_invite/zt-trnsul8g-Sblci8dk6dIoEeGpoFcFOQ - fa-icon-class: fab fa-slack - stack-overflow: - name: Stack Overflow - url: https://stackoverflow.com/tags/rapids - fa-icon-class: fab fa-stack-overflow - -plugins: - - jekyll-redirect-from - -# Enable or disable the site search -search_enabled: true diff --git a/_data/docs.yml b/_data/docs.yml index 26db5c842e2..5218cbd8d0f 100644 --- a/_data/docs.yml +++ b/_data/docs.yml @@ -88,7 +88,7 @@ apis: versions: # enable or disable links; 0 = disabled, 1 = enabled legacy: 1 - stable: 0 + stable: 1 nightly: 0 cucim: name: cuCIM diff --git a/customization/README.md b/ci/customization/README.md similarity index 100% rename from customization/README.md rename to ci/customization/README.md diff --git a/customization/customize_doc.py b/ci/customization/customize_doc.py similarity index 99% rename from customization/customize_doc.py rename to ci/customization/customize_doc.py index 9a73dbf98d9..1e26aac3542 100755 --- a/customization/customize_doc.py +++ b/ci/customization/customize_doc.py @@ -10,7 +10,7 @@ FILEPATH = sys.argv[1] LIB_MAP_PATH = os.path.join(os.path.dirname(__file__), "lib_map.json") -RELEASES_PATH = os.path.join(os.path.dirname(__file__), "../", "_data", "releases.json") +RELEASES_PATH = os.path.join(os.path.dirname(__file__), "../", "../", "_data", "releases.json") with open(LIB_MAP_PATH) as fp: LIB_PATH_DICT = json.load(fp) diff --git a/customization/customize_docs_in_folder.sh b/ci/customization/customize_docs_in_folder.sh similarity index 98% rename from customization/customize_docs_in_folder.sh rename to ci/customization/customize_docs_in_folder.sh index 23fb0e18fdf..98d8c21a6e7 100755 --- a/customization/customize_docs_in_folder.sh +++ b/ci/customization/customize_docs_in_folder.sh @@ -44,6 +44,7 @@ for FILE in $(grep "${JTD_SEARCH_TERM}\|${DOXYGEN_SEARCH_TERM}\|${PYDATA_SEARCH_ --exclude-dir=nightly \ --exclude-dir=latest \ --exclude-dir=legacy \ + --exclude-dir=cudf-java \ ${FOLDER_TO_CUSTOMIZE} ); do python ${SCRIPT_SRC_FOLDER}/customize_doc.py $(realpath ${FILE}) echo "" # line break for readability diff --git a/customization/lib_map.sh b/ci/customization/lib_map.sh similarity index 88% rename from customization/lib_map.sh rename to ci/customization/lib_map.sh index e7c01b5e615..0f965c4beff 100755 --- a/customization/lib_map.sh +++ b/ci/customization/lib_map.sh @@ -13,13 +13,13 @@ # "nightly": "/cuspatial/en/nightly/api.html", # "legacy": null # }, ...} -set -e +set -euo pipefail SCRIPT_SRC_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" # directory where this script is located PROJ_ROOT=$(pwd) FOLDER_MAP="{}" -for FOLDER in api/*/ ; do +for FOLDER in _site/api/*/ ; do LIB=$(basename ${FOLDER}) # remove api/ & trailing slash from folder DEFAULT_PATH=${LIB} @@ -35,14 +35,14 @@ for FOLDER in api/*/ ; do if [ -d "${VERSION}" ]; then DEFAULT_PATH+="/${VERSION}" - if [[ "${LIB}" =~ ^(librmm|libnvstrings)$ ]]; then - DEFAULT_PATH+="/annotated.html" + if [[ "${LIB}" = librmm ]]; then + DEFAULT_PATH+="/annotated/" elif [ "${LIB}" = libcudf ]; then - DEFAULT_PATH+="/namespacecudf.html" + DEFAULT_PATH+="/namespacecudf/" elif [ "${LIB}" = cudf ]; then - DEFAULT_PATH+="/index.html" + DEFAULT_PATH+="/" elif [ -f "${VERSION}/api.html" ]; then DEFAULT_PATH+="/api.html" diff --git a/customization/requirements.txt b/ci/customization/requirements.txt similarity index 100% rename from customization/requirements.txt rename to ci/customization/requirements.txt diff --git a/ci/download_from_s3.sh b/ci/download_from_s3.sh new file mode 100755 index 00000000000..43507897887 --- /dev/null +++ b/ci/download_from_s3.sh @@ -0,0 +1,112 @@ +#!/bin/bash +# Copies the RAPIDS libraries' HTML files from S3 into the "_site" directory of +# the Jekyll build. +set -euo pipefail + +export JEKYLL_DIR="_site" + +export GENERATED_DIRS=" +libs: ${JEKYLL_DIR}/api +deployment: ${JEKYLL_DIR}/deployment +" +export DOCS_BUCKET="rapidsai-docs" + +# Checks that the "_site" directory exists from a Jekyll build. Also ensures +# that the directories that are pulled from S3 aren't already present in the +# "_site" directory since that could cause problems. +check_dirs() { + local DIR + + if [ ! -d "${JEKYLL_DIR}" ]; then + echo "\"${JEKYLL_DIR}\" directory does not exist." + echo "Build Jekyll site first." + exit 1 + fi + + + for DIR in $(yq -n 'env(GENERATED_DIRS) | .[]'); do + if [ -d "${DIR}" ]; then + echo "The \"${DIR}\" directory is populated at deploy time and should not already exist." + echo "Ensure the \"${DIR}\" directory is not generated by Jekyll." + exit 1 + fi + done +} + +# Helper function for the `aws cp` command. Checks to ensure that the source +# directory has contents before attempting the copy. +aws_cp() { + local SRC DST + + SRC=$1 + DST=$2 + + if ! aws s3 ls "${SRC}" > /dev/null; then + echo "No files found in ${SRC}. Exiting." + exit 1 + fi + + echo "Copying ${SRC} to ${DST}" + aws s3 cp \ + --only-show-errors \ + --recursive \ + "${SRC}" \ + "${DST}" +} + +# Downloads the RAPIDS libraries' documentation files from S3 and places them +# into the "_site/api" folder. The versions that should be copied are read from +# "_data/releases.json" and the libraries that should be copied are read from +# "_data/docs.yml". +download_lib_docs() { + local DST PROJECT PROJECT_MAP \ + SRC VERSION_MAP VERSION_NAME \ + VERSION_NUMBER + + VERSION_MAP=$( + jq '{ + "legacy": .legacy.version, + "stable": .stable.version, + "nightly": .nightly.version + }' _data/releases.json + ) + export VERSION_MAP + + PROJECT_MAP=$(yq '.apis + .libs' _data/docs.yml) + export PROJECT_MAP + + + for VERSION_NAME in $(jq -nr 'env.VERSION_MAP | fromjson | keys | .[]'); do + for PROJECT in $(yq -n 'env(PROJECT_MAP) | keys | .[]'); do + export VERSION_NAME PROJECT + VERSION_NUMBER=$(jq -nr 'env.VERSION_MAP | fromjson | .[env.VERSION_NAME]') + + if yq -en 'env(PROJECT_MAP) | .[strenv(PROJECT)].versions.[strenv(VERSION_NAME)] == 0' > /dev/null 2>&1; then + echo "skipping: $PROJECT | $VERSION_NAME | $VERSION_NUMBER" + continue + fi + + SRC="s3://${DOCS_BUCKET}/${PROJECT}/${VERSION_NUMBER}/html/" + DST="$(yq -n 'env(GENERATED_DIRS)|.libs')/${PROJECT}/${VERSION_NUMBER}/" + + aws_cp "${SRC}" "${DST}" + done + done +} + +# Downloads the deployment docs from S3 and places them in the +# "_site/deployment" directory. +download_deployment_docs() { + local DST SRC VERSION + + for VERSION in nightly stable; do + SRC="s3://${DOCS_BUCKET}/deployment/${VERSION}/html/" + DST="$(yq -n 'env(GENERATED_DIRS)|.deployment')/${VERSION}/" + + aws_cp "${SRC}" "${DST}" + done +} + +check_dirs +download_lib_docs +download_deployment_docs diff --git a/ci/post-process.sh b/ci/post-process.sh new file mode 100755 index 00000000000..46d02d8c359 --- /dev/null +++ b/ci/post-process.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -euo pipefail + +CURRENT_DIR=$(dirname $(realpath $0)) + +pip install -r "${CURRENT_DIR}/customization/requirements.txt" + +"${CURRENT_DIR}"/update_symlinks.sh + +"${CURRENT_DIR}"/customization/lib_map.sh + +"${CURRENT_DIR}"/customization/customize_docs_in_folder.sh "_site/api" diff --git a/update_symlinks.sh b/ci/update_symlinks.sh similarity index 62% rename from update_symlinks.sh rename to ci/update_symlinks.sh index a6f1025f7dc..c0448a4149b 100755 --- a/update_symlinks.sh +++ b/ci/update_symlinks.sh @@ -2,29 +2,9 @@ ####################################### # Updates or removes all symlinked folders based on the given positional parameter ####################################### -set -eEo pipefail +set -euEo pipefail -display_usage() { - echo "Usage:" - echo " - update_symlinks # updates symlinks to match versions in _data/releases.json" - echo " - update_symlinks rm # removes all current symlinks" -} - -# If there is more than one argument, or if there is one argument that's not "rm" -# then show usage info and exit. -if [[ $# -eq "1" && "$1" != "rm" ]] || [[ $# -gt 1 ]]; then - display_usage - exit 1 -fi - -PROJ_ROOT=$(dirname $(realpath $0)) - -echo "Removing existing symlinks..." -find ${PROJ_ROOT} -type l -ls -delete > /dev/null - -if [[ "$1" == "rm" ]]; then - exit 0 -fi +PROJ_ROOT=$(realpath "$(dirname $(realpath $0))/../") STABLE_FOLDER=$( cat "${PROJ_ROOT}/_data/releases.json" | jq -r '.stable.version') LEGACY_FOLDER=$( cat "${PROJ_ROOT}/_data/releases.json" | jq -r '.legacy.version') @@ -32,7 +12,7 @@ NIGHTLY_FOLDER=$( cat "${PROJ_ROOT}/_data/releases.json" | jq -r '.nightly.versi echo "Updating symlinks..." echo "" -for FOLDER in api/*/ ; do +for FOLDER in _site/api/*/ ; do cd ${FOLDER} echo "" diff --git a/index.md b/index.md index b2aac676f70..3de8e3766b3 100644 --- a/index.md +++ b/index.md @@ -21,7 +21,7 @@ This site serves to unify the documentation for RAPIDS. Whether you're new to RA [ API Documentation]({% link api.md %}){: .btn.fs-4 .mb-4 .mb-md-04 .mr-2 } [ Visualization Guide]({% link visualization/visualization.md %}){: .btn.fs-4 .mb-4 .mb-md-4 .mr-2 }
-[ Deployment Guides]({% link deployment/stable/index.html %}){: .btn.fs-4 .mb-4 .mb-md-4 .mr-2 } +[ Deployment Guides](/deployment/stable/){: .btn.fs-4 .mb-4 .mb-md-4 .mr-2 } [ Maintainer Documentation]({% link maintainers/maintainers.md %}){: .btn.fs-4 .mb-4 .mb-md-4 .mr-2 }
[ RAPIDS Notices]({% link notices/notices.md %}){: .btn.fs-4 .mb-4 .mb-md-4 .mr-2 } diff --git a/release_checklist.md b/release_checklist.md index 78789948f93..fce6052c44e 100644 --- a/release_checklist.md +++ b/release_checklist.md @@ -5,18 +5,3 @@ On release day, the following changes need to be made to the site: - **Update [\_data/releases.json](_data/releases.json)**: Update versions, dates - **Update [\_data/docs.yml](_data/docs.yml)**: Verify legacy/stable/nightly versions are enabled/disabled appropriately - **Update [releases/schedule.md](releases/schedule.md)**: Update release schedule -- **Remove old docs** - Use [rm_old_docs.sh](/rm_old_docs.sh) script to remove previous legacy docs -- **Update symlinks and re-customize docs**: - - First, run `pip install customization/requirements.txt` - - Run codeblock below (from project's root directory) to update all symlinks and re-customize docs to reflect new RAPIDS versions. - -```sh -update_symlinks.sh # ensures symlink accuracy - -customization/lib_map.sh # generates a JSON file needed by customize_docs.py - -customization/customize_docs_in_folder.sh api/ - -``` - -- **Tag Commit** - After the release PR is merged, tag the commit so it appears on the release page - https://github.com/rapidsai/docs/releases diff --git a/rm_old_docs.sh b/rm_old_docs.sh deleted file mode 100755 index 1904780d68d..00000000000 --- a/rm_old_docs.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -set -e - -if [ "$#" -ne 1 ]; then - echo "A script to help delete old versions of RAPIDS docs" - echo "Example:" - echo " rm_old_versions.sh 21.06" - exit 1 -fi - -VERSION=$1 - -for FOLDER in api/*/ ; do - rm -rf "${FOLDER}${VERSION}" -done diff --git a/user-guide/user-guide.md b/user-guide/user-guide.md index 2943d2ffd53..926ccb4cd41 100644 --- a/user-guide/user-guide.md +++ b/user-guide/user-guide.md @@ -29,32 +29,32 @@ A repository with example notebooks and "getting started" code samples to help y {: .mb-8 } -### Tools and Guides for [RAPIDS Deployment]({% link /deployment/stable/index.html %}){: target="_blank"} +### Tools and Guides for [RAPIDS Deployment](/deployment/stable/){: target="_blank"} Deployment documentation to get you up and running with RAPIDS in AWS, GCP, Azure, IBM and more. Also includes guides for HPC, HPO, Kubernetes, Dask, and more. {: .mb-8 } ### ETL and Dataframe Processing with [cuDF](https://github.com/rapidsai/cudf){: target="_blank"} -Start with the [10 Minutes to cuDF and Dask-cuDF User Guide]({% link /api/cudf/stable/user_guide/10min.html %}){: target="_blank"}. Modeled after 10 Minutes to Pandas, this is a short introduction to cuDF that is geared mainly for new users. The [cuDF User Guide]({% link api/cudf/stable/user_guide/index.html %}){: target="_blank"} is generally very extensive and helpful. +Start with the [10 Minutes to cuDF and Dask-cuDF User Guide](/api/cudf/stable/user_guide/10min/){: target="_blank"}. Modeled after 10 Minutes to Pandas, this is a short introduction to cuDF that is geared mainly for new users. The [cuDF User Guide](/api/cudf/stable/user_guide/index/){: target="_blank"} is generally very extensive and helpful. {: .mb-8 } ### Accelerated Machine Learning with [cuML](https://github.com/rapidsai/cuml){: target="_blank"} -Start with the [User Guide]({% link api/cuml/stable/user_guide.html %}){: target="_blank"} and the [Estimator Intro](https://github.com/rapidsai/cuml/blob/branch-{{ site.data.releases.stable.version }}/docs/source/estimator_intro.ipynb){: target="_blank"}, showcasing basic machine learning for training and evaluating machine learning models in cuML. The [Intro and key concepts for cuML]({% link api/cuml/stable/cuml_intro.html %}) is helpful as well. +Start with the [User Guide](/api/cuml/stable/user_guide/){: target="_blank"} and the [Estimator Intro](https://github.com/rapidsai/cuml/blob/branch-{{ site.data.releases.stable.version }}/docs/source/estimator_intro.ipynb){: target="_blank"}, showcasing basic machine learning for training and evaluating machine learning models in cuML. The [Intro and key concepts for cuML](/api/cuml/stable/cuml_intro/) is helpful as well. {: .mb-8 } ### Graph Analytics with [cuGraph](https://github.com/rapidsai/cugraph){: target="_blank"} -Start with the [Easy Path]({% link api/cugraph/stable/basics/nx_transition.html %}#easy-path-use-networkx-graph-objects-accelerated-algorithms ){: target="_blank"} to use NetworkX graph objects with accelerated algorithms. There is also general [cuGraph Introduction]({% link api/cugraph/stable/basics/cugraph_intro.html %}){: target="_blank"}. +Start with the [Easy Path](/api/cugraph/stable/basics/nx_transition/#easy-path-use-networkx-graph-objects-accelerated-algorithms){: target="_blank"} to use NetworkX graph objects with accelerated algorithms. There is also general [cuGraph Introduction](/api/cugraph/stable/basics/cugraph_intro/){: target="_blank"}. {: .mb-8 } ### Spatial Analytics with [cuSpatial](https://github.com/rapidsai/cuspatial){: target="_blank"} -Start with the [cuSpatial User Guide]({% link api/cuspatial/stable/user_guide/cuspatial_api_examples.html %}){: target="_blank"} for an intro to GPU Accelerated Spatial Analytics. The [demo notebooks](https://github.com/rapidsai/cuspatial/tree/branch-{{ site.data.releases.stable.version }}/python/cuspatial/demos) are also a good showcase. +Start with the [cuSpatial User Guide](/api/cuspatial/stable/user_guide/cuspatial_api_examples/){: target="_blank"} for an intro to GPU Accelerated Spatial Analytics. The [demo notebooks](https://github.com/rapidsai/cuspatial/tree/branch-{{ site.data.releases.stable.version }}/python/cuspatial/demos) are also a good showcase. {: .mb-8 } ### Accelerated Cross-filtered Dashboards with [cuxfilter](https://github.com/rapidsai/cuxfilter) -Start with [10 Minutes to Cuxfilter]({% link api/cuxfilter/stable/10_minutes_to_cuxfilter.html %}){: target="_blank"} to get an overview of how to quickly create a dashboard and [the examples section]({% link api/cuxfilter/stable/examples/examples.html %}){: target="_blank"} for real dataset examples. +Start with [10 Minutes to Cuxfilter](/api/cuxfilter/stable/10_minutes_to_cuxfilter/){: target="_blank"} to get an overview of how to quickly create a dashboard and [the examples section](/api/cuxfilter/stable/examples/examples/){: target="_blank"} for real dataset examples. {: .mb-8 } @@ -69,12 +69,12 @@ Start with the [Welcome Notebook](https://github.com/rapidsai/cucim/blob/branch- ### Algorithms and Primitives for Scientific Computing, Data Science and Machine Learning with [RAFT](https://github.com/rapidsai/raft){: target="_blank"} -Start with the [Quick Start]({% link api/raft/stable/quick_start.html %}){: target="_blank"} guide for simple python and C++ examples. +Start with the [Quick Start](/api/raft/stable/quick_start/){: target="_blank"} guide for simple python and C++ examples. {: .mb-8 } ### Cyber Security Analytic Workflows with [CLX](https://github.com/rapidsai/clx){: target="_blank"} -Start with [10 Minutes to CLX]({% link api/clx/stable/10min-clx.html %}){: target="_blank"} for an guide to accelerated cyber security log analytics as well as the [introduction]({% link api/clx/stable/intro-clx-predictive-maintenance.html %}#Introduction){: target="_blank"}. +Start with [10 Minutes to CLX](/api/clx/stable/10min-clx/){: target="_blank"} for an guide to accelerated cyber security log analytics as well as the [introduction](/api/clx/stable/intro-clx-predictive-maintenance/#Introduction){: target="_blank"}. {: .mb-8 }