Due to the limited speed of our website, I've rewritten it to instead download directly from the GitHub artifacts using the GitHub API to generate a public link. This increases the download speeds for the end user significantly and means uploading it from the CI is now unnecessary.
369 lines
12 KiB
YAML
369 lines
12 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- '.github/ISSUE_TEMPLATE/**'
|
|
- '.github/FUNDING.yml'
|
|
- 'docker/**'
|
|
- 'CONTRIBUTING.md'
|
|
- 'README.md'
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- '.github/ISSUE_TEMPLATE/**'
|
|
- '.github/FUNDING.yml'
|
|
- 'app/ts/*.ts'
|
|
- 'docker/**'
|
|
- 'CONTRIBUTING.md'
|
|
- 'README.md'
|
|
|
|
env:
|
|
DOWNLOAD_TOOL: curl -fLOSs --retry 2 --retry-delay 60
|
|
UPLOAD_TOOL: curl -X POST --retry 2 --retry-delay 60
|
|
|
|
jobs:
|
|
linux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- build-type: RelWithDebInfo
|
|
cc-compiler: gcc
|
|
cxx-compiler: g++
|
|
compiler-name: GCC 9.3.1
|
|
cmake-gen: Ninja
|
|
os-name: Linux (CentOS 7)
|
|
- build-type: RelWithDebInfo
|
|
cc-compiler: clang
|
|
cxx-compiler: clang++
|
|
compiler-name: Clang 10.0.0
|
|
cmake-gen: Ninja
|
|
os-name: Linux (CentOS 7)
|
|
name: |
|
|
${{ matrix.os-name }}
|
|
<${{ matrix.compiler-name }},
|
|
${{ matrix.build-type }},
|
|
${{ matrix.cmake-gen }}>
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: olivevideoeditor/ci-olive:2021.3
|
|
|
|
steps:
|
|
- name: Checkout Source Code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Generate Patreon List
|
|
env:
|
|
PATREON_KEY: ${{ secrets.PATREON_KEY }}
|
|
run: |
|
|
pip3 install requests
|
|
cd $GITHUB_WORKSPACE/app/dialog/about
|
|
python3 patreon.py
|
|
if: github.event_name == 'push'
|
|
|
|
- name: Configure CMake
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake .. -G "${{ matrix.cmake-gen }}" \
|
|
-DCMAKE_BUILD_TYPE="${{ matrix.build-type }}" \
|
|
-DCMAKE_C_COMPILER="${{ matrix.cc-compiler }}" \
|
|
-DCMAKE_CXX_COMPILER="${{ matrix.cxx-compiler }}"
|
|
|
|
- name: Build
|
|
working-directory: build
|
|
run: |
|
|
cmake --build .
|
|
|
|
- name: Test
|
|
working-directory: build
|
|
run: |
|
|
ctest -C ${{ matrix.build-type }} -V
|
|
|
|
- name: Create Package
|
|
id: package
|
|
working-directory: build
|
|
env:
|
|
ARCH: x86_64
|
|
run: |
|
|
# Create install tree
|
|
cmake --install app --prefix appdir/usr
|
|
|
|
# Inject custom AppRun (linuxdeployqt won't replace if it already exists)
|
|
cp $GITHUB_WORKSPACE/app/packaging/linux/AppRun appdir
|
|
|
|
# Process AppDir
|
|
/usr/local/linuxdeployqt-x86_64.AppImage \
|
|
appdir/usr/share/applications/org.olivevideoeditor.Olive.desktop \
|
|
-exclude-libs=libQt5Pdf.so,libQt5Qml.so,libQt5QmlModels.so,libQt5Quick.so,libQt5VirtualKeyboard.so \
|
|
-bundle-non-qt-libs \
|
|
-executable=appdir/usr/bin/crashpad_handler \
|
|
-executable=appdir/usr/bin/minidump_stackwalk \
|
|
-executable=appdir/usr/bin/olive-crashhandler \
|
|
--appimage-extract-and-run
|
|
|
|
# Dump Crashpad symbols
|
|
dump_syms appdir/usr/bin/olive-editor > olive-editor.sym
|
|
# HACK: For some reason, minidump_stackwalk reads identifier as all 0s
|
|
SYM_DIR=appdir/usr/share/olive-editor/symbols/olive-editor/000000000000000000000000000000000
|
|
mkdir -p "$SYM_DIR"
|
|
mv olive-editor.sym "$SYM_DIR"
|
|
|
|
# Package AppImage
|
|
$DOWNLOAD_TOOL https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage
|
|
chmod +x appimagetool-x86_64.AppImage
|
|
VERSION=${GITHUB_SHA::8} ./appimagetool-x86_64.AppImage appdir --appimage-extract-and-run
|
|
|
|
# Set env variables
|
|
filename=$(echo Olive*.AppImage)
|
|
pkgname="${filename/x86_64/Linux-x86_64}"
|
|
mv "${filename}" "${pkgname}"
|
|
echo "::set-output name=pkgname::${pkgname}"
|
|
echo "::set-output name=artifact::${filename/x86_64/Linux-x86_64-${{ matrix.cc-compiler }}}"
|
|
|
|
- name: Upload Artifact to GitHub
|
|
uses: actions/upload-artifact@v2
|
|
continue-on-error: true
|
|
with:
|
|
name: ${{ steps.package.outputs.artifact }}
|
|
path: build/Olive*.AppImage
|
|
|
|
windows:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build-type: RelWithDebInfo
|
|
compiler-name: MSVC 16.x
|
|
os-name: Windows
|
|
os-arch: x86_64
|
|
os: windows-latest
|
|
cmake-gen: Ninja
|
|
name: |
|
|
${{ matrix.os-name }}
|
|
<${{ matrix.compiler-name }},
|
|
${{ matrix.build-type }},
|
|
${{ matrix.cmake-gen }}>
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout Source Code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Automatically Generate Package Name
|
|
shell: bash
|
|
env:
|
|
PLATFORM: ${{ matrix.os-name }}
|
|
ARCH: ${{ matrix.os-arch }}
|
|
run: |
|
|
echo "PKGNAME=$(echo Olive-${GITHUB_SHA::8}-${PLATFORM}-${ARCH})" >> $GITHUB_ENV
|
|
|
|
- name: Create Build Folder
|
|
run: |
|
|
cmake -E make_directory ${{ runner.workspace }}/build
|
|
|
|
- name: Enable Developer Command Prompt (Windows)
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
|
|
- name: Acquire Dependencies
|
|
shell: bash
|
|
working-directory: ${{ runner.workspace }}
|
|
run: |
|
|
$DOWNLOAD_TOOL https://github.com/olive-editor/dependencies/releases/download/continuous/olive-dep-win32.tar.gz
|
|
tar xzf olive-dep-win32.tar.gz
|
|
|
|
- name: Generate Patreon List
|
|
shell: bash
|
|
env:
|
|
PATREON_KEY: ${{ secrets.PATREON_KEY }}
|
|
run: |
|
|
pip3 install requests
|
|
cd $GITHUB_WORKSPACE/app/dialog/about
|
|
python3 patreon.py
|
|
if: github.event_name == 'push'
|
|
|
|
- name: Configure CMake
|
|
shell: bash
|
|
env:
|
|
DEP_LOCATION: ${{ runner.workspace }}/install
|
|
working-directory: ${{ runner.workspace }}/build
|
|
run: |
|
|
PATH=$DEP_LOCATION:$DEP_LOCATION/crashpad:$PATH \
|
|
cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -G "${{ matrix.cmake-gen }}"
|
|
|
|
- name: Build
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
cmake --build .
|
|
|
|
- name: Test
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
env:
|
|
DEP_LOCATION: ${{ runner.workspace }}/install
|
|
run: |
|
|
PATH=$PATH:$DEP_LOCATION/bin ctest -C ${{ matrix.build-type }} -V
|
|
|
|
- name: Create Package
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
env:
|
|
DEP_LOCATION: ${{ runner.workspace }}/install
|
|
run: |
|
|
mkdir olive-editor
|
|
cp app/olive-editor.exe olive-editor
|
|
cp app/crashhandler/olive-crashhandler.exe olive-editor
|
|
cp app/olive-editor.pdb olive-editor
|
|
$DEP_LOCATION/bin/windeployqt olive-editor/olive-crashhandler.exe
|
|
$DEP_LOCATION/bin/windeployqt olive-editor/olive-editor.exe
|
|
cp $(cygpath $DEP_LOCATION)/bin/*.dll olive-editor
|
|
cp $(cygpath $DEP_LOCATION)/crashpad/out/Default/crashpad_handler.exe olive-editor
|
|
cp $(cygpath $DEP_LOCATION)/bin/minidump_stackwalk.exe olive-editor
|
|
|
|
- name: Export Crashpad symbols
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
curl -fLSs https://github.com/google/breakpad/blob/master/src/tools/windows/binaries/dump_syms.exe?raw=true > dump_syms.exe
|
|
./dump_syms app/olive-editor.pdb > olive-editor.sym
|
|
SYM_HEADER=($(head -n 1 olive-editor.sym)) # Read first line of symbol file
|
|
SYM_DIR=olive-editor/symbols/olive-editor.pdb/${SYM_HEADER[3]}
|
|
mkdir -p "$SYM_DIR"
|
|
mv olive-editor.sym "$SYM_DIR"
|
|
|
|
- name: Deploy Packages
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
# Create Installer Executable
|
|
#$DOWNLOAD_TOOL http://web.archive.org/web/20210226132532/http://download.microsoft.com/download/3/2/2/3224B87F-CFA0-4E70-BDA3-3DE650EFEBA5/vcredist_x64.exe
|
|
cp $(cygpath $GITHUB_WORKSPACE)/app/packaging/windows/nsis/* .
|
|
cp $(cygpath $GITHUB_WORKSPACE)/LICENSE .
|
|
$DOWNLOAD_TOOL https://nsis.sourceforge.io/mediawiki/images/6/68/ShellExecAsUser_amd64-Unicode.7z
|
|
7z e ShellExecAsUser_amd64-Unicode.7z Plugins/x86-unicode/ShellExecAsUser.dll
|
|
makensis -V4 -DX64 "-XOutFile $PKGNAME.exe" "-X!AddPluginDir /x86-unicode $(pwd -W)" olive.nsi
|
|
|
|
# Create Portable ZIP
|
|
echo -n > olive-editor/portable
|
|
7z a $PKGNAME.zip olive-editor
|
|
|
|
- name: Upload Installer Artifact to GitHub
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ env.PKGNAME }}.exe
|
|
path: ${{ runner.workspace }}/build/${{ env.PKGNAME }}.exe
|
|
|
|
- name: Upload Portable Artifact to GitHub
|
|
uses: actions/upload-artifact@v2
|
|
continue-on-error: true
|
|
with:
|
|
name: ${{ env.PKGNAME }}.zip
|
|
path: ${{ runner.workspace }}/build/${{ env.PKGNAME }}.zip
|
|
|
|
macos:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build-type: RelWithDebInfo
|
|
compiler-name: Clang LLVM
|
|
os-name: macOS
|
|
os-arch: x86_64
|
|
os: macos-latest
|
|
cmake-gen: Ninja
|
|
env:
|
|
DEP_LOCATION: /opt/olive-editor
|
|
name: |
|
|
${{ matrix.os-name }}
|
|
<${{ matrix.compiler-name }},
|
|
${{ matrix.build-type }},
|
|
${{ matrix.cmake-gen }}>
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout Source Code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Automatically Generate Package Name
|
|
shell: bash
|
|
env:
|
|
PLATFORM: ${{ matrix.os-name }}
|
|
ARCH: ${{ matrix.os-arch }}
|
|
run: |
|
|
echo "PKGNAME=$(echo Olive-${GITHUB_SHA::8}-${PLATFORM}-${ARCH})" >> $GITHUB_ENV
|
|
|
|
- name: Create Build Folder
|
|
run: |
|
|
cmake -E make_directory ${{ runner.workspace }}/build
|
|
|
|
- name: Acquire Dependencies
|
|
shell: bash
|
|
working-directory: ${{ runner.workspace }}
|
|
run: |
|
|
$DOWNLOAD_TOOL https://github.com/olive-editor/dependencies/releases/download/continuous/olive-dep-mac-x86_64.tar.gz
|
|
sudo tar xzf olive-dep-mac-x86_64.tar.gz -C /
|
|
|
|
- name: Generate Patreon List
|
|
env:
|
|
PATREON_KEY: ${{ secrets.PATREON_KEY }}
|
|
run: |
|
|
pip3 install requests
|
|
cd $GITHUB_WORKSPACE/app/dialog/about
|
|
python3 patreon.py
|
|
if: github.event_name == 'push'
|
|
|
|
- name: Configure CMake
|
|
shell: bash
|
|
working-directory: ${{ runner.workspace }}/build
|
|
run: |
|
|
brew install ninja
|
|
PATH=$DEP_LOCATION:$DEP_LOCATION/crashpad:$PATH \
|
|
cmake $GITHUB_WORKSPACE -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -G "${{ matrix.cmake-gen }}" -DCMAKE_INSTALL_PREFIX=$DEP_LOCATION
|
|
|
|
- name: Build
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
cmake --build .
|
|
|
|
- name: Test
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
ctest -C ${{ matrix.build-type }} -V
|
|
|
|
- name: Create Package
|
|
working-directory: ${{ runner.workspace }}/build
|
|
env:
|
|
BUNDLE_NAME: "Olive.app"
|
|
shell: bash
|
|
run: |
|
|
# Use macdeployqt and macdeployqt to bundle dependencies
|
|
mv app/$BUNDLE_NAME .
|
|
$DEP_LOCATION/bin/macdeployqt $BUNDLE_NAME -executable=$BUNDLE_NAME/Contents/MacOS/olive-crashhandler
|
|
$DOWNLOAD_TOOL https://github.com/arl/macdeployqtfix/raw/master/macdeployqtfix.py
|
|
python2 macdeployqtfix.py $BUNDLE_NAME/Contents/MacOS/Olive $DEP_LOCATION
|
|
|
|
# Crashpad symbols
|
|
$DEP_LOCATION/bin/dump_syms $BUNDLE_NAME/Contents/MacOS/Olive > Olive.sym
|
|
SYM_HEADER=($(head -n 1 Olive.sym)) # Read first line of symbol file
|
|
SYM_DIR=$BUNDLE_NAME/Contents/Resources/symbols/Olive/${SYM_HEADER[3]}
|
|
mkdir -p "$SYM_DIR"
|
|
mv Olive.sym "$SYM_DIR"
|
|
|
|
- name: Deploy Packages
|
|
working-directory: ${{ runner.workspace }}/build
|
|
shell: bash
|
|
run: |
|
|
zip -r $PKGNAME.zip Olive.app
|
|
|
|
- name: Upload Artifact to GitHub
|
|
uses: actions/upload-artifact@v2
|
|
continue-on-error: true
|
|
with:
|
|
name: ${{ env.PKGNAME }}.zip
|
|
path: ${{ runner.workspace }}/build/${{ env.PKGNAME }}.zip
|