aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rwxr-xr-x.github/workflows/build-manylinux-wheels.sh25
-rw-r--r--.github/workflows/release-trigger.yml25
-rw-r--r--.github/workflows/release.yml179
-rw-r--r--.github/workflows/tests.yml53
4 files changed, 282 insertions, 0 deletions
diff --git a/.github/workflows/build-manylinux-wheels.sh b/.github/workflows/build-manylinux-wheels.sh
new file mode 100755
index 0000000..53ed6d3
--- /dev/null
+++ b/.github/workflows/build-manylinux-wheels.sh
@@ -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
diff --git a/.github/workflows/release-trigger.yml b/.github/workflows/release-trigger.yml
new file mode 100644
index 0000000..101406a
--- /dev/null
+++ b/.github/workflows/release-trigger.yml
@@ -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"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..c992bda
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -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/
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..27a9ae7
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -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