Add installation from Github for upstream packages #1061
Workflow file for this run
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
name: Code CI | |
on: | |
push: | |
branches: | |
- master | |
- main | |
tags: | |
- "*" | |
pull_request: | |
schedule: | |
# Run every Monday at 8am | |
- cron: '0 8 * * MON' | |
jobs: | |
lint: | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: Checkout Source | |
uses: actions/checkout@v4 | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.7" | |
- name: Install Python Dependencies | |
run: pip install flake8 | |
- name: Lint | |
run: flake8 | |
sdist: | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: Checkout Source | |
uses: actions/checkout@v4 | |
with: | |
# require history to get back to last tag for version number of branches | |
fetch-depth: 0 | |
submodules: true | |
- name: Build Sdist | |
run: pipx run build --sdist . | |
- name: Upload Sdist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist | |
path: dist/* | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-13] | |
python: [cp37, cp38, cp39, cp310, cp311, cp312] | |
use_master: [false, true] # Whether to use p4p, pvxslibs, epicscorelibs master branches | |
include: | |
# Put coverage and results files in the project directory for mac | |
- os: macos-13 | |
cov_file: "{project}/dist/coverage.xml" | |
results_file: "{project}/dist/pytest-results.xml" | |
# And for windows | |
- os: windows-latest | |
cov_file: "{project}/dist/coverage.xml" | |
results_file: "{project}/dist/pytest-results.xml" | |
# But put coverage and results files in the output dir mounted in docker for linux | |
- os: ubuntu-latest | |
cov_file: /output/coverage.xml | |
results_file: /output/pytest-results.xml | |
name: build/${{ matrix.os }}/${{ matrix.python }}/${{ matrix.use_master }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout Source | |
uses: actions/checkout@v4 | |
with: | |
# require history to get back to last tag for version number of branches | |
fetch-depth: 0 | |
submodules: true | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.12" | |
- name: Install Python Dependencies | |
run: pip install build cibuildwheel>=2.16.2 | |
# - name: Install packages from Github | |
# if: ${{ matrix.use_master }} | |
# run: pip install git+https://github.com/epics-base/epicscorelibs.git git+https://github.com/epics-base/pvxs.git git+https://github.com/epics-base/p4p.git | |
- uses: bhowell2/[email protected] | |
id: get_python_version | |
with: | |
value: ${{ matrix.python }} | |
index_of_str: "cp" # Extracts the version number after the "cp" prefix | |
- name: Build Wheel | |
run: cibuildwheel --output-dir dist | |
env: | |
CIBW_BUILD: ${{ matrix.python }}*64 | |
CIBW_TEST_EXTRAS: dev | |
#CIBW_BEFORE_ALL: ${{ (matrix.use_master == 'false' && 'pip install git+https://github.com/epics-base/epicscorelibs.git git+https://github.com/epics-base/pvxs.git git+https://github.com/epics-base/p4p.git') || '' }} | |
CIBW_BEFORE_ALL: 'pip install --python-version ${{ steps.get_python_version.outputs.substring }} git+https://github.com/epics-base/p4p.git && pip install --no-warn-conflicts git+https://github.com/epics-base/pvxs.git git+https://github.com/epics-base/epicscorelibs.git' | |
CIBW_TEST_COMMAND: pytest {project}/tests --cov-report xml:${{ matrix.cov_file }} --junit-xml=${{ matrix.results_file }} | |
# Run with faulthandler and -s in the hope we get a stack trace on seg fault on windows... | |
CIBW_TEST_COMMAND_WINDOWS: python -X faulthandler -m pytest -s {project}/tests --cov-report xml:${{ matrix.cov_file }} --junit-xml=${{ matrix.results_file }} | |
# Disable auditwheel as it isn't compatible with setuptools_dso approach | |
# https://github.com/mdavidsaver/setuptools_dso/issues/17 | |
CIBW_REPAIR_WHEEL_COMMAND: "" | |
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | |
CIBW_ENVIRONMENT_LINUX: SETUPTOOLS_DSO_PLAT_NAME=manylinux2014_x86_64 | |
CIBW_SKIP: "*-musllinux*" # epicscorelibs doesn't build on musllinux platforms | |
- name: Upload Wheel | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-${{ matrix.os }}-${{ matrix.python }}-${{ matrix.use_master }} | |
path: dist/softioc* | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
name: ${{ matrix.os }}/${{ matrix.python }} | |
directory: dist | |
test-sdist: | |
needs: [sdist] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-13] | |
python: [cp37, cp38, cp39, cp310, cp311, cp312] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: dist-${{ matrix.os }}-${{ matrix.python }}-false # "false" indicates not using the GH checkedout versions | |
path: dist/softioc* | |
- name: Install sdist in a venv and check cli works | |
run: pipx run --spec dist/*.tar.gz pythonSoftIOC --version | |
shell: bash | |
release: | |
needs: [build, sdist] | |
runs-on: ubuntu-latest | |
# upload to PyPI and make a release on every tag | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: dist | |
path: dist | |
- name: Github Release | |
# We pin to the SHA, not the tag, for security reasons. | |
# https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions | |
uses: softprops/action-gh-release@2d72d869af3bf23602f9593a1e3fd739b80ac1eb # v0.1.12 | |
with: | |
files: dist/* | |
body: See [Changelog](CHANGELOG.rst) for more details | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish to PyPI | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.pypi_token }} | |
run: pipx run twine upload dist/* |