From 2002520d0b69ecdd469cf6447c8de5a57edcb7d5 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Wed, 22 Jul 2020 16:55:50 -0700 Subject: [PATCH] Moved CI documentation to its own page. --- README.md | 1 + docs/ci-integration.md | 96 +++++++++++++++++++++++++++++++++++++++++ docs/getting-started.md | 94 ---------------------------------------- 3 files changed, 97 insertions(+), 94 deletions(-) create mode 100644 docs/ci-integration.md diff --git a/README.md b/README.md index c8826ab72..bad5cf835 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ Installing both Pyright and Pylance at the same time is not recommended. If both ## Documentation * [Getting Started with Type Checking](/docs/getting-started.md) +* [Continuous Integration (CI)](/docs/ci-integration.md) * [Command-line Options](/docs/command-line.md) * [Configuration](/docs/configuration.md) * [Settings](/docs/settings.md) diff --git a/docs/ci-integration.md b/docs/ci-integration.md new file mode 100644 index 000000000..1591ecfbb --- /dev/null +++ b/docs/ci-integration.md @@ -0,0 +1,96 @@ +## Integrating Pyright into Continuous Integration (CI) + +### Running Pyright as a git hook + +You can configure pyright to run as a git hook (e.g. prior to each check-in) by using the following hook definition: +``` +- repo: local + hooks: + - id: pyright + name: pyright + entry: pyright + language: node + pass_filenames: false + types: [python] + additional_dependencies: ['pyright@1.1.55'] +``` + +### Running Pyright from a CI script + +Alternatively, you can run pyright from a bash script. Here's a script that installs the latest version of pyright and runs it. + +``` +#!/bin/bash +PATH_TO_PYRIGHT=`which pyright` + +vercomp () { + if [[ $1 == $2 ]] + then + return 0 + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + return 2 + fi + done + return 0 +} + +# Node version check +echo "Checking node version..." +NODE_VERSION=`node -v | cut -d'v' -f2` +MIN_NODE_VERSION="10.15.2" +vercomp $MIN_NODE_VERSION $NODE_VERSION +# 1 == gt +if [[ $? -eq 1 ]]; then + echo "Node version ${NODE_VERSION} too old, min expected is ${MIN_NODE_VERSION}, run:" + echo " npm -g upgrade node" + exit -1 +fi + +# Do we need to sudo? +echo "Checking node_modules dir..." +NODE_MODULES=`npm -g root` +SUDO="sudo" +if [ -w "$NODE_MODULES" ]; then + SUDO="" #nop +fi + +# If we can't find pyright, install it. +echo "Checking pyright exists..." +if [ -z "$PATH_TO_PYRIGHT" ]; then + echo "...installing pyright" + ${SUDO} npm install -g pyright +else + # already installed, upgrade to make sure it's current + # this avoids a sudo on launch if we're already current + echo "Checking pyright version..." + CURRENT=`pyright --version | cut -d' ' -f2` + REMOTE=`npm info pyright version` + if [ "$CURRENT" != "$REMOTE" ]; then + echo "...new version of pyright found, upgrading." + ${SUDO} npm upgrade -g pyright + fi +fi + +echo "done." +pyright -w +``` diff --git a/docs/getting-started.md b/docs/getting-started.md index bd9eade96..f4e3a6087 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -16,97 +16,3 @@ Here is a typical progression: 11. Optionally add entire subdirectories to the `strict` config entry to indicate that all files within those subdirectories should be strictly typed. -### Running Pyright as a git hook - -You can configure pyright to run as a git hook (e.g. prior to each check-in) by using the following hook definition: -``` -- repo: local - hooks: - - id: pyright - name: pyright - entry: pyright - language: node - pass_filenames: false - types: [python] - additional_dependencies: ['pyright@1.1.55'] -``` - -### Running Pyright from a Continuous Integration (CI) script - -Alternatively, you can run pyright from a bash script. Here's a script that installs the latest version of pyright and runs it. - -``` -#!/bin/bash -PATH_TO_PYRIGHT=`which pyright` - -vercomp () { - if [[ $1 == $2 ]] - then - return 0 - fi - local IFS=. - local i ver1=($1) ver2=($2) - # fill empty fields in ver1 with zeros - for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) - do - ver1[i]=0 - done - for ((i=0; i<${#ver1[@]}; i++)) - do - if [[ -z ${ver2[i]} ]] - then - # fill empty fields in ver2 with zeros - ver2[i]=0 - fi - if ((10#${ver1[i]} > 10#${ver2[i]})) - then - return 1 - fi - if ((10#${ver1[i]} < 10#${ver2[i]})) - then - return 2 - fi - done - return 0 -} - -# Node version check -echo "Checking node version..." -NODE_VERSION=`node -v | cut -d'v' -f2` -MIN_NODE_VERSION="10.15.2" -vercomp $MIN_NODE_VERSION $NODE_VERSION -# 1 == gt -if [[ $? -eq 1 ]]; then - echo "Node version ${NODE_VERSION} too old, min expected is ${MIN_NODE_VERSION}, run:" - echo " npm -g upgrade node" - exit -1 -fi - -# Do we need to sudo? -echo "Checking node_modules dir..." -NODE_MODULES=`npm -g root` -SUDO="sudo" -if [ -w "$NODE_MODULES" ]; then - SUDO="" #nop -fi - -# If we can't find pyright, install it. -echo "Checking pyright exists..." -if [ -z "$PATH_TO_PYRIGHT" ]; then - echo "...installing pyright" - ${SUDO} npm install -g pyright -else - # already installed, upgrade to make sure it's current - # this avoids a sudo on launch if we're already current - echo "Checking pyright version..." - CURRENT=`pyright --version | cut -d' ' -f2` - REMOTE=`npm info pyright version` - if [ "$CURRENT" != "$REMOTE" ]; then - echo "...new version of pyright found, upgrading." - ${SUDO} npm upgrade -g pyright - fi -fi - -echo "done." -pyright -w -```