Skip to content

Commit a7b1fc1

Browse files
committed
Use cached libs for building wheels
1 parent 909b4b4 commit a7b1fc1

File tree

2 files changed

+153
-1
lines changed

2 files changed

+153
-1
lines changed

.github/workflows/cache_libs.yml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
name: Cache library dependencies
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
LIBICONV_VERSION:
7+
default: "1.18"
8+
required: false
9+
type: string
10+
LIBXML2_VERSION:
11+
default: "2.14.6"
12+
required: false
13+
type: string
14+
LIBXSLT_VERSION:
15+
default: "1.1.43"
16+
required: false
17+
type: string
18+
OPENSSL_VERSION:
19+
default: "3.6.0"
20+
required: false
21+
type: string
22+
XMLSEC1_VERSION:
23+
default: "1.3.9"
24+
required: false
25+
type: string
26+
ZLIB_VERSION:
27+
default: "1.3.1"
28+
required: false
29+
type: string
30+
WIN_LIBICONV_VERSION:
31+
default: "1.18"
32+
required: false
33+
type: string
34+
WIN_LIBXML2_VERSION:
35+
default: "2.14.6"
36+
required: false
37+
type: string
38+
WIN_LIBXSLT_VERSION:
39+
default: "1.1.43"
40+
required: false
41+
type: string
42+
WIN_OPENSSL_VERSION:
43+
default: "3.6.0"
44+
required: false
45+
type: string
46+
WIN_XMLSEC1_VERSION:
47+
default: "1.3.9"
48+
required: false
49+
type: string
50+
WIN_ZLIB_VERSION:
51+
default: "1.3.1"
52+
required: false
53+
type: string
54+
55+
outputs:
56+
LIBICONV_VERSION:
57+
value: ${{ inputs.LIBICONV_VERSION }}
58+
LIBXML2_VERSION:
59+
value: ${{ inputs.LIBXML2_VERSION }}
60+
LIBXSLT_VERSION:
61+
value: ${{ inputs.LIBXSLT_VERSION }}
62+
OPENSSL_VERSION:
63+
value: ${{ inputs.OPENSSL_VERSION }}
64+
XMLSEC1_VERSION:
65+
value: ${{ inputs.XMLSEC1_VERSION }}
66+
ZLIB_VERSION:
67+
value: ${{ inputs.ZLIB_VERSION }}
68+
WIN_LIBICONV_VERSION:
69+
value: ${{ inputs.WIN_LIBICONV_VERSION }}
70+
WIN_LIBXML2_VERSION:
71+
value: ${{ inputs.WIN_LIBXML2_VERSION }}
72+
WIN_LIBXSLT_VERSION:
73+
value: ${{ inputs.WIN_LIBXSLT_VERSION }}
74+
WIN_OPENSSL_VERSION:
75+
value: ${{ inputs.WIN_OPENSSL_VERSION }}
76+
WIN_XMLSEC1_VERSION:
77+
value: ${{ inputs.WIN_XMLSEC1_VERSION }}
78+
WIN_ZLIB_VERSION:
79+
value: ${{ inputs.WIN_ZLIB_VERSION }}
80+
81+
jobs:
82+
cache_libs:
83+
strategy:
84+
fail-fast: false
85+
matrix:
86+
os:
87+
- "ubuntu-22.04"
88+
- "ubuntu-22.04-arm"
89+
- "macos-latest"
90+
- "windows-2022"
91+
- "windows-11-arm"
92+
93+
runs-on: ${{ matrix.os }}
94+
95+
env:
96+
LIBICONV_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_LIBICONV_VERSION || inputs.LIBICONV_VERSION }}
97+
LIBXML2_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_LIBXML2_VERSION || inputs.LIBXML2_VERSION }}
98+
LIBXSLT_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_LIBXSLT_VERSION || inputs.LIBXSLT_VERSION }}
99+
OPENSSL_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_OPENSSL_VERSION || inputs.OPENSSL_VERSION }}
100+
XMLSEC1_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_XMLSEC1_VERSION || inputs.XMLSEC1_VERSION }}
101+
ZLIB_VERSION: ${{ contains(matrix.os, 'windows-') && inputs.WIN_ZLIB_VERSION || inputs.ZLIB_VERSION }}
102+
103+
steps:
104+
- uses: actions/checkout@v6
105+
106+
- name: Cache [libs]
107+
uses: actions/cache@v4.3.0
108+
with:
109+
path: |
110+
libs/*.xz
111+
libs/*.gz
112+
libs/*.zip
113+
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ env.LIBXML2_VERSION }}-${{ env.LIBXSLT_VERSION }}
114+
115+
- uses: actions/setup-python@v6
116+
with:
117+
python-version: "3.13"
118+
119+
- name: Download latest libraries
120+
env:
121+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
122+
run: python buildlibxmlsec.py --download-only
123+
124+
- name: Check Windows library versions
125+
if: ${{ contains(matrix.os, 'windows-') }}
126+
run: |
127+
bash -c '
128+
for file in libs/zlib-${{ inputs.WIN_LIBICONV_VERSION }}.*.zip libs/iconv-${{ inputs.WIN_LIBXML2_VERSION }}.*.zip libs/libxml2-${{ inputs.WIN_LIBXSLT_VERSION }}.*.zip libs/libxslt-${{ inputs.WIN_OPENSSL_VERSION }}.*.zip libs/libxslt-${{ inputs.WIN_XMLSEC1_VERSION }}.*.zip libs/libxslt-${{ inputs.WIN_ZLIB_VERSION }}.*.zip; do
129+
[[ -f "$file" ]] || { echo "MISSING: $file" ; exit 1; }
130+
done
131+
'

.github/workflows/wheels.yml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ concurrency:
2222
permissions: {}
2323

2424
jobs:
25+
cache_libs:
26+
uses: ./.github/workflows/cache_libs.yml
27+
secrets: inherit
28+
2529
sdist:
2630
# Avoid Ubuntu 24.04 in sdist workflows, because it contains libxmlsec1-dev
2731
# v1.2.39, which has a bug that causes tests/test_pkcs11.py to fail.
@@ -98,9 +102,17 @@ jobs:
98102
99103
build_wheels:
100104
name: Build for ${{ matrix.only }}
101-
needs: generate_wheels_matrix
105+
needs: [cache_libs, generate_wheels_matrix]
102106
runs-on: ${{ matrix.os }}
103107

108+
env:
109+
LIBICONV_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_LIBICONV_VERSION || needs.cache_libs.outputs.LIBICONV_VERSION }}
110+
LIBXML2_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_LIBXML2_VERSION || needs.cache_libs.outputs.LIBXML2_VERSION }}
111+
LIBXSLT_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_LIBXSLT_VERSION || needs.cache_libs.outputs.LIBXSLT_VERSION }}
112+
OPENSSL_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_OPENSSL_VERSION || needs.cache_libs.outputs.OPENSSL_VERSION }}
113+
XMLSEC1_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_XMLSEC1_VERSION || needs.cache_libs.outputs.XMLSEC1_VERSION }}
114+
ZLIB_VERSION: ${{ contains(matrix.os, 'windows-') && needs.cache_libs.outputs.WIN_ZLIB_VERSION || needs.cache_libs.outputs.ZLIB_VERSION }}
115+
104116
strategy:
105117
fail-fast: false
106118
matrix:
@@ -112,6 +124,15 @@ jobs:
112124
with:
113125
fetch-depth: 0
114126

127+
- name: Cache [libs]
128+
uses: actions/cache/restore@v4.3.0
129+
with:
130+
path: |
131+
libs/*.xz
132+
libs/*.gz
133+
libs/*.zip
134+
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ env.LIBXML2_VERSION }}-${{ env.LIBXSLT_VERSION }}
135+
115136
- name: Set up QEMU
116137
if: runner.os == 'Linux'
117138
uses: docker/setup-qemu-action@v3.7.0

0 commit comments

Comments
 (0)