diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..a335721 --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,102 @@ +# This workflow will upload a Python Package to PyPI when a release is created +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + release-build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.13.2" + + - name: Prepare env + run: | + mkdir ~/.local + export PATH="$PATH:~/.local/bin:/opt/hostedtoolcache/Python/3.13.2/x64/bin" + python -m pip install poetry + poetry self add poetry-dynamic-versioning + + - name: Install deps + run: | + export PATH="$PATH:~/.local/bin:/opt/hostedtoolcache/Python/3.13.2/x64/bin" + sudo pip install grpcio==1.72.0rc1 + sudo pip install grpcio-tools==1.72.0rc1 # 解决版本问题 + sudo pip install grpclib + sudo pip install mypy_protobuf + poetry lock + poetry install --with dev + echo "Install grpcio" + poetry env activate + pip install grpcio==1.72.0rc1 + pip install grpcio-tools==1.72.0rc1 # 解决版本问题 + + echo -e '#!/usr/bin/python\nfrom grpclib.plugin.main import main\nimport sys\nsys.exit(main())' > /opt/hostedtoolcache/Python/3.13.2/x64/bin/protoc-gen-grpclib_python + echo -e '#!/usr/bin/python\nfrom mypy_protobuf.main import main\nimport sys\nsys.exit(main())' > /opt/hostedtoolcache/Python/3.13.2/x64/bin/protoc-gen-mypy + chmod +x /opt/hostedtoolcache/Python/3.13.2/x64/bin/protoc-gen-grpclib_python + chmod +x /opt/hostedtoolcache/Python/3.13.2/x64/bin/protoc-gen-mypy + + - name: Build + run: | + export PATH="$PATH:~/.local/bin:/opt/hostedtoolcache/Python/3.13.2/x64/bin" + ls /opt/hostedtoolcache/Python/3.13.2/x64/bin + poetry env activate + make proto_t + poetry build + + - name: Upload distributions + uses: actions/upload-artifact@v4 + with: + name: release-dists + path: dist/ + + pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + + # Dedicated environments with protections for publishing are strongly recommended. + # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules + environment: + name: pypi + # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status: + # url: https://pypi.org/p/YOURPROJECT + # + # ALTERNATIVE: if your GitHub Release name is the PyPI project version string + # ALTERNATIVE: exactly, uncomment the following line instead: + # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }} + + steps: + - uses: actions/setup-python@v5 + with: + python-version: "3.13.2" + + - name: Retrieve release distributions + uses: actions/download-artifact@v4 + with: + name: release-dists + path: dist/ + + - name: Publish release distributions to PyPI + run: | + pip install twine + twine upload -p "${{ secrets.PYPITOKEN }}" ./dist/* diff --git a/pyproject.toml b/pyproject.toml index aadc2c9..fe39ead 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,8 @@ requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" [tool.poetry.group.dev.dependencies] -grpcio-tools = "^1.71.0" +# grpcio = "^1.72.0rc1" # 阴间依赖版本问题 +# grpcio-tools = "^1.72.0rc1" mypy-protobuf = "^3.6.0" [tool.poetry.scripts]