Upload nightly wheels to Anaconda Cloud #459
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
defaults: | |
run: | |
shell: bash -l {0} | |
if: github.repository_owner == 'matplotlib' | |
steps: | |
# c.f. https://github.com/actions/download-artifact/issues/3#issuecomment-1017141067 | |
- name: Download wheel artifacts from last build on 'main' | |
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/ | |
# N.B. anaconda-client is only maintained on the main channel | |
- name: Install anaconda-client | |
uses: mamba-org/provision-with-micromamba@v12 | |
with: | |
environment-file: false | |
environment-name: nightlies | |
extra-specs: anaconda-client=1.10.0 | |
channels: main | |
- name: Upload wheels to Anaconda Cloud as nightlies | |
run: | | |
anaconda --token ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }} upload \ | |
--user scipy-wheels-nightly \ | |
--skip-existing \ | |
dist/matplotlib-*.whl | |
- name: Remove old uploads to save space | |
run: | | |
N_LATEST_UPLOADS=5 | |
# Remove all _but_ the last "${N_LATEST_UPLOADS}" package versions | |
# N.B.: `anaconda show` places the newest packages at the bottom of the output | |
# of the 'Versions' section and package versions are preceded with a ' + '. | |
anaconda show scipy-wheels-nightly/matplotlib &> >(grep '+') | \ | |
sed 's/.* + //' | \ | |
head --lines "-${N_LATEST_UPLOADS}" > remove-package-versions.txt | |
if [ -s remove-package-versions.txt ]; then | |
while LANG=C IFS= read -r package_version ; do | |
echo "# Removing scipy-wheels-nightly/matplotlib/${package_version}" | |
anaconda --token ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }} remove \ | |
--force \ | |
"scipy-wheels-nightly/matplotlib/${package_version}" | |
done <remove-package-versions.txt | |
fi |