name: Publish Python 🐍distribution 📦 to PyPI and TestPyPI on: push jobs: build: name: Build distribution 📦 runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.11" - name: Install pypa/build run: >- python3 -m pip install build --user - name: Build a binary wheel and a source tarball run: python3 -m build - name: Store the distribution packages uses: actions/upload-artifact@v7 with: name: python-package-distributions path: dist/ test-pypi-package: name: Test the built package works basically. runs-on: ubuntu-latest needs: - build steps: - name: Download all the dists uses: actions/download-artifact@v8 with: name: python-package-distributions path: dist/ - name: Set up Python 3.11 uses: actions/setup-python@v6 with: python-version: '3.11' - name: Test that the basic pip built package runs without error run: | set -ex ls -alR # Install the first wheel found in dist/ WHEEL=$(find dist -type f -name "*.whl" -print -quit) echo Installing $WHEEL python3 -m pip install --upgrade pip python3 -m pip install "$WHEEL" changedetection.io -d /tmp -p 10000 & sleep 3 curl --retry-connrefused --retry 6 http://127.0.0.1:10000/static/styles/pure-min.css >/dev/null curl --retry-connrefused --retry 6 http://127.0.0.1:10000/ >/dev/null # --- API test --- # This also means that the docs/api-spec.yml was shipped and could be read test -f /tmp/changedetection.json API_KEY=$(jq -r '.. | .api_access_token? // empty' /tmp/changedetection.json) echo Test API KEY is $API_KEY curl -X POST "http://127.0.0.1:10000/api/v1/watch" \ -H "x-api-key: ${API_KEY}" \ -H "Content-Type: application/json" \ --show-error --fail \ --retry 6 --retry-delay 1 --retry-connrefused \ -d '{ "url": "https://example.com", "title": "Example Site Monitor", "time_between_check": { "hours": 1 } }' killall changedetection.io publish-to-pypi: name: >- Publish Python 🐍 distribution 📦 to PyPI if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - test-pypi-package runs-on: ubuntu-latest environment: name: release url: https://pypi.org/p/changedetection.io permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v8 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1