Skip to content

Commit

Permalink
Merge pull request #118 from nxt-dev/features/deployment_workflow
Browse files Browse the repository at this point in the history
Deployment Workflows
  • Loading branch information
ImLucasBrown authored Jun 9, 2024
2 parents 88baefd + 601d6ea commit 6c4da50
Show file tree
Hide file tree
Showing 9 changed files with 190 additions and 56 deletions.
69 changes: 69 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Release

on:
push:
branches: [release]
workflow_dispatch:
branches: [release]
workflow_call:
inputs:
QT_DEPENDENCIES:
description: 'Set to true to install Qt dependencies (Linux)'
required: false
default: 'false'
type: string

jobs:
run-tests:
uses: nxt-dev/nxt/.github/workflows/unittests.yml@release
with:
QT_DEPENDENCIES: ${{ inputs.QT_DEPENDENCIES }}
build-and-deploy-pypi:
needs: [run-tests]
runs-on: ubuntu-latest
env:
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Checkout build graph (if needed)
if: github.repository != 'nxt-dev/nxt'
uses: actions/checkout@v4
with:
repository: nxt-dev/nxt
ref: release
path: nxt
sparse-checkout: build


- name: Install Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Ensure PIP
run: python -m ensurepip --upgrade

- name: Install nxt-core (if needed)
if: github.repository != 'nxt-dev/nxt'
run: |
pip install git+https://github.com/nxt-dev/nxt.git@release
- name: Install this package and dependencies
run: |
pip install twine
pip install .
- name: Set NXT_FILE_ROOTS (if needed)
if: github.repository != 'nxt-dev/nxt'
env:
# Thepackaging graph expects nxt to be cloned next to nxt_editor
# this is not possible in GHA so we abuse the file fall backs to
# trick it into working
NXT_FILE_ROOTS: '../docs/api_docs'
run: echo "NXT_FILE_ROOTS=$NXT_FILE_ROOTS" >> $GITHUB_ENV

- name: Build package and upload
run: |
python -m nxt.cli -vv exec build/packaging.nxt -s /make_and_test_upload
91 changes: 91 additions & 0 deletions .github/workflows/unittests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Unittests

on:
workflow_dispatch:
branches-ignore: [release]
workflow_call:
inputs:
QT_DEPENDENCIES:
description: 'Set to true to install Qt dependencies (Linux)'
required: false
default: 'false'
type: string
pull_request:
branches-ignore: [release]
push:
branches-ignore: [release]

jobs:
test-python:
env:
QT_DEPENDENCIES: ${{ inputs.QT_DEPENDENCIES }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
python-version: ['3.7', '3.8', '3.9', '3.10']
fail-fast: true
runs-on: ${{ matrix.os }}

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Determine nxt-core branch to use
run: |
if [ "${{ github.ref_name }}" = "release" ]; then
echo "NXT_CORE_BRANCH=release" >> $GITHUB_ENV
else
echo "NXT_CORE_BRANCH=dev" >> $GITHUB_ENV
fi
shell: bash

- name: Install Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies (Ubuntu)
if: runner.os == 'Linux' && env.QT_DEPENDENCIES == 'true'
run: |
sudo apt-get update
sudo apt-get install -y \
libxkbcommon-x11-0 \
libxrender1 \
libxext6 \
libxcb1 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render0 \
libxcb-render-util0 \
libxcb-shape0 \
libxcb-shm0 \
libxcb-sync1 \
libxcb-xfixes0 \
libxcb-xinerama0 \
libxcb-xkb1 \
libqt5x11extras5 \
xvfb
- name: Ensure PIP
run: python -m ensurepip --upgrade

- name: Install nxt-core
if: github.repository != 'nxt-dev/nxt'
run: |
pip install git+https://github.com/nxt-dev/nxt.git@${{ env.NXT_CORE_BRANCH }}
- name: Install this package
run: pip install .

- name: Run tests with xvfb (Ubuntu + Qt)
if: runner.os == 'Linux' && env.QT_DEPENDENCIES == 'true'
run: |
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
python -m nxt.cli test
- name: Run Unittests from CLI
if: env.QT_DEPENDENCIES != 'true'
run: python -m nxt.cli test
34 changes: 0 additions & 34 deletions .travis.yml

This file was deleted.

18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,39 @@
<div align="center">

![Release Status](https://github.com/nxt-dev/nxt/actions/workflows/release.yml/badge.svg?branch=release)
![Dev Status](https://github.com/nxt-dev/nxt/actions/workflows/unittests.yml/badge.svg?branch=dev)
# NXT Python Core

</div>


**nxt** (**/ɛn·ɛks·ti/**) is a general purpose code compositor designed for rigging, scene assembly, and automation. (node execution tree)
[Installation/Usage](#installationusage) | [Docs](https://nxt-dev.github.io/) | [Contributing](CONTRIBUTING.md) | [Licensing](LICENSE)

# Installation/Usage

**This repo is the nxt core, it does not come with a UI. If you're looking for the UI, please see [the nxt editor](https://github.com/nxt-dev/nxt_editor).**
This package is designed for headless execution of graphs in a render farm or other headless environment.
Only clone this repo if you're contributing to the NXT codebase.

<br>

#### Requirements

- Python >= [2.7.*](https://www.python.org/download/releases/2.7) <= [3.7.*](https://www.python.org/download/releases/3.7)
- We strongly recommend using a Python [virtual environment](https://docs.python.org/3.7/tutorial/venv.html)

*[Requirements for contributors](CONTRIBUTING.md#python-environment)*

### NXT Python Core

Our releases are hosted on [PyPi](https://pypi.org/project/nxt-editor/).

**Install:**
`pip install nxt-core`

**Execute Graph:**

```python
import nxt
nxt.execute_graph('path/to/graph.nxt')
Expand All @@ -34,11 +45,6 @@ nxt.execute_graph('path/to/graph.nxt')
<br>

## Special Thanks
[Sunrise Productions](https://sunriseproductions.tv/) | [School of Visual Art and Design](https://www.southern.edu/visualartanddesign/)

---

| Release | Dev |
| :---: | :---: |
| [![Build Status](https://travis-ci.com/nxt-dev/nxt.svg?token=rBRbAJTv2rq1c8WVEwGs&branch=release)](https://travis-ci.com/nxt-dev/nxt) | [![Build Status](https://travis-ci.com/nxt-dev/nxt.svg?token=rBRbAJTv2rq1c8WVEwGs&branch=dev)](https://travis-ci.com/nxt-dev/nxt) |
[Sunrise Productions](https://sunriseproductions.tv/) | [School of Visual Art and Design](https://www.southern.edu/visualartanddesign/)

14 changes: 7 additions & 7 deletions build/packaging.nxt
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
"meta_data": {
"positions": {
"/make_and_test_upload": [
-223,
306
380.0,
340.0
],
"/make_and_upload": [
-221.61718055199395,
65.0
400.0,
100.0
],
"/make_package": [
-223.0,
-153.0
380.0,
-120.0
]
}
},
Expand Down Expand Up @@ -45,7 +45,7 @@
"import subprocess",
"orig_cwd = os.getcwd()",
"os.chdir('${repo_root}')",
"subprocess.call([sys.executable, '-m', 'twine' ,'upload', '--repository', 'testpypi', '${dest_dir}/*'])",
"subprocess.check_call([sys.executable, '-m', 'twine' ,'upload', '--repository', 'testpypi', '${dest_dir}/*'])",
"os.chdir(orig_cwd)"
]
},
Expand Down
11 changes: 6 additions & 5 deletions nxt/plugin_loader.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Built-in
import os
import imp
import importlib.util
import logging

# Internal
Expand All @@ -23,10 +23,11 @@ def load_plugins():
mod_name, _ = os.path.splitext(file_name)
if mod_name in _nxt_loaded_plugin_module_names:
continue
try:
found = imp.find_module(mod_name, [plugin_dir])
except ImportError:
mod_path = os.path.join(plugin_dir, file_name)
spec = importlib.util.spec_from_file_location(mod_name, mod_path)
if not spec:
continue
mod = imp.load_module(mod_name, *found)
mod = importlib.util.module_from_spec(spec)
_nxt_loaded_plugin_module_names += [mod_name]
_nxt_loaded_plugin_modules += [mod]
spec.loader.exec_module(mod)
5 changes: 3 additions & 2 deletions nxt/test/test_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import os

# Internal
from nxt.plugins.file_fallbacks import NXT_FILE_ROOTS
from nxt.plugins.file_fallbacks import NXT_FILE_ROOTS, ROOT_PATH_SEP
from nxt.session import Session
from nxt.stage import DATA_STATE

Expand Down Expand Up @@ -218,7 +218,8 @@ def test_saved(self):
print('Test in a saved file with an environment, path:: '
'resolves to first real env root')
test_root = os.path.dirname(my_dir)
os.environ[NXT_FILE_ROOTS] = 'a super fake root;' + test_root
test_roots = 'a super fake root' + ROOT_PATH_SEP + test_root
os.environ[NXT_FILE_ROOTS] = test_roots
expected = os.path.join(test_root, self.test_filename).replace(os.sep,
'/')
found = test_stage.get_node_attr_value(test_node, test_attr,
Expand Down
2 changes: 1 addition & 1 deletion nxt/test/test_stage.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ def test_inherit_attrs(self):
self.assertIs(True, hasattr(runtime_child, 'parent'))
print("Test that the local attr from the parent node is IS accessible"
"from the EDITOR child node via `self`.")
self.assertEquals(True, hasattr(self.child_node, 'parent'))
self.assertEqual(True, hasattr(self.child_node, 'parent'))
# Test that code is not inherited
print("Test that child code is NOT inherited FROM the PARENT.")
self.assertEqual(["# Code"], getattr(runtime_parent,
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
long_description_content_type="text/markdown",
url="https://github.com/nxt-dev/nxt",
packages=setuptools.find_packages(),
python_requires='>=2.7, <3.11',
python_requires='>=3.7, <3.11',
entry_points={
'console_scripts': [
'nxt=nxt.cli:main',
Expand Down

0 comments on commit 6c4da50

Please sign in to comment.