Loading files
---
name: Setup OpenSCAD
description: >
Install system dependencies, OpenSCAD, and libraries with caching.
Requires ubuntu runners.
inputs:
scadm-version:
description: Pinned scadm PyPI version. Takes precedence over scadm-requirements.
required: false
default: ''
scadm-requirements:
description: >
Path to a requirements.txt containing a pinned scadm version (e.g. scadm==0.6.3).
Used when scadm-version is not set.
required: false
default: ''
scadm-source:
description: >
Local path to install scadm from (editable install).
When set, overrides both scadm-version and scadm-requirements.
required: false
runs:
using: composite
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.14'
- name: Install system dependencies
shell: bash
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends xvfb libglu1-mesa libfuse2 libegl1 libxcb-cursor0
- name: Resolve scadm version
id: resolve-scadm
shell: bash
run: |
if [[ -n "${{ inputs.scadm-source }}" ]]; then
echo "version=source" >> "$GITHUB_OUTPUT"
elif [[ -n "${{ inputs.scadm-version }}" ]]; then
echo "version=${{ inputs.scadm-version }}" >> "$GITHUB_OUTPUT"
elif [[ -n "${{ inputs.scadm-requirements }}" ]]; then
if [[ ! -f "${{ inputs.scadm-requirements }}" ]]; then
echo "::error::scadm-requirements file not found: ${{ inputs.scadm-requirements }}"
exit 1
fi
version=$(sed -n 's/^[[:space:]]*scadm==\([^[:space:]#]*\).*/\1/p' "${{ inputs.scadm-requirements }}")
if [[ -z "$version" ]]; then
echo "::error::scadm not found in ${{ inputs.scadm-requirements }}"
exit 1
fi
if [[ $(echo "$version" | wc -l) -ne 1 ]]; then
echo "::error::Multiple scadm entries found in ${{ inputs.scadm-requirements }}"
exit 1
fi
echo "version=$version" >> "$GITHUB_OUTPUT"
else
echo "::error::One of scadm-version, scadm-requirements, or scadm-source must be provided"
exit 1
fi
- name: Cache OpenSCAD and libraries
uses: actions/cache@v5
with:
path: bin/openscad
key: openscad-${{ runner.os }}-${{ steps.resolve-scadm.outputs.version }}-${{ hashFiles('scadm.json') }}
- name: Install OpenSCAD and dependencies
shell: bash
run: |
if [[ -n "${{ inputs.scadm-source }}" ]]; then
pip install -e "${{ inputs.scadm-source }}"
else
pip install scadm==${{ steps.resolve-scadm.outputs.version }}
fi
scadm install
988743a91This file is pinned to the selected release. Download the original to open it in your design tool.