Skip to content
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

Begin playing with GitHub workflows #2411

Open
wants to merge 21 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
199 changes: 199 additions & 0 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
#---------------------------------------------------------------------------
# This workflow will build and archive a wxPython source distribution for
# CI. It will start by building a sdist archive first, and then that will be
# used in subsequent jobs on each supported platform and Python version.
#---------------------------------------------------------------------------

name: ci-build

on:
# Trigger on push or PRs targeting the master branch
push:
branches: [ 'master' ]
pull_request:
branches: [ 'master' ]

# Also allow manual triggering (via web ui)
workflow_dispatch:

# Cancel the workflow if another instance in the same workflow and PR is triggered
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

defaults:
run:
# always use bash shell, even on windows
shell: bash

env:
PYTHONUNBUFFERED: 1

#---------------------------------------------------------------------------

jobs:
# Build a wxPython source archive, and save it as an artifact for use in the
# job that builds the wheels.
build-source-dist:
runs-on: ubuntu-latest

outputs:
VERSION: ${{ steps.generate.outputs.version }}

steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
submodules: 'recursive'
fetch-depth: 0

- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: 'pip'

- name: Install dependencies
run: |
sudo apt-get install -y gettext
python -m pip install --upgrade pip setuptools wheel
python -m pip install --upgrade -r requirements.txt

- name: Generate wrapper code
id: generate
run: |
python build.py setrev dox etg sip --nodoc
VERSION=$(python build.py --quiet version)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Create source distribution (sdist)
run: |
python build.py sdist

- name: Save sdist as job artifact
uses: actions/upload-artifact@v3
with:
name: wxPython-source
path: dist/wxPython-${{ steps.generate.outputs.version }}.tar.gz


#---------------------------------------------------------------------------

# Use pip and the wxPython-source artifact to build a wxPython wheel for every
# supported Python version and architecture.
build-wheels:
# wait for prior job to complete
needs: build-source-dist
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, windows-latest, macos-latest ]
python-version: [ '3.8', '3.9', '3.10', '3.11' ]
architecture: [ 'x86', 'x64' ]
# Exclude x86 configs on non-Windows OSs
exclude:
- os: ubuntu-latest
architecture: x86
- os: macos-latest
architecture: x86

env:
VERSION: ${{ needs.build-source-dist.outputs.VERSION }}

runs-on: ${{ matrix.os }}

outputs:
short_name: ${{ steps.init.outputs.short_name }}
cannonical_id: ${{ steps.init.outputs.cannonical_id }}

steps:
- name: initialize variables
id: init
run: |
if [ ${{ matrix.os }} == ubuntu-latest ]; then
short_name=linux
elif [ ${{ matrix.os }} == macos-latest ]; then
short_name=macos
elif [ ${{ matrix.os }} == windows-latest ]; then
if [ ${{ matrix.architecture }} == x64 ]; then
short_name=win64
else
short_name=win32
fi
fi
echo "short_name=$short_name" >> "$GITHUB_OUTPUT"
echo "cannonical_id=$short_name-py${{ matrix.python-version }}-${{ matrix.architecture}}" >> "$GITHUB_OUTPUT"

- name: Checkout repo
uses: actions/checkout@v3
with:
submodules: 'recursive'

- name: download CI source artifact
uses: actions/download-artifact@v3
with:
name: wxPython-source
path: dist

- name: Set up Python ${{ matrix.python-version }}-${{ matrix.architecture }}
uses: actions/setup-python@v4
with:
python-version: '${{ matrix.python-version }}'
architecture: '${{ matrix.architecture }}'
cache: 'pip'

- name: Install Python dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
python -m pip install --upgrade -r requirements.txt

- name: Install Ubuntu dependencies
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
sudo apt-get update
sudo apt-get install -y \
freeglut3-dev \
libcurl4-openssl-dev \
libexpat1-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libgtk-3-dev \
libjpeg-dev \
libnotify-dev \
libsdl2-dev \
libsm-dev \
libtiff-dev \
libwebkit2gtk-4.0-dev \
libxtst-dev \
libunwind-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev

- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: '${{ matrix.architecture }}'

- name: Build the wxPython wheel
run: |
cd dist
pip wheel -v wxPython-${{ env.VERSION }}.tar.gz

- name: Simple smoke test
run: |
cd dist
pip install wxPython-*.whl
python -c "import wx; print(wx); print(wx.version()); print(wx.PlatformInfo)"
pip uninstall --yes wxPython

- name: Save wheel as job artifact
uses: actions/upload-artifact@v3
# Just Windows and MacOS for now, all we care about for Linux at this
# point is that the build was successful.
if: ${{ matrix.os != 'ubuntu-latest' }}
with:
name: wxPython-wheel-${{ steps.init.outputs.cannonical_id }}
path: dist/wxPython-*.whl
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ mydbstub.py*
.cache
.vagrant
.vscode
.env

/build
/tmp
Expand Down