From f689fba3de4c1332033143747f69fb420df77e69 Mon Sep 17 00:00:00 2001 From: Serge Koudoro Date: Tue, 23 Jan 2024 19:14:01 -0500 Subject: [PATCH] ENH: Add optional `anaconda_nightly_upload_organization` argument (#47) * 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 * - 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 Co-authored-by: Matthew Feickert --- README.md | 20 ++++++++++++++++++++ action.yml | 8 ++++++++ cmd.sh | 31 ++++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 53606bb..f5e933d 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/action.yml b/action.yml index 6f84f14..2aefbb8 100644 --- a/action.yml +++ b/action.yml @@ -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' diff --git a/cmd.sh b/cmd.sh index 8313e8e..1a89437 100644 --- a/cmd.sh +++ b/cmd.sh @@ -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 @@ -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 \ @@ -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"