diff --git a/.github/workflows/conda-build-test.yml b/.github/workflows/conda-build-test.yml new file mode 100644 index 0000000..8310c05 --- /dev/null +++ b/.github/workflows/conda-build-test.yml @@ -0,0 +1,215 @@ +name: Reusable conda build and test + +on: + workflow_call: + inputs: + runs-on: + description: Runner image to execute the jobs on + required: true + type: string + conda-subdir: + description: Conda platform subdir (e.g. linux-64, win-64, osx-64) + required: true + type: string + pkgs-dir: + description: Directory to cache conda packages in + required: true + type: string + channels-list: + description: Conda channels to build and test against + required: true + type: string + recipe-dir: + description: Path to the conda recipe directory + required: true + type: string + build-wheels: + description: Whether to build and upload wheel packages + required: false + default: false + type: boolean + +permissions: read-all + +env: + module-name: mkl + package-name: mkl-service + ver-json-path: 'version.json' + ver-script-part1: "import json; f = open('version.json', 'r'); j = json.load(f); f.close(); " + ver-script-part2: "d = j['mkl-service'][0]; print('='.join((d[s] for s in ('version', 'build'))))" + +jobs: + build: + name: Build + + strategy: + fail-fast: false + matrix: + python: ['3.10', '3.11', '3.12', '3.13'] + include: + - python: '3.14' + python_spec: '3.14.* *_cp314' + python_tag: '3.14' + - python: '3.14' + python_spec: '3.14.* *_cp314t' + python_tag: '3.14t' + + runs-on: ${{ inputs.runs-on }} + timeout-minutes: 15 + + defaults: + run: + shell: bash -el {0} + + env: + build-env-name: 'build' + CONDA_PKGS_DIRS: ${{ inputs.pkgs-dir }} + + steps: + - name: Checkout repo + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 + + - name: Setup miniconda + uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 + with: + miniforge-version: latest + activate-environment: ${{ env.build-env-name }} + channels: conda-forge + python-version: ${{ matrix.python }} + + - name: Cache conda packages + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + env: + CACHE_NUMBER: 0 # Increase to reset cache + with: + path: ${{ inputs.pkgs-dir }} + key: + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} + restore-keys: | + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- + + - name: Install conda-build + run: conda install -n base -y conda-build + + - name: Store conda paths as envs + run: | + echo "CONDA_BLD=$CONDA/conda-bld/${{ inputs.conda-subdir }}" >> "$GITHUB_ENV" + if [ "${{ inputs.build-wheels }}" = "true" ]; then + echo "WHEELS_OUTPUT_FOLDER=${{ github.workspace }}" >> "$GITHUB_ENV" + fi + + - name: Build conda package + run: | + conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" ${{ inputs.channels-list }} ${{ inputs.recipe-dir }} + + - name: Upload artifact + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: ${{ env.package-name }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} + path: ${{ env.CONDA_BLD }}/${{ env.package-name }}-*.conda + + - name: Upload wheels artifact + if: ${{ inputs.build-wheels }} + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: ${{ env.package-name }} ${{ runner.os }} Wheels Python ${{ matrix.python_tag || matrix.python }} + path: ${{ env.WHEELS_OUTPUT_FOLDER }}/mkl_service-*.whl + + test: + name: Test + needs: build + + strategy: + fail-fast: false + matrix: + python: ['3.10', '3.11', '3.12', '3.13'] + include: + - python: '3.14' + python_spec: '3.14.* *_cp314' + python_tag: '3.14' + - python: '3.14' + python_spec: '3.14.* *_cp314t' + python_tag: '3.14t' + + runs-on: ${{ inputs.runs-on }} + timeout-minutes: 15 + + defaults: + run: + shell: bash -el {0} + + env: + test-env-name: 'test' + channel-path: './channel' + pkg-path-in-channel: './channel/${{ inputs.conda-subdir }}' + CONDA_PKGS_DIRS: ${{ inputs.pkgs-dir }} + + steps: + - name: Download artifact + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: ${{ env.package-name }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} + path: ${{ env.pkg-path-in-channel }} + + - name: Setup miniconda + uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 + with: + miniforge-version: latest + channels: conda-forge + activate-environment: ${{ env.test-env-name }} + python-version: ${{ matrix.python }} + + - name: Install conda-index + run: conda install -n base -y conda-index + + - name: Create conda channel + run: | + conda run -n base python -m conda_index ${{ env.channel-path }} + + - name: Test conda channel + run: | + conda search ${{ env.package-name }} -c ${{ env.channel-path }} --override-channels --info --json > ${{ env.ver-json-path }} + cat ${{ env.ver-json-path }} + + - name: Get package version + run: | + PACKAGE_VERSION=$(python -c "${{ env.ver-script-part1 }} ${{ env.ver-script-part2 }}") + export PACKAGE_VERSION + + echo "PACKAGE_VERSION=${PACKAGE_VERSION}" + echo "PACKAGE_VERSION=$PACKAGE_VERSION" >> "$GITHUB_ENV" + + - name: Collect dependencies + run: | + conda install ${{ env.package-name }}=${{ env.PACKAGE_VERSION }} pytest "python=${{ matrix.python_spec || matrix.python }}" ${{ env.CHANNELS }} --only-deps --dry-run > lockfile + cat lockfile + env: + CHANNELS: '-c ${{ env.channel-path }} ${{ inputs.channels-list }}' + + - name: Cache conda packages + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + env: + CACHE_NUMBER: 0 # Increase to reset cache + with: + path: ${{ inputs.pkgs-dir }} + key: + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} + restore-keys: | + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- + ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- + + - name: Install mkl-service + run: | + conda install ${{ env.package-name }}=${{ env.PACKAGE_VERSION }} pytest "python=${{ matrix.python_spec || matrix.python }}" ${{ env.CHANNELS }} + env: + CHANNELS: '-c ${{ env.channel-path }} ${{ inputs.channels-list }}' + + - name: List installed packages + run: conda list + + - name: Run tests + run: | + pytest -vv --pyargs ${{ env.module-name }} diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 46bbf08..cb16da9 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -8,480 +8,37 @@ on: permissions: read-all -env: - PACKAGE_NAME: mkl-service - MODULE_NAME: mkl - TEST_ENV_NAME: test_mkl_service - VER_SCRIPT1: "import json; f = open('ver.json', 'r'); j = json.load(f); f.close(); " - VER_SCRIPT2: "d = j['mkl-service'][0]; print('='.join((d[s] for s in ('version', 'build'))))" +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: - build_linux: - runs-on: ubuntu-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 - with: - access_token: ${{ github.token }} - - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - - name: Set pkgs_dirs - run: | - echo "pkgs_dirs: [~/.conda/pkgs]" >> ~/.condarc - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: ~/.conda/pkgs - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Add conda to system path - run: echo "$CONDA/bin" >> "$GITHUB_PATH" - - - name: Install conda-build - run: conda install conda-build - - - name: Store conda paths as envs - shell: bash -el {0} - run: | - echo "CONDA_BLD=/usr/share/miniconda/conda-bld/linux-64/" >> "$GITHUB_ENV" - - - name: Build conda package - run: | - CHANNELS=(-c conda-forge --override-channels) - VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}") - TEST=(--no-test) - - conda build \ - "${TEST[@]}" \ - "${VERSIONS[@]}" \ - "${CHANNELS[@]}" \ - conda-recipe-cf - - - name: Upload artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.CONDA_BLD }}${{ env.PACKAGE_NAME }}-*.conda - - build_windows: - runs-on: windows-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 - with: - access_token: ${{ github.token }} - - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - activate-environment: build - channels: conda-forge - python-version: ${{ matrix.python }} - - - name: Update conda - run: | - conda update -n base --all - - - name: Install conda build - run: | - conda install -n base -y conda-build - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 3 # Increase to reset cache - with: - path: /home/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Store conda paths as envs - shell: bash -el {0} - run: | - echo "CONDA_BLD=$CONDA\\conda-bld\\win-64\\" >> "$GITHUB_ENV" - - - name: Show Conda info - run: | - conda info --all - - - name: List base environment packages - run: | - conda list -n base - - - name: Build conda package - run: conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" -c conda-forge --override-channels conda-recipe-cf - - - name: Upload artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.CONDA_BLD }}${{ env.PACKAGE_NAME }}-*.conda - - test_linux: - needs: build_linux - runs-on: ubuntu-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - experimental: [false] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - experimental: false - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - experimental: false - continue-on-error: ${{ matrix.experimental }} - env: - CHANNELS: -c conda-forge --override-channels - - steps: - - name: Download artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - - - name: Add conda to system path - run: echo "$CONDA/bin" >> "$GITHUB_PATH" - - - name: Install conda-build - run: conda install conda-build - - - name: Create conda channel - run: | - mkdir -p "$GITHUB_WORKSPACE/channel/linux-64" - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - mv "${PACKAGE_NAME}"-*.conda "$GITHUB_WORKSPACE/channel/linux-64" || exit 1 - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - # Test channel - conda search "$PACKAGE_NAME" -c "$GITHUB_WORKSPACE/channel" --override-channels --info --json > "$GITHUB_WORKSPACE/ver.json" - cat ver.json - - - name: Collect dependencies - run: | - . "$CONDA/etc/profile.d/conda.sh" - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" --only-deps --dry-run > lockfile - cat lockfile - - - name: Set pkgs_dirs - run: | - echo "pkgs_dirs: [~/.conda/pkgs]" >> ~/.condarc - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: ~/.conda/pkgs - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Install mkl-service - run: | - . "$CONDA/etc/profile.d/conda.sh" - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" pytest "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" - # Test installed packages - conda list - - - name: Run tests - run: | - . "$CONDA/etc/profile.d/conda.sh" - conda activate ${{ env.TEST_ENV_NAME }} - pytest -vv --pyargs ${{ env.MODULE_NAME }} - - test_windows: - needs: build_windows - runs-on: windows-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - experimental: [false] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - experimental: false - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - experimental: false - continue-on-error: ${{ matrix.experimental }} - env: - CHANNELS: -c conda-forge --override-channels - - steps: - - name: Download artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - channels: conda-forge - activate-environment: base - - - name: Install conda-index - run: conda install -n base conda-index - - - name: Create conda channel - run: | - mkdir ${{ env.GITHUB_WORKSPACE }}/channel/win-64 - move ${{ env.PACKAGE_NAME }}-*.conda ${{ env.GITHUB_WORKSPACE }}/channel/win-64 - conda index ${{ env.GITHUB_WORKSPACE }}/channel - - # Test channel - conda search ${{ env.PACKAGE_NAME }} -c ${{ env.GITHUB_WORKSPACE }}/channel --override-channels --info --json > ${{ env.GITHUB_WORKSPACE }}/ver.json - more ${{ env.GITHUB_WORKSPACE }}/ver.json - - - name: Collect dependencies - shell: cmd - run: | - @ECHO ON - copy /Y ${{ env.GITHUB_WORKSPACE }}\ver.json . - set "SCRIPT=%VER_SCRIPT1% %VER_SCRIPT2%" - FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "%SCRIPT%"`) DO ( - SET PACKAGE_VERSION=%%F - ) - conda create -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% "python=${{ matrix.python_spec || matrix.python }}" -c ${{ env.GITHUB_WORKSPACE }}/channel ${{ env.CHANNELS }} --only-deps --dry-run > lockfile - more lockfile - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 3 # Increase to reset cache - with: - path: /home/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Install mkl-service - shell: cmd - run: | - @ECHO ON - copy /Y ${{ env.GITHUB_WORKSPACE }}\ver.json . - set "SCRIPT=%VER_SCRIPT1% %VER_SCRIPT2%" - FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "%SCRIPT%"`) DO ( - SET PACKAGE_VERSION=%%F - ) - conda create -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% pytest "python=${{ matrix.python_spec || matrix.python }}" -c ${{ env.GITHUB_WORKSPACE }}/channel ${{ env.CHANNELS }} - # Test installed packages - conda list - - - name: Run tests - run: | - conda activate ${{ env.TEST_ENV_NAME }} - pytest -v --pyargs ${{ env.MODULE_NAME }} - - build_osx: - runs-on: macos-26-intel - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 - with: - access_token: ${{ github.token }} - - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - activate-environment: build - channels: conda-forge - python-version: ${{ matrix.python }} - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: /Users/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Install conda-build - shell: bash -el {0} - run: | - conda install -n base -y conda-build - conda list -n base - - - name: Store conda paths as envs - shell: bash -el {0} - run: | - echo "CONDA_BLD=$CONDA/conda-bld/osx-64/" >> "$GITHUB_ENV" - - - name: Build conda package - shell: bash -el {0} - run: | - CHANNELS=(-c conda-forge --override-channels) - VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}") - TEST=(--no-test) - - conda build \ - "${TEST[@]}" \ - "${VERSIONS[@]}" \ - "${CHANNELS[@]}" \ - conda-recipe-cf - - - name: Upload artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.CONDA_BLD }}${{ env.PACKAGE_NAME }}-*.conda - - test_osx: - needs: build_osx - runs-on: macos-26-intel - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - experimental: [false] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - experimental: false - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - experimental: false - continue-on-error: ${{ matrix.experimental }} - env: - CHANNELS: -c conda-forge --override-channels - - steps: - - name: Download artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - channels: conda-forge - activate-environment: base - - - name: Install conda-index - shell: bash -el {0} - run: conda install -n base -y conda-index - - - name: Create conda channel - shell: bash -el {0} - run: | - mkdir -p "$GITHUB_WORKSPACE/channel/osx-64" - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - mv "${PACKAGE_NAME}"-*.conda "$GITHUB_WORKSPACE/channel/osx-64" || exit 1 - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - # Test channel - conda search "$PACKAGE_NAME" -c "$GITHUB_WORKSPACE/channel" --override-channels --info --json > "$GITHUB_WORKSPACE/ver.json" - cat ver.json - - - name: Collect dependencies - shell: bash -el {0} - run: | - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" --only-deps --dry-run > lockfile - cat lockfile - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: /Users/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Install mkl-service - shell: bash -el {0} - run: | - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" pytest "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" - # Test installed packages - conda list -n "${{ env.TEST_ENV_NAME }}" - - - name: Run tests - shell: bash -el {0} - run: | - conda activate ${{ env.TEST_ENV_NAME }} - pytest -vv --pyargs ${{ env.MODULE_NAME }} + linux: + name: linux + uses: ./.github/workflows/conda-build-test.yml + with: + runs-on: ubuntu-latest + conda-subdir: linux-64 + pkgs-dir: /home/runner/conda_pkgs_dir + channels-list: -c conda-forge --override-channels + recipe-dir: conda-recipe-cf + + windows: + name: windows + uses: ./.github/workflows/conda-build-test.yml + with: + runs-on: windows-latest + conda-subdir: win-64 + pkgs-dir: D:\conda_pkgs_dir + channels-list: -c conda-forge --override-channels + recipe-dir: conda-recipe-cf + + osx: + name: osx + uses: ./.github/workflows/conda-build-test.yml + with: + runs-on: macos-26-intel + conda-subdir: osx-64 + pkgs-dir: /Users/runner/conda_pkgs_dir + channels-list: -c conda-forge --override-channels + recipe-dir: conda-recipe-cf diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index 114f73f..9a069ce 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -1,4 +1,4 @@ -name: Conda package +name: Conda package using Intel on: push: @@ -8,328 +8,29 @@ on: permissions: read-all -env: - PACKAGE_NAME: mkl-service - MODULE_NAME: mkl - TEST_ENV_NAME: test_mkl_service - VER_SCRIPT1: "import json; f = open('ver.json', 'r'); j = json.load(f); f.close(); " - VER_SCRIPT2: "d = j['mkl-service'][0]; print('='.join((d[s] for s in ('version', 'build'))))" +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: - build_linux: - runs-on: ubuntu-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 - with: - access_token: ${{ github.token }} - - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - - name: Set pkgs_dirs - run: | - echo "pkgs_dirs: [~/.conda/pkgs]" >> ~/.condarc - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: ~/.conda/pkgs - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Add conda to system path - run: echo "$CONDA/bin" >> "$GITHUB_PATH" - - - name: Install conda-build - run: conda install conda-build - - - name: Store conda paths as envs - shell: bash -el {0} - run: | - echo "CONDA_BLD=/usr/share/miniconda/conda-bld/linux-64/" >> "$GITHUB_ENV" - echo "WHEELS_OUTPUT_FOLDER=$GITHUB_WORKSPACE/" >> "$GITHUB_ENV" - - - name: Build conda package - run: | - CHANNELS=(-c conda-forge -c https://software.repos.intel.com/python/conda --override-channels) - VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}") - TEST=(--no-test) - - conda build \ - "${TEST[@]}" \ - "${VERSIONS[@]}" \ - "${CHANNELS[@]}" \ - conda-recipe - - - name: Upload artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.CONDA_BLD }}${{ env.PACKAGE_NAME }}-*.conda - - - name: Upload wheels artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Wheels Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.WHEELS_OUTPUT_FOLDER }}mkl_service-*.whl - - build_windows: - runs-on: windows-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 - with: - access_token: ${{ github.token }} - - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - activate-environment: build - channels: conda-forge - python-version: ${{ matrix.python }} - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 3 # Increase to reset cache - with: - path: /home/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('**/meta.yaml') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Store conda paths as envs - shell: bash -el {0} - run: | - echo "CONDA_BLD=$CONDA\\conda-bld\\win-64\\" >> "$GITHUB_ENV" - echo "WHEELS_OUTPUT_FOLDER=$GITHUB_WORKSPACE\\" >> "$GITHUB_ENV" - - - name: Install conda build - run: | - conda install -n base -y conda-build - conda list -n base - - - name: Build conda package - run: conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels conda-recipe - - - name: Upload artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.CONDA_BLD }}${{ env.PACKAGE_NAME }}-*.conda - - - name: Upload wheels artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Wheels Python ${{ matrix.python_tag || matrix.python }} - path: ${{ env.WHEELS_OUTPUT_FOLDER }}mkl_service-*.whl - - test_linux: - needs: build_linux - runs-on: ubuntu-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - experimental: [false] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - experimental: false - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - experimental: false - continue-on-error: ${{ matrix.experimental }} - env: - CHANNELS: -c conda-forge -c https://software.repos.intel.com/python/conda --override-channels - - steps: - - name: Download artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - - - name: Add conda to system path - run: echo "$CONDA/bin" >> "$GITHUB_PATH" - - - name: Install conda-build - run: conda install conda-build - - - name: Create conda channel - run: | - mkdir -p "$GITHUB_WORKSPACE/channel/linux-64" - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - mv "${PACKAGE_NAME}"-*.conda "$GITHUB_WORKSPACE/channel/linux-64" || exit 1 - conda index "$GITHUB_WORKSPACE/channel" || exit 1 - # Test channel - conda search "$PACKAGE_NAME" -c "$GITHUB_WORKSPACE/channel" --override-channels --info --json > "$GITHUB_WORKSPACE/ver.json" - cat ver.json - - - name: Collect dependencies - run: | - . "$CONDA/etc/profile.d/conda.sh" - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge -c https://software.repos.intel.com/python/conda --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" --only-deps --dry-run > lockfile - cat lockfile - - - name: Set pkgs_dirs - run: | - echo "pkgs_dirs: [~/.conda/pkgs]" >> ~/.condarc - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 0 # Increase to reset cache - with: - path: ~/.conda/pkgs - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - - name: Install mkl-service - run: | - . "$CONDA/etc/profile.d/conda.sh" - CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c conda-forge -c https://software.repos.intel.com/python/conda --override-channels) - PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")" - export PACKAGE_VERSION - conda create -n "${{ env.TEST_ENV_NAME }}" "$PACKAGE_NAME=$PACKAGE_VERSION" pytest "python=${{ matrix.python_spec || matrix.python }}" "${CHANNELS[@]}" - # Test installed packages - conda list - - - name: Run tests - run: | - . "$CONDA/etc/profile.d/conda.sh" - conda activate ${{ env.TEST_ENV_NAME }} - pytest -vv --pyargs ${{ env.MODULE_NAME }} - - test_windows: - needs: build_windows - runs-on: windows-latest - - strategy: - matrix: - python: ['3.10', '3.11', '3.12', '3.13'] - experimental: [false] - include: - - python: '3.14' - python_spec: '3.14.* *_cp314' - python_tag: '3.14' - experimental: false - - python: '3.14' - python_spec: '3.14.* *_cp314t' - python_tag: '3.14t' - experimental: false - continue-on-error: ${{ matrix.experimental }} - env: - CHANNELS: -c conda-forge -c https://software.repos.intel.com/python/conda --override-channels - - steps: - - name: Download artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python_tag || matrix.python }} - - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 - with: - miniforge-version: latest - channels: conda-forge - activate-environment: base - - - name: Install conda-index - run: conda install -n base conda-index - - - name: Create conda channel - run: | - mkdir ${{ env.GITHUB_WORKSPACE }}/channel/win-64 - move ${{ env.PACKAGE_NAME }}-*.conda ${{ env.GITHUB_WORKSPACE }}/channel/win-64 - conda index ${{ env.GITHUB_WORKSPACE }}/channel - - # Test channel - conda search ${{ env.PACKAGE_NAME }} -c ${{ env.GITHUB_WORKSPACE }}/channel --override-channels --info --json > ${{ env.GITHUB_WORKSPACE }}/ver.json - more ${{ env.GITHUB_WORKSPACE }}/ver.json - - - name: Collect dependencies - shell: cmd - run: | - @ECHO ON - copy /Y ${{ env.GITHUB_WORKSPACE }}\ver.json . - set "SCRIPT=%VER_SCRIPT1% %VER_SCRIPT2%" - FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "%SCRIPT%"`) DO ( - SET PACKAGE_VERSION=%%F - ) - conda create -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% "python=${{ matrix.python_spec || matrix.python }}" -c ${{ env.GITHUB_WORKSPACE }}/channel ${{ env.CHANNELS }} --only-deps --dry-run > lockfile - more lockfile - - - name: Cache conda packages - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - env: - CACHE_NUMBER: 3 # Increase to reset cache - with: - path: /home/runner/conda_pkgs_dir - key: - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}-${{hashFiles('lockfile') }} - restore-keys: | - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-python-${{ matrix.python_tag || matrix.python }}- - ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}- - - # add intel-openmp as an explicit dependency - # to avoid it being missed when package version is specified exactly - - name: Install mkl-service - shell: cmd - run: | - @ECHO ON - copy /Y ${{ env.GITHUB_WORKSPACE }}\ver.json . - set "SCRIPT=%VER_SCRIPT1% %VER_SCRIPT2%" - FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "%SCRIPT%"`) DO ( - SET PACKAGE_VERSION=%%F - ) - SET "WORKAROUND_DEPENDENCIES=intel-openmp" - conda create -n ${{ env.TEST_ENV_NAME }} ${{ env.PACKAGE_NAME }}=%PACKAGE_VERSION% %WORKAROUND_DEPENDENCIES% pytest "python=${{ matrix.python_spec || matrix.python }}" -c ${{ env.GITHUB_WORKSPACE }}/channel ${{ env.CHANNELS }} - # Test installed packages - conda list - - - name: Run tests - run: | - conda activate ${{ env.TEST_ENV_NAME }} - pytest -v --pyargs ${{ env.MODULE_NAME }} + linux: + name: linux + uses: ./.github/workflows/conda-build-test.yml + with: + runs-on: ubuntu-latest + conda-subdir: linux-64 + pkgs-dir: /home/runner/conda_pkgs_dir + channels-list: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels + recipe-dir: conda-recipe + build-wheels: true + + windows: + name: windows + uses: ./.github/workflows/conda-build-test.yml + with: + runs-on: windows-latest + conda-subdir: win-64 + pkgs-dir: D:\conda_pkgs_dir + channels-list: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels + recipe-dir: conda-recipe + build-wheels: true