GitHub Action
Setup rez
Github Action to setup rez package system.
# Ensure there is a python interpreter first to install rez!
- uses: actions/setup-python@v1
with:
python-version: "${{ matrix.python }}"
- uses: j0yu/setup-rez@v1
# ALL below inputs are optional, these values are the default ones
with:
# GitHub repository to install rez from.
source: 'nerdvegas/rez'
# Git tag/branch/commit to use.
ref: 'master'
# Install using "python" as the Python interpreter
pythonExe: 'python'
# Create all default "rez config packages_path".
makePackagesPaths: true
# Comma separated packages to rez bind, e.g. "pip, python, os".
# To disable, just pass in an empty string "bind: ''"
# See "rez bind --list".
# Will force the creation of "rez config local_packages_path"
binds: "os, python"
For VMs, make sure you run actions/setup-python before using j0yu/setup-rez so it has access to a Python Interpreter.
name: CI
on: [push]
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v1
with:
python-version: 2.7
# Using custom rez repository and version
- uses: j0yu/setup-rez@v1
with:
source: "mottosso/bleeding-rez"
ref: "2.33.0"
# Check if rez is on PATH, check configs and rez bind packages
- run: rez --version
- run: rez config local_packages_path
- run: rez config release_packages_path
- run: rez config packages_path
- run: rez view os
- run: rez view python
# If our repository has a package.py, let's try test build/installing it
- uses: actions/checkout@v2
- run: rez build --install
If you're using container
you'll need to install Python as per the image/system instead of using actions/setup-python.
name: CI
on: [push]
jobs:
test-centos7:
name: Test CentOS 7 (${{ matrix.yum_python }})
runs-on: ubuntu-latest
container:
image: "centos:7"
strategy:
matrix:
yum_python:
- "python" # Python 2.7
- "python3" # Python 3.6
steps:
- run: yum install -y ${{ matrix.yum_python }}
- uses: j0yu/setup-rez@v1
with:
pythonExe: ${{ matrix.yum_python }}
- run: rez --version
- run: rez python -V
In this example, centos:7
uses an old glibc
and isn't compatible with
actions/setup-python. But rez
is ok with Python 2.7 and above (as recent as 2.93.0):
python
: j0yu/setup-rez will use a slightly updated Python 2.7 interpreter that's already shipped withcentos:7
.python3
: j0yu/setup-rez will run rez'sinstall.py
usingpython3
(nice coincidence) as the interpreter, instead of the defaultpython
.
Everything is done in the run
function in index.js
:
-
Get cached install for the
source
andref
input combination -
If there is no installs/tools cache install rez:
-
Downloads and extracts from
https://github.com/${source}/archive/${ref}.tar.gz
-
If
install.py
exists, install viapython install.py DEST
else, if
setup.py
exists, install viapip install --target DEST SRC
-
Store required environment variable paths to append in a
setup.json
-
-
Load and append environment variables paths from
setup.json
Typically
PATH
forrez
command,PYTHONPATH
if usedpip install --target
. -
Create any
rez config package_paths
folders if required. -
Create any
rez bind PKG...
packages if required.
Notes on install style availability:
Rez | (1st) install.py | (2nd) pip install |
---|---|---|
nerdvegas/rez | Always | 2.33.0+ |
mottosso/bleeding-rez | NEVER | Always |
Clone this repository down and modify:
-
index.js
for the inner workings and logic. -
action.yml
for input/output and action definition.- GitHub: Building actions specifically Metadata Syntax
-
.github/workflows/ci.yml
for tests.
at the humble beginnings...
I didn't want to have npm installed, so here's the Docker contained way I worked on CentOS-7. See Creating a JavaScript action.
-
Clone this repository.
-
cd
into the repository. -
Edit the
action.yml
-
Setup
npm
package using Docker container.alias npm="docker run --rm -it -v "$(pwd):$(pwd)" --user "$(id -u):$(id -g)" -w "$(pwd)" node:12 npm" npm init -y npm install @actions/core --save npm install @actions/exec --save npm install @actions/io --save npm install @actions/tool-cache --save
-
Edit the
index.js
-
Add paths required, then push:
git add --force action.yml index.js node_modules/* package.json package-lock.json README.md git commit git push