Skip to content

Commit

Permalink
Add Github release workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
elprans committed Apr 23, 2020
1 parent 6025226 commit 85af8df
Show file tree
Hide file tree
Showing 9 changed files with 317 additions and 8 deletions.
25 changes: 25 additions & 0 deletions .github/workflows/build-manylinux-wheels.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

set -e -x

PY_MAJOR=${PYTHON_VERSION%%.*}
PY_MINOR=${PYTHON_VERSION#*.}

ML_PYTHON_VERSION="cp${PY_MAJOR}${PY_MINOR}-cp${PY_MAJOR}${PY_MINOR}"
if [ "${PY_MAJOR}" -lt "4" -a "${PY_MINOR}" -lt "8" ]; then
ML_PYTHON_VERSION+="m"
fi

# Compile wheels
PYTHON="/opt/python/${ML_PYTHON_VERSION}/bin/python"
PIP="/opt/python/${ML_PYTHON_VERSION}/bin/pip"
"${PIP}" install --upgrade setuptools pip wheel
cd "${GITHUB_WORKSPACE}"
make clean
"${PYTHON}" setup.py bdist_wheel

# Bundle external shared libraries into the wheels.
for whl in "${GITHUB_WORKSPACE}"/dist/*.whl; do
auditwheel repair $whl -w "${GITHUB_WORKSPACE}"/dist/
rm "${GITHUB_WORKSPACE}"/dist/*-linux_*.whl
done
25 changes: 25 additions & 0 deletions .github/workflows/release-trigger.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Trigger Release

on:
pull_request_review:
types: [submitted]

jobs:
check-review:
runs-on: ubuntu-latest
steps:
- name: Validate release PR
uses: edgedb/action-release/validate-pr@master
id: release
continue-on-error: true
with:
github_token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}
version_file: immutables/_version.py
version_line_pattern: |
__version__\s*=\s*(?:['"])([[:PEP440:]])(?:['"])
- name: Trigger release
uses: edgedb/action-release/trigger@master
if: steps.release.outputs.version != 0
with:
github_token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}
release_validation_check: "validate-release-request"
179 changes: 179 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: Release

on:
pull_request:
branches:
- "master"
- "ci"
- "[0-9]+.[0-9x]+*"
paths:
- "immutables/_version.py"

jobs:
validate-release-request:
runs-on: ubuntu-latest
steps:
- name: Validate release PR
uses: edgedb/action-release/validate-pr@master
id: checkver
with:
github_token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}
version_file: immutables/_version.py
version_line_pattern: |
__version__\s*=\s*(?:['"])([[:PEP440:]])(?:['"])
- name: Stop if not approved
if: steps.checkver.outputs.approved != 'true'
run: |
echo ::error::PR is not approved yet.
exit 1
- name: Store release version for later use
env:
VERSION: ${{ steps.checkver.outputs.version }}
run: |
mkdir -p dist/
echo "${VERSION}" > dist/VERSION
- uses: actions/upload-artifact@v1
with:
name: dist
path: dist/

build-sdist:
needs: validate-release-request
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
with:
fetch-depth: 50
submodules: true

- name: Set up Python 3.7
uses: actions/setup-python@v1
with:
python-version: 3.7

- name: Build source distribution
run: |
pip install -U setuptools wheel pip
python setup.py sdist
- uses: actions/upload-artifact@v1
with:
name: dist
path: dist/

build-wheels:
needs: validate-release-request
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: [3.5, 3.6, 3.7, 3.8]
os: [ubuntu-16.04, macos-latest, windows-latest]
exclude:
# Python 3.5 is unable to properly
# find the recent VS tooling
# https://bugs.python.org/issue30389
- os: windows-latest
python-version: 3.5

steps:
- uses: actions/checkout@v1
with:
fetch-depth: 50
submodules: true

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}

- name: Install Python Deps
run: |
python -m pip install --upgrade setuptools pip wheel
- name: Test
run: |
make debug && make test
- name: Build Wheels (linux)
if: startsWith(matrix.os, 'ubuntu')
uses: docker://quay.io/pypa/manylinux1_x86_64
env:
PYTHON_VERSION: ${{ matrix.python-version }}
with:
entrypoint: /github/workspace/.github/workflows/build-manylinux-wheels.sh

- name: Build Wheels (non-linux)
if: "!startsWith(matrix.os, 'ubuntu')"
run: |
make clean
python setup.py bdist_wheel
- name: Test Wheels
shell: bash
if: |
!contains(github.event.pull_request.labels.*.name, 'skip wheel tests')
run: |
pip install --pre immutables -f "file:///${GITHUB_WORKSPACE}/dist"
make -C "${GITHUB_WORKSPACE}" testinstalled
- uses: actions/upload-artifact@v1
with:
name: dist
path: dist/

publish:
needs: [build-sdist, build-wheels]
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
with:
fetch-depth: 5
submodules: false

- uses: actions/download-artifact@v1
with:
name: dist
path: dist/

- name: Extract Release Version
id: relver
run: |
set -e
echo ::set-output name=version::$(cat dist/VERSION)
rm dist/VERSION
- name: Merge and tag the PR
uses: edgedb/action-release/merge@master
with:
github_token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}
ssh_key: ${{ secrets.RELEASE_BOT_SSH_KEY }}
gpg_key: ${{ secrets.RELEASE_BOT_GPG_KEY }}
gpg_key_id: "5C468778062D87BF!"
tag_name: v${{ steps.relver.outputs.version }}

- name: Publish Github Release
uses: elprans/gh-action-create-release@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.relver.outputs.version }}
release_name: v${{ steps.relver.outputs.version }}
target: ${{ github.event.pull_request.base.ref }}
body: ${{ github.event.pull_request.body }}
draft: false

- run: |
ls -al dist/
- name: Upload to PyPI
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
# password: ${{ secrets.TEST_PYPI_TOKEN }}
# repository_url: https://test.pypi.org/legacy/
53 changes: 53 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Tests

on:
push:
branches:
- master
- ci
pull_request:
branches:
- master

jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
max-parallel: 4
matrix:
python-version: [3.6, 3.7, 3.8]
os: [ubuntu-latest, macos-latest]

steps:
- uses: actions/checkout@v1
with:
fetch-depth: 50
submodules: true

- name: Check if release PR.
uses: edgedb/action-release/validate-pr@master
continue-on-error: true
id: release
with:
github_token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}
version_file: immutables/_version.py
version_line_pattern: |
__version__\s*=\s*(?:['"])([[:PEP440:]])(?:['"])
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
if: steps.release.outputs.version == 0
with:
python-version: ${{ matrix.python-version }}

- name: Install Python Deps
if: steps.release.outputs.version == 0
run: |
pip install --upgrade setuptools pip wheel
pip download --dest=/tmp/deps .[test]
pip install -U --no-index --find-links=/tmp/deps /tmp/deps/*
- name: Test
if: steps.release.outputs.version == 0
run: |
make debug && make test
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ __pycache__/
/.cache
/.pytest_cache
/.coverage

/.mypy_cache
22 changes: 17 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
.PHONY: rtest build test clean
.PHONY: rtest build test clean all


PYTHON ?= python
ROOT = $(dir $(realpath $(firstword $(MAKEFILE_LIST))))


all: build

build:
python setup.py build_ext --inplace
$(PYTHON) setup.py build_ext --inplace

debug:
DEBUG_IMMUTABLES=1 $(PYTHON) setup.py build_ext --inplace

test:
python setup.py test -v
$(PYTHON) setup.py test -v

rtest:
~/dev/venvs/36-debug/bin/python setup.py build_ext --inplace
Expand All @@ -14,8 +23,11 @@ rtest:
~/dev/venvs/36-debug/bin/python -m test.regrtest -R3:3 --testdir tests/

clean:
find . -name '*.pyc' | xargs rm
find . -name '*.so' | xargs rm
find . -name '*.pyc' | xargs rm -f
find . -name '*.so' | xargs rm -f
rm -rf ./build
rm -rf ./dist
rm -rf ./*.egg-info

testinstalled:
cd /tmp && $(PYTHON) $(ROOT)/tests/__init__.py
4 changes: 3 additions & 1 deletion immutables/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# flake8: noqa

try:
from ._map import Map
except ImportError:
Expand All @@ -6,6 +8,6 @@
import collections.abc as _abc
_abc.Mapping.register(Map)

from ._version import __version__

__all__ = 'Map',
__version__ = '0.12'
13 changes: 13 additions & 0 deletions immutables/_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# This file MUST NOT contain anything but the __version__ assignment.
#
# When making a release, change the value of __version__
# to an appropriate value, and open a pull request against
# the correct branch (master if making a new feature release).
# The commit message MUST contain a properly formatted release
# log, and the commit must be signed.
#
# The release automation will: build and test the packages for the
# supported platforms, publish the packages on PyPI, merge the PR
# to the target branch, create a Git tag pointing to the commit.

__version__ = '0.12'
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@


with open(os.path.join(
os.path.dirname(__file__), 'immutables', '__init__.py')) as f:
os.path.dirname(__file__), 'immutables', '_version.py')) as f:
for line in f:
if line.startswith('__version__ ='):
_, _, version = line.partition('=')
Expand Down

0 comments on commit 85af8df

Please sign in to comment.