Skip to content

Use official action to publish package in CI #13

Use official action to publish package in CI

Use official action to publish package in CI #13

name: Manylinux
on:
pull_request:
branches:
- 4.x
- 5.x
paths-ignore:
- '.github/workflows/build_wheels_windows*'
- '.github/workflows/build_wheels_macos*'
release:
types: [published, edited]
schedule:
- cron: '0 3 * * 6'
workflow_dispatch:
jobs:
Build:
runs-on: ${{ matrix.platform == 'aarch64' && 'opencv-cn-lin-arm64' || 'ubuntu-22.04' }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
python-version: ['3.9']
platform: [x86_64, aarch64]
manylinux: [2014, 2_28]
with_contrib: [0, 1]
without_gui: [0, 1]
build_sdist: [0]
include:
- platform: aarch64
manylinux: 2014
DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-aarch64:20250630
- platform: x86_64
manylinux: 2014
DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-x86-64:20250630
- platform: x86_64
manylinux: 2_28
DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux_2_28-x86-64:20251013
- platform: aarch64
manylinux: 2_28
DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux_2_28-aarch64:20251013
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
REPO_DIR: .
PROJECT_SPEC: opencv-python
MB_PYTHON_VERSION: ${{ matrix.python-version }}
TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
MB_ML_VER: ${{ matrix.manylinux }}
TRAVIS_BUILD_DIR: ${{ github.workspace }}
CONFIG_PATH: travis_config.sh
DOCKER_IMAGE: ${{ matrix.DOCKER_IMAGE }}
USE_CCACHE: 0
UNICODE_WIDTH: 32
PLAT: ${{ matrix.platform }}
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui }}
ENABLE_CONTRIB: ${{ matrix.with_contrib }}
steps:
- name: Cleanup
run: find . -mindepth 1 -delete
working-directory: ${{ github.workspace }}
- name: Setup environment
run: |
if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "ENABLE_ROLLING=1" >> $GITHUB_ENV
fi
- name: Checkout
uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 0
- name: Build a package
run: source scripts/build.sh
- name: Saving a wheel accordingly to matrix
uses: actions/upload-artifact@v4
with:
name: wheel-${{ matrix.platform }}-${{ matrix.manylinux }}-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }}
path: wheelhouse/opencv*.whl
Test:
needs: [Build]
runs-on: ${{ matrix.platform == 'aarch64' && 'opencv-cn-lin-arm64' || 'ubuntu-22.04' }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
platform: [x86_64, aarch64]
manylinux: [2014, 2_28]
with_contrib: [0, 1]
without_gui: [0, 1]
build_sdist: [0]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
MB_PYTHON_VERSION: ${{ matrix.python-version }}
NP_TEST_DEP: numpy==1.19.4
NP_TEST_DEP_LATEST: numpy==2.2.6
CONFIG_PATH: travis_config.sh
PLAT: ${{ matrix.platform }}
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui }}
ENABLE_CONTRIB: ${{ matrix.with_contrib }}
DOCKER_TEST_IMAGE: ${{ matrix.platform == 'aarch64' && 'quay.io/opencv-ci/multibuild-focal_arm64v8:2025-11-13' || '' }}
steps:
- name: Cleanup
run: find . -mindepth 1 -delete
working-directory: ${{ github.workspace }}
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Setup Environment variables
run: if [ "3.10" == "${{ matrix.python-version }}" -o "3.11" == "${{ matrix.python-version }}" -o "3.12" == "${{ matrix.python-version }}" -o "3.13" == "${{ matrix.python-version }}" ]; then echo "TEST_DEPENDS=$(echo $NP_TEST_DEP_LATEST)" >> $GITHUB_ENV; else echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV; fi
- name: Download a wheel accordingly to matrix
uses: actions/download-artifact@v4
with:
name: wheel-${{ matrix.platform }}-${{ matrix.manylinux }}-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }}
path: wheelhouse/
- name: Package installation and run tests
run: source scripts/install.sh
Build_sdist:
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
python-version: [3.8]
platform: [x64]
with_contrib: [0, 1]
without_gui: [0, 1]
build_sdist: [1]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
REPO_DIR: .
PROJECT_SPEC: opencv-python
PLAT: x86_64
MB_PYTHON_VERSION: ${{ matrix.python-version }}
TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
MB_ML_VER: 2014
NP_TEST_DEP: numpy==1.19.4
TRAVIS_BUILD_DIR: ${{ github.workspace }}
CONFIG_PATH: travis_config.sh
DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-x86-64:20250630
USE_CCACHE: 1
UNICODE_WIDTH: 32
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui || 0 }}
ENABLE_CONTRIB: ${{ matrix.with_contrib || 0 }}
steps:
- name: Cleanup
run: find . -mindepth 1 -delete
working-directory: ${{ github.workspace }}
- name: Setup environment
run: |
if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "ENABLE_ROLLING=1" >> $GITHUB_ENV
fi
- name: Checkout
uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform }}
- name: Build a package
run: |
set -e
# Build and package
set -x
python -m pip install --upgrade pip
python -m pip install scikit-build
python setup.py sdist --formats=gztar
set +x
# Install and run tests
set -x
echo "skipping tests because of sdist"
- name: saving artifacts
uses: actions/upload-artifact@v4
with:
name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }}
path: dist/opencv*.tar.gz
Release_rolling:
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
needs: [Build, Test]
runs-on: ubuntu-22.04
environment: opencv-python-rolling-release
permissions:
contents: read
id-token: write
defaults:
run:
shell: bash
steps:
- uses: actions/download-artifact@v4
with:
path: wheelhouse/
- name: Select only OpenCV wheels
run: |
mkdir dist dist-contrib dist-headless dist-contrib-headless
cp wheelhouse/wheel-*/opencv_python_rolling-* dist/
cp wheelhouse/wheel-*/opencv_contrib_python_rolling-* dist-contrib/
cp wheelhouse/wheel-*/opencv_python_headless_rolling-* dist-headless/
cp wheelhouse/wheel-*/opencv_contrib_python_headless_rolling-* dist-contrib-headless/
- name: Upload wheels for opencv_python_rolling
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_contrib_python_rolling
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-contrib/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_python_headless_rolling
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-headless/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_contrib_python_headless_rolling
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-contrib-headless/
print-hash: true
skip-existing: true
Pre-release:
if: github.event_name == 'release' && github.event.release.prerelease
needs: [Build, Build_sdist, Test]
runs-on: ubuntu-22.04
environment: test-opencv-python-release
permissions:
contents: read
id-token: write
defaults:
run:
shell: bash
steps:
- uses: actions/download-artifact@v4
with:
path: wheelhouse/
- name: Select only OpenCV wheels
run: |
mkdir dist
cp wheelhouse/wheel-*/opencv_* wheelhouse/wheel-*/opencv-* dist/
- name: Upload all wheels
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
print-hash: true
repository-url: https://test.pypi.org/legacy/
skip-existing: true
verbose: true
Release:
if: github.event_name == 'release' && !github.event.release.prerelease
needs: [Build, Build_sdist, Test]
runs-on: ubuntu-22.04
environment: opencv-python-release
permissions:
contents: read
id-token: write
defaults:
run:
shell: bash
steps:
- uses: actions/download-artifact@v4
with:
path: wheelhouse/
- name: Select only OpenCV wheels
run: |
mkdir dist dist-contrib dist-headless dist-contrib-headless
cp wheelhouse/wheel-*/opencv_python-* wheelhouse/wheel-*/opencv-python-[^h]* dist/
cp wheelhouse/wheel-*/opencv_contrib_python-* wheelhouse/wheel-*/opencv-contrib-python-[^h]* dist-contrib/
cp wheelhouse/wheel-*/opencv_python_headless-* wheelhouse/wheel-*/opencv-python-headless-* dist-headless/
cp wheelhouse/wheel-*/opencv_contrib_python_headless-* wheelhouse/wheel-*/opencv-contrib-python-headless-* dist-contrib-headless/
- name: Upload wheels for opencv_python
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_contrib_python
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-contrib/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_python_headless
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-headless/
print-hash: true
skip-existing: true
- name: Upload wheels for opencv_contrib_python_headless
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-contrib-headless/
print-hash: true
skip-existing: true