From 85af8df6b15dd57d391880fe76f8a5324385cd13 Mon Sep 17 00:00:00 2001 From: Elvis Pranskevichus Date: Wed, 22 Apr 2020 18:11:47 -0700 Subject: Add Github release workflow --- .github/workflows/build-manylinux-wheels.sh | 25 ++++ .github/workflows/release-trigger.yml | 25 ++++ .github/workflows/release.yml | 179 ++++++++++++++++++++++++++++ .github/workflows/tests.yml | 53 ++++++++ 4 files changed, 282 insertions(+) create mode 100755 .github/workflows/build-manylinux-wheels.sh create mode 100644 .github/workflows/release-trigger.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/tests.yml (limited to '.github/workflows') 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 -- cgit v1.2.3