mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
⚗️ add ruff workflow and code-spell pre-commit
This commit is contained in:
parent
511650ef0b
commit
f6e8465dca
6 changed files with 344 additions and 9 deletions
24
.github/workflows/pr_linting.yml
vendored
Normal file
24
.github/workflows/pr_linting.yml
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
name: 📇 Code Linting
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ develop ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ develop ]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number}}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linting:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: chartboost/ruff-action@v1
|
||||||
|
|
@ -10,3 +10,18 @@ repos:
|
||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
- id: no-commit-to-branch
|
- id: no-commit-to-branch
|
||||||
args: [ '--pattern', '^(?!((release|enhancement|feature|bugfix|documentation|tests|local|chore)\/[a-zA-Z0-9\-_]+)$).*' ]
|
args: [ '--pattern', '^(?!((release|enhancement|feature|bugfix|documentation|tests|local|chore)\/[a-zA-Z0-9\-_]+)$).*' ]
|
||||||
|
- repo: https://github.com/codespell-project/codespell
|
||||||
|
rev: v2.2.6
|
||||||
|
hooks:
|
||||||
|
- id: codespell
|
||||||
|
additional_dependencies:
|
||||||
|
- tomli
|
||||||
|
|
||||||
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
|
# Ruff version.
|
||||||
|
rev: v0.3.3
|
||||||
|
hooks:
|
||||||
|
# Run the linter.
|
||||||
|
- id: ruff
|
||||||
|
# Run the formatter.
|
||||||
|
# - id: ruff-format
|
||||||
|
|
|
||||||
0
poetry.toml
Normal file
0
poetry.toml
Normal file
105
pyproject.toml
Normal file
105
pyproject.toml
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "ayon-core"
|
||||||
|
version = "0.3.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Ynput Team <team@ynput.io>"]
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = ">=3.9.1,<3.10"
|
||||||
|
aiohttp_json_rpc = "*" # TVPaint server
|
||||||
|
aiohttp-middlewares = "^2.0.0"
|
||||||
|
wsrpc_aiohttp = "^3.1.1" # websocket server
|
||||||
|
Click = "^8"
|
||||||
|
clique = "1.6.*"
|
||||||
|
jsonschema = "^4"
|
||||||
|
pyblish-base = "^1.8.11"
|
||||||
|
pynput = "^1.7.2" # Timers manager - TODO remove
|
||||||
|
speedcopy = "^2.1"
|
||||||
|
six = "^1.15"
|
||||||
|
qtawesome = "0.7.3"
|
||||||
|
|
||||||
|
|
||||||
|
[tool.poetry.dev-dependencies]
|
||||||
|
pytest = "^8.0"
|
||||||
|
pytest-print = "^1.0"
|
||||||
|
ayon-python-api = "^1.0"
|
||||||
|
arrow = "^1.3.0"
|
||||||
|
ruff = "^0.2.2"
|
||||||
|
|
||||||
|
|
||||||
|
[tool.ruff]
|
||||||
|
# Exclude a variety of commonly ignored directories.
|
||||||
|
exclude = [
|
||||||
|
".bzr",
|
||||||
|
".direnv",
|
||||||
|
".eggs",
|
||||||
|
".git",
|
||||||
|
".git-rewrite",
|
||||||
|
".hg",
|
||||||
|
".ipynb_checkpoints",
|
||||||
|
".mypy_cache",
|
||||||
|
".nox",
|
||||||
|
".pants.d",
|
||||||
|
".pyenv",
|
||||||
|
".pytest_cache",
|
||||||
|
".pytype",
|
||||||
|
".ruff_cache",
|
||||||
|
".svn",
|
||||||
|
".tox",
|
||||||
|
".venv",
|
||||||
|
".vscode",
|
||||||
|
"__pypackages__",
|
||||||
|
"_build",
|
||||||
|
"buck-out",
|
||||||
|
"build",
|
||||||
|
"dist",
|
||||||
|
"node_modules",
|
||||||
|
"site-packages",
|
||||||
|
"venv",
|
||||||
|
"vendor",
|
||||||
|
"generated",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Same as Black.
|
||||||
|
line-length = 79
|
||||||
|
indent-width = 4
|
||||||
|
|
||||||
|
# Assume Python 3.8
|
||||||
|
target-version = "py39"
|
||||||
|
|
||||||
|
[tool.ruff.lint]
|
||||||
|
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
|
||||||
|
select = ["E4", "E7", "E9", "F"]
|
||||||
|
ignore = []
|
||||||
|
|
||||||
|
# Allow fix for all enabled rules (when `--fix`) is provided.
|
||||||
|
fixable = ["ALL"]
|
||||||
|
unfixable = []
|
||||||
|
|
||||||
|
# Allow unused variables when underscore-prefixed.
|
||||||
|
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
||||||
|
|
||||||
|
[tool.ruff.format]
|
||||||
|
# Like Black, use double quotes for strings.
|
||||||
|
quote-style = "double"
|
||||||
|
|
||||||
|
# Like Black, indent with spaces, rather than tabs.
|
||||||
|
indent-style = "space"
|
||||||
|
|
||||||
|
# Like Black, respect magic trailing commas.
|
||||||
|
skip-magic-trailing-comma = false
|
||||||
|
|
||||||
|
# Like Black, automatically detect the appropriate line ending.
|
||||||
|
line-ending = "auto"
|
||||||
|
|
||||||
|
[tool.codespell]
|
||||||
|
# Ignore words that are not in the dictionary.
|
||||||
|
ignore-words-list = "ayon,ynput"
|
||||||
|
skip = "./.*,./package/*"
|
||||||
|
count = true
|
||||||
|
quiet-level = 3
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
||||||
67
scripts/setup_env.ps1
Normal file
67
scripts/setup_env.ps1
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
$current_dir = Get-Location
|
||||||
|
$script_dir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
$repo_root = (Get-Item $script_dir).parent.FullName
|
||||||
|
& git submodule update --init --recursive
|
||||||
|
|
||||||
|
|
||||||
|
function Exit-WithCode($exitcode) {
|
||||||
|
# Only exit this host process if it's a child of another PowerShell parent process...
|
||||||
|
$parentPID = (Get-CimInstance -ClassName Win32_Process -Filter "ProcessId=$PID" | Select-Object -Property ParentProcessId).ParentProcessId
|
||||||
|
$parentProcName = (Get-CimInstance -ClassName Win32_Process -Filter "ProcessId=$parentPID" | Select-Object -Property Name).Name
|
||||||
|
if ('powershell.exe' -eq $parentProcName) { $host.SetShouldExit($exitcode) }
|
||||||
|
|
||||||
|
exit $exitcode
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Install-Poetry() {
|
||||||
|
Write-Host ">>> Installing Poetry ... "
|
||||||
|
$python = "python"
|
||||||
|
if (Get-Command "pyenv" -ErrorAction SilentlyContinue) {
|
||||||
|
if (-not (Test-Path -PathType Leaf -Path "$($repo_root)\.python-version")) {
|
||||||
|
$result = & pyenv global
|
||||||
|
if ($result -eq "no global version configured") {
|
||||||
|
Write-Host "!!! Using pyenv but having no local or global version of Python set." -Color Red, Yellow
|
||||||
|
Exit-WithCode 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$python = & pyenv which python
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$env:POETRY_HOME="$repo_root\.poetry"
|
||||||
|
(Invoke-WebRequest -Uri https://install.python-poetry.org/ -UseBasicParsing).Content | & $($python) -
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host ">>> Reading Poetry ... " -NoNewline
|
||||||
|
if (-not (Test-Path -PathType Container -Path "$($env:POETRY_HOME)\bin")) {
|
||||||
|
Write-Host "NOT FOUND"
|
||||||
|
Install-Poetry
|
||||||
|
Write-Host "INSTALLED"
|
||||||
|
} else {
|
||||||
|
Write-Host "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path -PathType Leaf -Path "$($repo_root)\poetry.lock")) {
|
||||||
|
Write-Host ">>> Installing virtual environment and creating lock."
|
||||||
|
} else {
|
||||||
|
Write-Host ">>> Installing virtual environment from lock."
|
||||||
|
}
|
||||||
|
$startTime = [int][double]::Parse((Get-Date -UFormat %s))
|
||||||
|
& "$env:POETRY_HOME\bin\poetry" install --no-root $poetry_verbosity --ansi
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "!!! ", "Poetry command failed."
|
||||||
|
Set-Location -Path $current_dir
|
||||||
|
Exit-WithCode 1
|
||||||
|
}
|
||||||
|
Write-Host ">>> Installing pre-commit hooks ..."
|
||||||
|
& "$env:POETRY_HOME\bin\poetry" run pre-commit install
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "!!! Installation of pre-commit hooks failed."
|
||||||
|
Set-Location -Path $current_dir
|
||||||
|
Exit-WithCode 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$endTime = [int][double]::Parse((Get-Date -UFormat %s))
|
||||||
|
Set-Location -Path $current_dir
|
||||||
|
Write-Host ">>> Done in $( $endTime - $startTime ) secs."
|
||||||
124
scripts/setup_env.sh
Normal file
124
scripts/setup_env.sh
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
# Colors for terminal
|
||||||
|
|
||||||
|
RST='\033[0m' # Text Reset
|
||||||
|
|
||||||
|
# Regular Colors
|
||||||
|
Black='\033[0;30m' # Black
|
||||||
|
Red='\033[0;31m' # Red
|
||||||
|
Green='\033[0;32m' # Green
|
||||||
|
Yellow='\033[0;33m' # Yellow
|
||||||
|
Blue='\033[0;34m' # Blue
|
||||||
|
Purple='\033[0;35m' # Purple
|
||||||
|
Cyan='\033[0;36m' # Cyan
|
||||||
|
White='\033[0;37m' # White
|
||||||
|
|
||||||
|
# Bold
|
||||||
|
BBlack='\033[1;30m' # Black
|
||||||
|
BRed='\033[1;31m' # Red
|
||||||
|
BGreen='\033[1;32m' # Green
|
||||||
|
BYellow='\033[1;33m' # Yellow
|
||||||
|
BBlue='\033[1;34m' # Blue
|
||||||
|
BPurple='\033[1;35m' # Purple
|
||||||
|
BCyan='\033[1;36m' # Cyan
|
||||||
|
BWhite='\033[1;37m' # White
|
||||||
|
|
||||||
|
# Bold High Intensity
|
||||||
|
BIBlack='\033[1;90m' # Black
|
||||||
|
BIRed='\033[1;91m' # Red
|
||||||
|
BIGreen='\033[1;92m' # Green
|
||||||
|
BIYellow='\033[1;93m' # Yellow
|
||||||
|
BIBlue='\033[1;94m' # Blue
|
||||||
|
BIPurple='\033[1;95m' # Purple
|
||||||
|
BICyan='\033[1;96m' # Cyan
|
||||||
|
BIWhite='\033[1;97m' # White
|
||||||
|
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Detect required version of python
|
||||||
|
# Globals:
|
||||||
|
# colors
|
||||||
|
# PYTHON
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Returns:
|
||||||
|
# None
|
||||||
|
###############################################################################
|
||||||
|
detect_python () {
|
||||||
|
echo -e "${BIGreen}>>>${RST} Using python \c"
|
||||||
|
command -v python >/dev/null 2>&1 || { echo -e "${BIRed}- NOT FOUND${RST} ${BIYellow}You need Python 3.9 installed to continue.${RST}"; return 1; }
|
||||||
|
local version_command="import sys;print('{0}.{1}'.format(sys.version_info[0], sys.version_info[1]))"
|
||||||
|
local python_version="$(python <<< ${version_command})"
|
||||||
|
oIFS="$IFS"
|
||||||
|
IFS=.
|
||||||
|
set -- $python_version
|
||||||
|
IFS="$oIFS"
|
||||||
|
if [ "$1" -ge "3" ] && [ "$2" -ge "9" ] ; then
|
||||||
|
if [ "$2" -gt "9" ] ; then
|
||||||
|
echo -e "${BIWhite}[${RST} ${BIRed}$1.$2 ${BIWhite}]${RST} - ${BIRed}FAILED${RST} ${BIYellow}Version is new and unsupported, use${RST} ${BIPurple}3.9.x${RST}"; return 1;
|
||||||
|
else
|
||||||
|
echo -e "${BIWhite}[${RST} ${BIGreen}$1.$2${RST} ${BIWhite}]${RST}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
command -v python >/dev/null 2>&1 || { echo -e "${BIRed}$1.$2$ - ${BIRed}FAILED${RST} ${BIYellow}Version is old and unsupported${RST}"; return 1; }
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_poetry () {
|
||||||
|
echo -e "${BIGreen}>>>${RST} Installing Poetry ..."
|
||||||
|
export POETRY_HOME="$repo_root/.poetry"
|
||||||
|
command -v curl >/dev/null 2>&1 || { echo -e "${BIRed}!!!${RST}${BIYellow} Missing ${RST}${BIBlue}curl${BIYellow} command.${RST}"; return 1; }
|
||||||
|
curl -sSL https://install.python-poetry.org/ | python -
|
||||||
|
}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Return absolute path
|
||||||
|
# Globals:
|
||||||
|
# None
|
||||||
|
# Arguments:
|
||||||
|
# Path to resolve
|
||||||
|
# Returns:
|
||||||
|
# None
|
||||||
|
###############################################################################
|
||||||
|
realpath () {
|
||||||
|
echo $(cd $(dirname "$1"); pwd)/$(basename "$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
main () {
|
||||||
|
detect_python || return 1
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
repo_root=$(realpath $(dirname $(dirname "${BASH_SOURCE[0]}")))
|
||||||
|
|
||||||
|
if [[ -z $POETRY_HOME ]]; then
|
||||||
|
export POETRY_HOME="$repo_root/.poetry"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd "$repo_root" > /dev/null || return > /dev/null
|
||||||
|
|
||||||
|
echo -e "${BIGreen}>>>${RST} Reading Poetry ... \c"
|
||||||
|
if [ -f "$POETRY_HOME/bin/poetry" ]; then
|
||||||
|
echo -e "${BIGreen}OK${RST}"
|
||||||
|
else
|
||||||
|
echo -e "${BIYellow}NOT FOUND${RST}"
|
||||||
|
install_poetry || { echo -e "${BIRed}!!!${RST} Poetry installation failed"; return 1; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$repo_root/poetry.lock" ]; then
|
||||||
|
echo -e "${BIGreen}>>>${RST} Updating dependencies ..."
|
||||||
|
else
|
||||||
|
echo -e "${BIGreen}>>>${RST} Installing dependencies ..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$POETRY_HOME/bin/poetry" install --no-root $poetry_verbosity || { echo -e "${BIRed}!!!${RST} Poetry environment installation failed"; return 1; }
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
echo -e "${BIRed}!!!${RST} Virtual environment creation failed."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${BIGreen}>>>${RST} Installing pre-commit hooks ..."
|
||||||
|
"$POETRY_HOME/bin/poetry" run pre-commit install
|
||||||
|
}
|
||||||
|
|
||||||
|
return_code=0
|
||||||
|
main || return_code=$?
|
||||||
|
exit $return_code
|
||||||
Loading…
Add table
Add a link
Reference in a new issue