-
Notifications
You must be signed in to change notification settings - Fork 20
129 lines (108 loc) · 3.85 KB
/
publish_cuda_plugin.yml
File metadata and controls
129 lines (108 loc) · 3.85 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
name: Publish pyscfad-cuda-plugin
on:
release:
types:
- released
workflow_dispatch:
inputs:
build_x86_64:
description: "Build x86_64 wheels"
type: boolean
default: true
build_aarch64:
description: "Build aarch64 wheels"
type: boolean
default: true
jobs:
build_wheel_linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
py: ['3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v5
- name: Decide whether to build
id: decide
shell: bash
run: |
should_build=false
if [ "${{ github.event_name }}" = "release" ]; then
# On release: always build all matrix combinations
should_build=true
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
if [ "${{ matrix.arch }}" = "x86_64" ] && [ "${{ inputs.build_x86_64 }}" = "true" ]; then
should_build=true
elif [ "${{ matrix.arch }}" = "aarch64" ] && [ "${{ inputs.build_aarch64 }}" = "true" ]; then
should_build=true
fi
fi
echo "should_build=$should_build" >> "$GITHUB_OUTPUT"
- name: Set up QEMU
if: ${{ steps.decide.outputs.should_build == 'true' }}
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: Set up Docker Buildx
if: ${{ steps.decide.outputs.should_build == 'true' }}
uses: docker/setup-buildx-action@v3
- name: Build ${{ matrix.arch }} wheel for Python ${{ matrix.py }}
if: ${{ steps.decide.outputs.should_build == 'true' }}
run: |
ARCH=${{ matrix.arch }}
PY=${{ matrix.py }}
TAG=${PY/./}
if [ "$ARCH" = "x86_64" ]; then
IMAGE=quay.io/pypa/manylinux_2_28_x86_64
BAZEL_URL=https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64
PLATFORM_ARG=""
else
IMAGE=quay.io/pypa/manylinux_2_28_aarch64
BAZEL_URL=https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-arm64
PLATFORM_ARG="--platform linux/arm64"
fi
docker run --rm $PLATFORM_ARG \
-v ${{ github.workspace }}:/project \
-w /project \
"$IMAGE" \
bash -lc "
yum install -y curl
curl -Lo /usr/local/bin/bazel $BAZEL_URL
chmod +x /usr/local/bin/bazel
/opt/python/cp${TAG}-cp${TAG}/bin/pip install --no-cache-dir --upgrade pip setuptools wheel auditwheel
ln -sf /opt/python/cp${TAG}-cp${TAG}/bin/python3 /usr/local/bin/python3
cd /project/pyscfadlib
if [ \"$ARCH\" = \"aarch64\" ]; then
python3 build/build.py build --python_version=${PY} --target_cpu=aarch64
else
python3 build/build.py build --python_version=${PY}
fi
mkdir -p wheelhouse
auditwheel repair dist/*cp${TAG}*.whl -w wheelhouse/
"
- name: Upload wheel
if: ${{ steps.decide.outputs.should_build == 'true' }}
uses: actions/upload-artifact@v4
with:
name: cuda_plugin_${{ matrix.arch }}_${{ matrix.py }}
path: pyscfadlib/wheelhouse/*.whl
overwrite: true
publish_pypi_linux:
needs: build_wheel_linux
if: always()
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write
steps:
- name: Download wheels
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- run: ls -R dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true