| name: 'Setup Python Environment' |
| description: 'Set up Python and install dependencies with optional configurations.' |
| inputs: |
| python-version: |
| description: 'Python version to set up. Accepts a version number, "current", or "next".' |
| required: true |
| default: 'current' |
| cache: |
| description: 'Cache dependencies. Options: pip' |
| required: false |
| default: 'pip' |
| requirements-type: |
| description: 'Type of requirements to install. Options: base, development, default' |
| required: false |
| default: 'dev' |
| install-superset: |
| description: 'Whether to install Superset itself. If false, only python is installed' |
| required: false |
| default: 'true' |
| |
| runs: |
| using: 'composite' |
| steps: |
| - name: Interpret Python Version |
| id: set-python-version |
| shell: bash |
| env: |
| INPUT_PYTHON_VERSION: ${{ inputs.python-version }} |
| run: | |
| if [ "$INPUT_PYTHON_VERSION" = "current" ]; then |
| RESOLVED_VERSION="3.11" |
| elif [ "$INPUT_PYTHON_VERSION" = "next" ]; then |
| # currently disabled in GHA matrixes because of library compatibility issues |
| RESOLVED_VERSION="3.12" |
| elif [ "$INPUT_PYTHON_VERSION" = "previous" ]; then |
| RESOLVED_VERSION="3.10" |
| elif printf '%s' "$INPUT_PYTHON_VERSION" | grep -Eq '^[0-9]+\.[0-9]+(\.[0-9]+)?$'; then |
| RESOLVED_VERSION="$INPUT_PYTHON_VERSION" |
| else |
| echo "Invalid python-version: '$INPUT_PYTHON_VERSION'" >&2 |
| exit 1 |
| fi |
| echo "python-version=$RESOLVED_VERSION" >> "$GITHUB_OUTPUT" |
| - name: Set up Python ${{ steps.set-python-version.outputs.python-version }} |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 |
| with: |
| python-version: ${{ steps.set-python-version.outputs.python-version }} |
| cache: ${{ inputs.cache }} |
| - name: Install dependencies |
| env: |
| INPUT_INSTALL_SUPERSET: ${{ inputs.install-superset }} |
| INPUT_REQUIREMENTS_TYPE: ${{ inputs.requirements-type }} |
| run: | |
| if [ "$INPUT_INSTALL_SUPERSET" = "true" ]; then |
| sudo apt-get update && sudo apt-get -y install libldap2-dev libsasl2-dev |
| |
| pip install --upgrade pip setuptools wheel uv |
| |
| if [ "$INPUT_REQUIREMENTS_TYPE" = "dev" ]; then |
| uv pip install --system -r requirements/development.txt |
| elif [ "$INPUT_REQUIREMENTS_TYPE" = "base" ]; then |
| uv pip install --system -r requirements/base.txt |
| fi |
| |
| uv pip install --system -e . |
| fi |
| shell: bash |