Files
oak-editor/.github/workflows/ci.yml
T
itsmattkc 65a1922ed4 ci: remove vcredist
Microsoft took this link down. It's still up on web.archive.org,
but it might not be necessary anyway since now we compile our own
deps. Going to try without it.
2021-04-22 11:50:24 +10:00

390 lines
13 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'
- '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: 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 }}
- 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
with:
name: ${{ steps.package.outputs.artifact }}
path: build/Olive*.AppImage
- name: Upload Packages to Nightly Page
working-directory: build
env:
GH_AUTH_KEY: ${{ secrets.GH_AUTH_KEY }}
PKGNAME: ${{ steps.package.outputs.pkgname }}
if: github.event_name == 'push' && matrix.cc-compiler == 'gcc'
run: |
$UPLOAD_TOOL \
-F file="@$PKGNAME" \
-F key="$GH_AUTH_KEY" \
-F hash="$GITHUB_SHA" \
-F time="$(git show -s --format=%ct)" \
-F comment="$(git show -s --format=%B)" \
https://ci.olivevideoeditor.org/push.php
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: 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 }}
- 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/c/c7/ShellExecAsUser.zip
7z x ShellExecAsUser.zip ShellExecAsUser.dll
makensis -V4 -DX64 "-XOutFile $PKGNAME.exe" "-X!AddPluginDir $(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
with:
name: ${{ env.PKGNAME }}.zip
path: ${{ runner.workspace }}/build/${{ env.PKGNAME }}.zip
- name: Upload Packages to Nightly Page
shell: bash
working-directory: ${{ runner.workspace }}/build
env:
GH_AUTH_KEY: ${{ secrets.GH_AUTH_KEY }}
if: github.event_name == 'push'
run: |
$UPLOAD_TOOL \
-F file=@$PKGNAME.exe \
-F key="$GH_AUTH_KEY" \
-F hash="$GITHUB_SHA" \
-F time="$(git -C $GITHUB_WORKSPACE show -s --format=%ct)" \
-F comment="$(git -C $GITHUB_WORKSPACE show -s --format=%B)" \
https://ci.olivevideoeditor.org/push.php
$UPLOAD_TOOL \
-F file=@$PKGNAME.zip \
-F key="$GH_AUTH_KEY" \
-F hash="$GITHUB_SHA" \
-F time="$(git -C $GITHUB_WORKSPACE show -s --format=%ct)" \
-F comment="$(git -C $GITHUB_WORKSPACE show -s --format=%B)" \
https://ci.olivevideoeditor.org/push.php
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: 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 }}
- 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
with:
name: ${{ env.PKGNAME }}.zip
path: ${{ runner.workspace }}/build/${{ env.PKGNAME }}.zip
- name: Upload Packages to Nightly Page
shell: bash
working-directory: ${{ runner.workspace }}/build
env:
GH_AUTH_KEY: ${{ secrets.GH_AUTH_KEY }}
if: github.event_name == 'push'
run: |
$UPLOAD_TOOL \
-F file=@$PKGNAME.zip \
-F key="$GH_AUTH_KEY" \
-F hash="$GITHUB_SHA" \
-F time="$(git -C $GITHUB_WORKSPACE show -s --format=%ct)" \
-F comment="$(git -C $GITHUB_WORKSPACE show -s --format=%B)" \
https://ci.olivevideoeditor.org/push.php