diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index d0b7a55..f6fec18 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -6,104 +6,159 @@ on: tags: - "v*" -env: +env: CARGO_TERM_COLOR: always CARGO_INCREMENTAL: 0 jobs: - build-linux-release: - name: Build release for Linux - runs-on: ubuntu-latest - - steps: - - name: Checkout sources - uses: actions/checkout@v3 - - - name: Build mwalib - uses: docker://mwatelescope/maturin:latest - with: - entrypoint: /bin/bash - args: .github/workflows/build.sh - - - name: Upload tarball - uses: actions/upload-artifact@v2 - with: - name: linux.tar.gz - path: "*.tar.gz" - if-no-files-found: error - - build-macos-release: - name: Build release for MacOS - runs-on: macos-latest + build-release: + name: Build release for ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, macOS-14] steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 + fetch-tags: true + + - name: (macos) install automake and autoconf + if: ${{ startsWith(matrix.os, 'macOS') }} + run: | + brew install automake autoconf - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable - override: true - + override: true + - name: Add Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 + continue-on-error: true with: python-version: "3.8" - architecture: "x64" - name: Add Python 3.9 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 + continue-on-error: true with: python-version: "3.9" - architecture: "x64" - name: Add Python 3.10 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 + continue-on-error: true with: python-version: "3.10" - architecture: "x64" - name: Add Python 3.11 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 + continue-on-error: true with: python-version: "3.11" - architecture: "x64" - name: Add Python 3.12 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 + continue-on-error: true with: python-version: "3.12" - architecture: "x64" - - name: Build mwalib - run: ./.github/workflows/build.sh - shell: bash + - name: install cfitsio + env: + # TODO: CFITSIO_VERSION: 4.4.0 + CFITSIO_VERSION: 3.49 + run: | + cd /tmp + curl "https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio-${CFITSIO_VERSION}.tar.gz" -o cfitsio.tar.gz + tar -xf cfitsio.tar.gz + rm cfitsio.tar.gz + cd cfitsio-${CFITSIO_VERSION} + ./configure --prefix=/usr/local --enable-reentrant --disable-curl + sudo make shared + sudo make install + cd .. + + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + sudo ldconfig + fi + + - name: install maturin + run: | + python -m pip install --upgrade pip + python -m pip install maturin # [patchelf] ? + + - name: build mwalib + run: | + export TAG="$(git describe --tags)" + echo "TAG=$TAG" + + # determine which target cpus for rustc to build for from machine type + export ARCH="$(uname -m)" + case $ARCH in + x86_64) export TARGETS="x86-64 x86-64-v2 x86-64-v3" ;; + arm64) export TARGETS="apple-m1" ;; + *) echo "unknown arch (uname -m) $ARCH"; exit 1 ;; + esac + + # determine which library file extensions to include in archive from kernel + export KERNEL="$(uname -s | tr '[:upper:]' '[:lower:]')" + case $KERNEL in + darwin*) export LIB_GLOB="{a,dylib}" ;; + linux*) export LIB_GLOB="{a,so}" ;; + *) echo "unknown kernel (uname -s) $KERNEL"; exit 1 ;; + esac + + # determine which python versions are available + export PYTHONS=$(maturin list-python 2>&1 | grep CPython | cut -d' ' -f 4 | tr $'\n' ' ') + + for TARGET in $TARGETS; do + echo "building target $TARGET" + export RUSTFLAGS="-C target-cpu=$TARGET" + # Build python first + MWALIB_LINK_STATIC_CFITSIO=1 maturin build --release --features python,cfitsio-static --strip -i $PYTHONS + # Build C objects + MWALIB_LINK_STATIC_CFITSIO=1 cargo build --release --features examples,cfitsio-static + + # Create new release asset tarballs + eval mv target/wheels/*.whl target/release/libmwalib.${LIB_GLOB} include/mwalib.h . + eval tar -acvf mwalib-${TAG}-${KERNEL}-${TARGET}.tar.gz \ + LICENSE LICENSE-cfitsio README.md CHANGELOG.md \ + libmwalib.${LIB_GLOB} mwalib.h + eval tar -acvf mwalib-${TAG}-${KERNEL}-${TARGET}-python.tar.gz \ + LICENSE LICENSE-cfitsio README.md CHANGELOG.md \ + ./*.whl + done - name: Upload tarball - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: macos.tar.gz + name: ${{ matrix.os }}.tar.gz path: "*.tar.gz" if-no-files-found: error create-release: name: Create a new release runs-on: ubuntu-latest - needs: [build-linux-release, build-macos-release] + needs: [build-release] steps: - name: Download Linux artifact uses: actions/download-artifact@v2 with: - name: linux.tar.gz + name: ubuntu-latest.tar.gz - - name: Download Linux artifact + - name: Download MacOS arm64 artifact + uses: actions/download-artifact@v2 + with: + name: macOS-14.tar.gz + + - name: Download MacOS x86_64 artifact uses: actions/download-artifact@v2 with: - name: macos.tar.gz + name: macOS-latest.tar.gz - name: Provide new release asset uses: "marvinpinto/action-automatic-releases@latest" @@ -111,4 +166,4 @@ jobs: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | - *.tar.gz \ No newline at end of file + *.tar.gz