4
votes

I currently use the script below to build my package and publish it to a private Azure Artifacts feed. In every script, I have to run the line source $HOME/.poetry/env or it cannot find the poetry command.

Is there a way to remove this repetition?

Full script:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

strategy:
  matrix:
    Python38:
      python.version: '3.8'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '$(python.version)'
  displayName: 'Use Python $(python.version)'

- script: |
    sudo apt-get install texlive texlive-latex-extra latexmk
    python -m pip install --upgrade pip
    python -m pip install keyring artifacts-keyring
    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
    source $HOME/.poetry/env
    poetry install
  displayName: 'Install package and tools'

- script: |
    source $HOME/.poetry/env
    poetry run python -m isort -rc
    poetry run python -m black -l 79 .
  displayName: 'Format code'

- script: |
    source $HOME/.poetry/env
    poetry run python -m flake8
    poetry run python -m bandit -r ini=.bandit .
    poetry run python -m mypy --config-file=mypy.ini src/preppy/ tests/ docs/
  displayName: 'Lint code'

- script: |
    source $HOME/.poetry/env
    poetry run python -m pytest tests/
  displayName: 'Test code'

- script: |
    source $HOME/.poetry/env
    poetry run make clean
    poetry run make latexpdf
  workingDirectory: docs
  displayName: 'Build documentation'

- script: |
    source $HOME/.poetry/env
    poetry build
  displayName: 'Create package'

- script: |
    source $HOME/.poetry/env
    poetry config repositories.azure https://pkgs.dev.azure.com/MY_USERNAME/preppy/_packaging/builds/pypi/upload
    poetry publish -r azure --username=$(pipelines-token) --password=$(pipelines-token)
    exit 0
  displayName: 'Publish artifact'
1
Hi @multipitch Did you check below solution and set Poetry's bin folder in system PATH of the agent? How did it go?Levi Lu-MSFT

1 Answers

3
votes

source $HOME/.poetry/env only applies for current shell. You need to set Poetry's bin directory ($HOME/.poetry/bin) in the system PATH of the agent.

Please add echo "##vso[task.setvariable variable=PATH]${PATH}:$HOME/.poetry/bin" in your first script task to set path $HOME/.poetry/bin to system PATH variable. Then you wont need to add source $HOME/.poetry/env in the following script tasks any more. Please check below example.

echo "##vso[task.setvariable...."will only take effect in the following tasks.

So you still need to use "source $HOME/.poetry/env" in the first script task.

Please check Set variables in scripts for more information.

- script: |
    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

    #below script will only take effect in the following tasks. 
    #So you still need to use "source $HOME/.poetry/env" in the first script task.

    echo "##vso[task.setvariable variable=PATH]${PATH}:$HOME/.poetry/bin" 
    source $HOME/.poetry/env

    poetry install
  displayName: 'Install package and tools'

- script: |
    poetry --version
  condition: always()