-
Notifications
You must be signed in to change notification settings - Fork 111
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CLIENT-2217] Bundle manylinux2014 wheels with OpenSSL 3.0 (#688)
CI/CD: Add workflow to build and install OpenSSL 3 with the manylinux2014 images
- Loading branch information
1 parent
ba127bf
commit 63032f2
Showing
3 changed files
with
103 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
ARG CPU_ARCH=x86_64 | ||
FROM quay.io/pypa/manylinux2014_$CPU_ARCH | ||
ARG OPENSSL_VERSION | ||
LABEL com.aerospike.clients.openssl-version=$OPENSSL_VERSION | ||
|
||
RUN yum install -y perl-core wget | ||
|
||
ARG OPENSSL_TAR_NAME=openssl-$OPENSSL_VERSION | ||
RUN wget https://www.openssl.org/source/$OPENSSL_TAR_NAME.tar.gz | ||
RUN tar xzvf $OPENSSL_TAR_NAME.tar.gz | ||
WORKDIR $OPENSSL_TAR_NAME | ||
|
||
# The default folder pointed to by --prefix contains a default openssl installation | ||
# But we're assuming it's fine to replace the default openssl that comes with the image | ||
# We aren't going to use this image in production, anyways | ||
RUN ./Configure | ||
RUN make | ||
# These tests are expected to fail because we are using a buggy version of nm | ||
# https://github.com/openssl/openssl/issues/18953 | ||
# devtoolset-11 contains a newer version of binutils 2.36, which contains a bug fix for nm | ||
# We don't use it though because we want to make sure the compiled openssl 3 library is compatible with manylinux2014's | ||
# default env | ||
RUN make V=1 TESTS='-test_symbol_presence*' test | ||
RUN make install |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
on: | ||
schedule: | ||
# * is a special character in YAML so you have to quote this string | ||
- cron: '0 17 * * 1-5' | ||
workflow_dispatch: | ||
|
||
jobs: | ||
main: | ||
env: | ||
# We want granular control over the openssl version bundled with our wheels | ||
OPENSSL_VERSION: '3.0.15' | ||
REGISTRY: ghcr.io | ||
strategy: | ||
matrix: | ||
arch-and-runner-os: [ | ||
[x86_64, ubuntu-24.04], | ||
[aarch64, aerospike_arm_runners_2] | ||
] | ||
fail-fast: false | ||
|
||
runs-on: ${{ matrix.arch-and-runner-os[1] }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
sparse-checkout: | | ||
.github/workflows | ||
- run: docker pull quay.io/pypa/manylinux2014_${{ matrix.arch-and-runner-os[0] }} | ||
|
||
- uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- uses: docker/metadata-action@v5 | ||
id: meta | ||
with: | ||
images: ${{ env.REGISTRY }}/aerospike/manylinux2014_${{ matrix.arch-and-runner-os[0] }} | ||
flavor: latest=true | ||
|
||
- name: Set up Docker Buildx so we can cache our Docker image layers | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Build and push | ||
uses: docker/build-push-action@v6 | ||
with: | ||
# Don't want to use default Git context or else it will clone the whole Python client repo again | ||
context: .github/workflows | ||
file: .github/workflows/manylinux2014-openssl.Dockerfile | ||
build-args: | | ||
OPENSSL_VERSION=${{ env.OPENSSL_VERSION }} | ||
CPU_ARCH=${{ matrix.arch-and-runner-os[0] }} | ||
# setup-buildx-action configures Docker to use the docker-container build driver | ||
# This driver doesn't publish an image locally by default | ||
# so we have to manually enable it | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
# Also cache intermediate layers to make development faster | ||
cache-from: type=gha | ||
cache-to: type=gha,mode=max |