Skip to content

Commit

Permalink
ENH: Add optional anaconda_nightly_upload_organization argument (#47)
Browse files Browse the repository at this point in the history
* NF: Add anaconda_nightly_upload_url parameter
NF: add anaconda_nightly_upload_token paremeter
DOC: Add associated documentation

* DOC: add labels documentation

* Apply suggestions from code review

Co-authored-by: Stefan van der Walt <[email protected]>

* - address stefanv comments.
- rename anaconda_nightly_upload_url to anaconda_nightly_upload_organization

* FIX: del list, docker handle only str/bool/number
- parse string in case of multiple labels

* Handle comma and new line seperated label lists

Using space seperated lists is not standard across GitHub Actions, which in general assume that you're providing a newline seperatd or comma seperated list (c.f. https://github.com/docker/build-push-action?tab=readme-ov-file#inputs as an example).

So if we agree that we should be expecting newline seperated or comma seperated inputs then we can just treat all input the same by:

First, converting all input into a comma separated string
Then, create an array of the comma seperated labels
Finally, parse that array into a single string that represents all the label arguments to be included (you were already doing this part)

---------

Co-authored-by: Stefan van der Walt <[email protected]>
Co-authored-by: Matthew Feickert <[email protected]>
  • Loading branch information
3 people authored Jan 24, 2024
1 parent a337403 commit f689fba
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 1 deletion.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,26 @@ then generate a token at `https://anaconda.org/scientific-python-nightly-wheels/
with permissions to _Allow write access to the API site_ and _Allow uploads to Standard Python repositories_,
and add the token as a secret to your GitHub repository.

## Using a different channel

This Github Action can upload your nightly builds to a different channel. To do so,
define the `anaconda_nightly_upload_organization` variable. Furthermore,
you can add labels for organizing your artifacts using `anaconda_nightly_upload_labels`
optional parameter. See below:

```yml
jobs:
steps:
...
- name: Upload wheel
uses: scientific-python/upload-nightly-action@5fb764c5bce1ac2297084c0f7161b1919f17c74f # 0.2.0
with:
artifacts_path: dist
anaconda_nightly_upload_organization: my-alternative-organization
anaconda_nightly_upload_token: ${{secrets.UPLOAD_TOKEN}}
anaconda_nightly_upload_labels: dev
```

## Artifact cleanup-policy at the ``scientific-python-nightly-wheels`` channel

To avoid hosting outdated development versions, as well as to clean up space, we do have a
Expand Down
8 changes: 8 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ inputs:
anaconda_nightly_upload_token:
description: 'Token to upload to scientific python org'
required: true
anaconda_nightly_upload_organization:
description: 'Organisation name to upload the wheels to'
required: false
default: scientific-python-nightly-wheels
anaconda_nightly_upload_labels:
description: 'List of labels assigned to the uploaded artifacts'
required: false
default: main

runs:
using: 'docker'
Expand Down
31 changes: 30 additions & 1 deletion cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,17 @@ set -x
# this is to prevent accidental uploads
echo "Getting anaconda token from github secrets..."

ANACONDA_ORG="scientific-python-nightly-wheels"
ANACONDA_ORG="${INPUT_ANACONDA_NIGHTLY_UPLOAD_ORGANIZATION}"
ANACONDA_TOKEN="${INPUT_ANACONDA_NIGHTLY_UPLOAD_TOKEN}"
ANACONDA_LABELS="${INPUT_ANACONDA_NIGHTLY_UPLOAD_LABELS}"

# if the ANACONDA_ORG is empty, exit with status -1
# this is to prevent attempt to upload to the wrong anaconda channel
if [ -z "${ANACONDA_ORG}" ]; then
echo "ANACONDA_ORG is empty, exiting..."
exit -1
fi


# if the ANACONDA_TOKEN is empty, exit with status -1
# this is to prevent accidental uploads
Expand All @@ -24,6 +33,25 @@ if [ -z "${ANACONDA_TOKEN}" ]; then
exit -1
fi

# if the ANACONDA_LABELS is empty, exit with status -1
# as this should be set in action.yml or by the user
# and it is better to fail on this to sigal a problem.
if [ -z "${ANACONDA_LABELS}" ]; then
echo "ANACONDA_LABELS is empty, exiting..."
exit -1
fi

# convert newlines to commas for parsing
# and ensure that there is no trailing comma
ANACONDA_LABELS="$(tr '\n' ',' <<< "${ANACONDA_LABELS}" | sed 's/,$//')"

IFS=',' read -ra LABELS <<< "${ANACONDA_LABELS}"

LABEL_ARGS=""
for label in "${LABELS[@]}"; do
LABEL_ARGS+="--label ${label} "
done

# Install anaconda-client from lock file
echo "Installing anaconda-client from upload-nightly-action conda-lock lock file..."
micromamba create \
Expand All @@ -48,5 +76,6 @@ echo "Uploading wheels to anaconda.org..."
anaconda --token "${ANACONDA_TOKEN}" upload \
--force \
--user "${ANACONDA_ORG}" \
$ANACONDA_LABELS \
"${INPUT_ARTIFACTS_PATH}"/*.whl
echo "Index: https://pypi.anaconda.org/${ANACONDA_ORG}/simple"

0 comments on commit f689fba

Please sign in to comment.