Conda packaging #119
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
# SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
# SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause | |
name: Conda packaging | |
on: | |
workflow_dispatch: | |
inputs: | |
package: | |
type: choice | |
default: raw | |
options: | |
- raw | |
- helpers | |
pdfium_ver: | |
default: 'latest' | |
type: string | |
test: | |
default: true | |
type: boolean | |
publish: | |
default: false | |
type: boolean | |
py_version: | |
default: '3.12' | |
type: string | |
# This is required for setup-miniconda / conda init | |
# see https://github.com/conda-incubator/setup-miniconda#important | |
defaults: | |
run: | |
shell: bash -el {0} | |
# TODO it might be nice to support building both packages in one run and testing the helpers package with the newly-built raw package, but this may be fairly complicated | |
# TODO add ability to rebuild helpers with different pdfium version bounds | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ github.repository }} | |
fetch-depth: 0 | |
- name: Miniconda setup | |
uses: conda-incubator/setup-miniconda@v3 | |
with: | |
auto-update-conda: true | |
python-version: ${{ inputs.py_version }} | |
channels: pypdfium2-team,bblanchon | |
channel-priority: strict | |
- name: Prepare | |
run: | | |
python -VV | |
conda install -y conda-build conda-verify | |
git config --global user.email "geisserml@gmail.com" | |
git config --global user.name "geisserml" | |
python -m pip install -U -r req/setup.txt | |
- name: Build package | |
run: ./run craft --pdfium-ver "${{ inputs.pdfium_ver }}" conda_${{ inputs.package }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: conda_package | |
path: conda/${{ inputs.package }}/out/ | |
test: | |
if: ${{ inputs.test }} | |
needs: build | |
strategy: | |
fail-fast: false | |
matrix: | |
# NOTE On GH actions, macOS <=13 is Intel, whereas macOS >=14 will be ARM64 | |
os: ['ubuntu-latest', 'macos-13', 'macos-14', 'windows-latest'] | |
py: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ github.repository }} | |
- name: Miniconda setup | |
uses: conda-incubator/setup-miniconda@v3 | |
with: | |
auto-update-conda: true | |
python-version: ${{ matrix.py }} | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: conda_package | |
path: conda_dist/ | |
- name: Show debug info | |
run: | | |
python -VV | |
ls -l conda_dist/ | |
# according to the docs, --override-channels disables searching config file channels, and -c options priority decreases from left to right | |
- name: Install/Test raw package | |
if: inputs.package == 'raw' | |
run: | | |
conda install -y pypdfium2_${{ inputs.package }} --override-channels -c ./conda_dist/ -c bblanchon -c defaults | |
python conda/raw/minitest.py | |
- name: Install/Test helpers package | |
if: inputs.package == 'helpers' | |
run: | | |
conda install -y pytest pillow numpy | |
conda install -y pypdfium2_${{ inputs.package }} --override-channels -c ./conda_dist/ -c pypdfium2-team -c bblanchon -c defaults | |
pytest tests/ tests_old/ | |
publish: | |
if: ${{ inputs.publish }} | |
needs: [build, test] | |
runs-on: ubuntu-latest | |
# TODO upload as GH release as well | |
steps: | |
# FIXME custom channels probably not necessary here | |
- name: Miniconda setup | |
uses: conda-incubator/setup-miniconda@v3 | |
with: | |
auto-update-conda: true | |
python-version: ${{ matrix.py }} | |
channels: pypdfium2-team,bblanchon | |
channel-priority: strict | |
- name: Install deps | |
run: conda install -y anaconda-client | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: conda_package | |
path: conda_dist/ | |
- name: Upload to Anaconda | |
env: | |
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} | |
run: | | |
ARTIFACT_PATH=conda_dist/noarch/pypdfium2_${{ inputs.package }}-*.tar.bz2 | |
file $ARTIFACT_PATH | |
anaconda upload $ARTIFACT_PATH |