Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Install Poetry with Github Actions, poetry command not found. Cannot add Poetry into Path

I'm learning the basics of Github Actions for CICD. I use Poetry for Dependencies Managements. But I keep throwing poetry: command not found. If I run source $HOME/.poetry/env in every step (which opens new shell with my limited knowledge), It works. I tried to modify the .bashrc with cat $HOME/.poetry/env >> ~/.bashrc, but It doesn't work.

Here is my Yaml file, thanks ^^

name: Django CI
on:
  push:
    branches:
      - master
      - develop
  pull_request:
    branches:
      # - develop
      - master

jobs:
  Unit tests:
    runs-on: ubuntu-latest
    strategy: # Strategy
      max-parallel: 4
      matrix:
        python-version: [3.8]
    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_DB: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_USER: postgres
        ports:
          - 5432:5432
    steps:
      - name: Checkout Github repo
        uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install Dependencies
        run: |
          curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
          source $HOME/.poetry/env
          cat $HOME/.poetry/env >> ~/.bashrc
          poetry install
          echo "OK"
      - name: Run unit tests
        run: |
          # If I run "source $HOME/.poetry/env", It works
          poetry run python manage.py test

like image 774
Khai Hoan Pham Avatar asked Oct 25 '25 17:10

Khai Hoan Pham


2 Answers

You better use this action to install Poetry and setup the venv.

Here is what I use in my projects. It includes caching of the complete venv. The cache is invalidated by a different Python version and/or a modification in poetry.lock.

    - name: Install and configure Poetry
      uses: snok/install-poetry@v1
      with:
        version: 1.1.13
        virtualenvs-create: true
        virtualenvs-in-project: true
    - name: Set up cache
      uses: actions/cache@v2
      id: cached-poetry-dependencies
      with:
        path: .venv
        key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }}
    - name: Install dependencies
      run: poetry install
      if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
like image 122
abey Avatar answered Oct 27 '25 06:10

abey


Note that, from this thread:

Github Actions invoke bash scripts in non-interactive mode, it will not load .bashrc by default.

Only /etc/bashrc or /etc/bash.bashrc would be sourced (you have some other alternatives).

Or you need to source it explicitly:

source $HOME/.poetry/env
like image 38
VonC Avatar answered Oct 27 '25 08:10

VonC