Skip to content

Commit a60edb3

Browse files
committed
Merge branch 'release-4.3.1'
2 parents adf393c + 35c586e commit a60edb3

17 files changed

+182
-363
lines changed

.github/dependabot.yml

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: "monthly"

.github/workflows/build-wheels.yml

+41-310
Original file line numberDiff line numberDiff line change
@@ -9,328 +9,59 @@ on:
99
- cron: '0 0 * * sun,wed'
1010

1111
jobs:
12-
#
13-
# The linters job duplicates tests.yml, can't think of a way to avoid this right now.
14-
#
15-
linters:
16-
runs-on: ubuntu-latest
17-
steps:
18-
- uses: actions/checkout@v3
19-
20-
- name: Setup up Python ${{ matrix.python }}
21-
uses: actions/setup-python@v4
22-
with:
23-
python-version: ${{ matrix.python }}
24-
25-
- name: Update pip
26-
run: python -m pip install -U pip
27-
28-
- name: Install dependencies
29-
run: python -m pip install flake8 flake8-rst
30-
31-
- name: Run flake8 linter (source)
32-
run: flake8 --ignore E12,W503 --max-line-length 120 --show-source gensim
3312

34-
# - name: Run flake8 linter (documentation)
35-
# run: flake8 --ignore E202,E402,E302,E305,F821 --max-line-length 120 --filename '*.py,*.rst' docs
36-
37-
- name: Check Sphinx Gallery cache
38-
run: python docs/src/check_gallery.py
13+
linters:
14+
uses: ./.github/workflows/linters.yml
3915

40-
multibuild:
41-
timeout-minutes: 35
16+
build_wheels:
17+
needs: linters
18+
name: Build wheels on ${{ matrix.os }}
4219
runs-on: ${{ matrix.os }}
4320
defaults:
4421
run:
4522
shell: bash
46-
47-
needs: [linters]
48-
49-
strategy:
50-
fail-fast: false
51-
matrix:
52-
include:
53-
#
54-
# We want the _oldest_ possible manylinux version to ensure our
55-
# wheels work on the widest possible range of distros. Version 1
56-
# seems to break for certain Python versions under Linux and Windows,
57-
# so we use 2010, which is the next oldest.
58-
#
59-
# When selecting the numpy version to build against, we need to satisfy
60-
# two conditions. First, we want the wheel to be available for the
61-
# version of Python we're building against, because building numpy
62-
# wheels on our own is too much work.
63-
#
64-
# Second, in order to guarantee compatibility with the greatest range
65-
# of numpy versions, we want to build against the oldest possible numpy
66-
# version, as long as it's 1.17.0 or newer. Building versions earlier
67-
# than 1.17.0 yields wheels that are incompatible with some newer
68-
# versions of numpy. See https://github.com/RaRe-Technologies/gensim/issues/3226
69-
# for details.
70-
#
71-
# The logic for numpy version selection is based on
72-
# https://github.com/scipy/oldest-supported-numpy/blob/master/setup.cfg
73-
# with the exception that we enforce the minimum version to be 1.17.0.
74-
#
75-
- os: ubuntu-latest
76-
manylinux-version: 2010
77-
python-version: "3.8"
78-
build-depends: numpy==1.17.3
79-
80-
- os: ubuntu-latest
81-
manylinux-version: 2010
82-
python-version: "3.9"
83-
build-depends: numpy==1.19.3
84-
85-
- os: ubuntu-latest
86-
manylinux-version: 2014
87-
python-version: "3.10"
88-
build-depends: numpy==1.22.2 scipy==1.8.0
89-
90-
- os: ubuntu-latest
91-
manylinux-version: 2014
92-
python-version: "3.11"
93-
build-depends: numpy==1.23.2 scipy==1.9.2
94-
95-
- os: macos-latest
96-
travis-os-name: osx
97-
manylinux-version: 1
98-
python-version: "3.8"
99-
build-depends: numpy==1.17.3
100-
101-
- os: macos-latest
102-
travis-os-name: osx
103-
manylinux-version: 1
104-
python-version: "3.9"
105-
build-depends: numpy==1.19.3
106-
107-
- os: macos-latest
108-
travis-os-name: osx
109-
manylinux-version: 1
110-
python-version: "3.10"
111-
build-depends: numpy==1.22.2 scipy==1.8.0
112-
113-
- os: macos-latest
114-
travis-os-name: osx
115-
manylinux-version: 1
116-
python-version: "3.11"
117-
build-depends: numpy==1.23.2 scipy==1.9.2
118-
119-
env:
120-
SKIP_NETWORK_TESTS: 1
121-
TEST_DEPENDS: pytest mock testfixtures
122-
BUILD_DEPENDS: ${{ matrix.build-depends }}
123-
124-
#
125-
# For multibuild
126-
#
127-
BUILD_COMMIT: HEAD
128-
DOCKER_TEST_IMAGE: multibuild/xenial_x86_64
129-
MB_ML_VER: ${{ matrix.manylinux-version }}
130-
MB_PYTHON_VERSION: ${{ matrix.python-version }} # MB_PYTHON_VERSION is needed by Multibuild
131-
PKG_NAME: gensim
132-
PLAT: x86_64
133-
REPO_DIR: gensim
134-
TRAVIS_OS_NAME: ${{ matrix.travis-os-name }}
135-
UNICODE_WIDTH: 32
136-
137-
steps:
138-
- uses: actions/checkout@v3
139-
with:
140-
submodules: recursive
141-
fetch-depth: 0
142-
- name: Print environment variables
143-
run: |
144-
echo "PLAT: ${PLAT}"
145-
echo "MB_ML_VER: ${MB_ML_VER}"
146-
echo "DOCKER_TEST_IMAGE: ${DOCKER_TEST_IMAGE}"
147-
echo "TEST_DEPENDS: ${TEST_DEPENDS}"
148-
echo "TRAVIS_OS_NAME: ${TRAVIS_OS_NAME}"
149-
echo "SKIP_NETWORK_TESTS: ${SKIP_NETWORK_TESTS}"
150-
- name: Set up Python ${{ matrix.python-version }}
151-
uses: actions/setup-python@v4
152-
with:
153-
python-version: ${{ matrix.python-version }}
154-
- name: Install dependencies
155-
run: |
156-
python -m pip install --upgrade pip
157-
pip install virtualenv
158-
- name: Build Wheel
159-
run: |
160-
echo ::group::Set up Multibuild
161-
source multibuild/common_utils.sh
162-
source multibuild/travis_steps.sh
163-
source config.sh
164-
echo ::endgroup::
165-
echo ::group::Before install
166-
before_install
167-
echo ::endgroup::
168-
echo ::group::Build wheel
169-
find . -type f -name "*.egg" -exec rm -v {} \;
170-
build_wheel $REPO_DIR ${{ matrix.PLAT }}
171-
echo ::endgroup::
172-
173-
- name: Prepare for testing
174-
run: |
175-
#
176-
# FIXME: Why are these eggs here?
177-
#
178-
# These eggs prevent the wheel from building and running on Py3.10
179-
#
180-
find . -type f -name "*.egg" -exec rm -v {} \;
181-
python -m venv test_environment
182-
183-
#
184-
# Multibuild has a test step but it essentially just installs the wheel
185-
# and runs the test, and requires a lot of magic to get it working.
186-
# It also does not work under Windows.
187-
# So, we create our own simple test step here.
188-
#
189-
- name: Install and Test Wheel
190-
run: |
191-
. test_environment/bin/activate
192-
python -m pip install --upgrade pip
193-
pip install pytest testfixtures mock
194-
pip install wheelhouse/*.whl
195-
cd test_environment
196-
python -c 'import gensim;print(gensim.__version__)'
197-
#
198-
# This part relies on the wheel containing tests and required data.
199-
# If we remove that from the wheel, we'll need to rewrite this step.
200-
#
201-
pytest -rfxEXs --durations=20 --disable-warnings --showlocals --pyargs gensim
202-
203-
- name: Upload wheels to s3://gensim-wheels
204-
#
205-
# Only do this if the credentials are set.
206-
# This means that PRs will still build wheels, but not upload them.
207-
# (PRs do not have access to secrets).
208-
#
209-
# The always() ensures this step runs even if a previous step fails.
210-
# We want to upload wheels whenever possible (even if e.g. tests failed)
211-
# because we don't want an innocuous test failure from blocking a release.
212-
#
213-
if: ${{ always() && env.WHEELHOUSE_UPLOADER_USERNAME && env.WHEELHOUSE_UPLOADER_SECRET }}
214-
run: |
215-
python -m pip install wheelhouse-uploader
216-
ls wheelhouse/*.whl
217-
python -m wheelhouse_uploader upload --local-folder wheelhouse/ --no-ssl-check gensim-wheels --provider S3 --no-enable-cdn
218-
env:
219-
WHEELHOUSE_UPLOADER_USERNAME: ${{ secrets.AWS_ACCESS_KEY_ID }}
220-
WHEELHOUSE_UPLOADER_SECRET: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
221-
222-
223-
#
224-
# The build process for windows is different to that of Linux and MacOS.
225-
# First, we cannot use multibuild (it does not support Windows).
226-
# This means we have to write our own building and testing steps, but in a
227-
# way it's simpler, because we don't need to care about configuring
228-
# multibuild ourselves.
229-
# Second, the syntax to enable virtual environments, etc. is different.
230-
#
231-
build_windows:
232-
timeout-minutes: 35
233-
runs-on: windows-latest
234-
defaults:
235-
run:
236-
shell: bash
237-
238-
needs: [linters]
239-
24023
strategy:
24124
fail-fast: false
24225
matrix:
243-
include:
244-
- python-version: "3.8"
245-
build-depends: numpy==1.17.3
246-
247-
- python-version: "3.9"
248-
build-depends: numpy==1.19.3
249-
250-
- python-version: "3.10"
251-
build-depends: numpy==1.22.2 scipy==1.8.0
252-
253-
- python-version: "3.11"
254-
build-depends: numpy==1.23.2 scipy==1.9.2
255-
256-
env:
257-
SKIP_NETWORK_TESTS: 1
258-
TEST_DEPENDS: pytest mock testfixtures
259-
BUILD_DEPENDS: ${{ matrix.build-depends }}
260-
26+
os: [ubuntu-20.04, windows-2019, macos-11]
26127
steps:
262-
- uses: actions/checkout@v3
263-
with:
264-
submodules: recursive
265-
fetch-depth: 0
266-
- name: Set up Python ${{ matrix.python-version }}
267-
uses: actions/setup-python@v4
268-
with:
269-
python-version: ${{ matrix.python-version }}
270-
- name: Install dependencies
271-
run: |
272-
python -m pip install --upgrade pip
273-
pip install virtualenv
27428

275-
- name: Build Wheel
276-
run: |
277-
echo ::group::Set up dependencies
278-
python --version
279-
python -c "import struct; print(struct.calcsize('P') * 8)"
280-
python -m pip install -U pip setuptools wheel wheelhouse_uploader ${{ env.BUILD_DEPENDS }}
281-
echo ::endgroup::
282-
echo ::group::Build wheel
283-
python setup.py bdist_wheel
284-
echo ::endgroup
285-
echo ::group::Install run
286-
ls dist
287-
python continuous_integration/install_wheel.py
288-
echo ::endgroup::
289-
#
290-
# For consistency with the multibuild step. The wheel uploader expects
291-
# the wheels to be under wheelhouse.
292-
#
293-
mv dist wheelhouse
29+
- name: Checkout
30+
uses: actions/checkout@v3
29431

295-
- name: Prepare for testing
296-
run: |
32+
- name: Set up QEMU
33+
if: runner.os == 'Linux'
34+
uses: docker/setup-qemu-action@v2
35+
with:
36+
platforms: all
37+
38+
- name: Build wheels
39+
uses: pypa/[email protected]
40+
env:
41+
CIBW_ARCHS_LINUX: x86_64 aarch64
42+
CIBW_ARCHS_MACOS: x86_64 arm64
43+
CIBW_ARCHS_WINDOWS: AMD64 x86 ARM64
44+
CIBW_BEFORE_BUILD: pip install numpy scipy
45+
CIBW_SKIP: pp* cp36-* cp37-* *-win32 *_i686 *-musllinux_*
46+
CIBW_TEST_COMMAND: pytest -rfxEXs --durations=20 --disable-warnings --showlocals --pyargs gensim
47+
CIBW_TEST_REQUIRES: pytest testfixtures mock
48+
CIBW_TEST_SKIP: cp38* cp39* cp310* *_aarch64 *_arm64 *_universal2
49+
50+
- name: Upload wheels to s3://gensim-wheels
29751
#
298-
# FIXME: Why are these eggs here?
52+
# Only do this if the credentials are set.
53+
# This means that PRs will still build wheels, but not upload them.
54+
# (PRs do not have access to secrets).
29955
#
300-
# These eggs prevent the wheel from building and running on Py3.10
56+
# The always() ensures this step runs even if a previous step fails.
57+
# We want to upload wheels whenever possible (even if e.g. tests failed)
58+
# because we don't want an innocuous test failure from blocking a release.
30159
#
302-
find . -type f -name "*.egg" -exec rm -v {} \;
303-
python -m venv test_environment
304-
305-
#
306-
# We need a separate testing step for windows because the command for
307-
# activating the virtual environment is slightly different
308-
#
309-
- name: Install and Test Wheel (Windows)
310-
run: |
311-
test_environment/Scripts/activate.bat
312-
python -m pip install --upgrade pip
313-
pip install pytest testfixtures mock
314-
pip install wheelhouse/*.whl
315-
cd test_environment
316-
python -c 'import gensim;print(gensim.__version__)'
317-
pytest -rfxEXs --durations=20 --disable-warnings --showlocals --pyargs gensim
318-
319-
- name: Upload wheels to s3://gensim-wheels
320-
#
321-
# Only do this if the credentials are set.
322-
# This means that PRs will still build wheels, but not upload them.
323-
# (PRs do not have access to secrets).
324-
#
325-
# The always() ensures this step runs even if a previous step fails.
326-
# We want to upload wheels whenever possible (even if e.g. tests failed)
327-
# because we don't want an innocuous test failure from blocking a release.
328-
#
329-
if: ${{ always() && env.WHEELHOUSE_UPLOADER_USERNAME && env.WHEELHOUSE_UPLOADER_SECRET }}
330-
run: |
331-
python -m pip install wheelhouse-uploader
332-
ls wheelhouse/*.whl
333-
python -m wheelhouse_uploader upload --local-folder wheelhouse/ --no-ssl-check gensim-wheels --provider S3 --no-enable-cdn
334-
env:
335-
WHEELHOUSE_UPLOADER_USERNAME: ${{ secrets.AWS_ACCESS_KEY_ID }}
336-
WHEELHOUSE_UPLOADER_SECRET: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
60+
if: ${{ always() && env.WHEELHOUSE_UPLOADER_USERNAME && env.WHEELHOUSE_UPLOADER_SECRET }}
61+
run: |
62+
python -m pip install wheelhouse-uploader
63+
ls wheelhouse/*.whl
64+
python -m wheelhouse_uploader upload --local-folder wheelhouse/ --no-ssl-check gensim-wheels --provider S3 --no-enable-cdn
65+
env:
66+
WHEELHOUSE_UPLOADER_USERNAME: ${{ secrets.AWS_ACCESS_KEY_ID }}
67+
WHEELHOUSE_UPLOADER_SECRET: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

0 commit comments

Comments
 (0)