-
Notifications
You must be signed in to change notification settings - Fork 2
/
action.yml
180 lines (180 loc) · 6.93 KB
/
action.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
name: 'build-publish-anaconda'
description: 'Build and Publish anaconda package'
author: 'Thomas Arsouze'
branding:
icon: 'package'
color: 'green'
inputs:
conda:
description: "Directory with conda recipe. Default `.` ."
required: false
default: '.'
mamba:
description: "Uses mamba to setup miniconda and install in a faster way or not. Uses the latest available version. Default `false`."
required: false
default: 'false'
condapython:
description: 'Python3 minor version used for conda. Default `10`.'
required: false
default: '10'
python:
description: 'Python3 minor version used for building. Default `10`.'
required: false
default: '10'
numpy:
description: 'Numpy minor version used for building. Default is fixed by Python version.'
required: false
default: ''
token:
description: 'Anaconda access Token (required)'
required: true
channels:
description: 'Optional Extra anaconda channels to use. Coma-separated syntax. Default `conda-forge`.'
required: false
default: 'conda-forge'
publish:
description: 'Wether we publish the package build on anaconda cloud or not. Default `true`.'
required: false
default: 'true'
label:
description: Label of conda package published. Default `main`.
required: false
default: main
buildoptions:
description: Build options for conda build.
required: false
default: ''
runs:
using: "composite"
steps:
- name: Check if meta.yml exists in ${{ inputs.conda }} directory
id: check-meta
working-directory: ./${{ inputs.conda }}
run: |
echo "::group::Checking the conda directory if the file meta.yaml exists"
if [ ! -f meta.yaml ]; then
echo "A meta.yaml file with the compilation instructions of the conda package was not found in ${{ inputs.conda }}."
exit 1
else
echo "A meta.yaml file with the compilation instructions of the conda package was found in ${{ inputs.conda }}."
fi
echo "::endgroup::"
shell: bash
- name: Check if anaconda login information are available
id: check-login
if: ${{ inputs.publish == 'true' }}
working-directory: ./${{ inputs.conda }}
run: |
echo "::group::Checking if the token variable is correclty set"
if [[ "${{ inputs.token }}" == "" ]]; then
echo "No token variable is set for upload."
exit 1
else
echo "Token is correctly set."
fi
echo "::endgroup::"
shell: bash
- name: Set windows env before miniconda
uses: ilammy/msvc-dev-cmd@v1
- name: remove /usr/bin/link that shadow ms link.exe on windows runners
if: matrix.os == 'windows-latest'
run: rm /usr/bin/link
shell: bash
- name: Setup Conda environment
uses: conda-incubator/[email protected]
if: ${{ inputs.mamba != 'true' }}
with:
python-version: 3.${{ inputs.condapython }}
channels: ${{ inputs.channels }}
auto-update-conda: false
- name: Setup Mamba environment
uses: conda-incubator/[email protected]
if: ${{ inputs.mamba == 'true' }}
with:
python-version: 3.${{ inputs.condapython }}
channels: ${{ inputs.channels }}
channel-priority: true
auto-update-conda: false
miniforge-variant: Miniforge3
- name: Setup conda-build and anaconda-client
run: |
echo "::group::Setup conda-build and anaconda-client"
conda install -q conda-build anaconda-client
echo "::endgroup::"
shell: bash -l {0}
- name: Numpy selection
id: numpy-selection
run: |
export PYTHON_VERSION="3.${{ inputs.python }}"
echo "::group::Numpy selection for Python ${PYTHON_VERSION}"
if [[ '${{ inputs.numpy }}' = '0' ]]; then
echo "Associate numpy version to python version provided"
if [[ ${PYTHON_VERSION} = "3.8" ]]; then
export NUMPY_VERSION="1.22"
elif [[ ${PYTHON_VERSION} = "3.9" ]]; then
export NUMPY_VERSION="1.22"
elif [[ ${PYTHON_VERSION} = "3.10" ]]; then
export NUMPY_VERSION="1.22"
elif [[ ${PYTHON_VERSION} = "3.11" ]]; then
export NUMPY_VERSION="1.23"
elif [[ ${PYTHON_VERSION} = "3.12" ]]; then
export NUMPY_VERSION="1.26"
else
echo "Unable to build the package with this version of python (yet). Please choose a subversion of Python3: 8, 9, 10, 11 or 12"
exit 1
fi
else
echo "Numpy version 1.${{ inputs.numpy }} requested"
export NPVERSION="${{ inputs.numpy }}"
if [[ ${PYTHON_VERSION} = "3.7" ]]; then
if [[ ${NPVERSION} > '20' ]]; then
echo "With Python 3.7, Numpy version can only be 1.20."
export NPVERSION='20'
fi
fi
if [[ ${PYTHON_VERSION} = "3.11" ]]; then
if [[ ${NPVERSION} < '23' ]]; then
echo "With Python 3.11, Numpy version can only be 1.23."
export NPVERSION='23'
fi
fi
if [[ ${PYTHON_VERSION} = "3.12" ]]; then
if [[ ${NPVERSION} < '26' ]]; then
echo "With Python 3.12, Numpy version can only be 1.26."
export NPVERSION='26'
fi
fi
export NUMPY_VERSION="1.${NPVERSION}"
fi
echo "Numpy version selected is ${NUMPY_VERSION}"
echo "numpy_version=${NUMPY_VERSION}" >> $GITHUB_OUTPUT
echo "::endgroup::"
shell: bash -l {0}
- name: Package compilation
id: package-compilation
working-directory: ./${{ inputs.conda }}
run: |
echo "::group::Conda packages building"
export PYTHON_VERSION="3.${{ inputs.python }}"
export NUMPY_VERSION=${{ steps.numpy-selection.outputs.numpy_version }}
out_dir=`mktemp -d conda-build-dir.XXXXXX`
echo "Running 'conda build' with python ${PYTHON_VERSION} and numpy ${NUMPY_VERSION}"
conda build . --output-folder $out_dir --python=${PYTHON_VERSION} --numpy=${NUMPY_VERSION} ${{ inputs.buildoptions }}
echo "out_dir='$out_dir'" >> $GITHUB_OUTPUT
echo "::endgroup::"
shell: bash -l {0}
- name: Package uploading
id: package-uploading
if: ${{ inputs.publish == 'true' }}
working-directory: ./${{ inputs.conda }}
run: |
echo "::group::Conda packages uploading"
export ANACONDA_API_TOKEN=${{ inputs.token }}
for BUILD_FILE in ${{ steps.package-compilation.outputs.out_dir }}/*/*; do
if [ "${BUILD_FILE: -8}" == ".tar.bz2" ]; then
echo "Upload package ${BUILD_FILE} to anaconda with label ${{ inputs.label }} on channel associated to the given token."
anaconda upload --skip-existing --no-progress --label ${{ inputs.label }} ${BUILD_FILE}
fi
done
echo "::endgroup::"
shell: bash -l {0}