--- name: Python client checks, package build and deployment on: workflow_dispatch: push: tags: - 'client-*' branches: - develop - master paths: - client/** - .github/workflows/python-client.yml pull_request: paths: - client/** - .github/workflows/python-client.yml jobs: lint: name: Linting runs-on: ubuntu-latest steps: - name: Clone uses: actions/checkout@v3 - run: pip install flake8 - name: Flake8 lint Python code run: (cd client && find src/ -type f -name '*.py' -exec flake8 --max-line-length=120 '{}' '+') mypy: name: Type checking runs-on: ubuntu-latest steps: - name: Clone uses: actions/checkout@v3 - run: pip install mypy - name: Mypy type checking run: (cd client && mypy src/) package_and_deploy: name: Build and deploy Ledgered Python package runs-on: ubuntu-latest needs: [lint, mypy] steps: - name: Clone uses: actions/checkout@v3 with: fetch-depth: 0 # Fetching dependencies from test.pypi,org or pypi.org depending on the package destination: # tag -> pypi.org, not tag -> test.pypi.org - name: Build Python package run: | pip install --upgrade pip build twine cd client/ python -m build; \ python -m twine check dist/* pip install .; \ echo "TAG_VERSION=$(python -c 'from ledger_app_clients.ethereum import __version__; print(__version__)')" >> "$GITHUB_ENV" - name: Check version against CHANGELOG if: startsWith(github.ref, 'refs/tags/') run: | CHANGELOG_VERSION=$(grep -Po '(?<=## \[)(\d+\.)+[^\]]' client/CHANGELOG.md | head -n 1) if [ "${{ env.TAG_VERSION }}" == "${CHANGELOG_VERSION}" ]; \ then \ echo 'Package and CHANGELOG versions match!'; \ exit 0; \ else \ echo "Tag '${{ env.TAG_VERSION }}' and CHANGELOG '${CHANGELOG_VERSION}' versions mismatch!"; \ exit 1; \ fi - name: Publish Python package on pypi.org if: success() && github.event_name == 'push' run: (cd client && python -m twine upload --verbose dist/*) env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PUBLIC_API_TOKEN }} TWINE_NON_INTERACTIVE: 1