diff --git a/.github/workflows/check-python-task.yml b/.github/workflows/check-python-task.yml index 27e7ed2..3fb4b4b 100644 --- a/.github/workflows/check-python-task.yml +++ b/.github/workflows/check-python-task.yml @@ -71,12 +71,6 @@ jobs: with: python-version-file: pyproject.toml - - name: Install Poetry - run: | - pipx install \ - --python "$(which python)" \ - poetry - - name: Install Task uses: arduino/setup-task@v2 with: @@ -105,12 +99,6 @@ jobs: with: python-version-file: pyproject.toml - - name: Install Poetry - run: | - pipx install \ - --python "$(which python)" \ - poetry - - name: Install Task uses: arduino/setup-task@v2 with: diff --git a/.github/workflows/check-yaml-task.yml b/.github/workflows/check-yaml-task.yml index 7c7ecd1..c72a19e 100644 --- a/.github/workflows/check-yaml-task.yml +++ b/.github/workflows/check-yaml-task.yml @@ -99,12 +99,6 @@ jobs: with: python-version-file: pyproject.toml - - name: Install Poetry - run: | - pipx install \ - --python "$(which python)" \ - poetry - - name: Install Task uses: arduino/setup-task@v2 with: diff --git a/.github/workflows/spell-check-task.yml b/.github/workflows/spell-check-task.yml index e5c24ce..f52596c 100644 --- a/.github/workflows/spell-check-task.yml +++ b/.github/workflows/spell-check-task.yml @@ -53,12 +53,6 @@ jobs: with: python-version-file: pyproject.toml - - name: Install Poetry - run: | - pipx install \ - --python "$(which python)" \ - poetry - - name: Install Task uses: arduino/setup-task@v2 with: diff --git a/.github/workflows/test-python-poetry-task.yml b/.github/workflows/test-python-poetry-task.yml index 028e495..bca5a59 100644 --- a/.github/workflows/test-python-poetry-task.yml +++ b/.github/workflows/test-python-poetry-task.yml @@ -75,12 +75,6 @@ jobs: with: python-version-file: pyproject.toml - - name: Install Poetry - run: | - pipx install \ - --python "$(which python)" \ - poetry - - name: Install Task uses: arduino/setup-task@v2 with: diff --git a/Taskfile.yml b/Taskfile.yml index 733078d..feab92c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -381,10 +381,42 @@ tasks: -r "{{.STYLELINTRC_SCHEMA_PATH}}" \ -d "{{.PROJECT_FOLDER}}/{{.INSTANCE_PATH}}" + poetry:install: + desc: Install Poetry + run: once + vars: + PYTHON_PATH: + sh: task utility:normalize-path RAW_PATH="$(which python)" + cmds: + - | + if ! which pipx &>/dev/null; then + echo "pipx not found or not in PATH." + echo "Please install: https://pipx.pypa.io/stable/installation/#installing-pipx" + exit 1 + fi + - | + if ! which yq &>/dev/null; then + echo "yq not found or not in PATH." + echo "Please install: https://github.com/mikefarah/yq/#install" + exit 1 + fi + - | + pipx install \ + --python "{{.PYTHON_PATH}}" \ + "poetry==$( \ + yq \ + --input-format toml \ + --output-format yaml \ + '.tool.poetry.group.pipx.dependencies.poetry' \ + < pyproject.toml + )" + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/poetry-task/Taskfile.yml poetry:install-deps: desc: Install dependencies managed by Poetry run: when_changed + deps: + - task: poetry:install cmds: - | poetry install \ diff --git a/action.yml b/action.yml index 26fba2e..17c1e8a 100644 --- a/action.yml +++ b/action.yml @@ -87,7 +87,13 @@ runs: # Install Poetry. pipx install \ --python "$(which python)" \ - poetry==1.4.0 + "poetry==$( \ + yq \ + --input-format toml \ + --output-format yaml \ + '.tool.poetry.group.pipx.dependencies.poetry' \ + < pyproject.toml + )" # Install Python dependencies. poetry install \ diff --git a/pyproject.toml b/pyproject.toml index 50c5c29..5ea9ab3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,14 @@ optional = true [tool.poetry.group.external.dependencies] pyserial = "3.5" +# The dependencies in this group are installed using pipx; NOT Poetry. The use of a `poetry` section is a hack required +# in order to be able to manage updates of these dependencies via Dependabot, as used for all other dependencies. +[tool.poetry.group.pipx] +optional = true + +[tool.poetry.group.pipx.dependencies] +poetry = "1.4.0" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"