diff --git a/.github/workflows/_release.yml b/.github/workflows/_release.yml index cb20dba1089..7c1d4199af6 100644 --- a/.github/workflows/_release.yml +++ b/.github/workflows/_release.yml @@ -21,7 +21,6 @@ on: env: PYTHON_VERSION: "3.11" - POETRY_VERSION: "1.8.4" jobs: build: @@ -36,13 +35,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" + - name: Set up Python + uv + uses: "./.github/actions/uv_setup" with: python-version: ${{ env.PYTHON_VERSION }} - poetry-version: ${{ env.POETRY_VERSION }} - working-directory: ${{ inputs.working-directory }} - cache-key: release # We want to keep this build stage *separate* from the release stage, # so that there's no sharing of permissions between them. @@ -56,7 +52,7 @@ jobs: # > from the publish job. # https://github.com/pypa/gh-action-pypi-publish#non-goals - name: Build project for distribution - run: poetry build + run: uv build working-directory: ${{ inputs.working-directory }} - name: Upload build @@ -67,11 +63,18 @@ jobs: - name: Check Version id: check-version - shell: bash + shell: python working-directory: ${{ inputs.working-directory }} run: | - echo pkg-name="$(poetry version | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT - echo version="$(poetry version --short)" >> $GITHUB_OUTPUT + import os + import tomllib + with open("pyproject.toml", "rb") as f: + data = tomllib.load(f) + pkg_name = data["project"]["name"] + version = data["project"]["version"] + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + f.write(f"pkg-name={pkg_name}\n") + f.write(f"version={version}\n") release-notes: needs: - build @@ -184,13 +187,11 @@ jobs: # - The package is published, and it breaks on the missing dependency when # used in the real world. - - name: Set up Python + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" + - name: Set up Python + uv + uses: "./.github/actions/uv_setup" id: setup-python with: python-version: ${{ env.PYTHON_VERSION }} - poetry-version: ${{ env.POETRY_VERSION }} - working-directory: ${{ inputs.working-directory }} - uses: actions/download-artifact@v4 with: @@ -213,17 +214,18 @@ jobs: # - attempt install again after 5 seconds if it fails because there is # sometimes a delay in availability on test pypi run: | - poetry run pip install dist/*.whl + uv venv + uv run pip install dist/*.whl # Replace all dashes in the package name with underscores, # since that's how Python imports packages with dashes in the name. # also remove _official suffix IMPORT_NAME="$(echo "$PKG_NAME" | sed s/-/_/g | sed s/_official//g)" - poetry run python -c "import $IMPORT_NAME; print(dir($IMPORT_NAME))" + uv run python -c "import $IMPORT_NAME; print(dir($IMPORT_NAME))" - name: Import test dependencies - run: poetry install --with test --no-root + run: uv sync --group test working-directory: ${{ inputs.working-directory }} # Overwrite the local version of the package with the built version @@ -234,7 +236,7 @@ jobs: PKG_NAME: ${{ needs.build.outputs.pkg-name }} VERSION: ${{ needs.build.outputs.version }} run: | - poetry run pip install dist/*.whl + uv run pip install dist/*.whl - name: Run unit tests run: make tests @@ -243,15 +245,15 @@ jobs: - name: Check for prerelease versions working-directory: ${{ inputs.working-directory }} run: | - poetry run python $GITHUB_WORKSPACE/.github/scripts/check_prerelease_dependencies.py pyproject.toml + uv run python $GITHUB_WORKSPACE/.github/scripts/check_prerelease_dependencies.py pyproject.toml - name: Get minimum versions working-directory: ${{ inputs.working-directory }} id: min-version run: | - poetry run pip install packaging requests - python_version="$(poetry run python --version | awk '{print $2}')" - min_versions="$(poetry run python $GITHUB_WORKSPACE/.github/scripts/get_min_versions.py pyproject.toml release $python_version)" + uv run pip install packaging requests + python_version="$(uv run python --version | awk '{print $2}')" + min_versions="$(uv run python $GITHUB_WORKSPACE/.github/scripts/get_min_versions.py pyproject.toml release $python_version)" echo "min-versions=$min_versions" >> "$GITHUB_OUTPUT" echo "min-versions=$min_versions" @@ -260,12 +262,12 @@ jobs: env: MIN_VERSIONS: ${{ steps.min-version.outputs.min-versions }} run: | - poetry run pip install --force-reinstall $MIN_VERSIONS --editable . + uv run pip install --force-reinstall $MIN_VERSIONS --editable . make tests working-directory: ${{ inputs.working-directory }} - name: Import integration test dependencies - run: poetry install --with test,test_integration + run: uv sync --group test --group test_integration working-directory: ${{ inputs.working-directory }} - name: Run integration tests @@ -331,13 +333,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" + - name: Set up Python + uv + uses: "./.github/actions/uv_setup" with: python-version: ${{ env.PYTHON_VERSION }} - poetry-version: ${{ env.POETRY_VERSION }} - working-directory: ${{ inputs.working-directory }} - cache-key: release - uses: actions/download-artifact@v4 with: @@ -373,13 +372,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" + - name: Set up Python + uv + uses: "./.github/actions/uv_setup" with: python-version: ${{ env.PYTHON_VERSION }} - poetry-version: ${{ env.POETRY_VERSION }} - working-directory: ${{ inputs.working-directory }} - cache-key: release - uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/_test_release.yml b/.github/workflows/_test_release.yml index 5d70d3974e2..d1858c6bc10 100644 --- a/.github/workflows/_test_release.yml +++ b/.github/workflows/_test_release.yml @@ -14,7 +14,6 @@ on: description: "Release from a non-master branch (danger!)" env: - POETRY_VERSION: "1.8.4" PYTHON_VERSION: "3.10" jobs: @@ -29,13 +28,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" + - name: Set up Python + uv + uses: "./.github/actions/uv_setup" with: python-version: ${{ env.PYTHON_VERSION }} - poetry-version: ${{ env.POETRY_VERSION }} - working-directory: ${{ inputs.working-directory }} - cache-key: release # We want to keep this build stage *separate* from the release stage, # so that there's no sharing of permissions between them. @@ -49,7 +45,7 @@ jobs: # > from the publish job. # https://github.com/pypa/gh-action-pypi-publish#non-goals - name: Build project for distribution - run: poetry build + run: uv build working-directory: ${{ inputs.working-directory }} - name: Upload build @@ -60,11 +56,18 @@ jobs: - name: Check Version id: check-version - shell: bash + shell: python working-directory: ${{ inputs.working-directory }} run: | - echo pkg-name="$(poetry version | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT - echo version="$(poetry version --short)" >> $GITHUB_OUTPUT + import os + import tomllib + with open("pyproject.toml", "rb") as f: + data = tomllib.load(f) + pkg_name = data["project"]["name"] + version = data["project"]["version"] + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + f.write(f"pkg-name={pkg_name}\n") + f.write(f"version={version}\n") publish: needs: