diff --git a/.github/workflows/nightlies.yml b/.github/workflows/nightlies.yml new file mode 100644 index 000000000000..438fe26cb1ce --- /dev/null +++ b/.github/workflows/nightlies.yml @@ -0,0 +1,64 @@ +name: Upload nightly wheels to Anaconda Cloud + +on: + # Run daily at 1:23 UTC to upload nightly wheels to Anaconda Cloud + schedule: + - cron: '23 1 * * *' + # Run on demand with workflow dispatch + workflow_dispatch: + +jobs: + upload_nightly_wheels: + name: Upload nightly wheels to Anaconda Cloud + runs-on: ubuntu-latest + if: github.repository_owner == 'matplotlib' + + steps: + - name: Install Python + uses: actions/setup-python@v3 + with: + python-version: '3.x' + + # c.f. https://github.com/actions/download-artifact/issues/3#issuecomment-1017141067 + - name: Download wheel artifacts from last build on 'main' + shell: bash + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PROJECT_REPO="matplotlib/matplotlib" + BRANCH="main" + WORKFLOW_NAME="cibuildwheel.yml" + ARTIFACT_NAME="wheels" + + gh run --repo "${PROJECT_REPO}" \ + list --branch "${BRANCH}" \ + --workflow "${WORKFLOW_NAME}" \ + --json event,status,databaseId > runs.json + # Filter on 'push' events to main (merged PRs) that have completed + jq --compact-output \ + '[ .[] | select(.event == "push") | select(.status == "completed") ]' \ + runs.json > pushes.json + # Get id of latest build of wheels + RUN_ID=$( + jq --compact-output \ + 'sort_by(.databaseId) | reverse | .[0].databaseId' pushes.json + ) + gh run --repo "${PROJECT_REPO}" \ + download "${RUN_ID}" --name "${ARTIFACT_NAME}" + + mkdir dist + mv *.whl dist/ + ls -l dist/ + + - name: Install anaconda-client + run: | + python -m pip install --upgrade pip setuptools wheel + # c.f. https://github.com/Anaconda-Platform/anaconda-client/issues/540 + python -m pip install git+https://github.com/Anaconda-Server/anaconda-client + python -m pip list + + - name: Upload wheels to Anaconda Cloud as nightlies + run: | + anaconda --token ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }} upload \ + --user scipy-wheels-nightly \ + dist/matplotlib-*.whl diff --git a/doc/users/installing/index.rst b/doc/users/installing/index.rst index 10431d0cd465..a2ce7cea6790 100644 --- a/doc/users/installing/index.rst +++ b/doc/users/installing/index.rst @@ -80,6 +80,20 @@ you can install Matplotlib via your package manager, e.g.: .. _install_from_source: +========================== +Installing a nightly build +========================== + +Matplotlib makes nightly development build wheels available on the +`scipy-wheels-nightly Anaconda Cloud organization +`_. +These wheels can be installed with ``pip`` by specifying scipy-wheels-nightly +as the package index to query: + +.. code-block:: sh + + python -m pip install --upgrade --index-url https://pypi.anaconda.org/scipy-wheels-nightly/simple matplotlib + ====================== Installing from source ======================