Skip to content

Add standard workflow and move setup requires into pyproject.toml #49

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
232 changes: 213 additions & 19 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Build and release
name: Build and Release

on:
push:
branches:
Expand All @@ -12,46 +13,206 @@ defaults:
run:
shell: bash

env:
PACKAGE_NAME: labscript-utils
SCM_VERSION_SCHEME: release-branch-semver
SCM_LOCAL_SCHEME: no-local-version
ANACONDA_USER: labscript-suite

# Configuration for a package with compiled extensions:
# PURE: false
# NOARCH: false

# Configuration for a package with no extensions, but with dependencies that differ by
# platform or Python version:
# PURE: true
# NOARCH: false

# Configuration for a package with no extensions and the same dependencies on all
# platforms and Python versions. For this configuration you should comment out all but
# the first entry in the job matrix of the build job since multiple platforms are not
# needed.
PURE: true
NOARCH: true

jobs:
build:
name: Build and Release
runs-on: ubuntu-latest
env:
PACKAGE_NAME: labscript-utils
SCM_VERSION_SCHEME: release-branch-semver
SCM_LOCAL_SCHEME: no-local-version
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- { os: ubuntu-latest, python: 3.8, arch: x64 }
# - { os: ubuntu-latest, python: 3.7, arch: x64 }
# - { os: ubuntu-latest, python: 3.6, arch: x64 }

# - { os: macos-latest, python: 3.8, arch: x64 }
# - { os: macos-latest, python: 3.7, arch: x64 }
# - { os: macos-latest, python: 3.6, arch: x64 }

# - { os: windows-latest, python: 3.8, arch: x64 }
# - { os: windows-latest, python: 3.7, arch: x64 }
# - { os: windows-latest, python: 3.6, arch: x64 }

# - { os: windows-latest, python: 3.8, arch: x86 }
# - { os: windows-latest, python: 3.7, arch: x86 }
# - { os: windows-latest, python: 3.6, arch: x86 }

if: github.repository == 'labscript-suite/labscript-utils' && (github.event_name != 'create' || github.event.ref_type != 'branch')
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Unshallow
with:
fetch-depth: 0

- name: Ignore Tags
if: github.event.ref_type != 'tag'
run: |
git fetch --prune --unshallow
git tag -d $(git tag --points-at HEAD)
run: git tag -d $(git tag --points-at HEAD)

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Build Distributions
python-version: ${{ matrix.python }}
architecture: ${{ matrix.arch }}

- name: Source Distribution
if: strategy.job-index == 0
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -U git+https://github.com/pypa/setuptools_scm.git@8e6aa2b5fd42cb257c86e6dbe720eaee6d1e2c9b
python setup.py sdist bdist_wheel
SCM_VERSION=$(python setup.py --version)
echo "::set-env name=SCM_VERSION::$SCM_VERSION"
python -m pip install --upgrade pip setuptools wheel pep517
python -m pep517.build -s .

- name: Wheel Distribution
# Impure Linux wheels are built in the manylinux job.
if: (env.PURE == 'true' && strategy.job-index == 0) || (env.PURE == 'false' && runner.os != 'Linux')
run: |
python -m pip install --upgrade pip setuptools wheel pep517
python -m pep517.build -b .

- name: Upload Artifact
if: strategy.job-index == 0 || (env.PURE == 'false' && runner.os != 'Linux')
uses: actions/upload-artifact@v2
with:
name: dist
path: ./dist

- name: Set Variables for Conda Build
run: |
if [ $RUNNER_OS == Windows ] && [ ${{ matrix.arch }} == x64 ]; then
CONDA_INSTALLER=Miniconda3-latest-Windows-x86_64.exe
elif [ $RUNNER_OS == Windows ]; then
CONDA_INSTALLER=Miniconda3-latest-Windows-x86.exe
elif [ $RUNNER_OS == Linux ]; then
CONDA_INSTALLER=Miniconda3-latest-Linux-x86_64.sh
else
CONDA_INSTALLER=Miniconda3-latest-MacOSX-x86_64.sh
fi
if [ $NOARCH == true ]; then
CONDA_BUILD_ARGS="--noarch"
else
CONDA_BUILD_ARGS=""
fi
echo "::set-env name=CONDA_INSTALLER::$CONDA_INSTALLER"
echo "::set-env name=CONDA_BUILD_ARGS::$CONDA_BUILD_ARGS"

- name: Conda package (Unix)
if: runner.os != 'Windows'
run: |
curl -LO https://repo.continuum.io/miniconda/$CONDA_INSTALLER
bash "$CONDA_INSTALLER" -b -p .miniconda
source .miniconda/etc/profile.d/conda.sh
conda activate
conda update -n base -c defaults conda
conda create -n py${{ matrix.python }} python=${{ matrix.python }}
conda activate py${{ matrix.python }}
conda install -c cbillington setuptools-conda
pip install --upgrade setuptools_scm
setuptools-conda build $CONDA_BUILD_ARGS .

- name: Conda Package (Windows)
if: runner.os == 'Windows'
shell: cmd
run: |
curl -LO https://repo.continuum.io/miniconda/%CONDA_INSTALLER%
%CONDA_INSTALLER% /S /D=%CD%\.miniconda && ^
.miniconda\Scripts\activate && ^
conda update -n base -c defaults conda && ^
conda create -n py${{ matrix.python }} python=${{ matrix.python }} && ^
conda activate py${{ matrix.python }} && ^
conda install -c cbillington setuptools-conda && ^
pip install --upgrade setuptools_scm && ^
setuptools-conda build %CONDA_BUILD_ARGS% .

- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: conda_packages
path: ./conda_packages


manylinux:
name: Build Manylinux
runs-on: ubuntu-latest
strategy:
matrix:
include:
- { python: 'cp36-cp36m cp37-cp37m cp38-cp38' }

if: github.repository == 'labscript-suite/labscript-utils' && (github.event_name != 'create' || github.event.ref_type != 'branch')
steps:
- name: Checkout
if: env.PURE == 'false'
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Ignore Tags
if: github.event.ref_type != 'tag' && env.PURE == 'false'
run: git tag -d $(git tag --points-at HEAD)

- name: Build Manylinux Wheels
if: env.PURE == 'false'
uses: RalfG/python-wheels-manylinux-build@v0.2.2-manylinux2010_x86_64
with:
python-versions: ${{ matrix.python }}

- name: Upload Artifact
if: env.PURE == 'false'
uses: actions/upload-artifact@v2
with:
name: dist
path: wheelhouse/*manylinux*.whl

release:
name: Release
runs-on: ubuntu-latest
needs: [build, manylinux]
steps:

- name: Download Artifact
uses: actions/download-artifact@v2
with:
name: dist
path: ./dist

- name: Download Artifact
uses: actions/download-artifact@v2
with:
name: conda_packages
path: ./conda_packages

- name: Publish on TestPyPI
if: github.event.ref_type == 'tag' || contains(env.SCM_VERSION, 'dev')
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.testpypi }}
repository_url: https://test.pypi.org/legacy/

- name: Get Version Number
if: github.event.ref_type == 'tag'
run: |
VERSION="${GITHUB_REF/refs\/tags\/v/}"
echo "::set-env name=VERSION::$VERSION"

- name: Create GitHub Release
if: github.event.ref_type == 'tag'
id: create_release
Expand All @@ -63,6 +224,7 @@ jobs:
release_name: ${{ env.PACKAGE_NAME }} ${{ env.VERSION }}
draft: true
prerelease: ${{ contains(github.event.ref, 'rc') }}

- name: Upload Release Asset
if: github.event.ref_type == 'tag'
uses: actions/upload-release-asset@v1
Expand All @@ -73,9 +235,41 @@ jobs:
asset_path: ./dist/${{ env.PACKAGE_NAME }}-${{ env.VERSION }}.tar.gz
asset_name: ${{ env.PACKAGE_NAME }}-${{ env.VERSION }}.tar.gz
asset_content_type: application/gzip

- name: Publish on PyPI
if: github.event.ref_type == 'tag'
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.pypi }}

- name: Install Miniconda and cloud client
run: |
curl -LO https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p .miniconda
source .miniconda/etc/profile.d/conda.sh
conda activate
conda install anaconda-client

- name: Publish to Anaconda test label
if: github.event.ref_type != 'tag'
run: |
source .miniconda/etc/profile.d/conda.sh
conda activate
anaconda \
--token ${{ secrets.ANACONDA_API_TOKEN }} \
upload \
--user $ANACONDA_USER \
--label test \
conda_packages/*/*

- name: Publish to Anaconda main label
if: github.event.ref_type == 'tag'
run: |
source .miniconda/etc/profile.d/conda.sh
conda activate
anaconda \
--token ${{ secrets.ANACONDA_API_TOKEN }} \
upload \
--user $ANACONDA_USER \
conda_packages/*/*
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["setuptools", "wheel", "setuptools_scm"]
build-backend = "setuptools.build_meta"
7 changes: 2 additions & 5 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[metadata]
name = labscript_utils
name = labscript-utils
description = Shared utilities for the labscript suite
long_description = file: README.md
long_description_content_type = text/markdown
Expand Down Expand Up @@ -28,14 +28,11 @@ install_requires =
importlib_metadata>=1.0
h5py>=2.9
numpy>=1.15
pyqtgraph>=0.11.0rc0 ; python_version>='3.8'
pyqtgraph ; python_version<'3.8'
pyqtgraph>=0.11.0rc0
qtutils>=2.2.3
scipy
setuptools_scm
zprocess>=2.18.0
setup_requires =
setuptools_scm

[options.package_data]
labscript_profile = ../labscript-suite.pth
Expand Down