diff --git a/.github/workflows/build-wheel-linux.yml b/.github/workflows/build-wheel-linux.yml new file mode 100644 index 00000000..a99a014e --- /dev/null +++ b/.github/workflows/build-wheel-linux.yml @@ -0,0 +1,91 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +name: Build Python Wheel for Linux + +on: + # Trigger the workflow manually + workflow_dispatch: ~ + + # Allow to be called from another workflow + workflow_call: ~ + + # TODO automation trigger + +jobs: + + build: + + runs-on: [self-hosted, Linux, platform-builder-Rocky-8.6] + # TODO which manylinux do we want to build for? 2014? 2_28? 2_34? Matrix? + container: wheelmaker_2_28:0.1 + + name: Build manylinux_2_28 + + steps: + # TODO which project do we build odc wheel from -- this, or some bundle? Or can we obtain the compiled eckit artifact somehow? + - run: git clone --branch develop --depth=1 https://github.com/ecmwf/eckit.git /src/eckit + - run: /buildscripts/compile.sh ./eckit/python_wrapper/buildconfig + - uses: actions/checkout@v2 + - run: /buildscripts/compile.sh ./odc/python_wrapper/buildconfig + + ################################################################ + - run: /buildscripts/wheel-linux.sh ./odc/python_wrapper/buildconfig 3.11 + - uses: actions/upload-artifact@v4 + name: Upload wheel 3.11 + with: + name: wheel-manylinux2_28-3.11 + path: /build/wheel/*.whl + + # TODO other python versions, once the above is correct. + # NOTE if Matrix, then break into (compile & upload) ; (wheel & upload)[matix] steps + + test: + + needs: build + strategy: + fail-fast: false + matrix: + python-version: ["3.11"] # ["3.8", "3.9", "3.10", "3.11", "3.12"] # TODO enable + + name: Test with ${{ matrix.python-version }} + runs-on: [self-hosted, Linux, platform-builder-Rocky-8.6] + container: wheelmaker_2_28:0.1 + steps: + - uses: actions/checkout@v2 + - uses: actions/download-artifact@v4 + with: + name: wheel-manylinux2_28-${{ matrix.python-version }} + - run: /buildscripts/test-wheel.sh ${{ matrix.python-version }} + +# TODO enable and test +# deploy: +# +# if: ${{ github.ref_type == 'tag' || github.event_name == 'release' }} +# needs: [test, build] +# strategy: +# fail-fast: false +# matrix: +# python-version: ["3.11"] # ["3.8", "3.9", "3.10", "3.11", "3.12"] # TODO enable +# +# name: Deploy wheel ${{ matrix.python-version }} +# runs-on: [self-hosted, Linux, platform-builder-Rocky-8.6] +# container: wheelmaker_2_28:0.1 +# steps: +# - run: mkdir artifact-${{ matrix.python-version }} +# - uses: actions/checkout@v2 +# - uses: actions/download-artifact@v4 +# with: +# name: wheel-manylinux2_28-${{ matrix.python-version }} +# path: artifact-${{ matrix.python-version }} +# - run: | +# /buildsripts/upload-twine.sh ${{ matrix.python-version }} +# env: +# TWINE_USERNAME: __token__ +# TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} diff --git a/python_wrapper/buildconfig b/python_wrapper/buildconfig new file mode 100644 index 00000000..b1c402f4 --- /dev/null +++ b/python_wrapper/buildconfig @@ -0,0 +1,16 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# to be source'd by wheelmaker's compile.sh *and* wheel-linux.sh +# NOTE replace the whole thing with pyproject.toml? Less powerful, and quaint to use for sourcing ecbuild invocation +# TODO we duplicate information -- pyproject.toml's `name` and `packages` are derivable from $NAME and must stay consistent + +NAME="odc" +CMAKE_PARAMS="" +PYPROJECT_DIR="python_wrapper" +export eckit_ROOT="/target/eckit" diff --git a/python_wrapper/setup.cfg b/python_wrapper/setup.cfg new file mode 100644 index 00000000..181071c3 --- /dev/null +++ b/python_wrapper/setup.cfg @@ -0,0 +1,4 @@ +[metadata] +description = "odc" +long_description = file: README.md +author = file: AUTHORS diff --git a/python_wrapper/setup.py b/python_wrapper/setup.py new file mode 100644 index 00000000..c64ad6d7 --- /dev/null +++ b/python_wrapper/setup.py @@ -0,0 +1,2 @@ +from setup_utils import plain_setup +plain_setup()