Skip to content

j0yu/setup-rez

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

CI

setup-rez

Github Action to setup rez package system.

Usage

# 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"

Example

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

Containers

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 with centos:7.
  • python3: j0yu/setup-rez will run rez's install.py using python3 (nice coincidence) as the interpreter, instead of the default python.

How it works

Everything is done in the run function in index.js:

  1. Get cached install for the source and ref input combination

  2. If there is no installs/tools cache install rez:

    1. Downloads and extracts from https://github.com/${source}/archive/${ref}.tar.gz

    2. If install.py exists, install via python install.py DEST

      else, if setup.py exists, install via pip install --target DEST SRC

    3. Store required environment variable paths to append in a setup.json

  3. Load and append environment variables paths from setup.json

    Typically PATH for rez command, PYTHONPATH if used pip install --target.

  4. Create any rez config package_paths folders if required.

  5. 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

Developing

Clone this repository down and modify:

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.

  1. Clone this repository.

  2. cd into the repository.

  3. Edit the action.yml

  4. 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
  5. Edit the index.js

  6. 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