name: prepare

inputs:
  python-version:
    description: "Python Version"
    required: true
    default: "3.9"
  poetry-version:
    description: "Poetry Version"
    default: "1.7.0"
  node-version:
    description: "Node Version"
    default: "18.x"
  npm:
    description: "use npm"
    default: false
    type: boolean


runs:
  using: "composite"
  steps:
    - name: Set up Python ${{ inputs.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ inputs.python-version }}
        # cache poetry install via pip
        cache: "pip"

    - name: Set up Poetry ${{ inputs.poetry-version }}
      uses: abatilo/actions-poetry@v2
      with:
        poetry-version: ${{ inputs.poetry-version }}

    - name: Setup a local virtual environment (if no poetry.toml file)
      shell: bash
      run: |
        poetry config virtualenvs.create true --local
        poetry config virtualenvs.in-project true --local

    - uses: actions/cache@v3
      name: Define a cache for the virtual environment based on the dependencies lock file
      with:
        path: ./.venv
        key: venv-${{ hashFiles('poetry.lock') }}

    - name: Install the project dependencies
      shell: bash
      run: poetry install

    - name: Use Node.js ${{ inputs.node-version }}
      if: ${{ (inputs.npm == 'true') }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ inputs.node-version }}

    - uses: actions/cache@v3
      if: ${{ (inputs.npm == 'true') }}
      name: Define a cache for the npm based on the dependencies lock file
      with:
        path: ./node_modules
        key: npm-${{ hashFiles('package-lock.json') }}

    - name: Install npm packages
      if: ${{ (inputs.npm == 'true') }}
      shell: bash
      run: npm install
