1a8c51b3fSopenharmony_ciname: Build and upload Python wheels
2a8c51b3fSopenharmony_ci
3a8c51b3fSopenharmony_cion:
4a8c51b3fSopenharmony_ci  workflow_dispatch:
5a8c51b3fSopenharmony_ci  release:
6a8c51b3fSopenharmony_ci    types:
7a8c51b3fSopenharmony_ci      - published
8a8c51b3fSopenharmony_ci
9a8c51b3fSopenharmony_cijobs:
10a8c51b3fSopenharmony_ci  build_sdist:
11a8c51b3fSopenharmony_ci    name: Build source distribution
12a8c51b3fSopenharmony_ci    runs-on: ubuntu-latest
13a8c51b3fSopenharmony_ci    steps:
14a8c51b3fSopenharmony_ci      - name: Check out repo
15a8c51b3fSopenharmony_ci        uses: actions/checkout@v2
16a8c51b3fSopenharmony_ci
17a8c51b3fSopenharmony_ci      - name: Install Python 3.9
18a8c51b3fSopenharmony_ci        uses: actions/setup-python@v2
19a8c51b3fSopenharmony_ci        with:
20a8c51b3fSopenharmony_ci          python-version: 3.9
21a8c51b3fSopenharmony_ci
22a8c51b3fSopenharmony_ci      - name: Build and check sdist
23a8c51b3fSopenharmony_ci        run: |
24a8c51b3fSopenharmony_ci          python setup.py sdist
25a8c51b3fSopenharmony_ci      - name: Upload sdist
26a8c51b3fSopenharmony_ci        uses: actions/upload-artifact@v2
27a8c51b3fSopenharmony_ci        with:
28a8c51b3fSopenharmony_ci          name: dist
29a8c51b3fSopenharmony_ci          path: dist/*.tar.gz
30a8c51b3fSopenharmony_ci
31a8c51b3fSopenharmony_ci  build_linux:
32a8c51b3fSopenharmony_ci    name: Build google-benchmark manylinux wheels
33a8c51b3fSopenharmony_ci    runs-on: ubuntu-latest
34a8c51b3fSopenharmony_ci
35a8c51b3fSopenharmony_ci    steps:
36a8c51b3fSopenharmony_ci      - name: Check out Google Benchmark
37a8c51b3fSopenharmony_ci        uses: actions/checkout@v2
38a8c51b3fSopenharmony_ci
39a8c51b3fSopenharmony_ci      - name: Set up Python 3.9
40a8c51b3fSopenharmony_ci        uses: actions/setup-python@v2
41a8c51b3fSopenharmony_ci        with:
42a8c51b3fSopenharmony_ci          python-version: 3.9
43a8c51b3fSopenharmony_ci
44a8c51b3fSopenharmony_ci      # TODO: Bazel does not seem to work in an emulated Docker environment, see
45a8c51b3fSopenharmony_ci      # https://github.com/bazelbuild/bazel/issues/11379
46a8c51b3fSopenharmony_ci#      - name: Set up QEMU
47a8c51b3fSopenharmony_ci#        uses: docker/setup-qemu-action@v1
48a8c51b3fSopenharmony_ci#        with:
49a8c51b3fSopenharmony_ci#          platforms: all
50a8c51b3fSopenharmony_ci
51a8c51b3fSopenharmony_ci      - name: Build Python wheels on ubuntu-latest
52a8c51b3fSopenharmony_ci        env:
53a8c51b3fSopenharmony_ci          CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
54a8c51b3fSopenharmony_ci          CIBW_SKIP: "*-musllinux_*"
55a8c51b3fSopenharmony_ci          # Bazel repo only exists on CentOS 7 for x86 and ppc, so no manylinux2010
56a8c51b3fSopenharmony_ci          # TODO: Build ppc64le, aarch64 using some other trick
57a8c51b3fSopenharmony_ci          CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
58a8c51b3fSopenharmony_ci          CIBW_ARCHS_LINUX: x86_64
59a8c51b3fSopenharmony_ci          CIBW_BEFORE_ALL: >
60a8c51b3fSopenharmony_ci            curl -O --retry-delay 5 --retry 5 https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo &&
61a8c51b3fSopenharmony_ci            cp vbatts-bazel-epel-7.repo /etc/yum.repos.d/bazel.repo &&
62a8c51b3fSopenharmony_ci            yum install -y bazel4
63a8c51b3fSopenharmony_ci          CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
64a8c51b3fSopenharmony_ci        run: |
65a8c51b3fSopenharmony_ci          pip install cibuildwheel
66a8c51b3fSopenharmony_ci          python -m cibuildwheel --output-dir wheelhouse
67a8c51b3fSopenharmony_ci
68a8c51b3fSopenharmony_ci      - name: Upload Linux wheels
69a8c51b3fSopenharmony_ci        uses: actions/upload-artifact@v2
70a8c51b3fSopenharmony_ci        with:
71a8c51b3fSopenharmony_ci          name: dist
72a8c51b3fSopenharmony_ci          path: wheelhouse/*.whl
73a8c51b3fSopenharmony_ci
74a8c51b3fSopenharmony_ci  build_macos:
75a8c51b3fSopenharmony_ci    name: Build google-benchmark macOS wheels
76a8c51b3fSopenharmony_ci    runs-on: macos-latest
77a8c51b3fSopenharmony_ci
78a8c51b3fSopenharmony_ci    steps:
79a8c51b3fSopenharmony_ci      - name: Check out Google Benchmark
80a8c51b3fSopenharmony_ci        uses: actions/checkout@v2
81a8c51b3fSopenharmony_ci
82a8c51b3fSopenharmony_ci      - name: Set up Python 3.9
83a8c51b3fSopenharmony_ci        uses: actions/setup-python@v2
84a8c51b3fSopenharmony_ci        with:
85a8c51b3fSopenharmony_ci          python-version: 3.9
86a8c51b3fSopenharmony_ci
87a8c51b3fSopenharmony_ci      - name: Build Python wheels on macOS
88a8c51b3fSopenharmony_ci        env:
89a8c51b3fSopenharmony_ci          CIBW_ARCHS_MACOS: "x86_64 arm64"
90a8c51b3fSopenharmony_ci          CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
91a8c51b3fSopenharmony_ci          # ARM64 requires Python 3.8 minimum
92a8c51b3fSopenharmony_ci          CIBW_SKIP: 'cp37-*-arm64'
93a8c51b3fSopenharmony_ci          CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
94a8c51b3fSopenharmony_ci          CIBW_TEST_SKIP: "*_arm64"
95a8c51b3fSopenharmony_ci        run: |
96a8c51b3fSopenharmony_ci          pip install cibuildwheel
97a8c51b3fSopenharmony_ci          python -m cibuildwheel --output-dir wheelhouse
98a8c51b3fSopenharmony_ci
99a8c51b3fSopenharmony_ci      - name: Upload macOS wheels
100a8c51b3fSopenharmony_ci        uses: actions/upload-artifact@v2
101a8c51b3fSopenharmony_ci        with:
102a8c51b3fSopenharmony_ci          name: dist
103a8c51b3fSopenharmony_ci          path: wheelhouse/*.whl
104a8c51b3fSopenharmony_ci
105a8c51b3fSopenharmony_ci  build_windows:
106a8c51b3fSopenharmony_ci    name: Build google-benchmark wheels on Windows
107a8c51b3fSopenharmony_ci    runs-on: windows-latest
108a8c51b3fSopenharmony_ci
109a8c51b3fSopenharmony_ci    steps:
110a8c51b3fSopenharmony_ci      - name: Check out Google Benchmark
111a8c51b3fSopenharmony_ci        uses: actions/checkout@v2
112a8c51b3fSopenharmony_ci
113a8c51b3fSopenharmony_ci      - name: Set up Python 3.9
114a8c51b3fSopenharmony_ci        uses: actions/setup-python@v2
115a8c51b3fSopenharmony_ci        with:
116a8c51b3fSopenharmony_ci          python-version: 3.9
117a8c51b3fSopenharmony_ci
118a8c51b3fSopenharmony_ci      - name: Build Python wheels on Windows
119a8c51b3fSopenharmony_ci        env:
120a8c51b3fSopenharmony_ci          CIBW_BUILD: 'cp37-* cp38-* cp39-* cp310-*'
121a8c51b3fSopenharmony_ci          CIBW_ARCHS_WINDOWS: AMD64
122a8c51b3fSopenharmony_ci          # otherwise, pip crashes the job by trying to remove an in-use bazel DLL
123a8c51b3fSopenharmony_ci          PIP_NO_CLEAN: true
124a8c51b3fSopenharmony_ci          CIBW_TEST_COMMAND: python {project}/bindings/python/google_benchmark/example.py
125a8c51b3fSopenharmony_ci        run: |
126a8c51b3fSopenharmony_ci          pip install cibuildwheel
127a8c51b3fSopenharmony_ci          python -m cibuildwheel --output-dir wheelhouse
128a8c51b3fSopenharmony_ci
129a8c51b3fSopenharmony_ci      - name: Upload wheels
130a8c51b3fSopenharmony_ci        uses: actions/upload-artifact@v2
131a8c51b3fSopenharmony_ci        with:
132a8c51b3fSopenharmony_ci          name: dist
133a8c51b3fSopenharmony_ci          path: wheelhouse/*.whl