-
Notifications
You must be signed in to change notification settings - Fork 0
135 lines (121 loc) · 5.27 KB
/
Copy pathbuild-statsig-python-core.yml
File metadata and controls
135 lines (121 loc) · 5.27 KB
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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on: https://github.com/statsig-io/statsig-server-core/blob/0.22.0/.github/workflows/build.yml
# Upstream builds the Linux wheels with `maturin build --release --strip` inside its own
# manylinux2014 image; this is the same build driven by cibuildwheel.
name: Build statsig-python-core wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/statsig-python-core.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-statsig-python-core.yml'
- 'docs/packages/statsig-python-core.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-statsig-python-core.yml'
- 'docs/packages/statsig-python-core.yaml'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
env:
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64
jobs:
setup:
uses: $/.github/workflows/_setup.yml
with:
package: statsig-python-core
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
name: Build statsig-python-core ${{ matrix.version }} cp310-abi3-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 720
env:
STATSIG_VERSION: ${{ matrix.version }}
steps:
- name: Checkout statsig-server-core ${{ env.STATSIG_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: statsig-io/statsig-server-core
ref: ${{ env.STATSIG_VERSION }}
persist-credentials: false
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
sparse-checkout: patches/statsig-python-core
persist-credentials: false
- name: Apply patches
run: git apply -v python-wheels/patches/statsig-python-core/${{ env.STATSIG_VERSION }}/*.patch
# The pyproject.toml sits in statsig-pyo3/ while the ISC LICENSE is at the repo
# root, so maturin's licence glob finds nothing and upstream's wheels carry no
# licence text on any platform.
- name: Stage the project licence beside pyproject.toml
run: cp LICENSE statsig-pyo3/LICENSE
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
package-dir: statsig-pyo3
output-dir: wheelhouse/
# `[tool.maturin] features` carries pyo3/abi3-py310, so this one build covers
# every non-free-threaded CPython >= 3.10.
only: cp310-manylinux_riscv64
env:
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# Upstream's image bakes in rustup and a protoc release build; Rocky 10's CRB
# repo (enabled in the manylinux image) has protoc.
CIBW_BEFORE_ALL_LINUX: >-
yum install -y protobuf-compiler protobuf-devel &&
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
# PROTOC_INCLUDE is needed because protoc 3.19 resolves google/protobuf/*.proto
# from disk rather than from the binary.
CIBW_ENVIRONMENT: >-
PATH=$PATH:$HOME/.cargo/bin
PROTOC_INCLUDE=/usr/include
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
# tests/utils.py reads its fixtures through ../../statsig-rust/tests/data, so
# both trees are staged at their positions relative to the repo root.
CIBW_TEST_SOURCES: statsig-pyo3/tests statsig-rust/tests/data
CIBW_TEST_REQUIRES: pytest pytest-httpserver pytest-rerunfailures uvloop
CIBW_TEST_COMMAND: >-
python -c "from statsig_python_core import statsig_python_core as m;
assert m.__file__.endswith('.so'), m.__file__;
import importlib.metadata as md;
assert any('.dist-info/licenses/LICENSE' in str(p) for p in md.files('statsig_python_core'))" &&
cd statsig-pyo3 && python -m pytest tests -v --reruns 3
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: statsig_python_core-${{ env.STATSIG_VERSION }}-cp310-abi3-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish statsig-python-core ${{ matrix.version }}
needs: [setup, build_wheels]
if: needs.setup.outputs.versions != '[]'
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
permissions:
contents: write
pull-requests: write
uses: $/.github/workflows/_publish-wheel.yml
secrets:
app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }}
with:
artifact-pattern: statsig_python_core-${{ matrix.version }}-*-manylinux_riscv64