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

GitHub CI with Prebuilt Binary Wheel #188

Merged
merged 6 commits into from
Jan 13, 2024
Merged
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
169 changes: 169 additions & 0 deletions .github/workflows/build_and_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
name: Test, Build and Deploy

on: [push]

permissions:
contents: read

jobs:
# Create a Debug build and test it.
build_and_test:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-python@v5
with:
python-version: "3.10"

# Don't need to install Python / Create venv, as you are running in a container.
# You don't even need to install g++/cmake as it comes with the docker image.
- name: Install Dependencies
run: |
sudo apt update -y
sudo apt install build-essential uuid-dev cmake default-jre \
libantlr4-runtime-dev antlr4 libssl-dev -yq
pip install setuptools wheel cmake ninja patchelf auditwheel
pip install -r requirements.txt

- name: Check Your Environment
run: |
gcc -v
python --version
cmake --version
free

- name: Build
run: |
echo Your Build Script here
echo Make sure the Debug and Coverage Switch is on, only in this job.

- name: Test
run: |
echo Your Test Script here

- name: Extract Coverage Report
run: |
echo Your Coverage Report


# Build on Different Platform.
build_linux_amd64:

# This can be expensive so you might skip this if it is not tagged
# by uncommenting the following
# if: ${{ startsWith(github.ref, 'refs/tags/v') && success() }}

# Run only when the test is good.
if: ${{ success() }}

needs:
- build_and_test

strategy:
matrix:
python-version: [ "3.7", "3.8", "3.9", "3.10", "3.11", "3.12" ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Dependencies
run: |
sudo apt update -y
sudo apt install build-essential uuid-dev cmake default-jre \
libantlr4-runtime-dev antlr4 libssl-dev -yq
pip install setuptools wheel cmake ninja patchelf auditwheel
pip install -r requirements.txt

# Include ANTLR4's License file as we are redistributing their binary
- name: Adding ANTLR4 License
run: |
curl -s https://raw.githubusercontent.com/antlr/antlr4/master/LICENSE.txt >> LICENSE

# Build the library.
# Don't include debug and coverage stuff here.
# GitHub runner on Open source project is equipped with 4 cores.
# Use them with `-j 4` flag
- name: Build Library
run: |
python setup.py bdist_wheel -j 4
auditwheel repair --plat manylinux_2_31_x86_64 dist/*.whl

- name: Archive Artifacts
uses: actions/upload-artifact@v3
with:
name: PythonPackage
path: |
wheelhouse

# Build the Source Bundle
# Developer can still build on their machine with the source bundle
# (i.e. the original `pip install` flow if the platform is not included by above steps)
build_sdist:
runs-on: ubuntu-20.04
if: ${{ success() }}

needs:
- build_and_test

steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Install Dependencies
run: |
sudo apt update -y
sudo apt install build-essential uuid-dev cmake default-jre \
libantlr4-runtime-dev antlr4 libssl-dev -yq
pip install setuptools wheel cmake ninja patchelf auditwheel
pip install -r requirements.txt

# Not including ANTLR4 license here as we don't redistribute ANTLR4 Binary in this package.

- name: Build Source Library
run: |
python setup.py sdist

- name: Archive Artifacts
uses: actions/upload-artifact@v3
with:
name: PythonPackage
path: |
dist

# Add your testing steps here

publish:

runs-on: ubuntu-latest

# Publish only when a tag "v*" is pushed. (which is a release)
if: ${{ startsWith(github.ref, 'refs/tags/v') && success() }}

needs:
- build_linux_amd64
- build_sdist

environment:
name: pypi
url: https://pypi.org/p/hdlConvertor
permissions:
id-token: write

steps:
- name: Download Package Built
uses: actions/download-artifact@v3
with:
name: PythonPackage
path: dist

- name: Publish package
uses: pypa/gh-action-pypi-publish@release/v1