diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 401e7db..03d3495 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,16 +1,22 @@ -# build and publish manylinux_2_28_x86_64 with GraalVM, Maven and Poetry +# build and publish custom manylinux with GraalVM, Maven, and Poetry name: Docker on: workflow_dispatch: inputs: tag: - description: "Tag for the Docker image" + description: "Tag for the Many-Linux Docker image" required: true - default: "latest" jobs: login: - runs-on: ubuntu-latest + strategy: + matrix: + arch: + - os: ubuntu-latest + type: x86_64 + - os: ubuntu-24.04-arm + type: aarch64 + runs-on: ${{ matrix.arch.os }} steps: - name: Check out uses: actions/checkout@v4 @@ -32,6 +38,8 @@ jobs: uses: docker/build-push-action@v6 with: context: docker - file: docker/Dockerfile_manylinux_2_28_x86_64 + file: docker/Dockerfile_manylinux_2_34_${{ matrix.arch.type }} push: true - tags: ghcr.io/virtualcell/manylinux_2_28_x86_64:${{ github.event.inputs.tag }} + tags: | + ghcr.io/virtualcell/manylinux_2_34_${{ matrix.arch.type }}:${{ github.event.inputs.tag }} + ghcr.io/virtualcell/manylinux_2_34_${{ matrix.arch.type }}:latest diff --git a/.github/workflows/on-release-main.yml b/.github/workflows/on-release-main.yml index 07003dc..1c35f9e 100644 --- a/.github/workflows/on-release-main.yml +++ b/.github/workflows/on-release-main.yml @@ -10,7 +10,14 @@ jobs: build: strategy: matrix: - os: [macos-15-intel, windows-latest, ubuntu-latest, macos-15] + os: + [ + macos-15-intel, + windows-latest, + ubuntu-latest, + ubuntu-24.04-arm, + macos-15, + ] fail-fast: false runs-on: ${{ matrix.os }} defaults: @@ -45,15 +52,30 @@ jobs: - name: Set MACOSX_DEPLOYMENT_TARGET used by cibuildwheel if: ${{ startsWith(matrix.os, 'macos') }} - run: echo "MACOSX_DEPLOYMENT_TARGET=15.0" >> $GITHUB_ENV + run: | + echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV + echo "NATIVE_IMAGE_OPTIONS=--native-compiler-options=-mmacosx-version-min=13.0 -H:NativeLinkerOption=-mmacosx-version-min=13.0" >> $GITHUB_ENV + + - name: Set cibuildwheel archs + if: ${{ startsWith(matrix.os, 'ubuntu') }} + run: | + ARCH=$(uname -m) + echo "ARCH_DEF=$ARCH" >> $GITHUB_ENV - name: Run cibuildwheel + uses: pypa/cibuildwheel@v3.4.0 + if: ${{ startsWith(matrix.os, 'ubuntu') }} + env: + CIBW_BUILD: "cp311-*${{ env.ARCH_DEF }} cp312-*${{ env.ARCH_DEF }} cp313-*${{ env.ARCH_DEF }} cp314-*${{ env.ARCH_DEF }}" + # CIBW_BUILD_VERBOSITY_LINUX: 2 + + - name: Run cibuildwheel + if: ${{ !startsWith(matrix.os, 'ubuntu') }} run: | pip install cibuildwheel cibuildwheel --debug-traceback --output-dir wheelhouse env: - CIBW_BUILD_VERBOSITY_LINUX: 2 - + CIBW_BUILD: "cp311-* cp312-* cp313-* cp314-*" - name: Copy wheels to dist directory run: | mkdir -p dist diff --git a/docker/Dockerfile_manylinux_2_34_aarch64 b/docker/Dockerfile_manylinux_2_34_aarch64 new file mode 100644 index 0000000..5ceffd5 --- /dev/null +++ b/docker/Dockerfile_manylinux_2_34_aarch64 @@ -0,0 +1,26 @@ +FROM quay.io/pypa/manylinux_2_34_aarch64 + +ARG GRAALVM_VERSION=23.0.2 +ARG GRAALVM_BUILD=7.1 +ARG GRAALVM_ARCH=aarch64 +ARG MAVEN_VERSION=3.9.15 + +# install graalvm community edition +RUN cd /opt && \ + curl -L -o graalvm.tar.gz https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAALVM_VERSION}/graalvm-community-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz && \ + tar -xzf graalvm.tar.gz +ENV GRAALVM_HOME=/opt/graalvm-community-openjdk-${GRAALVM_VERSION}+${GRAALVM_BUILD} +ENV JAVA_HOME=${GRAALVM_HOME} +ENV PATH=${GRAALVM_HOME}/bin:$PATH + +# install Poetry +RUN dnf install python3.13 -y +RUN ln -s /usr/local/bin/python3.13 /usr/local/bin/python3 +RUN (curl -sSL https://install.python-poetry.org | python3 -) || ( echo "" && echo "" && echo "" && echo 'LogContents:' && cat /poetry-installer-error-*.log && exit 1) +ENV PATH=~/.local/bin:$PATH + +# Install Maven + +RUN cd /opt && curl -L -o apache-maven.tar.gz https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz && ls && tar -xzvf apache-maven.tar.gz +ENV MAVEN_HOME=/opt/apache-maven-${MAVEN_VERSION} +ENV PATH=${MAVEN_HOME}/bin:$PATH diff --git a/docker/Dockerfile_manylinux_2_34_x86_64 b/docker/Dockerfile_manylinux_2_34_x86_64 new file mode 100644 index 0000000..42c45d4 --- /dev/null +++ b/docker/Dockerfile_manylinux_2_34_x86_64 @@ -0,0 +1,26 @@ +FROM quay.io/pypa/manylinux_2_34_x86_64 + +ARG GRAALVM_VERSION=23.0.2 +ARG GRAALVM_BUILD=7.1 +ARG GRAALVM_ARCH=x64 +ARG MAVEN_VERSION=3.9.15 + +# install graalvm community edition +RUN cd /opt && \ + curl -L -o graalvm.tar.gz https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAALVM_VERSION}/graalvm-community-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz && \ + tar -xzf graalvm.tar.gz +ENV GRAALVM_HOME=/opt/graalvm-community-openjdk-${GRAALVM_VERSION}+${GRAALVM_BUILD} +ENV JAVA_HOME=${GRAALVM_HOME} +ENV PATH=${GRAALVM_HOME}/bin:$PATH + +# install Poetry +RUN dnf install python3.13 -y +RUN ln -s /usr/local/bin/python3.13 /usr/local/bin/python3 +RUN (curl -sSL https://install.python-poetry.org | python3 -) || ( echo "" && echo "" && echo "" && echo 'LogContents:' && cat /poetry-installer-error-*.log && exit 1) +ENV PATH=~/.local/bin:$PATH + +# Install Maven + +RUN cd /opt && curl -L -o apache-maven.tar.gz https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz && ls && tar -xzvf apache-maven.tar.gz +ENV MAVEN_HOME=/opt/apache-maven-${MAVEN_VERSION} +ENV PATH=${MAVEN_HOME}/bin:$PATH diff --git a/pyproject.toml b/pyproject.toml index e78e835..dbc4429 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "libvcell" -version = "0.0.15" +version = "0.0.15.2" description = "This is a python package which wraps a subset of VCell Java code as a native python package." authors = ["Jim Schaff ", "Ezequiel Valencia "] repository = "https://github.com/virtualcell/libvcell" @@ -40,15 +40,17 @@ mkdocstrings = {extras = ["python"], version = "^0.27.0"} [tool.cibuildwheel] build-frontend = "pip" -build = "cp311-* cp312-* cp313-*" -manylinux-x86_64-image = "ghcr.io/virtualcell/manylinux_2_28_x86_64:0.0.1" -skip = "cp311-musllinux_x86_64 cp312-musllinux_x86_64 cp313-musllinux_x86_64" - -[tool.cibuildwheel.linux] -archs = ["x86_64"] - -[tool.cibuildwheel.windows] -archs = ["AMD64"] +manylinux-x86_64-image = "ghcr.io/virtualcell/manylinux_2_34_x86_64:latest" +manylinux-pypy_x86_64-image = "ghcr.io/virtualcell/manylinux_2_34_x86_64:latest" +manylinux-aarch64-image = "ghcr.io/virtualcell/manylinux_2_34_aarch64:latest" +manylinux-pypy_aarch64-image = "ghcr.io/virtualcell/manylinux_2_34_aarch64:latest" +skip = "*-musllinux* *i686 *ppc64le *s390x *armv7l *riscv64" + +#[tool.cibuildwheel.linux] +#archs = ["x86_64"] +# +#[tool.cibuildwheel.windows] +#archs = ["AMD64"] [tool.setuptools.package-data] libvcell = ["lib/*"]