From 60d8d8a935c6592b75a96bcb91db9d27c9c4525e Mon Sep 17 00:00:00 2001 From: hmoazam Date: Wed, 18 Dec 2024 12:06:20 +0000 Subject: [PATCH 1/4] testing --- .github/workflows/build_and_release.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index bc3e8b284c..059c3d98a2 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -23,19 +23,21 @@ jobs: name: pypi permissions: id-token: write # IMPORTANT: mandatory for trusted publishing + contents: write steps: - uses: actions/checkout@v4 - name: Set up Python 3.9 uses: actions/setup-python@v3 with: python-version: "3.9" + ref: ${{ github.head_ref }} - name: Install dependencies run: python3 -m pip install setuptools wheel twine semver packaging - name: Get correct version for TestPyPI release id: check_version run: | VERSION=${{ needs.extract-tag.outputs.version }} - PACKAGE_NAME="dspy-ai-test" + PACKAGE_NAME="dspy-ai-test-hmoazam" echo "Checking if $VERSION for $PACKAGE_NAME exists on TestPyPI" NEW_VERSION=$(python3 .github/workflows/build_utils/test_version.py $PACKAGE_NAME $VERSION) echo "Version to be used for TestPyPI release: $NEW_VERSION" @@ -45,15 +47,16 @@ jobs: - name: Update version in pyproject.toml run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ steps.check_version.outputs.version }}"/;}' pyproject.toml - name: Update package name in setup.py - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' setup.py + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test-hmoazam"/;}' setup.py - name: Update package name in pyproject.toml - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' pyproject.toml + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test-hmoazam"/;}' pyproject.toml - name: Build a binary wheel run: python3 setup.py sdist bdist_wheel - name: Publish distribution 📦 to test-PyPI uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi/testpypi with: repository-url: https://test.pypi.org/legacy/ + - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main build-and-publish-pypi: needs: [extract-tag, build-and-publish-test-pypi] @@ -62,12 +65,14 @@ jobs: name: pypi permissions: id-token: write # IMPORTANT: mandatory for trusted publishing + contents: write steps: - uses: actions/checkout@v4 - name: Set up Python 3.9 uses: actions/setup-python@v3 with: python-version: "3.9" + ref: ${{ github.head_ref }} - name: Install dependencies run: python3 -m pip install setuptools wheel twine - name: Update version in setup.py (dspy) @@ -77,9 +82,9 @@ jobs: # Publish to dspy - name: Update package name in setup.py run: | - sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' setup.py + sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="test-pkg-hmoazam"/;}' setup.py - name: Update package name in pyproject.toml - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' pyproject.toml + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="test-pkg-hmoazam"/;}' pyproject.toml - name: Build a binary wheel run: python3 setup.py sdist bdist_wheel - name: Publish distribution 📦 to PyPI (dspy) @@ -90,7 +95,7 @@ jobs: - name: Update version in setup.py (dspy-ai) run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ needs.extract-tag.outputs.version }}"/;}' ./dspy/.internal_dspyai/setup.py - name: Update package name in setup.py - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai"/;}' ./dspy/.internal_dspyai/setup.py + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-hmoazam"/;}' ./dspy/.internal_dspyai/setup.py - name: Update dspy dependency version in setup.py run: | sed -i '/#replace_dspy_version_marker/{n;s/dspy==[^"]*/dspy>=${{ needs.extract-tag.outputs.version }}/;}' ./dspy/.internal_dspyai/setup.py @@ -99,4 +104,5 @@ jobs: - name: Publish distribution 📦 to PyPI (dspy-ai) uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi with: - attestations: false \ No newline at end of file + attestations: false + - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main \ No newline at end of file From 2ad81cc19581581c067c42dbeb5e1959badd5f29 Mon Sep 17 00:00:00 2001 From: hmoazam Date: Thu, 19 Dec 2024 02:43:40 +0000 Subject: [PATCH 2/4] Automate creation of a release branch and merge it to update the versions on main --- .github/workflows/build_and_release.yml | 35 ++++++++++++++++++------- .prettierignore | 1 + pyproject.toml | 6 +++-- 3 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 .prettierignore diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index 059c3d98a2..68b9328c2e 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -30,14 +30,13 @@ jobs: uses: actions/setup-python@v3 with: python-version: "3.9" - ref: ${{ github.head_ref }} - name: Install dependencies run: python3 -m pip install setuptools wheel twine semver packaging - name: Get correct version for TestPyPI release id: check_version run: | VERSION=${{ needs.extract-tag.outputs.version }} - PACKAGE_NAME="dspy-ai-test-hmoazam" + PACKAGE_NAME="dspy-ai-test" echo "Checking if $VERSION for $PACKAGE_NAME exists on TestPyPI" NEW_VERSION=$(python3 .github/workflows/build_utils/test_version.py $PACKAGE_NAME $VERSION) echo "Version to be used for TestPyPI release: $NEW_VERSION" @@ -47,16 +46,15 @@ jobs: - name: Update version in pyproject.toml run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ steps.check_version.outputs.version }}"/;}' pyproject.toml - name: Update package name in setup.py - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test-hmoazam"/;}' setup.py + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' setup.py - name: Update package name in pyproject.toml - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test-hmoazam"/;}' pyproject.toml + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' pyproject.toml - name: Build a binary wheel run: python3 setup.py sdist bdist_wheel - name: Publish distribution 📦 to test-PyPI uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi/testpypi with: repository-url: https://test.pypi.org/legacy/ - - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main build-and-publish-pypi: needs: [extract-tag, build-and-publish-test-pypi] @@ -72,7 +70,6 @@ jobs: uses: actions/setup-python@v3 with: python-version: "3.9" - ref: ${{ github.head_ref }} - name: Install dependencies run: python3 -m pip install setuptools wheel twine - name: Update version in setup.py (dspy) @@ -82,9 +79,9 @@ jobs: # Publish to dspy - name: Update package name in setup.py run: | - sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="test-pkg-hmoazam"/;}' setup.py + sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' setup.py - name: Update package name in pyproject.toml - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="test-pkg-hmoazam"/;}' pyproject.toml + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' pyproject.toml - name: Build a binary wheel run: python3 setup.py sdist bdist_wheel - name: Publish distribution 📦 to PyPI (dspy) @@ -95,7 +92,7 @@ jobs: - name: Update version in setup.py (dspy-ai) run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ needs.extract-tag.outputs.version }}"/;}' ./dspy/.internal_dspyai/setup.py - name: Update package name in setup.py - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-hmoazam"/;}' ./dspy/.internal_dspyai/setup.py + run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai"/;}' ./dspy/.internal_dspyai/setup.py - name: Update dspy dependency version in setup.py run: | sed -i '/#replace_dspy_version_marker/{n;s/dspy==[^"]*/dspy>=${{ needs.extract-tag.outputs.version }}/;}' ./dspy/.internal_dspyai/setup.py @@ -105,4 +102,22 @@ jobs: uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi with: attestations: false - - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main \ No newline at end of file + - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main + with: + commit_message: Update versions + create_branch: true + branch: release-${{ needs.extract-tag.outputs.version }} + - name: Checkout main branch + run: | + git fetch origin + git checkout main + - name: Configure git user + run: | + git config --global user.email "actions@github.com" + git config --global user.name "Github Actions" + - name: Merge release branch into main + run: | + git merge --no-ff release-${{ needs.extract-tag.outputs.version }} + - name: Push changes to main + run: | + git push origin main \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..6d2eaaa41d --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +.github/ \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 40359586ba..28fbcb7c65 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,10 +3,12 @@ requires = ["setuptools>=40.8.0", "wheel"] build-backend = "setuptools.build_meta" [project] +# Do not add spaces around the '=' sign for any of the fields +# preceeded by a marker comment as it affects the publish workflow. #replace_package_name_marker -name = "dspy" +name="dspy" #replace_package_version_marker -version = "2.5.43" +version="2.5.43" description = "DSPy" readme = "README.md" authors = [{ name = "Omar Khattab", email = "okhattab@stanford.edu" }] From 50394d41c691986dd6b60d93ff29c76a3d274f19 Mon Sep 17 00:00:00 2001 From: hmoazam Date: Sun, 22 Dec 2024 02:04:43 +0000 Subject: [PATCH 3/4] Updated to include metadata introspection through a central metadata file and upgrade setuptools version (for PEP compliance) --- .github/workflows/build_and_release.yml | 14 +++++++------- dspy/__init__.py | 8 ++++++++ dspy/__metadata__.py | 8 ++++++++ setup.py | 24 +++++++++++++++--------- 4 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 dspy/__metadata__.py diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index 68b9328c2e..d491400eab 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -31,7 +31,7 @@ jobs: with: python-version: "3.9" - name: Install dependencies - run: python3 -m pip install setuptools wheel twine semver packaging + run: python3 -m pip install --upgrade setuptools wheel twine semver packaging - name: Get correct version for TestPyPI release id: check_version run: | @@ -42,11 +42,11 @@ jobs: echo "Version to be used for TestPyPI release: $NEW_VERSION" echo "::set-output name=version::$NEW_VERSION" - name: Update version in setup.py - run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ steps.check_version.outputs.version }}"/;}' setup.py + run: sed -i '/#replace_package_version_marker/{n;s/__version__="[^"]*"/__version__="${{ steps.check_version.outputs.version }}"/;}' ./dspy/__metadata__.py - name: Update version in pyproject.toml run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ steps.check_version.outputs.version }}"/;}' pyproject.toml - name: Update package name in setup.py - run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' setup.py + run: sed -i '/#replace_package_name_marker/{n;s/__name__="[^"]*"/__name__="dspy-ai-test"/;}' ./dspy/__metadata__.py - name: Update package name in pyproject.toml run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai-test"/;}' pyproject.toml - name: Build a binary wheel @@ -71,15 +71,15 @@ jobs: with: python-version: "3.9" - name: Install dependencies - run: python3 -m pip install setuptools wheel twine + run: python3 -m pip install --upgrade setuptools wheel twine - name: Update version in setup.py (dspy) - run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ needs.extract-tag.outputs.version }}"/;}' setup.py + run: sed -i '/#replace_package_version_marker/{n;s/__version__="[^"]*"/__version__="${{ needs.extract-tag.outputs.version }}"/;}' ./dspy/__metadata__.py - name: Update version in pyproject.toml run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ needs.extract-tag.outputs.version }}"/;}' pyproject.toml # Publish to dspy - name: Update package name in setup.py run: | - sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' setup.py + sed -i '/#replace_package_name_marker/{n;s/__name__="[^"]*"/__name__="dspy"/;}' ./dspy/__metadata__.py - name: Update package name in pyproject.toml run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' pyproject.toml - name: Build a binary wheel @@ -88,7 +88,7 @@ jobs: uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi with: attestations: false - # Publish to dspy-ai + # Publish to dspy-ai - name: Update version in setup.py (dspy-ai) run: sed -i '/#replace_package_version_marker/{n;s/version="[^"]*"/version="${{ needs.extract-tag.outputs.version }}"/;}' ./dspy/.internal_dspyai/setup.py - name: Update package name in setup.py diff --git a/dspy/__init__.py b/dspy/__init__.py index fea48caca8..49fb5f944f 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -24,6 +24,14 @@ configure = settings.configure context = settings.context +from .__metadata__ import ( + __name__, + __version__, + __description__, + __url__, + __author__, + __author_email__ +) import dspy.teleprompt diff --git a/dspy/__metadata__.py b/dspy/__metadata__.py new file mode 100644 index 0000000000..93793d44d2 --- /dev/null +++ b/dspy/__metadata__.py @@ -0,0 +1,8 @@ +#replace_package_name_marker +__name__="dspy" +#replace_package_version_marker +__version__="2.5.43" +__description__="DSPy" +__url__="https://github.com/stanfordnlp/dspy" +__author__="Omar Khattab" +__author_email__="okhattab@stanford.edu" \ No newline at end of file diff --git a/setup.py b/setup.py index dace8c814e..c2a9931944 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ from setuptools import find_packages, setup +import os # Read the content of the README file with open("README.md", encoding="utf-8") as f: @@ -8,20 +9,25 @@ with open("requirements.txt", encoding="utf-8") as f: requirements = f.read().splitlines() +metadata = {} +here = os.path.abspath(os.path.dirname(__file__)) +with open(os.path.join(here, "dspy", "__metadata__.py"), "r", encoding="utf-8") as f: + exec(f.read(), metadata) +f.close() + + setup( - #replace_package_name_marker - name="dspy", - #replace_package_version_marker - version="2.5.43", - description="DSPy", + name=metadata["__name__"], + version=metadata["__version__"], + description=metadata["__description__"], + url=metadata["__url__"], + author=metadata["__author__"], + author_email=metadata["__author_email__"], long_description=long_description, long_description_content_type="text/markdown", - url="https://github.com/stanfordnlp/dspy", - author="Omar Khattab", - author_email="okhattab@stanford.edu", license="MIT License", packages=find_packages(include=["dspy.*", "dspy"]), - python_requires=">=3.9", + python_requires=">=3.9", install_requires=requirements, extras_require={ From c0de2bd4d77da4cd45b006dcec79df6700576be5 Mon Sep 17 00:00:00 2001 From: hmoazam Date: Wed, 25 Dec 2024 00:56:53 +0000 Subject: [PATCH 4/4] Fixed conflict between setup.py and pyproject.toml where pyproject.toml was taking precedence --- .github/workflows/build_and_release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index d491400eab..ef9a43facb 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -82,6 +82,9 @@ jobs: sed -i '/#replace_package_name_marker/{n;s/__name__="[^"]*"/__name__="dspy"/;}' ./dspy/__metadata__.py - name: Update package name in pyproject.toml run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy"/;}' pyproject.toml + # Remove pyproject.toml temporarily to avoid conflicts + - name: Temporarily remove pyproject.toml + run: mv pyproject.toml pyproject.toml.bak - name: Build a binary wheel run: python3 setup.py sdist bdist_wheel - name: Publish distribution 📦 to PyPI (dspy) @@ -95,13 +98,16 @@ jobs: run: sed -i '/#replace_package_name_marker/{n;s/name="[^"]*"/name="dspy-ai"/;}' ./dspy/.internal_dspyai/setup.py - name: Update dspy dependency version in setup.py run: | - sed -i '/#replace_dspy_version_marker/{n;s/dspy==[^"]*/dspy>=${{ needs.extract-tag.outputs.version }}/;}' ./dspy/.internal_dspyai/setup.py + sed -i '/#replace_dspy_version_marker/{n;s/dspy>=[^"]*/dspy>=${{ needs.extract-tag.outputs.version }}/;}' ./dspy/.internal_dspyai/setup.py - name: Build a binary wheel run: python3 ./dspy/.internal_dspyai/setup.py sdist bdist_wheel - name: Publish distribution 📦 to PyPI (dspy-ai) uses: pypa/gh-action-pypi-publish@release/v1 # This requires a trusted publisher to be setup in pypi with: attestations: false + # Restore pyproject.toml + - name: Restore pyproject.toml + run: mv pyproject.toml.bak pyproject.toml - uses: stefanzweifel/git-auto-commit-action@v5 # auto commit changes to main with: commit_message: Update versions