Merge pull request #47 from you-win/feature/add-github-workflow
add build workflow for windows, mac, and linux
This commit is contained in:
commit
670df51c0d
4 changed files with 142 additions and 12 deletions
26
.github/actions/upload-dated-artifact/action.yaml
vendored
Normal file
26
.github/actions/upload-dated-artifact/action.yaml
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
name: Upload dated artifact
|
||||
description: Uploads an artifact with a datetime
|
||||
|
||||
inputs:
|
||||
name:
|
||||
description: The name of the artifact
|
||||
required: true
|
||||
path:
|
||||
description: The path to the file/folder to upload
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
# https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows
|
||||
- name: Get current datetime
|
||||
id: date
|
||||
shell: bash
|
||||
run: echo "::set-output name=date::$(date '+%Y-%m-%d_%H-%M-%S')"
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.name }}_${{ steps.date.outputs.date }}
|
||||
path: ${{ inputs.path }}
|
||||
if-no-files-found: error
|
||||
87
.github/workflows/create-binaries.yaml
vendored
Normal file
87
.github/workflows/create-binaries.yaml
vendored
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
name: Package using PyInstaller
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v**
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
env:
|
||||
dist-path: dist/OpenSeeFace
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Pull OpenSeeFace
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Create binary
|
||||
shell: cmd
|
||||
run: |
|
||||
choco install vcredist140
|
||||
|
||||
xcopy c:\Windows\System32\msvcp140.dll .
|
||||
xcopy c:\Windows\System32\vcomp140.dll .
|
||||
xcopy c:\Windows\System32\concrt140.dll .
|
||||
xcopy c:\Windows\System32\vccorlib140.dll .
|
||||
|
||||
make_exe.bat
|
||||
|
||||
- name: Move files for uploading
|
||||
shell: bash
|
||||
run: |
|
||||
# Prevents the parent dist/ directory from being included
|
||||
mv dist/facetracker ${{ env.dist-path }}
|
||||
cp -r models ${{ env.dist-path }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-dated-artifact
|
||||
with:
|
||||
name: windows
|
||||
path: dist # Add the parent directory to prevent a tarbomb
|
||||
|
||||
# Files must be packed into a tar in order for file permissions to be preserved
|
||||
build-unix:
|
||||
env:
|
||||
artifact-path: OpenSeeFace
|
||||
tar-path: OpenSeeFace.tar
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: linux
|
||||
os: ubuntu-latest
|
||||
- name: mac
|
||||
os: macos-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Pull OpenSeeFace
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Create binary
|
||||
shell: bash
|
||||
run: |
|
||||
chmod +x make_exe.sh
|
||||
./make_exe.sh
|
||||
|
||||
- name: Move files for uploading
|
||||
shell: bash
|
||||
run: |
|
||||
# Prevents the parent dist/ directory from being included
|
||||
mv dist/facetracker ${{ env.artifact-path }}
|
||||
cp -r models ${{ env.artifact-path }}
|
||||
|
||||
- name: Fix permissions from PyInstaller
|
||||
shell: bash
|
||||
run: |
|
||||
find ${{ env.artifact-path }} -type f -exec chmod -x {} +
|
||||
chmod +x ${{ env.artifact-path }}/facetracker
|
||||
|
||||
- name: Pack files into tar
|
||||
shell: bash
|
||||
run: tar -cvf ${{ env.tar-path }} ${{ env.artifact-path }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-dated-artifact
|
||||
with:
|
||||
name: ${{ matrix.name }}
|
||||
path: ${{ env.tar-path }}
|
||||
33
make_exe.bat
33
make_exe.bat
|
|
@ -1,16 +1,31 @@
|
|||
pyinstaller facetracker.spec --onedir ^
|
||||
--add-binary dshowcapture/dshowcapture_x86.dll;. ^
|
||||
--add-binary dshowcapture/dshowcapture_x64.dll;. ^
|
||||
--add-binary dshowcapture/libminibmcapture32.dll;. ^
|
||||
--add-binary dshowcapture/libminibmcapture64.dll;. ^
|
||||
--add-binary escapi/escapi_x86.dll;. ^
|
||||
--add-binary escapi/escapi_x64.dll;. ^
|
||||
echo "Started"
|
||||
|
||||
:: A venv is used so it's easy to add the onnxruntime dll to the binary
|
||||
|
||||
echo "Creating venv"
|
||||
python -m venv venv
|
||||
|
||||
echo "Activating venv"
|
||||
call venv\Scripts\activate.bat
|
||||
|
||||
echo "Installing dependencies"
|
||||
pip install wheel
|
||||
|
||||
pip install onnxruntime opencv-python==4.5.4.60 pillow numpy pyinstaller
|
||||
|
||||
echo "Running pyinstaller"
|
||||
pyinstaller facetracker.py --clean ^
|
||||
--onedir ^
|
||||
--add-binary dshowcapture/*.dll;. ^
|
||||
--add-binary escapi/*.dll;. ^
|
||||
--add-binary venv/lib/site-packages/onnxruntime/capi/*.dll;onnxruntime\capi ^
|
||||
--add-binary msvcp140.dll;. ^
|
||||
--add-binary vcomp140.dll;. ^
|
||||
--add-binary concrt140.dll;. ^
|
||||
--add-binary vccorlib140.dll;. ^
|
||||
--add-binary run.bat;.
|
||||
|
||||
del dist\facetracker\cv2\opencv_videoio_ffmpeg420_64.dll
|
||||
echo "Deleting opencv dll"
|
||||
del dist\facetracker\cv2\opencv_videoio_*
|
||||
|
||||
pause
|
||||
echo "Finished"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
PYTHON_BINARY=$(which python3)
|
||||
|
||||
if [[ -z "$PYTHON_BINARY" ]]; then
|
||||
|
|
@ -12,18 +14,18 @@ if [[ -z "$PYTHON_BINARY" ]]; then
|
|||
fi
|
||||
|
||||
echo "Creating venv"
|
||||
|
||||
"$PYTHON_BINARY" -m venv venv
|
||||
|
||||
source venv/bin/activate
|
||||
|
||||
echo "Installing packages"
|
||||
pip install wheel # Make sure this is installed beforehand
|
||||
|
||||
pip install onnxruntime opencv-python==4.5.4.60 pillow numpy pyinstaller
|
||||
|
||||
echo "Creating binary"
|
||||
|
||||
pyinstaller --clean facetracker.py
|
||||
pyinstaller --onedir --clean facetracker.py \
|
||||
--add-binary venv/lib/python3.*/site-packages/onnxruntime/capi/*.so:onnxruntime/capi
|
||||
|
||||
echo "Files should be available in the dist/ folder"
|
||||
echo "Done!"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue