Skip to content

Added GitHub Actions build. #2

Added GitHub Actions build.

Added GitHub Actions build. #2

Workflow file for this run

# Copyright 2021-2023 Jetperch LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# GitHub actions
# See documentation: https://docs.github.com/en/actions
# https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
# CMake example: https://github.com/Mizux/cmake-cpp/blob/main/.github/workflows/amd64_windows.yml
name: Packaging
on: ['push', 'pull_request']
env:
PYTHON_VERSION: '3.11'
jobs:
build_sdist:
name: Build sdist
runs-on: ubuntu-latest
steps:
- name: Display info
run: |
echo "github.event_name=$GITHUB_EVENT_NAME"
echo "github.ref=$GITHUB_REF"
echo "github.ref_type=$GITHUB_REF_TYPE"
echo "runner.os=$RUNNER_OS"
echo "runner.arch=$RUNNER_ARCH"
- name: Install Ubuntu dependencies
run: sudo apt install -y libudev-dev libusb-1.0-0-dev
- name: Checkout repo
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Display version
run: python -VV
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build wheel pytest
- name: Build sdist
run: python -m build --sdist
- name: Install the wheel
run: python -m pip install -f dist joulescope
- name: Run python unit tests
run: pytest --pyargs joulescope
working-directory: dist # ensure use the installed package
- name: Upload python source package
uses: actions/upload-artifact@v3
with:
name: sdist
path: dist/*.tar.gz
if-no-files-found: error
build_wheels:
name: Build on ${{ matrix.os }}
needs:
- build_sdist
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "windows-latest", "macos-latest"]
steps:
- name: Download sdist
uses: actions/download-artifact@v3
with:
name: sdist
path: dist/
- name: Find sdist filename
shell: bash
id: find_sdist_filename
run: echo "filename=$(ls dist/*.tar.gz)" >> $GITHUB_OUTPUT
- name: Build wheels
uses: pypa/cibuildwheel@v2.13.0
env:
CIBW_ARCHS_MACOS: universal2
CIBW_ARCHS_WINDOWS: native
CIBW_ARCHS_LINUX: native
# skip PyPy: Cython only supports CPython
# skip musllinux: build takes too long with default os images.
CIBW_SKIP: 'pp* *musllinux*'
CIBW_BEFORE_BUILD_LINUX: yum install -y libudev-devel libusb1-devel
CIBW_TEST_REQUIRES: pytest
CIBW_TEST_COMMAND: pytest {package}/test
with:
package-dir: ${{ steps.find_sdist_filename.outputs.filename }}
- name: Upload python wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: wheelhouse/*.whl
if-no-files-found: error
publish_python:
name: Publish Python packages
if: github.event_name == 'push' && startswith(github.ref, 'refs/tags/v')
needs:
- build_sdist
- build_wheels
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
steps:
- name: Download python sdist artifact
uses: actions/download-artifact@v3
with:
name: sdist
path: dist/
- name: Download python wheel artifacts
uses: actions/download-artifact@v3
with:
name: wheels
path: dist/
- name: Display artifacts
shell: bash
run: ls dist/*
- name: Publish to PyPi
uses: pypa/gh-action-pypi-publish@v1.8.6
with:
print-hash: true
- name: Publish to release assets
uses: softprops/action-gh-release@v1
with:
files: |
dist/*