From caa5366c0be19ee554890082a924cb12156c4147 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 00:25:36 -0500 Subject: [PATCH 001/114] Create build.md --- build.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 build.md diff --git a/build.md b/build.md new file mode 100644 index 00000000..b4791720 --- /dev/null +++ b/build.md @@ -0,0 +1,20 @@ +THESE INSTRUCTIONS ARE OUT OF DATE + + +# Build instructions +In your obs-studio/plugins folder +1. ```git clone --recursive https://github.com/Alzy/obs-midi.git``` +2. Append to CMakeLists.txt + * ```add_subdirectory(obs-midi)``` + Go back to your OBS Build directory + ## Windows + 1. run ```cmake-gui.exe``` + 2. click ```configure``` + 3. click ```generate``` + 4. click ```open project``` + 5. In visual studio, right click on the obs-studio solution and click build + ## Linux + 1. Rerun cmake using your normal options + 2. rerun ```make -j4``` + 3. rerun ```sudo make install``` / ```sudo checkinstall``` depending on which you normally use. + ### [More info on building OBS from source](https://github.com/obsproject/obs-studio/wiki/install-instructions) From 9ac0f924588c0a6f51120979e4925b49f6536d24 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 00:26:01 -0500 Subject: [PATCH 002/114] Update README.md --- README.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/README.md b/README.md index 8e5fd8a1..8855bbb2 100644 --- a/README.md +++ b/README.md @@ -26,25 +26,6 @@ Use MIDI devices to trigger events in OBS and visa versa. Currently runs on Windows and Linux, and is untested on MAC - -# Build instructions -In your obs-studio/plugins folder -1. ```git clone --recursive https://github.com/Alzy/obs-midi.git``` -2. Append to CMakeLists.txt - * ```add_subdirectory(obs-midi)``` - Go back to your OBS Build directory - ## Windows - 1. run ```cmake-gui.exe``` - 2. click ```configure``` - 3. click ```generate``` - 4. click ```open project``` - 5. In visual studio, right click on the obs-studio solution and click build - ## Linux - 1. Rerun cmake using your normal options - 2. rerun ```make -j4``` - 3. rerun ```sudo make install``` / ```sudo checkinstall``` depending on which you normally use. - ### [More info on building OBS from source](https://github.com/obsproject/obs-studio/wiki/install-instructions) - # Special thanks to the following projects * [RTMidi17](https://github.com/jcelerier/RtMidi17) An amazing modernized RTMIDI library * [OBSWebsocket](https://github.com/Palakis/obs-websocket/) from which much code was borrowed for interfacing with OBS From 5496149a7726306e738e2b1c261fc7743080ac95 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 01:50:02 -0500 Subject: [PATCH 003/114] Update build.md --- build.md | 87 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/build.md b/build.md index b4791720..2f60480f 100644 --- a/build.md +++ b/build.md @@ -1,20 +1,67 @@ -THESE INSTRUCTIONS ARE OUT OF DATE - - -# Build instructions -In your obs-studio/plugins folder -1. ```git clone --recursive https://github.com/Alzy/obs-midi.git``` -2. Append to CMakeLists.txt - * ```add_subdirectory(obs-midi)``` - Go back to your OBS Build directory - ## Windows - 1. run ```cmake-gui.exe``` - 2. click ```configure``` - 3. click ```generate``` - 4. click ```open project``` - 5. In visual studio, right click on the obs-studio solution and click build - ## Linux - 1. Rerun cmake using your normal options - 2. rerun ```make -j4``` - 3. rerun ```sudo make install``` / ```sudo checkinstall``` depending on which you normally use. - ### [More info on building OBS from source](https://github.com/obsproject/obs-studio/wiki/install-instructions) +# Compiling obs-midi + +## Prerequisites + +You'll need [Qt 5.15.2](https://download.qt.io/official_releases/qt/5.15/), +[CMake](https://cmake.org/download/) and a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions) installed on your +computer. + +## Windows + +In cmake-gui, you'll have to set the following variables : + +- **QTDIR** (path) : location of the Qt environment suited for your compiler and architecture +- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source code of OBS Studio +- **LIBOBS_LIB** (filepath) : location of the obs.lib file +- **OBS_FRONTEND_LIB** (filepath) : location of the obs-frontend-api.lib file +- **CMAKE_INSTALL_PREFIX** (path) : Same location as QTDIR + +## Linux + +On Debian/Ubuntu : + +```shell +sudo apt-get install libboost-all-dev +git clone --recursive https://github.com/Palakis/obs-midi.git +cd obs-midi +mkdir build && cd build +cmake -DLIBOBS_INCLUDE_DIR="" -DCMAKE_INSTALL_PREFIX=/usr -DUSE_UBUNTU_FIX=true .. +make -j4 +sudo make install +``` + +On other linux OS's, use this cmake command instead: + +```shell +cmake -DLIBOBS_INCLUDE_DIR="" -DCMAKE_INSTALL_PREFIX=/usr .. +``` + +## OS X + +As a prerequisite, you will need Xcode for your current OSX version, the Xcode command line tools, and [Homebrew](https://brew.sh/). +Homebrew's setup will guide you in getting your system set up, you should be good to go once Homebrew is successfully up and running. + +Use of the macOS CI scripts is recommended. Please note that these +scripts install new software and can change several settings on your system. An +existing obs-studio development environment is not required, as +`install-build-obs-macos.sh` will install it for you. If you already have a +working obs-studio development environment and have built obs-studio, you can +skip that script. + +Of course, you're encouraged to dig through the contents of these scripts to +look for issues or specificities. + +```shell +git clone --recursive https://github.com/Palakis/obs-midi.git +cd obs-midi +./CI/install-dependencies-macos.sh +./CI/install-build-obs-macos.sh +./CI/build-macos.sh +./CI/package-macos.sh +``` + +This will result in a ready-to-use `obs-midi.pkg` installer in the `release` subfolder. + +## Automated Builds + +[![Build Status](https://dev.azure.com/Palakis/obs-midi/_apis/build/status/Palakis.obs-midi?branchName=4.x-current)](https://dev.azure.com/Palakis/obs-midi/_build/latest?definitionId=2&branchName=4.x-current) From 6f22c54d371e999e887b342c784e254d00501cdb Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 01:52:51 -0500 Subject: [PATCH 004/114] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8855bbb2..6e36b1f5 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,9 @@ Use MIDI devices to trigger events in OBS and visa versa. # Installing -1. Grab the zip from the [OBS-Midi Releases Page](https://github.com/Alzy/obs-midi/releases) +1. Grab the zip from the [OBS-Midi Releases Page](https://github.com/cpyarger/obs-midi/releases) -2. Copy the files in the zip to your obs plugins directory. - - * By Default this is C:\Program Files\obs-studio\obs-plugins\64bit +2. Download and run the installer for your OS 3. Launch OBS @@ -24,9 +22,12 @@ Use MIDI devices to trigger events in OBS and visa versa. -Currently runs on Windows and Linux, and is untested on MAC +Currently runs on Windows and Linux, and is partly tested on MAC # Special thanks to the following projects * [RTMidi17](https://github.com/jcelerier/RtMidi17) An amazing modernized RTMIDI library * [OBSWebsocket](https://github.com/Palakis/obs-websocket/) from which much code was borrowed for interfacing with OBS * [Midi2OBS](https://github.com/lebaston100/MIDItoOBS) Where I got my start playing with this + +# Build Instructions +[Build instructions can be found here](build.md) From 75dea3a3ea4f304175046dfbac7b18fadfe409a2 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 02:17:51 -0500 Subject: [PATCH 005/114] Update build.md --- build.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/build.md b/build.md index 2f60480f..7ba7b4b6 100644 --- a/build.md +++ b/build.md @@ -6,15 +6,33 @@ You'll need [Qt 5.15.2](https://download.qt.io/official_releases/qt/5.15/), [CMake](https://cmake.org/download/) and a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions) installed on your computer. +For Cleanliness and sanity, Do not mix the obs-studio and obs-midi directories. + +For Example My Directory structure looks like this + + +|Directory | Reason| +|-----------|----------| +| Desktop\OBS\Build| (OBS-Studio Build Dir) | +| Desktop\OBS\Deps | (OBS Dependencies from zip file on obs site) | +| Desktop\OBS\midibuild | (Build Directory for obs-midi) | +| Desktop\OBS\obs-studio | (obs studio source code) | +| Desktop\OBS\obs-midi | (obs midi source code) | +| C:\Qt\5.15.2\msvc2019_64 | (QTDIR) | + + ## Windows In cmake-gui, you'll have to set the following variables : -- **QTDIR** (path) : location of the Qt environment suited for your compiler and architecture -- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source code of OBS Studio -- **LIBOBS_LIB** (filepath) : location of the obs.lib file -- **OBS_FRONTEND_LIB** (filepath) : location of the obs-frontend-api.lib file -- **CMAKE_INSTALL_PREFIX** (path) : Same location as QTDIR +| Variable | info | Example Path | +|----------|-------|-----------| +| **QTDIR** | (path) : location of the Qt environment suited for your compiler and architecture | C:/Qt/5.15.2/msvc2019_64| +| **LIBOBS_INCLUDE_DIR** | (path) : location of the libobs subfolder in the source code of OBS Studio | C:/Users/User/Desktop/OBS/obs-studio/libobs | +| **LIBOBS_LIB** | (filepath) : location of the obs.lib file | C:/Users/User/Desktop/OBS/build/libobs/RelWithDebInfo/obs.lib| +| **OBS_FRONTEND_LIB** | (filepath) : location of the obs-frontend-api.lib file | C:/Users/User/Desktop/OBS/build/UI/obs-frontend-api/RelWithDebInfo/obs-frontend-api.lib| +| **CMAKE_INSTALL_PREFIX** | (path) : Same location as QTDIR | C:/Qt/5.15.2/msvc2019_64| + ## Linux From 25b984e3727e96396d5eef4b0ec4254875d173c4 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 02:20:36 -0500 Subject: [PATCH 006/114] Add files via upload --- docs/obs-midi-cmake.PNG | Bin 0 -> 109180 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/obs-midi-cmake.PNG diff --git a/docs/obs-midi-cmake.PNG b/docs/obs-midi-cmake.PNG new file mode 100644 index 0000000000000000000000000000000000000000..748894a0e48c848a6be3519b7ab536ec759b50ba GIT binary patch literal 109180 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%0DVTD)p>sK0ot;L?&qx2Q*M7l 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 Date: Mon, 8 Feb 2021 02:22:22 -0500 Subject: [PATCH 007/114] Update build.md --- build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.md b/build.md index 7ba7b4b6..9b4857aa 100644 --- a/build.md +++ b/build.md @@ -33,7 +33,7 @@ In cmake-gui, you'll have to set the following variables : | **OBS_FRONTEND_LIB** | (filepath) : location of the obs-frontend-api.lib file | C:/Users/User/Desktop/OBS/build/UI/obs-frontend-api/RelWithDebInfo/obs-frontend-api.lib| | **CMAKE_INSTALL_PREFIX** | (path) : Same location as QTDIR | C:/Qt/5.15.2/msvc2019_64| - +![My CMake Gui Looks like ](https://github.com/cpyarger/obs-midi/blob/master/docs/obs-midi-cmake.PNG?raw=true) ## Linux On Debian/Ubuntu : From 5e9d48802fdb71c68da5a7ccd0021f5ba1fcc4ed Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 02:23:05 -0500 Subject: [PATCH 008/114] Update build.md --- build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.md b/build.md index 9b4857aa..428858cc 100644 --- a/build.md +++ b/build.md @@ -82,4 +82,4 @@ This will result in a ready-to-use `obs-midi.pkg` installer in the `release` sub ## Automated Builds -[![Build Status](https://dev.azure.com/Palakis/obs-midi/_apis/build/status/Palakis.obs-midi?branchName=4.x-current)](https://dev.azure.com/Palakis/obs-midi/_build/latest?definitionId=2&branchName=4.x-current) +![CI Multiplatform Build](https://github.com/cpyarger/obs-midi/workflows/CI%20Multiplatform%20Build/badge.svg) From 3b9f26278a16a09ecc0e6409bc80cfc9390d076c Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 04:58:05 -0500 Subject: [PATCH 009/114] only build on release branch push --- .github/workflows/CI Build and release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index d5cc5408..0932add0 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -2,6 +2,8 @@ name: 'CI Multiplatform Build' on: push: + branches: + - release paths-ignore: - 'docs/**' pull_request: From 7e06348f13231202608802c685b93beca45f91ba Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 05:08:18 -0500 Subject: [PATCH 010/114] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e36b1f5..d0bfd801 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Use MIDI devices to trigger events in OBS and visa versa. # Installing -1. Grab the zip from the [OBS-Midi Releases Page](https://github.com/cpyarger/obs-midi/releases) +1. Grab the installer from the [OBS-Midi Releases Page](https://github.com/cpyarger/obs-midi/releases) 2. Download and run the installer for your OS From 83ea25f4527f7eed65c4595d0e1485aea5afe2b2 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 05:10:04 -0500 Subject: [PATCH 011/114] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 67 +++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 00000000..53bc0436 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,67 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '23 11 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: [ 'cpp' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From c12c8fcbeb54c8ebfb3a7cfb582e809ffaadce6c Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 05:14:16 -0500 Subject: [PATCH 012/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 143 +++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 5 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 53bc0436..40d0af42 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -34,9 +34,7 @@ jobs: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - - name: Checkout repository - uses: actions/checkout@v2 - + # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 @@ -49,8 +47,143 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisites (Apt)' + shell: bash + run: | + sudo dpkg --add-architecture amd64 + sudo apt-get -qq update + sudo apt-get install -y \ + build-essential \ + checkinstall \ + cmake \ + libasound2-dev \ + libavcodec-dev \ + libavdevice-dev \ + libavfilter-dev \ + libavformat-dev \ + libavutil-dev \ + libcurl4-openssl-dev \ + libfdk-aac-dev \ + libfontconfig-dev \ + libfreetype6-dev \ + libgl1-mesa-dev \ + libjack-jackd2-dev \ + libjansson-dev \ + libluajit-5.1-dev \ + libpulse-dev \ + libqt5x11extras5-dev \ + libspeexdsp-dev \ + libswresample-dev \ + libswscale-dev \ + libudev-dev \ + libv4l-dev \ + libva-dev \ + libvlc-dev \ + libx11-dev \ + libx264-dev \ + libx11-xcb-dev \ + libx11-xcb1 \ + libxcb-randr0-dev \ + libxcb-shm0-dev \ + libxcb-xinerama0-dev \ + libxcomposite-dev \ + libxinerama-dev \ + libmbedtls-dev \ + pkg-config \ + python3-dev \ + qtbase5-dev \ + libqt5svg5-dev \ + swig + - name: 'Configure OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Install OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + cd ./build + sudo cp ./libobs/libobs.so /usr/lib + sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib + sudo mkdir -p /usr/include/obs + sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" + echo "::set-env name=LINUX_FILENAME::$FILENAME" + - name: 'Package ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + sudo checkinstall -y --type=debian --fstrans=no -nodoc \ + --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ + --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ + --pkgsource="${{ github.event.repository.html_url }}" \ + --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ + --pakdir="../package" + sudo chmod ao+r ../package/* + cd - # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl From 3466c985f38744dcb6b13e5c3e3992f0521bdec2 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 05:16:40 -0500 Subject: [PATCH 013/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 40d0af42..792fa3b1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -19,7 +19,8 @@ on: branches: [ master ] schedule: - cron: '23 11 * * 3' - +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true jobs: analyze: name: Analyze From 4c9fa0a14fccc32bc633f99f605aa498420c95e8 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:18:15 -0500 Subject: [PATCH 014/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 44 ++++++--------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 792fa3b1..49c2e8d2 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,21 +26,11 @@ jobs: name: Analyze runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - language: [ 'cpp' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] - # Learn more: - # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - + # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. @@ -54,12 +44,17 @@ jobs: with: path: ${{ github.workspace }}/obs-midi submodules: 'recursive' + - name: 'Checkout OBS' uses: actions/checkout@v2 with: repository: obsproject/obs-studio path: ${{ github.workspace }}/obs-studio submodules: 'recursive' + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: cpp - name: 'Get OBS-Studio git info' shell: bash working-directory: ${{ github.workspace }}/obs-studio @@ -165,26 +160,7 @@ jobs: set -e cd ./build make -j4 - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" - echo "::set-env name=LINUX_FILENAME::$FILENAME" - - name: 'Package ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ - --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ - --pkgsource="${{ github.event.repository.html_url }}" \ - --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ - --pakdir="../package" - sudo chmod ao+r ../package/* - cd - + # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -197,5 +173,5 @@ jobs: # make bootstrap # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 3e0c4bf98cf7bead7059196b139678481297ab72 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:18:59 -0500 Subject: [PATCH 015/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 49c2e8d2..0ecb2009 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -52,9 +52,9 @@ jobs: path: ${{ github.workspace }}/obs-studio submodules: 'recursive' - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: cpp + uses: github/codeql-action/init@v1 + with: + languages: cpp - name: 'Get OBS-Studio git info' shell: bash working-directory: ${{ github.workspace }}/obs-studio From 779111c46e947871136bc07d93c97a109aa13618 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:19:36 -0500 Subject: [PATCH 016/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0ecb2009..9c5cf986 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -173,5 +173,5 @@ jobs: # make bootstrap # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From a2b6bce42e99e2d07f3d1f489d40ad59b4f093fd Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:31:23 -0500 Subject: [PATCH 017/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9c5cf986..0d5d4d18 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -52,9 +52,9 @@ jobs: path: ${{ github.workspace }}/obs-studio submodules: 'recursive' - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: cpp + uses: github/codeql-action/init@v1 + with: + languages: cpp - name: 'Get OBS-Studio git info' shell: bash working-directory: ${{ github.workspace }}/obs-studio @@ -153,13 +153,9 @@ jobs: mkdir ./build cd ./build cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + # ℹ️ Command-line programs to run using the OS shell. @@ -173,5 +169,5 @@ jobs: # make bootstrap # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From dcc9bda103e2d93a350f7c10b9dc26f2b9c07cd2 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:32:36 -0500 Subject: [PATCH 018/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0d5d4d18..e8c0bca9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -52,9 +52,9 @@ jobs: path: ${{ github.workspace }}/obs-studio submodules: 'recursive' - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: cpp + uses: github/codeql-action/init@v1 + with: + languages: cpp - name: 'Get OBS-Studio git info' shell: bash working-directory: ${{ github.workspace }}/obs-studio @@ -154,20 +154,6 @@ jobs: cd ./build cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/autobuild@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 09ce765aece10c2dc6f3de7c21dad166217c8a38 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:37:55 -0500 Subject: [PATCH 019/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e8c0bca9..c64ba210 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -153,7 +153,10 @@ jobs: mkdir ./build cd ./build cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + + - run: | + cd obs-midi + make -j4 + - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 From f135185248f33224e8524c303cd49e7da728e39b Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 16:46:46 -0500 Subject: [PATCH 020/114] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c64ba210..8608f00a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -21,6 +21,8 @@ on: - cron: '23 11 * * 3' env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true + source_root: "./obs-midi" + source-root: "./obs-midi" jobs: analyze: name: Analyze @@ -154,9 +156,9 @@ jobs: cd ./build cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - run: | - cd obs-midi - make -j4 + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 From 5f2a0aafab66ffe70094089af0751596183e6f48 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Mon, 8 Feb 2021 17:50:58 -0500 Subject: [PATCH 021/114] Delete codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 164 -------------------------- 1 file changed, 164 deletions(-) delete mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 8608f00a..00000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,164 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ master ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ master ] - schedule: - - cron: '23 11 * * 3' -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - source_root: "./obs-midi" - source-root: "./obs-midi" -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - - - steps: - - # Initializes the CodeQL tools for scanning. - - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: cpp - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisites (Apt)' - shell: bash - run: | - sudo dpkg --add-architecture amd64 - sudo apt-get -qq update - sudo apt-get install -y \ - build-essential \ - checkinstall \ - cmake \ - libasound2-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavfilter-dev \ - libavformat-dev \ - libavutil-dev \ - libcurl4-openssl-dev \ - libfdk-aac-dev \ - libfontconfig-dev \ - libfreetype6-dev \ - libgl1-mesa-dev \ - libjack-jackd2-dev \ - libjansson-dev \ - libluajit-5.1-dev \ - libpulse-dev \ - libqt5x11extras5-dev \ - libspeexdsp-dev \ - libswresample-dev \ - libswscale-dev \ - libudev-dev \ - libv4l-dev \ - libva-dev \ - libvlc-dev \ - libx11-dev \ - libx264-dev \ - libx11-xcb-dev \ - libx11-xcb1 \ - libxcb-randr0-dev \ - libxcb-shm0-dev \ - libxcb-xinerama0-dev \ - libxcomposite-dev \ - libxinerama-dev \ - libmbedtls-dev \ - pkg-config \ - python3-dev \ - qtbase5-dev \ - libqt5svg5-dev \ - swig - - name: 'Configure OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Install OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - cd ./build - sudo cp ./libobs/libobs.so /usr/lib - sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib - sudo mkdir -p /usr/include/obs - sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 From 953111406a3d7c378e60c5196cff4b05427f49e1 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 08:26:01 -0500 Subject: [PATCH 022/114] Update CI Build and release.yml add code signing --- .github/workflows/CI Build and release.yml | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 0932add0..987b7d83 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -410,19 +410,37 @@ jobs: install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: 'package file' + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} + p12-password: ${{ secrets.MACOS_CERT_PASS }} + - name: 'Code signing' if: success() working-directory: ./obs-midi shell: bash run: | set -e + codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() + if: success() && startsWith(github.ref, 'refs/tags') uses: actions/upload-artifact@v2-preview with: - name: '${{ env.GIT_HASH }}-macOS' + name: '${{ env.GIT_TAG }}-macOS' path: ${{ github.workspace }}/obs-midi/release/*.pkg make-release: From 9809d65892bfea543be663256f54f770619bf0c7 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 08:37:58 -0500 Subject: [PATCH 023/114] Update CI Build and release.yml --- .github/workflows/CI Build and release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 987b7d83..72f378e3 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -414,15 +414,15 @@ jobs: if: success() uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 with: - p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} - p12-password: ${{ secrets.MACOS_CERT_PASS }} + p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} + p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} - name: 'Code signing' if: success() working-directory: ./obs-midi shell: bash run: | set -e - codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so + codesign --sign "${{ secrets.SIGNING_CERTIFICATE_P12_DATA }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} @@ -433,9 +433,9 @@ jobs: shell: bash run: | set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() && startsWith(github.ref, 'refs/tags') uses: actions/upload-artifact@v2-preview From f492df1c2366a53f1cf5c8c6fe98f46686722fb4 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 08:38:21 -0500 Subject: [PATCH 024/114] Update CI Build and release.yml --- .github/workflows/CI Build and release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 72f378e3..e286cb5f 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -4,6 +4,7 @@ on: push: branches: - release + - master paths-ignore: - 'docs/**' pull_request: From cd95546b7e12466088862596b4d393fc6cac4004 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:24:01 -0500 Subject: [PATCH 025/114] change codesign --- .github/workflows/CI Build and release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index e286cb5f..4b561858 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -400,7 +400,7 @@ jobs: FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" - + - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi @@ -423,7 +423,7 @@ jobs: shell: bash run: | set -e - codesign --sign "${{ secrets.SIGNING_CERTIFICATE_P12_DATA }}" ./build/obs-midi.so + codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} From 8a52faefd7dad16782db71984ddd0192ec5bf615 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:26:15 -0500 Subject: [PATCH 026/114] fix ccodesign --- .github/workflows/CI Build and release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 4b561858..ce577e6f 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -5,6 +5,7 @@ on: branches: - release - master + - test2 paths-ignore: - 'docs/**' pull_request: From 29f82ab0c1b2253a87440bc617a1ca5f2056c7d0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:30:10 -0500 Subject: [PATCH 027/114] fix ccodesign --- .github/workflows/CI Build and release.yml | 432 +-------------------- 1 file changed, 1 insertion(+), 431 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index ce577e6f..10c04bdb 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -1,4 +1,4 @@ -name: 'CI Multiplatform Build' +name: 'CI Make release' on: push: @@ -15,436 +15,6 @@ on: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true jobs: - windows: - name: 'Windows 32+64bit' - runs-on: [windows-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - QT_VERSION: '5.10.1' - WINDOWS_DEPS_VERSION: '2017' - CMAKE_GENERATOR: "Visual Studio 16 2019" - CMAKE_SYSTEM_VERSION: "10.0" - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - steps: - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.0 - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisite: QT' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - - 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" - - name: 'Install prerequisite: Pre-built OBS dependencies' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - - 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" - - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-32 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-32' - with: - path: ${{ github.workspace }}/obs-studio/build32 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-64 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-64' - with: - path: ${{ github.workspace }}/obs-studio/build64 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Configure obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Configure obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Build obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln - - name: 'Build obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" - echo "::set-env name=WIN_FILENAME::$FILENAME" - - name: 'Package obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir package - cd package - 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" - iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" - - name: 'Publish ${{ env.WIN_FILENAME }}.zip' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows' - path: ${{ github.workspace }}/obs-midi/package/*.zip - - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows-Installer' - path: ${{ github.workspace }}/obs-midi/package/*.exe - ubuntu64: - name: "Linux/Ubuntu 64-bit" - runs-on: [ubuntu-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisites (Apt)' - shell: bash - run: | - sudo dpkg --add-architecture amd64 - sudo apt-get -qq update - sudo apt-get install -y \ - build-essential \ - checkinstall \ - cmake \ - libasound2-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavfilter-dev \ - libavformat-dev \ - libavutil-dev \ - libcurl4-openssl-dev \ - libfdk-aac-dev \ - libfontconfig-dev \ - libfreetype6-dev \ - libgl1-mesa-dev \ - libjack-jackd2-dev \ - libjansson-dev \ - libluajit-5.1-dev \ - libpulse-dev \ - libqt5x11extras5-dev \ - libspeexdsp-dev \ - libswresample-dev \ - libswscale-dev \ - libudev-dev \ - libv4l-dev \ - libva-dev \ - libvlc-dev \ - libx11-dev \ - libx264-dev \ - libx11-xcb-dev \ - libx11-xcb1 \ - libxcb-randr0-dev \ - libxcb-shm0-dev \ - libxcb-xinerama0-dev \ - libxcomposite-dev \ - libxinerama-dev \ - libmbedtls-dev \ - pkg-config \ - python3-dev \ - qtbase5-dev \ - libqt5svg5-dev \ - swig - - name: 'Configure OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Install OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - cd ./build - sudo cp ./libobs/libobs.so /usr/lib - sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib - sudo mkdir -p /usr/include/obs - sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" - echo "::set-env name=LINUX_FILENAME::$FILENAME" - - name: 'Package ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ - --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ - --pkgsource="${{ github.event.repository.html_url }}" \ - --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ - --pakdir="../package" - sudo chmod ao+r ../package/* - cd - - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.deb' - macos64: - name: "macOS 64-bit" - runs-on: [macos-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - MACOS_DEPS_VERSION: '2020-04-18' - QT_VERSION: '5.14.1' - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install Deps' - shell: bash - working-directory: ${{ github.workspace }}/obs-midi - run: | - ./CI/install-dependencies-macos.sh - echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile - echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" - echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" - echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" - echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" - - name: 'Install prerequisite: Pre-built OBS dependencies' - shell: bash - run: | - curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz - tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" - - name: 'Configure OBS Studio' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir build - cd build - cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. - - name: 'Build OBS Studio libraries' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir build - cd build - cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Install prerequisite: Packages app' - if: success() - shell: bash - run: | - curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg - sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - - name: 'Set release filename' - if: success() - shell: bash - run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" - - - name: 'Fix linked dynamic library paths' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so - echo "Dependencies for obs-midi" - otool -L ./build/obs-midi.so - - name: 'Install Apple Developer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} - p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} - - name: 'Code signing' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so - packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - - name: 'Notarization' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() && startsWith(github.ref, 'refs/tags') - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_TAG }}-macOS' - path: ${{ github.workspace }}/obs-midi/release/*.pkg - make-release: name: 'Create and upload release' runs-on: [ubuntu-latest] From 9f564dce2697a5afdec5400fd61e083c69c4c1f3 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:30:19 -0500 Subject: [PATCH 028/114] fix ccodesign --- .../workflows/CI Build and release linux.yml | 164 ++++++++++++++++++ .../workflows/CI Build and release mac.yml | 157 +++++++++++++++++ .../CI Build and release windows .yml | 159 +++++++++++++++++ 3 files changed, 480 insertions(+) create mode 100644 .github/workflows/CI Build and release linux.yml create mode 100644 .github/workflows/CI Build and release mac.yml create mode 100644 .github/workflows/CI Build and release windows .yml diff --git a/.github/workflows/CI Build and release linux.yml b/.github/workflows/CI Build and release linux.yml new file mode 100644 index 00000000..7e8e7d86 --- /dev/null +++ b/.github/workflows/CI Build and release linux.yml @@ -0,0 +1,164 @@ +name: 'CI Linux Build' + +on: + push: + branches: + - release + - master + - test2 + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + ubuntu64: + name: "Linux/Ubuntu 64-bit" + runs-on: [ubuntu-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisites (Apt)' + shell: bash + run: | + sudo dpkg --add-architecture amd64 + sudo apt-get -qq update + sudo apt-get install -y \ + build-essential \ + checkinstall \ + cmake \ + libasound2-dev \ + libavcodec-dev \ + libavdevice-dev \ + libavfilter-dev \ + libavformat-dev \ + libavutil-dev \ + libcurl4-openssl-dev \ + libfdk-aac-dev \ + libfontconfig-dev \ + libfreetype6-dev \ + libgl1-mesa-dev \ + libjack-jackd2-dev \ + libjansson-dev \ + libluajit-5.1-dev \ + libpulse-dev \ + libqt5x11extras5-dev \ + libspeexdsp-dev \ + libswresample-dev \ + libswscale-dev \ + libudev-dev \ + libv4l-dev \ + libva-dev \ + libvlc-dev \ + libx11-dev \ + libx264-dev \ + libx11-xcb-dev \ + libx11-xcb1 \ + libxcb-randr0-dev \ + libxcb-shm0-dev \ + libxcb-xinerama0-dev \ + libxcomposite-dev \ + libxinerama-dev \ + libmbedtls-dev \ + pkg-config \ + python3-dev \ + qtbase5-dev \ + libqt5svg5-dev \ + swig + - name: 'Configure OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Install OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + cd ./build + sudo cp ./libobs/libobs.so /usr/lib + sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib + sudo mkdir -p /usr/include/obs + sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" + echo "::set-env name=LINUX_FILENAME::$FILENAME" + - name: 'Package ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + sudo checkinstall -y --type=debian --fstrans=no -nodoc \ + --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ + --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ + --pkgsource="${{ github.event.repository.html_url }}" \ + --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ + --pakdir="../package" + sudo chmod ao+r ../package/* + cd - + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.deb' diff --git a/.github/workflows/CI Build and release mac.yml b/.github/workflows/CI Build and release mac.yml new file mode 100644 index 00000000..5b990e47 --- /dev/null +++ b/.github/workflows/CI Build and release mac.yml @@ -0,0 +1,157 @@ +name: 'CI MacOS Build' + +on: + push: + branches: + - release + - master + - test2 + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + macos64: + name: "macOS 64-bit" + runs-on: [macos-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + MACOS_DEPS_VERSION: '2020-04-18' + QT_VERSION: '5.14.1' + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install Deps' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + ./CI/install-dependencies-macos.sh + echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile + echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" + echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" + echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" + echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" + - name: 'Install prerequisite: Pre-built OBS dependencies' + shell: bash + run: | + curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz + tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" + - name: 'Configure OBS Studio' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir build + cd build + cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. + - name: 'Build OBS Studio libraries' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir build + cd build + cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Install prerequisite: Packages app' + if: success() + shell: bash + run: | + curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg + sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / + - name: 'Set release filename' + if: success() + shell: bash + run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" + + - name: 'Fix linked dynamic library paths' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so + echo "Dependencies for obs-midi" + otool -L ./build/obs-midi.so + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} + p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} + - name: 'Code signing' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so + packagesbuild ./CI/macos/obs-midi.pkgproj + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' + if: success() && startsWith(github.ref, 'refs/tags') + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_TAG }}-macOS' + path: ${{ github.workspace }}/obs-midi/release/*.pkg diff --git a/.github/workflows/CI Build and release windows .yml b/.github/workflows/CI Build and release windows .yml new file mode 100644 index 00000000..626d76e3 --- /dev/null +++ b/.github/workflows/CI Build and release windows .yml @@ -0,0 +1,159 @@ +name: 'CI Multiplatform Build' + +on: + push: + branches: + - release + - master + - test2 + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + windows: + name: 'Windows 32+64bit' + runs-on: [windows-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + QT_VERSION: '5.10.1' + WINDOWS_DEPS_VERSION: '2017' + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_SYSTEM_VERSION: "10.0" + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.0 + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisite: QT' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - + 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" + - name: 'Install prerequisite: Pre-built OBS dependencies' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - + 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" + - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-32 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-32' + with: + path: ${{ github.workspace }}/obs-studio/build32 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-64 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-64' + with: + path: ${{ github.workspace }}/obs-studio/build64 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Configure obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Configure obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Build obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln + - name: 'Build obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" + echo "::set-env name=WIN_FILENAME::$FILENAME" + - name: 'Package obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir package + cd package + 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" + iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" + - name: 'Publish ${{ env.WIN_FILENAME }}.zip' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows' + path: ${{ github.workspace }}/obs-midi/package/*.zip + - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows-Installer' + path: ${{ github.workspace }}/obs-midi/package/*.exe From 22a24cc20cd4d595921147a14161e94fb35f7387 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:31:14 -0500 Subject: [PATCH 029/114] fix ccodesign --- .github/workflows/CI Build and release windows .yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build and release windows .yml b/.github/workflows/CI Build and release windows .yml index 626d76e3..08fd1694 100644 --- a/.github/workflows/CI Build and release windows .yml +++ b/.github/workflows/CI Build and release windows .yml @@ -1,4 +1,4 @@ -name: 'CI Multiplatform Build' +name: 'CI Windows Build' on: push: From 95093b7c4824bef299394839e0a4a965ceafe588 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:36:31 -0500 Subject: [PATCH 030/114] add tar to linux build --- .../workflows/CI Build and release linux.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/CI Build and release linux.yml b/.github/workflows/CI Build and release linux.yml index 7e8e7d86..c81c090f 100644 --- a/.github/workflows/CI Build and release linux.yml +++ b/.github/workflows/CI Build and release linux.yml @@ -156,9 +156,26 @@ jobs: --pakdir="../package" sudo chmod ao+r ../package/* cd - + - name: 'Tar ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + mkdir -p obs-studio/plugins/64bit/ + cp ./obs-midi.so obs-studio/plugins/64bit/ + tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + - name: 'Publish ${{ env.LINUX_FILENAME }}' if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-linux' path: '${{ github.workspace }}/obs-midi/package/*.deb' + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' From 5888c1e2229af85f0b1b6506673638b360772b02 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:41:03 -0500 Subject: [PATCH 031/114] Create build tests for each platform, and build and release for all --- .../workflows/CI Build and release linux.yml | 181 ------- .../workflows/CI Build and release mac.yml | 157 ------ .../CI Build and release windows .yml | 159 ------- .github/workflows/CI Build and release.yml | 450 +++++++++++++++++- 4 files changed, 448 insertions(+), 499 deletions(-) delete mode 100644 .github/workflows/CI Build and release linux.yml delete mode 100644 .github/workflows/CI Build and release mac.yml delete mode 100644 .github/workflows/CI Build and release windows .yml diff --git a/.github/workflows/CI Build and release linux.yml b/.github/workflows/CI Build and release linux.yml deleted file mode 100644 index c81c090f..00000000 --- a/.github/workflows/CI Build and release linux.yml +++ /dev/null @@ -1,181 +0,0 @@ -name: 'CI Linux Build' - -on: - push: - branches: - - release - - master - - test2 - paths-ignore: - - 'docs/**' - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - ubuntu64: - name: "Linux/Ubuntu 64-bit" - runs-on: [ubuntu-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisites (Apt)' - shell: bash - run: | - sudo dpkg --add-architecture amd64 - sudo apt-get -qq update - sudo apt-get install -y \ - build-essential \ - checkinstall \ - cmake \ - libasound2-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavfilter-dev \ - libavformat-dev \ - libavutil-dev \ - libcurl4-openssl-dev \ - libfdk-aac-dev \ - libfontconfig-dev \ - libfreetype6-dev \ - libgl1-mesa-dev \ - libjack-jackd2-dev \ - libjansson-dev \ - libluajit-5.1-dev \ - libpulse-dev \ - libqt5x11extras5-dev \ - libspeexdsp-dev \ - libswresample-dev \ - libswscale-dev \ - libudev-dev \ - libv4l-dev \ - libva-dev \ - libvlc-dev \ - libx11-dev \ - libx264-dev \ - libx11-xcb-dev \ - libx11-xcb1 \ - libxcb-randr0-dev \ - libxcb-shm0-dev \ - libxcb-xinerama0-dev \ - libxcomposite-dev \ - libxinerama-dev \ - libmbedtls-dev \ - pkg-config \ - python3-dev \ - qtbase5-dev \ - libqt5svg5-dev \ - swig - - name: 'Configure OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Install OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - cd ./build - sudo cp ./libobs/libobs.so /usr/lib - sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib - sudo mkdir -p /usr/include/obs - sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" - echo "::set-env name=LINUX_FILENAME::$FILENAME" - - name: 'Package ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ - --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ - --pkgsource="${{ github.event.repository.html_url }}" \ - --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ - --pakdir="../package" - sudo chmod ao+r ../package/* - cd - - - name: 'Tar ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - mkdir -p obs-studio/plugins/64bit/ - cp ./obs-midi.so obs-studio/plugins/64bit/ - tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio - - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.deb' - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' diff --git a/.github/workflows/CI Build and release mac.yml b/.github/workflows/CI Build and release mac.yml deleted file mode 100644 index 5b990e47..00000000 --- a/.github/workflows/CI Build and release mac.yml +++ /dev/null @@ -1,157 +0,0 @@ -name: 'CI MacOS Build' - -on: - push: - branches: - - release - - master - - test2 - paths-ignore: - - 'docs/**' - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - macos64: - name: "macOS 64-bit" - runs-on: [macos-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - MACOS_DEPS_VERSION: '2020-04-18' - QT_VERSION: '5.14.1' - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install Deps' - shell: bash - working-directory: ${{ github.workspace }}/obs-midi - run: | - ./CI/install-dependencies-macos.sh - echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile - echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" - echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" - echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" - echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" - - name: 'Install prerequisite: Pre-built OBS dependencies' - shell: bash - run: | - curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz - tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" - - name: 'Configure OBS Studio' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir build - cd build - cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. - - name: 'Build OBS Studio libraries' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir build - cd build - cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Install prerequisite: Packages app' - if: success() - shell: bash - run: | - curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg - sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - - name: 'Set release filename' - if: success() - shell: bash - run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" - - - name: 'Fix linked dynamic library paths' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so - echo "Dependencies for obs-midi" - otool -L ./build/obs-midi.so - - name: 'Install Apple Developer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} - p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} - - name: 'Code signing' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so - packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - - name: 'Notarization' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() && startsWith(github.ref, 'refs/tags') - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_TAG }}-macOS' - path: ${{ github.workspace }}/obs-midi/release/*.pkg diff --git a/.github/workflows/CI Build and release windows .yml b/.github/workflows/CI Build and release windows .yml deleted file mode 100644 index 08fd1694..00000000 --- a/.github/workflows/CI Build and release windows .yml +++ /dev/null @@ -1,159 +0,0 @@ -name: 'CI Windows Build' - -on: - push: - branches: - - release - - master - - test2 - paths-ignore: - - 'docs/**' - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - windows: - name: 'Windows 32+64bit' - runs-on: [windows-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - QT_VERSION: '5.10.1' - WINDOWS_DEPS_VERSION: '2017' - CMAKE_GENERATOR: "Visual Studio 16 2019" - CMAKE_SYSTEM_VERSION: "10.0" - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - steps: - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.0 - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisite: QT' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - - 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" - - name: 'Install prerequisite: Pre-built OBS dependencies' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - - 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" - - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-32 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-32' - with: - path: ${{ github.workspace }}/obs-studio/build32 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-64 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-64' - with: - path: ${{ github.workspace }}/obs-studio/build64 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Configure obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Configure obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Build obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln - - name: 'Build obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" - echo "::set-env name=WIN_FILENAME::$FILENAME" - - name: 'Package obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir package - cd package - 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" - iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" - - name: 'Publish ${{ env.WIN_FILENAME }}.zip' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows' - path: ${{ github.workspace }}/obs-midi/package/*.zip - - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows-Installer' - path: ${{ github.workspace }}/obs-midi/package/*.exe diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 10c04bdb..08141a38 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -1,11 +1,10 @@ -name: 'CI Make release' +name: 'CI Multiplatform Build and release' on: push: branches: - release - master - - test2 paths-ignore: - 'docs/**' pull_request: @@ -15,6 +14,453 @@ on: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true jobs: + windows: + name: 'Windows 32+64bit' + runs-on: [windows-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + QT_VERSION: '5.10.1' + WINDOWS_DEPS_VERSION: '2017' + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_SYSTEM_VERSION: "10.0" + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.0 + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisite: QT' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - + 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" + - name: 'Install prerequisite: Pre-built OBS dependencies' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - + 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" + - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-32 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-32' + with: + path: ${{ github.workspace }}/obs-studio/build32 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-64 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-64' + with: + path: ${{ github.workspace }}/obs-studio/build64 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Configure obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Configure obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Build obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln + - name: 'Build obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" + echo "::set-env name=WIN_FILENAME::$FILENAME" + - name: 'Package obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir package + cd package + 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" + iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" + - name: 'Publish ${{ env.WIN_FILENAME }}.zip' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows' + path: ${{ github.workspace }}/obs-midi/package/*.zip + - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows-Installer' + path: ${{ github.workspace }}/obs-midi/package/*.exe + ubuntu64: + name: "Linux/Ubuntu 64-bit" + runs-on: [ubuntu-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisites (Apt)' + shell: bash + run: | + sudo dpkg --add-architecture amd64 + sudo apt-get -qq update + sudo apt-get install -y \ + build-essential \ + checkinstall \ + cmake \ + libasound2-dev \ + libavcodec-dev \ + libavdevice-dev \ + libavfilter-dev \ + libavformat-dev \ + libavutil-dev \ + libcurl4-openssl-dev \ + libfdk-aac-dev \ + libfontconfig-dev \ + libfreetype6-dev \ + libgl1-mesa-dev \ + libjack-jackd2-dev \ + libjansson-dev \ + libluajit-5.1-dev \ + libpulse-dev \ + libqt5x11extras5-dev \ + libspeexdsp-dev \ + libswresample-dev \ + libswscale-dev \ + libudev-dev \ + libv4l-dev \ + libva-dev \ + libvlc-dev \ + libx11-dev \ + libx264-dev \ + libx11-xcb-dev \ + libx11-xcb1 \ + libxcb-randr0-dev \ + libxcb-shm0-dev \ + libxcb-xinerama0-dev \ + libxcomposite-dev \ + libxinerama-dev \ + libmbedtls-dev \ + pkg-config \ + python3-dev \ + qtbase5-dev \ + libqt5svg5-dev \ + swig + - name: 'Configure OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Install OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + cd ./build + sudo cp ./libobs/libobs.so /usr/lib + sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib + sudo mkdir -p /usr/include/obs + sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" + echo "::set-env name=LINUX_FILENAME::$FILENAME" + - name: 'Package ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + sudo checkinstall -y --type=debian --fstrans=no -nodoc \ + --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ + --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ + --pkgsource="${{ github.event.repository.html_url }}" \ + --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ + --pakdir="../package" + sudo chmod ao+r ../package/* + cd - + - name: 'Tar ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + mkdir -p obs-studio/plugins/64bit/ + cp ./obs-midi.so obs-studio/plugins/64bit/ + tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.deb' + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' + macos64: + name: "macOS 64-bit" + runs-on: [macos-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + MACOS_DEPS_VERSION: '2020-04-18' + QT_VERSION: '5.14.1' + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install Deps' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + ./CI/install-dependencies-macos.sh + echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile + echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" + echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" + echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" + echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" + - name: 'Install prerequisite: Pre-built OBS dependencies' + shell: bash + run: | + curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz + tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" + - name: 'Configure OBS Studio' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir build + cd build + cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. + - name: 'Build OBS Studio libraries' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir build + cd build + cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Install prerequisite: Packages app' + if: success() + shell: bash + run: | + curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg + sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / + - name: 'Set release filename' + if: success() + shell: bash + run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" + + - name: 'Fix linked dynamic library paths' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so + echo "Dependencies for obs-midi" + otool -L ./build/obs-midi.so + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} + p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} + - name: 'Code signing' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so + packagesbuild ./CI/macos/obs-midi.pkgproj + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' + if: success() && startsWith(github.ref, 'refs/tags') + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_TAG }}-macOS' + path: ${{ github.workspace }}/obs-midi/release/*.pkg + make-release: name: 'Create and upload release' runs-on: [ubuntu-latest] From a40ad45d22b11ca32d9d1e2bd8db1a87799802af Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:41:18 -0500 Subject: [PATCH 032/114] Create build tests for each platform, and build and release for all --- .github/workflows/CI Build linux.yml | 177 ++++++++++++++++++++++++ .github/workflows/CI Build mac.yml | 153 ++++++++++++++++++++ .github/workflows/CI Build windows .yml | 155 +++++++++++++++++++++ 3 files changed, 485 insertions(+) create mode 100644 .github/workflows/CI Build linux.yml create mode 100644 .github/workflows/CI Build mac.yml create mode 100644 .github/workflows/CI Build windows .yml diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml new file mode 100644 index 00000000..43e90704 --- /dev/null +++ b/.github/workflows/CI Build linux.yml @@ -0,0 +1,177 @@ +name: 'CI Linux Build' + +on: + push: + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + ubuntu64: + name: "Linux/Ubuntu 64-bit" + runs-on: [ubuntu-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisites (Apt)' + shell: bash + run: | + sudo dpkg --add-architecture amd64 + sudo apt-get -qq update + sudo apt-get install -y \ + build-essential \ + checkinstall \ + cmake \ + libasound2-dev \ + libavcodec-dev \ + libavdevice-dev \ + libavfilter-dev \ + libavformat-dev \ + libavutil-dev \ + libcurl4-openssl-dev \ + libfdk-aac-dev \ + libfontconfig-dev \ + libfreetype6-dev \ + libgl1-mesa-dev \ + libjack-jackd2-dev \ + libjansson-dev \ + libluajit-5.1-dev \ + libpulse-dev \ + libqt5x11extras5-dev \ + libspeexdsp-dev \ + libswresample-dev \ + libswscale-dev \ + libudev-dev \ + libv4l-dev \ + libva-dev \ + libvlc-dev \ + libx11-dev \ + libx264-dev \ + libx11-xcb-dev \ + libx11-xcb1 \ + libxcb-randr0-dev \ + libxcb-shm0-dev \ + libxcb-xinerama0-dev \ + libxcomposite-dev \ + libxinerama-dev \ + libmbedtls-dev \ + pkg-config \ + python3-dev \ + qtbase5-dev \ + libqt5svg5-dev \ + swig + - name: 'Configure OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Install OBS-Studio' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + cd ./build + sudo cp ./libobs/libobs.so /usr/lib + sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib + sudo mkdir -p /usr/include/obs + sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" + echo "::set-env name=LINUX_FILENAME::$FILENAME" + - name: 'Package ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + sudo checkinstall -y --type=debian --fstrans=no -nodoc \ + --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ + --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ + --pkgsource="${{ github.event.repository.html_url }}" \ + --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ + --pakdir="../package" + sudo chmod ao+r ../package/* + cd - + - name: 'Tar ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + mkdir -p obs-studio/plugins/64bit/ + cp ./obs-midi.so obs-studio/plugins/64bit/ + tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.deb' + - name: 'Publish ${{ env.LINUX_FILENAME }}' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-linux' + path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml new file mode 100644 index 00000000..eb34af04 --- /dev/null +++ b/.github/workflows/CI Build mac.yml @@ -0,0 +1,153 @@ +name: 'CI MacOS Build' + +on: + push: + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + macos64: + name: "macOS 64-bit" + runs-on: [macos-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + MACOS_DEPS_VERSION: '2020-04-18' + QT_VERSION: '5.14.1' + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install Deps' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + ./CI/install-dependencies-macos.sh + echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile + echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" + echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" + echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" + echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" + - name: 'Install prerequisite: Pre-built OBS dependencies' + shell: bash + run: | + curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz + tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" + - name: 'Configure OBS Studio' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir build + cd build + cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. + - name: 'Build OBS Studio libraries' + working-directory: ${{ github.workspace }}/obs-studio + shell: bash + run: | + set -e + cd ./build + make -j4 libobs obs-frontend-api + - name: 'Configure obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + mkdir build + cd build + cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. + - name: 'Build obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + set -e + cd ./build + make -j4 + - name: 'Install prerequisite: Packages app' + if: success() + shell: bash + run: | + curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg + sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / + - name: 'Set release filename' + if: success() + shell: bash + run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" + + - name: 'Fix linked dynamic library paths' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so + install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so + echo "Dependencies for obs-midi" + otool -L ./build/obs-midi.so + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} + p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} + - name: 'Code signing' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so + packagesbuild ./CI/macos/obs-midi.pkgproj + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' + if: success() + working-directory: ./obs-midi + shell: bash + run: | + set -e + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' + if: success() && startsWith(github.ref, 'refs/tags') + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_TAG }}-macOS' + path: ${{ github.workspace }}/obs-midi/release/*.pkg diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml new file mode 100644 index 00000000..aa7ebcd7 --- /dev/null +++ b/.github/workflows/CI Build windows .yml @@ -0,0 +1,155 @@ +name: 'CI Windows Build' + +on: + push: + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - '**.md' + +env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true +jobs: + windows: + name: 'Windows 32+64bit' + runs-on: [windows-latest] + if: contains(github.event.head_commit.message, '[skip ci]') != true + env: + QT_VERSION: '5.10.1' + WINDOWS_DEPS_VERSION: '2017' + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_SYSTEM_VERSION: "10.0" + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.0 + - name: 'Checkout' + uses: actions/checkout@v2 + with: + path: ${{ github.workspace }}/obs-midi + submodules: 'recursive' + - name: 'Checkout OBS' + uses: actions/checkout@v2 + with: + repository: obsproject/obs-studio + path: ${{ github.workspace }}/obs-studio + submodules: 'recursive' + - name: 'Get OBS-Studio git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' + shell: bash + working-directory: ${{ github.workspace }}/obs-studio + run: | + git checkout ${{ env.OBS_GIT_TAG }} + git submodule update + - name: 'Get obs-midi git info' + shell: bash + working-directory: ${{ github.workspace }}/obs-midi + run: | + git fetch --prune --unshallow + echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} + echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisite: QT' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - + 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" + - name: 'Install prerequisite: Pre-built OBS dependencies' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - + 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" + - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-32 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-32' + with: + path: ${{ github.workspace }}/obs-studio/build32 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 32-bit' + if: steps.build-cache-obs-32.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' + id: build-cache-obs-64 + uses: actions/cache@v1 + env: + CACHE_NAME: 'build-cache-obs-64' + with: + path: ${{ github.workspace }}/obs-studio/build64 + key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_NAME }}- + - name: 'Configure OBS 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. + - name: 'Build OBS-Studio 64-bit' + if: steps.build-cache-obs-64.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }}/obs-studio + run: | + msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj + msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj + - name: 'Configure obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build64 + cd .\build64 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Configure obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir .\build32 + cd .\build32 + cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. + - name: 'Build obs-midi 64-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln + - name: 'Build obs-midi 32-bit' + working-directory: ${{ github.workspace }}/obs-midi + run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln + - name: 'Set release filename' + shell: bash + run: | + FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" + echo "::set-env name=WIN_FILENAME::$FILENAME" + - name: 'Package obs-midi' + working-directory: ${{ github.workspace }}/obs-midi + run: | + mkdir package + cd package + 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" + iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" + - name: 'Publish ${{ env.WIN_FILENAME }}.zip' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows' + path: ${{ github.workspace }}/obs-midi/package/*.zip + - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.GIT_HASH }}-Windows-Installer' + path: ${{ github.workspace }}/obs-midi/package/*.exe From 6a410ee6a084700561bfd5e333be0a5a709ee7bd Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 10:43:19 -0500 Subject: [PATCH 033/114] Update CI Build and release.yml --- .github/workflows/CI Build and release.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 08141a38..fe71e30b 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -297,16 +297,16 @@ jobs: --pakdir="../package" sudo chmod ao+r ../package/* cd - - - name: 'Tar ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - mkdir -p obs-studio/plugins/64bit/ - cp ./obs-midi.so obs-studio/plugins/64bit/ - tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + - name: 'Tar ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + mkdir -p obs-studio/plugins/64bit/ + cp ./obs-midi.so obs-studio/plugins/64bit/ + tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio - name: 'Publish ${{ env.LINUX_FILENAME }}' if: success() From f0a974cbe1024d2dfd8e96cb1b7cd90e85895613 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 10:44:14 -0500 Subject: [PATCH 034/114] Update CI Build linux.yml --- .github/workflows/CI Build linux.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 43e90704..975dc593 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -152,16 +152,16 @@ jobs: --pakdir="../package" sudo chmod ao+r ../package/* cd - - - name: 'Tar ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - mkdir -p obs-studio/plugins/64bit/ - cp ./obs-midi.so obs-studio/plugins/64bit/ - tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + - name: 'Tar ${{ env.LINUX_FILENAME }}' + if: success() + working-directory: ${{ github.workspace }}/obs-midi + shell: bash + run: | + VERSION="${{ env.GIT_HASH }}" + cd ./build + mkdir -p obs-studio/plugins/64bit/ + cp ./obs-midi.so obs-studio/plugins/64bit/ + tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio - name: 'Publish ${{ env.LINUX_FILENAME }}' if: success() From e1aaacc1b602e48480b7d9431fabbeb50e49d2f3 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:50:38 -0500 Subject: [PATCH 035/114] fix version numbering linux --- .github/workflows/CI Build linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 975dc593..9d406a60 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -142,7 +142,7 @@ jobs: working-directory: ${{ github.workspace }}/obs-midi shell: bash run: | - VERSION="${{ env.GIT_HASH }}" + VERSION="0${{ env.GIT_HASH }}" cd ./build sudo checkinstall -y --type=debian --fstrans=no -nodoc \ --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ From bde3d45b8fc65d3980c876f562b97fc314913fb0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 10:58:23 -0500 Subject: [PATCH 036/114] change file location for linux tar --- .github/workflows/CI Build linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 9d406a60..75004424 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -174,4 +174,4 @@ jobs: uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' + path: '${{ github.workspace }}/obs-midi/*.tar.gz' From c74ba305ab4aac667f972eafbae257c4f469bdb4 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 11:22:20 -0500 Subject: [PATCH 037/114] s --- .github/workflows/CI Build linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 75004424..a1eaaa84 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -174,4 +174,4 @@ jobs: uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/*.tar.gz' + path: './build/*.tar.gz' From 35ad44197d1a712b783b158599919b735bae1bdd Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 16:06:26 -0500 Subject: [PATCH 038/114] hmm --- .github/workflows/CI Build linux.yml | 3 +++ .github/workflows/CI Build mac.yml | 4 ++++ .github/workflows/CI Build windows .yml | 3 +++ 3 files changed, 10 insertions(+) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index a1eaaa84..0f50b9e0 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -2,6 +2,9 @@ name: 'CI Linux Build' on: push: + branches: + - release + - master paths-ignore: - 'docs/**' pull_request: diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index eb34af04..5b990e47 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -2,6 +2,10 @@ name: 'CI MacOS Build' on: push: + branches: + - release + - master + - test2 paths-ignore: - 'docs/**' pull_request: diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml index aa7ebcd7..ad2497a8 100644 --- a/.github/workflows/CI Build windows .yml +++ b/.github/workflows/CI Build windows .yml @@ -2,6 +2,9 @@ name: 'CI Windows Build' on: push: + branches: + - release + - master paths-ignore: - 'docs/**' pull_request: From 8d7deff435ec0f33ee7c10f9df8f9c29bfb0e20b Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 16:49:09 -0500 Subject: [PATCH 039/114] poke --- .github/workflows/CI Build mac.yml | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 5b990e47..ddcfc6d5 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -18,7 +18,6 @@ jobs: macos64: name: "macOS 64-bit" runs-on: [macos-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true env: MACOS_DEPS_VERSION: '2020-04-18' QT_VERSION: '5.14.1' @@ -55,16 +54,10 @@ jobs: echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install Deps' + - name: 'Install prerequisites (Homebrew)' shell: bash - working-directory: ${{ github.workspace }}/obs-midi run: | - ./CI/install-dependencies-macos.sh - echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile - echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" - echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" - echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" - echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" + brew bundle --file ${{ github.workspace }}/obs-midi/CI/macos/Brewfile - name: 'Install prerequisite: Pre-built OBS dependencies' shell: bash run: | @@ -105,14 +98,13 @@ jobs: curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - name: 'Set release filename' - if: success() + if: success() && startsWith(github.ref, 'refs/tags') shell: bash run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" - - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi @@ -127,15 +119,15 @@ jobs: if: success() uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 with: - p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} - p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} + p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} + p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: 'Code signing' if: success() working-directory: ./obs-midi shell: bash run: | set -e - codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so + codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} @@ -146,11 +138,11 @@ jobs: shell: bash run: | set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() && startsWith(github.ref, 'refs/tags') + if: success() && startsWith(github.ref, 'refs/tags') uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_TAG }}-macOS' From c3726a55e6e525a5069b2d0c85c56fa61d32e318 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 18:33:05 -0500 Subject: [PATCH 040/114] fix brewfile --- CI/macos/Brewfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/macos/Brewfile b/CI/macos/Brewfile index f3aa898c..018dd0db 100644 --- a/CI/macos/Brewfile +++ b/CI/macos/Brewfile @@ -4,7 +4,7 @@ brew "speexdsp" brew "cmake" brew "freetype" brew "fdk-aac" -brew "./qt.rb" +brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/qt.rb" brew "swig", link: false -brew "./swig.rb" +brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/swig.rb" brew "akeru-inc/tap/xcnotary" From fef612c837e0361500b374a7b0f760ba597aed96 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 18:48:06 -0500 Subject: [PATCH 041/114] try another method for code sign --- .github/workflows/CI Build mac.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index ddcfc6d5..d9eae4c1 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -121,13 +121,18 @@ jobs: with: p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} p12-password: ${{ secrets.MACOS_CERT_PASS }} - - name: 'Code signing' - if: success() - working-directory: ./obs-midi - shell: bash + + - name: Codesign executable + env: + MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} + MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | - set -e - codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so + echo $MACOS_CERTIFICATE | base64 —decode > certificate.p12 + security create-keychain -p build.keychain security default-keychain -s build.keychain + security unlock-keychain -p build.keychain + security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k build.keychain + /usr/bin/codesign --force -s ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} From 7f640fd01b38055e0bdf469df4a3c28b1073cf81 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 19:03:06 -0500 Subject: [PATCH 042/114] lskd --- .github/workflows/CI Build mac.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index d9eae4c1..30c90391 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -127,10 +127,9 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | - echo $MACOS_CERTIFICATE | base64 —decode > certificate.p12 security create-keychain -p build.keychain security default-keychain -s build.keychain security unlock-keychain -p build.keychain - security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security import $MACOS_CERTIFICATE -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k build.keychain /usr/bin/codesign --force -s ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj From 5e49c230a6d43cfad30efed318b324ae7a160376 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 19:18:33 -0500 Subject: [PATCH 043/114] k --- .github/workflows/CI Build mac.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 30c90391..76b4b78e 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -127,10 +127,10 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | - security create-keychain -p build.keychain security default-keychain -s build.keychain - security unlock-keychain -p build.keychain + security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain + security unlock-keychain -p yourpassword build.keychain security import $MACOS_CERTIFICATE -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k build.keychain + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain /usr/bin/codesign --force -s ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} From 1efe175844abfaacd12cf4e91bb72569eb7a90a1 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 19:32:02 -0500 Subject: [PATCH 044/114] newline --- .github/workflows/CI Build mac.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 76b4b78e..83f1d496 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -127,7 +127,8 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | - security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain + security create-keychain -p yourpassword build.keychain + security default-keychain -s build.keychain security unlock-keychain -p yourpassword build.keychain security import $MACOS_CERTIFICATE -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain From 34b90c1238957c75683cfc063d65af531be0715d Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 19:54:37 -0500 Subject: [PATCH 045/114] more fix? --- .github/workflows/CI Build mac.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 83f1d496..6edb5344 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -127,10 +127,11 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | + echo $MACOS_CERTIFICATE | base64 —decode > certificate.p12 security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain security unlock-keychain -p yourpassword build.keychain - security import $MACOS_CERTIFICATE -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain /usr/bin/codesign --force -s ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj From a341f1acc0a9ee218157253fdf332725a9d46875 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:02:24 -0500 Subject: [PATCH 046/114] decode --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 6edb5344..1a36354c 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -127,7 +127,7 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} run: | - echo $MACOS_CERTIFICATE | base64 —decode > certificate.p12 + echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain security unlock-keychain -p yourpassword build.keychain From 6053db101e5a6f79f9cd38b92b22cf0d3c048e4b Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:12:57 -0500 Subject: [PATCH 047/114] ident --- .github/workflows/CI Build mac.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 1a36354c..065b9dcd 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -126,6 +126,7 @@ jobs: env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} + MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p yourpassword build.keychain @@ -133,7 +134,7 @@ jobs: security unlock-keychain -p yourpassword build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain - /usr/bin/codesign --force -s ./build/obs-midi.so -v + /usr/bin/codesign --force -s $MACOS_IDENTITY ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} From 4ef26a439accd7928da9918ca84885f12172ff50 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 20:26:22 -0500 Subject: [PATCH 048/114] Update CI Build mac.yml ident2 --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 065b9dcd..5671a740 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -134,7 +134,7 @@ jobs: security unlock-keychain -p yourpassword build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain - /usr/bin/codesign --force -s $MACOS_IDENTITY ./build/obs-midi.so -v + /usr/bin/codesign --force -s "Developer ID Installer: Chris Yarger (5CZ4DHWPQ9)" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} From a75e2ebf9c49cc4d92e2126c0992c9041eac1d04 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:36:50 -0500 Subject: [PATCH 049/114] m --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 5671a740..af2783f7 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -134,7 +134,7 @@ jobs: security unlock-keychain -p yourpassword build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain - /usr/bin/codesign --force -s "Developer ID Installer: Chris Yarger (5CZ4DHWPQ9)" ./build/obs-midi.so -v + /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} From d75d5ede078b57a45f38824255708c7a635ba116 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:46:02 -0500 Subject: [PATCH 050/114] swap cert --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index af2783f7..e330a095 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -119,7 +119,7 @@ jobs: if: success() uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 with: - p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} + p12-file-base64: ${{ secrets.DEVAPPLICATIONCERT}} p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable From 0e5f47dde26ec31ea71a7cba6ca8b88d542c43e2 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:47:49 -0500 Subject: [PATCH 051/114] add find identity line --- .github/workflows/CI Build mac.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index e330a095..f8a17802 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -134,6 +134,7 @@ jobs: security unlock-keychain -p yourpassword build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain + security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} From c1ab58900bf3b903cd9ea8c1f0acd4f6a5096c1d Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 20:54:15 -0500 Subject: [PATCH 052/114] filepath --- .github/workflows/CI Build mac.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index f8a17802..d9208503 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -123,6 +123,7 @@ jobs: p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable + working-directory: ${{ github.workspace }}/obs-midi env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} From 580ed380d7f3d51641a1f3388d5dca70cd7d5a00 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:06:53 -0500 Subject: [PATCH 053/114] fix env variable issues --- .github/workflows/CI Build mac.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index d9208503..69ab22b3 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -123,11 +123,13 @@ jobs: p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable - working-directory: ${{ github.workspace }}/obs-midi + working-directory: ${{ github.workspace }}/obs-midi env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} + Name_unsigned : ${{ env.MAC_FILE NAME_UNSIGNED }} + Name_Signed: ${{ env.MAC_FILENAME }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p yourpassword build.keychain @@ -138,9 +140,9 @@ jobs: security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + mv ./release/obs-midi.pkg ./release/$Name_unsigned + productsign --sign "Developer ID" ./release/$Name_unsigned ./release/$Name_Signed + rm ./release/$Name_unsigned - name: 'Notarization' if: success() working-directory: ./obs-midi From 33ed21d8b54fda235db2872a7bcf94e6a0601eae Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Tue, 9 Feb 2021 21:08:11 -0500 Subject: [PATCH 054/114] Update CI Build mac.yml --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 69ab22b3..f64aaa1b 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -123,7 +123,7 @@ jobs: p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable - working-directory: ${{ github.workspace }}/obs-midi + working-directory: ${{ github.workspace }}/obs-midi env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} From 72b9d15604153e1641c17c7cf7d0ba9168e377f9 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:08:48 -0500 Subject: [PATCH 055/114] hecking spaces --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 69ab22b3..f64aaa1b 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -123,7 +123,7 @@ jobs: p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable - working-directory: ${{ github.workspace }}/obs-midi + working-directory: ${{ github.workspace }}/obs-midi env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} From a99cf13f8ea5ce71652dda2a6ad91fc487f1825f Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:10:01 -0500 Subject: [PATCH 056/114] more spaces --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index f64aaa1b..7f58dcf7 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -128,7 +128,7 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} - Name_unsigned : ${{ env.MAC_FILE NAME_UNSIGNED }} + Name_unsigned: ${{ env.MAC_FILE NAME_UNSIGNED }} Name_Signed: ${{ env.MAC_FILENAME }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 From 336d72942be36c8ff8925954ecb4be8117e845de Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:10:32 -0500 Subject: [PATCH 057/114] argh --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 7f58dcf7..3d1caaec 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -128,7 +128,7 @@ jobs: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} - Name_unsigned: ${{ env.MAC_FILE NAME_UNSIGNED }} + Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} Name_Signed: ${{ env.MAC_FILENAME }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 From e3f39c94576044c64a33dde960e5885e6f0603e1 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:16:56 -0500 Subject: [PATCH 058/114] whack-a-mole --- .github/workflows/CI Build mac.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 3d1caaec..455a5f99 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -97,14 +97,7 @@ jobs: run: | curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - - name: 'Set release filename' - if: success() && startsWith(github.ref, 'refs/tags') - shell: bash - run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" + - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi @@ -131,6 +124,10 @@ jobs: Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} Name_Signed: ${{ env.MAC_FILENAME }} run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain From eaa1f0efea6f7270aefa01dc43e83debaf276fd4 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:18:56 -0500 Subject: [PATCH 059/114] Whack-a-bug --- .github/workflows/CI Build mac.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 455a5f99..78e27a18 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -97,7 +97,7 @@ jobs: run: | curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - + - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi @@ -137,9 +137,9 @@ jobs: security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/$Name_unsigned - productsign --sign "Developer ID" ./release/$Name_unsigned ./release/$Name_Signed - rm ./release/$Name_unsigned + mv ./release/obs-midi.pkg ./release/$MAC_FILENAME_UNSIGNED + productsign --sign "Developer ID" ./release/$MAC_FILENAME_UNSIGNED ./release/$MAC_FILENAME + rm ./release/$MAC_FILENAME_UNSIGNED - name: 'Notarization' if: success() working-directory: ./obs-midi From 6f3e5f71ed8d4ebbde1a1c50ec0cabc72ace2109 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:45:56 -0500 Subject: [PATCH 060/114] ping-pong-table --- .github/workflows/CI Build mac.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 78e27a18..35bc0cf0 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -125,7 +125,7 @@ jobs: Name_Signed: ${{ env.MAC_FILENAME }} run: | FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" + FILENAME="obs-midi.pkg" echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 @@ -137,18 +137,18 @@ jobs: security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/$MAC_FILENAME_UNSIGNED - productsign --sign "Developer ID" ./release/$MAC_FILENAME_UNSIGNED ./release/$MAC_FILENAME - rm ./release/$MAC_FILENAME_UNSIGNED + productsign --sign "Developer ID" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() working-directory: ./obs-midi shell: bash run: | set -e + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() && startsWith(github.ref, 'refs/tags') uses: actions/upload-artifact@v2-preview From 850c795eb1a055a5fa22623cce99de5ee321cd74 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 21:59:25 -0500 Subject: [PATCH 061/114] installer cert --- .github/workflows/CI Build mac.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 35bc0cf0..3ea2be31 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -114,6 +114,12 @@ jobs: with: p12-file-base64: ${{ secrets.DEVAPPLICATIONCERT}} p12-password: ${{ secrets.MACOS_CERT_PASS }} + - name: 'Install Apple Developer Installer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.DEVINSTALLERCERT}} + p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable working-directory: ${{ github.workspace }}/obs-midi @@ -137,7 +143,7 @@ jobs: security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v packagesbuild ./CI/macos/obs-midi.pkgproj - productsign --sign "Developer ID" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg + productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() working-directory: ./obs-midi From 2f530de33087c18dcd66fe783c53b54f8d7909de Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 22:10:04 -0500 Subject: [PATCH 062/114] add installer cert --- .github/workflows/CI Build mac.yml | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 3ea2be31..8bef1c8e 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -108,23 +108,12 @@ jobs: install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: 'Install Apple Developer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.DEVAPPLICATIONCERT}} - p12-password: ${{ secrets.MACOS_CERT_PASS }} - - name: 'Install Apple Developer Installer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.DEVINSTALLERCERT}} - p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: Codesign executable working-directory: ${{ github.workspace }}/obs-midi env: - MACOS_CERTIFICATE: ${{ secrets.MACOS_CERT_CODESIGN }} + MACOS_CERTIFICATE: ${{ secrets.DEVAPPLICATIONCERT }} + MACOS_CERTIFICATEINST: ${{ secrets.DEVINSTALLERCERT }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} @@ -135,10 +124,12 @@ jobs: echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 + echo $MACOS_CERTIFICATEINST | base64 --decode > certificateInst.p12 security create-keychain -p yourpassword build.keychain security default-keychain -s build.keychain security unlock-keychain -p yourpassword build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain security find-identity -v -p codesigning /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v From 26d5f59e436175aef2de4961593d3aaaa390a4c2 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 22:39:48 -0500 Subject: [PATCH 063/114] seperate signing process into multiple --- .github/workflows/CI Build mac.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 8bef1c8e..5ad09d9c 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -109,7 +109,7 @@ jobs: echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: Codesign executable + - name: Prep Codesign working-directory: ${{ github.workspace }}/obs-midi env: MACOS_CERTIFICATE: ${{ secrets.DEVAPPLICATIONCERT }} @@ -132,8 +132,17 @@ jobs: security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain security find-identity -v -p codesigning + - name: Sign .so + working-directory: ${{ github.workspace }}/obs-midi + run: | /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v + - name: package obs-midi + working-directory: ${{ github.workspace }}/obs-midi + run: | packagesbuild ./CI/macos/obs-midi.pkgproj + - name: Sign Package + working-directory: ${{ github.workspace }}/obs-midi + run: | productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() From 77a1ce490adc524b78363f0bb8f0a46defe97bec Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 22:41:54 -0500 Subject: [PATCH 064/114] hm --- .github/workflows/CI Build mac.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 5ad09d9c..3a09c31b 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -132,17 +132,17 @@ jobs: security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain security find-identity -v -p codesigning - - name: Sign .so - working-directory: ${{ github.workspace }}/obs-midi - run: | + - name: Sign .so + working-directory: ${{ github.workspace }}/obs-midi + run: | /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild ./CI/macos/obs-midi.pkgproj - - name: Sign Package - working-directory: ${{ github.workspace }}/obs-midi - run: | + packagesbuild ./CI/macos/obs-midi.pkgproj + - name: Sign Package + working-directory: ${{ github.workspace }}/obs-midi + run: | productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() From e189d2a1c1286ba819d36eb7f341a6197550b27f Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 22:45:21 -0500 Subject: [PATCH 065/114] add signing to build and release --- .github/workflows/CI Build and release.yml | 56 +++++++++++++++------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index fe71e30b..bc23a8b7 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -428,32 +428,52 @@ jobs: install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: 'Install Apple Developer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }} - p12-password: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }} - - name: 'Code signing' - if: success() - working-directory: ./obs-midi - shell: bash + - name: Prep Codesign + working-directory: ${{ github.workspace }}/obs-midi + env: + MACOS_CERTIFICATE: ${{ secrets.DEVAPPLICATIONCERT }} + MACOS_CERTIFICATEINST: ${{ secrets.DEVINSTALLERCERT }} + MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} + MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} + Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} + Name_Signed: ${{ env.MAC_FILENAME }} + run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" + FILENAME="obs-midi.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" + echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 + echo $MACOS_CERTIFICATEINST | base64 --decode > certificateInst.p12 + security create-keychain -p yourpassword build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p yourpassword build.keychain + security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain + security find-identity -v -p codesigning + - name: Sign .so + working-directory: ${{ github.workspace }}/obs-midi run: | - set -e - codesign --sign "${{ secrets.NOTARIZE_USERNAME }}" ./build/obs-midi.so - packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v + - name: package obs-midi + working-directory: ${{ github.workspace }}/obs-midi + run: | + packagesbuild ./CI/macos/obs-midi.pkgproj + - name: Sign Package + working-directory: ${{ github.workspace }}/obs-midi + run: | + productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() working-directory: ./obs-midi shell: bash run: | set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.NOTARIZE_USERNAME }}" -p "${{ secrets.NOTARIZE_PASSWORD }}" + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.NOTARIZE_USERNAME}}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() && startsWith(github.ref, 'refs/tags') uses: actions/upload-artifact@v2-preview From 911d1cda2ca3d1028912745a91084ad12400017c Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 23:08:34 -0500 Subject: [PATCH 066/114] ss --- .github/workflows/CI Build and release.yml | 1 + .github/workflows/CI Build mac.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index bc23a8b7..8aab5f94 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -450,6 +450,7 @@ jobs: security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain + security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain security find-identity -v -p codesigning - name: Sign .so working-directory: ${{ github.workspace }}/obs-midi diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 3a09c31b..100e2249 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -131,6 +131,7 @@ jobs: security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain + security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain security find-identity -v -p codesigning - name: Sign .so working-directory: ${{ github.workspace }}/obs-midi From 4ea8c0473c03f8e866ed46fc003d3d3fb468bba2 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Tue, 9 Feb 2021 23:58:24 -0500 Subject: [PATCH 067/114] try removin productsign --- .github/workflows/CI Build mac.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 100e2249..c6f23fbd 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,10 +141,7 @@ jobs: working-directory: ${{ github.workspace }}/obs-midi run: | packagesbuild ./CI/macos/obs-midi.pkgproj - - name: Sign Package - working-directory: ${{ github.workspace }}/obs-midi - run: | - productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg + - name: 'Notarization' if: success() working-directory: ./obs-midi From 24abf9e88a902d7a7abbb976ea87ec8f366ba6a5 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 00:10:19 -0500 Subject: [PATCH 068/114] remove notarization --- .github/workflows/CI Build mac.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index c6f23fbd..fcc8556a 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,17 +141,17 @@ jobs: working-directory: ${{ github.workspace }}/obs-midi run: | packagesbuild ./CI/macos/obs-midi.pkgproj - + - name: 'Notarization' if: success() working-directory: ./obs-midi shell: bash + env: + MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} + run: | set -e mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() && startsWith(github.ref, 'refs/tags') From ab6d95ede7cef99972a791e44622c35bb36831a7 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 00:21:14 -0500 Subject: [PATCH 069/114] hm --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index fcc8556a..d0a98b67 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -154,7 +154,7 @@ jobs: mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() && startsWith(github.ref, 'refs/tags') + if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_TAG }}-macOS' From bb97a42f767ad75f17ffbac1d04bf3ab482415a9 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 00:26:15 -0500 Subject: [PATCH 070/114] clean up extranious actions --- .github/workflows/CI Build linux.yml | 5 +---- .github/workflows/CI Build mac.yml | 5 ++--- .github/workflows/CI Build windows .yml | 5 +---- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 0f50b9e0..73613527 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -1,10 +1,7 @@ name: 'CI Linux Build' on: - push: - branches: - - release - - master + paths-ignore: - 'docs/**' pull_request: diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index d0a98b67..d4d6a500 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -3,8 +3,7 @@ name: 'CI MacOS Build' on: push: branches: - - release - - master + - test2 paths-ignore: - 'docs/**' @@ -154,7 +153,7 @@ jobs: mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() + if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_TAG }}-macOS' diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml index ad2497a8..5a342bd3 100644 --- a/.github/workflows/CI Build windows .yml +++ b/.github/workflows/CI Build windows .yml @@ -1,10 +1,7 @@ name: 'CI Windows Build' on: - push: - branches: - - release - - master + paths-ignore: - 'docs/**' pull_request: From 20d683bdd80bb2ddefa43025dbee00dbf66093f1 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 00:30:12 -0500 Subject: [PATCH 071/114] fix package file --- CI/macos/obs-midi.pkgproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/macos/obs-midi.pkgproj b/CI/macos/obs-midi.pkgproj index 69d24d1b..53fc025f 100644 --- a/CI/macos/obs-midi.pkgproj +++ b/CI/macos/obs-midi.pkgproj @@ -514,11 +514,11 @@ CONCLUSION_ACTION 0 IDENTIFIER - fr.palakis.obs-midi + en.cpyarger.obs-midi OVERWRITE_PERMISSIONS VERSION - 4.8.0 + 0.9.0 PROJECT_COMMENTS From 631860f6955ac2894a77a3878374b8c793c0400d Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 08:55:52 -0500 Subject: [PATCH 072/114] more --- .github/workflows/CI Build mac.yml | 4 ++-- CI/package-macos.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index d4d6a500..e267d35a 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -140,7 +140,7 @@ jobs: working-directory: ${{ github.workspace }}/obs-midi run: | packagesbuild ./CI/macos/obs-midi.pkgproj - + productsign -s "Developer ID Installer"./release/obs-midi.pkg ./release/obs-midi-signed.pkg - name: 'Notarization' if: success() working-directory: ./obs-midi @@ -150,7 +150,7 @@ jobs: run: | set -e - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} + mv ./release/obs-midi-signed.pkg ./release/${{ env.MAC_FILENAME }} - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() diff --git a/CI/package-macos.sh b/CI/package-macos.sh index 0ebac50a..6f341a52 100755 --- a/CI/package-macos.sh +++ b/CI/package-macos.sh @@ -59,7 +59,7 @@ if [[ "$RELEASE_MODE" == "True" ]]; then zip -r ./release/$FILENAME.zip ./release/$FILENAME UPLOAD_RESULT=$(xcrun altool \ --notarize-app \ - --primary-bundle-id "fr.palakis.obs-midi" \ + --primary-bundle-id "en.cpyarger.obs-midi" \ --username "$AC_USERNAME" \ --password "$AC_PASSWORD" \ --asc-provider "$AC_PROVIDER_SHORTNAME" \ From ea1405e4c7883f5caa00efca5329477146eb6493 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 08:58:45 -0500 Subject: [PATCH 073/114] add signing to packagesbuild --- .github/workflows/CI Build mac.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index e267d35a..b901d7ce 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -139,8 +139,7 @@ jobs: - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild ./CI/macos/obs-midi.pkgproj - productsign -s "Developer ID Installer"./release/obs-midi.pkg ./release/obs-midi-signed.pkg + packagesbuild --verbose --sign "Developer ID Installer" ./CI/macos/obs-midi.pkgproj - name: 'Notarization' if: success() working-directory: ./obs-midi From 0b7487f3660538a49f32b39c2c6a04322066a49f Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 09:01:18 -0500 Subject: [PATCH 074/114] Fix indentation --- .github/workflows/CI Build linux.yml | 4 ++-- .github/workflows/CI Build windows .yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index 73613527..db596713 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -2,8 +2,8 @@ name: 'CI Linux Build' on: - paths-ignore: - - 'docs/**' + paths-ignore: + - 'docs/**' pull_request: paths-ignore: - '**.md' diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml index 5a342bd3..9c9ef693 100644 --- a/.github/workflows/CI Build windows .yml +++ b/.github/workflows/CI Build windows .yml @@ -2,8 +2,8 @@ name: 'CI Windows Build' on: - paths-ignore: - - 'docs/**' + paths-ignore: + - 'docs/**' pull_request: paths-ignore: - '**.md' From ca35f201f96721d9afbaca41b08de02c909a09ef Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 09:20:57 -0500 Subject: [PATCH 075/114] hm --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index b901d7ce..23ed65b8 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -139,7 +139,7 @@ jobs: - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild --verbose --sign "Developer ID Installer" ./CI/macos/obs-midi.pkgproj + packagesbuild --verbose --identity "Developer ID Installer" ./CI/macos/obs-midi.pkgproj - name: 'Notarization' if: success() working-directory: ./obs-midi From 3f2d06e07fce52ae6825504ce500df84b4c2b904 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Wed, 10 Feb 2021 09:32:58 -0500 Subject: [PATCH 076/114] a --- .github/workflows/CI Build linux.yml | 3 --- .github/workflows/CI Build mac.yml | 2 +- .github/workflows/CI Build windows .yml | 3 --- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml index db596713..cb41e394 100644 --- a/.github/workflows/CI Build linux.yml +++ b/.github/workflows/CI Build linux.yml @@ -1,9 +1,6 @@ name: 'CI Linux Build' on: - - paths-ignore: - - 'docs/**' pull_request: paths-ignore: - '**.md' diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 23ed65b8..0a8136f8 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -139,7 +139,7 @@ jobs: - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild --verbose --identity "Developer ID Installer" ./CI/macos/obs-midi.pkgproj + packagesbuild --verbose --identity "9ADCE51A63118ACE1AEEB3022748EE790F9D4ECF" ./CI/macos/obs-midi.pkgproj - name: 'Notarization' if: success() working-directory: ./obs-midi diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml index 9c9ef693..7682aa8a 100644 --- a/.github/workflows/CI Build windows .yml +++ b/.github/workflows/CI Build windows .yml @@ -1,9 +1,6 @@ name: 'CI Windows Build' on: - - paths-ignore: - - 'docs/**' pull_request: paths-ignore: - '**.md' From 51e2b5dfebf872dbe4330d976859f83548e89abe Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 18:21:14 -0500 Subject: [PATCH 077/114] Change packages build identity --- .github/workflows/CI Build mac.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 0a8136f8..15171be9 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -132,6 +132,7 @@ jobs: security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain security find-identity -v -p codesigning + security find-identity -v -p installer - name: Sign .so working-directory: ${{ github.workspace }}/obs-midi run: | @@ -139,7 +140,7 @@ jobs: - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild --verbose --identity "9ADCE51A63118ACE1AEEB3022748EE790F9D4ECF" ./CI/macos/obs-midi.pkgproj + packagesbuild --verbose --identity "Developer ID Application: Chris Yarger (5CZ4DHWPQ9)" ./CI/macos/obs-midi.pkgproj - name: 'Notarization' if: success() working-directory: ./obs-midi From b0cc74c80f6ea6104097070514f51552ee233c7a Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 18:28:38 -0500 Subject: [PATCH 078/114] remove installer idenity heck --- .github/workflows/CI Build mac.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 15171be9..23ed65b8 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -132,7 +132,6 @@ jobs: security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain security find-identity -v -p codesigning - security find-identity -v -p installer - name: Sign .so working-directory: ${{ github.workspace }}/obs-midi run: | @@ -140,7 +139,7 @@ jobs: - name: package obs-midi working-directory: ${{ github.workspace }}/obs-midi run: | - packagesbuild --verbose --identity "Developer ID Application: Chris Yarger (5CZ4DHWPQ9)" ./CI/macos/obs-midi.pkgproj + packagesbuild --verbose --identity "Developer ID Installer" ./CI/macos/obs-midi.pkgproj - name: 'Notarization' if: success() working-directory: ./obs-midi From 61d860ed3d5d28e89abfad24bf0d63584b7b4cf0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 18:41:12 -0500 Subject: [PATCH 079/114] revert to base websocket build --- .github/workflows/CI Build mac.yml | 48 ++++++++---------------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 23ed65b8..5347ffc6 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -108,48 +108,26 @@ jobs: echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: Prep Codesign - working-directory: ${{ github.workspace }}/obs-midi - env: - MACOS_CERTIFICATE: ${{ secrets.DEVAPPLICATIONCERT }} - MACOS_CERTIFICATEINST: ${{ secrets.DEVINSTALLERCERT }} - MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} - MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} - Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} - Name_Signed: ${{ env.MAC_FILENAME }} - run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" - echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 - echo $MACOS_CERTIFICATEINST | base64 --decode > certificateInst.p12 - security create-keychain -p yourpassword build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p yourpassword build.keychain - security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain - security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain - security find-identity -v -p codesigning - - name: Sign .so - working-directory: ${{ github.workspace }}/obs-midi - run: | - /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v - - name: package obs-midi - working-directory: ${{ github.workspace }}/obs-midi + - name: 'Code signing' + if: success() + working-directory: ./obs-midi + shell: bash run: | - packagesbuild --verbose --identity "Developer ID Installer" ./CI/macos/obs-midi.pkgproj + set -e + codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so + packagesbuild ./CI/macos/obs-midi.pkgproj + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - name: 'Notarization' if: success() working-directory: ./obs-midi shell: bash - env: - MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} - run: | set -e - mv ./release/obs-midi-signed.pkg ./release/${{ env.MAC_FILENAME }} + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From c72679e579957290fae43f735bc387c5ab747327 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 18:48:08 -0500 Subject: [PATCH 080/114] maybe --- .github/workflows/CI Build mac.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 5347ffc6..7dc2f260 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -107,7 +107,12 @@ jobs: install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} + p12-password: ${{ secrets.MACOS_CERT_PASS }} - name: 'Code signing' if: success() working-directory: ./obs-midi From 9355b234d40e0986fc14b5f1fbef7120f5be9d17 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Thu, 11 Feb 2021 18:49:14 -0500 Subject: [PATCH 081/114] Update CI Build mac.yml --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 7dc2f260..58a132c9 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -113,7 +113,7 @@ jobs: with: p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} p12-password: ${{ secrets.MACOS_CERT_PASS }} - - name: 'Code signing' + - name: 'Code signing' if: success() working-directory: ./obs-midi shell: bash From 14be3a2072baa088e87919ae2abd711a9b9f0f54 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:07:33 -0500 Subject: [PATCH 082/114] hmm --- .github/workflows/CI Build mac.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 58a132c9..6f02d0d6 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -124,6 +124,7 @@ jobs: mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' if: success() working-directory: ./obs-midi From e8b7498c839f602d2a2d8410baa324db8a3c33f0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:18:24 -0500 Subject: [PATCH 083/114] find code sign identity name --- .github/workflows/CI Build mac.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 6f02d0d6..707040fc 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -119,12 +119,13 @@ jobs: shell: bash run: | set -e + security find-identity -v -p codesigning codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - + - name: 'Notarization' if: success() working-directory: ./obs-midi From 5c15e0ae4104de1d2846a957c010af8df7561668 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:27:25 -0500 Subject: [PATCH 084/114] Some Say The world will End in fire --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 707040fc..65b36340 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -133,7 +133,7 @@ jobs: run: | set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} + xcnotary precheck ./release/${{ env.MAC_FILENAME }} if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' From 052cb43afbf1683adde6652f2caa9a0abc56177f Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:37:50 -0500 Subject: [PATCH 085/114] Others in ice --- .github/workflows/CI Build mac.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 65b36340..85afe71c 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -124,7 +124,7 @@ jobs: packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - name: 'Notarization' if: success() @@ -133,7 +133,7 @@ jobs: run: | set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} + xcnotary precheck ./release/${{ env.MAC_FILENAME }} if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' From f667ef4762a96d3104de07fa1d4b9a731eb86fd5 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:48:27 -0500 Subject: [PATCH 086/114] self host runner to not use aup all of my precious time on github actions --- .github/workflows/CI Build mac.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 85afe71c..296a8583 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -16,7 +16,7 @@ env: jobs: macos64: name: "macOS 64-bit" - runs-on: [macos-latest] + runs-on: self-hosted env: MACOS_DEPS_VERSION: '2020-04-18' QT_VERSION: '5.14.1' @@ -124,7 +124,7 @@ jobs: packagesbuild ./CI/macos/obs-midi.pkgproj mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - name: 'Notarization' if: success() From 644263e9ace3666430bfb37c1dd25702613225e0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:52:32 -0500 Subject: [PATCH 087/114] fix names --- .github/workflows/CI Build mac.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 296a8583..ee8e5418 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -122,9 +122,9 @@ jobs: security find-identity -v -p codesigning codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + mv ./release/obs-midi.pkg ./release/obs-midi-unsigned.pkg + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/obs-midi-unsigned.pkg ./release/obs-midi-signed.pkg + rm ./release/obs-midi-unsigned.pkg - name: 'Notarization' if: success() From e29c47c760f0d0b6740169628a5301658fcf1cd6 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 19:55:25 -0500 Subject: [PATCH 088/114] update brew --- CI/macos/Brewfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/macos/Brewfile b/CI/macos/Brewfile index 018dd0db..07b16633 100644 --- a/CI/macos/Brewfile +++ b/CI/macos/Brewfile @@ -4,7 +4,7 @@ brew "speexdsp" brew "cmake" brew "freetype" brew "fdk-aac" -brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/qt.rb" +brew "/Users/cpyarger/actions-runner/_work/obs-midi/obs-midi/obs-midi/CI/macos/qt.rb" brew "swig", link: false -brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/swig.rb" +brew "/Users/cpyarger/actions-runner/_work/obs-midi/obs-midi/obs-midi/CI/macos/swig.rb" brew "akeru-inc/tap/xcnotary" From 0d04cfe825520ba7f37116661376520cee736368 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 20:03:32 -0500 Subject: [PATCH 089/114] revert from self hosted --- .github/workflows/CI Build mac.yml | 8 ++++---- CI/macos/Brewfile | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index ee8e5418..707040fc 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -16,7 +16,7 @@ env: jobs: macos64: name: "macOS 64-bit" - runs-on: self-hosted + runs-on: [macos-latest] env: MACOS_DEPS_VERSION: '2020-04-18' QT_VERSION: '5.14.1' @@ -122,9 +122,9 @@ jobs: security find-identity -v -p codesigning codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/obs-midi-unsigned.pkg - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/obs-midi-unsigned.pkg ./release/obs-midi-signed.pkg - rm ./release/obs-midi-unsigned.pkg + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - name: 'Notarization' if: success() diff --git a/CI/macos/Brewfile b/CI/macos/Brewfile index 07b16633..018dd0db 100644 --- a/CI/macos/Brewfile +++ b/CI/macos/Brewfile @@ -4,7 +4,7 @@ brew "speexdsp" brew "cmake" brew "freetype" brew "fdk-aac" -brew "/Users/cpyarger/actions-runner/_work/obs-midi/obs-midi/obs-midi/CI/macos/qt.rb" +brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/qt.rb" brew "swig", link: false -brew "/Users/cpyarger/actions-runner/_work/obs-midi/obs-midi/obs-midi/CI/macos/swig.rb" +brew "/Users/runner/work/obs-midi/obs-midi/obs-midi/CI/macos/swig.rb" brew "akeru-inc/tap/xcnotary" From 005be6b4a5e53972df0a13193c1b67c972e5ffeb Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 20:06:41 -0500 Subject: [PATCH 090/114] filenames --- .github/workflows/CI Build mac.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 707040fc..78bf1ba5 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -96,7 +96,14 @@ jobs: run: | curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - + - name: 'Set release filename' + if: success() && startsWith(github.ref, 'refs/tags') + shell: bash + run: | + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" + echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" + echo "::set-env name=MAC_FILENAME::$FILENAME" - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi From c42e0c099186648303a0440c788cee63cf051fe6 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 20:09:39 -0500 Subject: [PATCH 091/114] remove a&& --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 78bf1ba5..36bf56f8 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -97,7 +97,7 @@ jobs: curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - name: 'Set release filename' - if: success() && startsWith(github.ref, 'refs/tags') + if: success() shell: bash run: | FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" From 253d077ec6977260b20c8f189c07d9bb496c76d0 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 20:20:26 -0500 Subject: [PATCH 092/114] change codesign to hash --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 36bf56f8..0bbaab52 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -139,7 +139,7 @@ jobs: shell: bash run: | set -e - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi From 91b6befb518d55201926d82a969125e995630196 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 20:58:22 -0500 Subject: [PATCH 093/114] maybe fix notary --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 0bbaab52..0ad61624 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,7 +141,7 @@ jobs: set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" ; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From 76ab59fb1c15afd38ccc9f8c7ee626fcf3640132 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Thu, 11 Feb 2021 21:08:24 -0500 Subject: [PATCH 094/114] Update CI Build mac.yml --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 0ad61624..0bbaab52 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,7 +141,7 @@ jobs: set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" ; fi + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From ac54884d39fb3da77d98245d73d61c952c0bde4c Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:19:04 -0500 Subject: [PATCH 095/114] remove notarization step --- .github/workflows/CI Build mac.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 0bbaab52..774a59bd 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,7 +141,7 @@ jobs: set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From 1f8fc0b1cb547c389fe86fd37fb64b97a9760b84 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:32:29 -0500 Subject: [PATCH 096/114] blop --- .github/workflows/CI Build and release.yml | 79 ++++++++-------------- .github/workflows/CI Build mac.yml | 2 +- 2 files changed, 29 insertions(+), 52 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 8aab5f94..4b705523 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -323,7 +323,6 @@ jobs: macos64: name: "macOS 64-bit" runs-on: [macos-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true env: MACOS_DEPS_VERSION: '2020-04-18' QT_VERSION: '5.14.1' @@ -360,16 +359,10 @@ jobs: echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install Deps' + - name: 'Install prerequisites (Homebrew)' shell: bash - working-directory: ${{ github.workspace }}/obs-midi run: | - ./CI/install-dependencies-macos.sh - echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> /Users/runner/.bash_profile - echo ::set-env name=LDFLAGS="-L/usr/local/opt/qt/lib" - echo ::set-env name=CPPFLAGS="-I/usr/local/opt/qt/include" - echo ::set-env name=PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig" - echo ::set-env name=PATH="/usr/local/opt/qt/bin:$PATH" + brew bundle --file ${{ github.workspace }}/obs-midi/CI/macos/Brewfile - name: 'Install prerequisite: Pre-built OBS dependencies' shell: bash run: | @@ -413,11 +406,10 @@ jobs: if: success() shell: bash run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" - - name: 'Fix linked dynamic library paths' if: success() working-directory: ${{ github.workspace }}/obs-midi @@ -428,55 +420,40 @@ jobs: install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so echo "Dependencies for obs-midi" otool -L ./build/obs-midi.so - - name: Prep Codesign - working-directory: ${{ github.workspace }}/obs-midi - env: - MACOS_CERTIFICATE: ${{ secrets.DEVAPPLICATIONCERT }} - MACOS_CERTIFICATEINST: ${{ secrets.DEVINSTALLERCERT }} - MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERT_PASS }} - MACOS_IDENTITY: ${{secrets.MACOS_IDENT_CODESIGN }} - Name_unsigned: ${{ env.MAC_FILENAME_UNSIGNED }} - Name_Signed: ${{ env.MAC_FILENAME }} + - name: 'Install Apple Developer Certificate' + if: success() + uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 + with: + p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} + p12-password: ${{ secrets.MACOS_CERT_PASS }} + - name: 'Code signing' + if: success() + working-directory: ./obs-midi + shell: bash run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" - echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 - echo $MACOS_CERTIFICATEINST | base64 --decode > certificateInst.p12 - security create-keychain -p yourpassword build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p yourpassword build.keychain - security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - security import certificateInst.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k yourpassword build.keychain - security set-key-partition-list -S apple-tool:,apple:,productsign: -s -k yourpassword build.keychain + set -e security find-identity -v -p codesigning - - name: Sign .so - working-directory: ${{ github.workspace }}/obs-midi - run: | - /usr/bin/codesign --force -s "Developer ID" ./build/obs-midi.so -v - - name: package obs-midi - working-directory: ${{ github.workspace }}/obs-midi - run: | - packagesbuild ./CI/macos/obs-midi.pkgproj - - name: Sign Package - working-directory: ${{ github.workspace }}/obs-midi - run: | - productsign --sign "Developer ID Installer" ./release/obs-midi.pkg ./release/obs-midi-signed.pkg + codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so + packagesbuild ./CI/macos/obs-midi.pkgproj + mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} + productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} + rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} + - name: 'Notarization' if: success() working-directory: ./obs-midi shell: bash run: | set -e - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME }} - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "${{ secrets.MACOS_IDENT_USER }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.MACOS_IDENT_PROVIDER }}"; fi + echo "store password" + xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" + echo "xcnotary precheck" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD" + echo "xcnotary notarize" + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() && startsWith(github.ref, 'refs/tags') + if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_TAG }}-macOS' diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index 774a59bd..f3b5d486 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -141,7 +141,7 @@ jobs: set -e xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "cpyarger@gmail.com" --developer-password-keychain-item "AC_PASSWORD"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From 1736be2abb45775c68265dd9fa8259454b1844b5 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:33:06 -0500 Subject: [PATCH 097/114] sdf --- .github/workflows/CI Build mac.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml index f3b5d486..4ed0793d 100644 --- a/.github/workflows/CI Build mac.yml +++ b/.github/workflows/CI Build mac.yml @@ -139,9 +139,12 @@ jobs: shell: bash run: | set -e + echo "store password" xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} --developer-account "cpyarger@gmail.com" --developer-password-keychain-item "AC_PASSWORD"; fi + echo "xcnotary precheck" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD" + echo "xcnotary notarize" + if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From 4dc617b209334829bc49bc7f1561714327c85264 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:34:57 -0500 Subject: [PATCH 098/114] clear os specific builds --- .github/workflows/CI Build linux.yml | 174 ------------------------ .github/workflows/CI Build mac.yml | 154 --------------------- .github/workflows/CI Build windows .yml | 152 --------------------- 3 files changed, 480 deletions(-) delete mode 100644 .github/workflows/CI Build linux.yml delete mode 100644 .github/workflows/CI Build mac.yml delete mode 100644 .github/workflows/CI Build windows .yml diff --git a/.github/workflows/CI Build linux.yml b/.github/workflows/CI Build linux.yml deleted file mode 100644 index cb41e394..00000000 --- a/.github/workflows/CI Build linux.yml +++ /dev/null @@ -1,174 +0,0 @@ -name: 'CI Linux Build' - -on: - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - ubuntu64: - name: "Linux/Ubuntu 64-bit" - runs-on: [ubuntu-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisites (Apt)' - shell: bash - run: | - sudo dpkg --add-architecture amd64 - sudo apt-get -qq update - sudo apt-get install -y \ - build-essential \ - checkinstall \ - cmake \ - libasound2-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavfilter-dev \ - libavformat-dev \ - libavutil-dev \ - libcurl4-openssl-dev \ - libfdk-aac-dev \ - libfontconfig-dev \ - libfreetype6-dev \ - libgl1-mesa-dev \ - libjack-jackd2-dev \ - libjansson-dev \ - libluajit-5.1-dev \ - libpulse-dev \ - libqt5x11extras5-dev \ - libspeexdsp-dev \ - libswresample-dev \ - libswscale-dev \ - libudev-dev \ - libv4l-dev \ - libva-dev \ - libvlc-dev \ - libx11-dev \ - libx264-dev \ - libx11-xcb-dev \ - libx11-xcb1 \ - libxcb-randr0-dev \ - libxcb-shm0-dev \ - libxcb-xinerama0-dev \ - libxcomposite-dev \ - libxinerama-dev \ - libmbedtls-dev \ - pkg-config \ - python3-dev \ - qtbase5-dev \ - libqt5svg5-dev \ - swig - - name: 'Configure OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Install OBS-Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - cd ./build - sudo cp ./libobs/libobs.so /usr/lib - sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib - sudo mkdir -p /usr/include/obs - sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" - echo "::set-env name=LINUX_FILENAME::$FILENAME" - - name: 'Package ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="0${{ env.GIT_HASH }}" - cd ./build - sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ - --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ - --pkgsource="${{ github.event.repository.html_url }}" \ - --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ - --pakdir="../package" - sudo chmod ao+r ../package/* - cd - - - name: 'Tar ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - VERSION="${{ env.GIT_HASH }}" - cd ./build - mkdir -p obs-studio/plugins/64bit/ - cp ./obs-midi.so obs-studio/plugins/64bit/ - tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio - - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.deb' - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-linux' - path: './build/*.tar.gz' diff --git a/.github/workflows/CI Build mac.yml b/.github/workflows/CI Build mac.yml deleted file mode 100644 index 4ed0793d..00000000 --- a/.github/workflows/CI Build mac.yml +++ /dev/null @@ -1,154 +0,0 @@ -name: 'CI MacOS Build' - -on: - push: - branches: - - - test2 - paths-ignore: - - 'docs/**' - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - macos64: - name: "macOS 64-bit" - runs-on: [macos-latest] - env: - MACOS_DEPS_VERSION: '2020-04-18' - QT_VERSION: '5.14.1' - steps: - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisites (Homebrew)' - shell: bash - run: | - brew bundle --file ${{ github.workspace }}/obs-midi/CI/macos/Brewfile - - name: 'Install prerequisite: Pre-built OBS dependencies' - shell: bash - run: | - curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz - tar -xf ${{ github.workspace }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" - - name: 'Configure OBS Studio' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir build - cd build - cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_SCRIPTING=NO -DDepsPath=/tmp/obsdeps -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/${{ env.QT_VERSION }}/lib/cmake .. - - name: 'Build OBS Studio libraries' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Configure obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - mkdir build - cd build - cmake -DQTDIR=/usr/local/Cellar/qt/${{ env.QT_VERSION }} -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Install prerequisite: Packages app' - if: success() - shell: bash - run: | - curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg - sudo installer -pkg ${{ github.workspace }}/Packages.pkg -target / - - name: 'Set release filename' - if: success() - shell: bash - run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" - echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" - echo "::set-env name=MAC_FILENAME::$FILENAME" - - name: 'Fix linked dynamic library paths' - if: success() - working-directory: ${{ github.workspace }}/obs-midi - shell: bash - run: | - install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./build/obs-midi.so - install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./build/obs-midi.so - echo "Dependencies for obs-midi" - otool -L ./build/obs-midi.so - - name: 'Install Apple Developer Certificate' - if: success() - uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 - with: - p12-file-base64: ${{ secrets.MACOS_CERT_CODESIGN }} - p12-password: ${{ secrets.MACOS_CERT_PASS }} - - name: 'Code signing' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - security find-identity -v -p codesigning - codesign --sign "${{ secrets.MACOS_IDENT_CODESIGN }}" ./build/obs-midi.so - packagesbuild ./CI/macos/obs-midi.pkgproj - mv ./release/obs-midi.pkg ./release/${{ env.MAC_FILENAME_UNSIGNED }} - productsign --sign "${{ secrets.MACOS_IDENT_INSTALLER }}" ./release/${{ env.MAC_FILENAME_UNSIGNED }} ./release/${{ env.MAC_FILENAME }} - rm ./release/${{ env.MAC_FILENAME_UNSIGNED }} - - - name: 'Notarization' - if: success() - working-directory: ./obs-midi - shell: bash - run: | - set -e - echo "store password" - xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" - echo "xcnotary precheck" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD" - echo "xcnotary notarize" - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi - - - name: 'Publish ${{ env.MAC_FILENAME }} artifact' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_TAG }}-macOS' - path: ${{ github.workspace }}/obs-midi/release/*.pkg diff --git a/.github/workflows/CI Build windows .yml b/.github/workflows/CI Build windows .yml deleted file mode 100644 index 7682aa8a..00000000 --- a/.github/workflows/CI Build windows .yml +++ /dev/null @@ -1,152 +0,0 @@ -name: 'CI Windows Build' - -on: - pull_request: - paths-ignore: - - '**.md' - -env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true -jobs: - windows: - name: 'Windows 32+64bit' - runs-on: [windows-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - QT_VERSION: '5.10.1' - WINDOWS_DEPS_VERSION: '2017' - CMAKE_GENERATOR: "Visual Studio 16 2019" - CMAKE_SYSTEM_VERSION: "10.0" - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - steps: - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.0 - - name: 'Checkout' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-midi - submodules: 'recursive' - - name: 'Checkout OBS' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS-Studio git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) - echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-midi git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-midi - run: | - git fetch --prune --unshallow - echo ::set-env name=GIT_BRANCH::${{ github.event.pull_request.head.ref }} - echo ::set-env name=GIT_HASH::$(git rev-parse --short HEAD) - echo ::set-env name=GIT_TAG::$(git describe --tags --abbrev=0) - - name: 'Install prerequisite: QT' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - - 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" - - name: 'Install prerequisite: Pre-built OBS dependencies' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - - 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" - - name: 'Restore OBS 32-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-32 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-32' - with: - path: ${{ github.workspace }}/obs-studio/build32 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Restore OBS 64-bit build v${{ env.OBS_GIT_TAG }} from cache' - id: build-cache-obs-64 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-64' - with: - path: ${{ github.workspace }}/obs-studio/build64 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_NAME }}- - - name: 'Configure OBS 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES .. - - name: 'Build OBS-Studio 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Configure obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Configure obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2017" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - - name: 'Build obs-midi 64-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-midi.sln - - name: 'Build obs-midi 32-bit' - working-directory: ${{ github.workspace }}/obs-midi - run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-midi.sln - - name: 'Set release filename' - shell: bash - run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-Windows" - echo "::set-env name=WIN_FILENAME::$FILENAME" - - name: 'Package obs-midi' - working-directory: ${{ github.workspace }}/obs-midi - run: | - mkdir package - cd package - 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" - iscc ..\installer\installer.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" - - name: 'Publish ${{ env.WIN_FILENAME }}.zip' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows' - path: ${{ github.workspace }}/obs-midi/package/*.zip - - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: '${{ env.GIT_HASH }}-Windows-Installer' - path: ${{ github.workspace }}/obs-midi/package/*.exe From d5d0a9f90ed6ce1a3ed2ad6835092dd28e58fd59 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:42:48 -0500 Subject: [PATCH 099/114] Move Linux File --- .github/workflows/CI Build and release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 4b705523..ba2d3c8b 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -307,6 +307,7 @@ jobs: mkdir -p obs-studio/plugins/64bit/ cp ./obs-midi.so obs-studio/plugins/64bit/ tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio + mv obs-midi-*.tar.gz ${{ github.workspace }}/obs-midi/package/ - name: 'Publish ${{ env.LINUX_FILENAME }}' if: success() From 10bb098bbd28e14aa3317a29635fba6862197747 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:43:29 -0500 Subject: [PATCH 100/114] notary stuff --- .github/workflows/CI Build and release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index ba2d3c8b..7aefcfb1 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -449,7 +449,7 @@ jobs: echo "store password" xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" echo "xcnotary precheck" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD" + xcnotary precheck ./release/${{ env.MAC_FILENAME }} echo "xcnotary notarize" if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi From 4ffb12a13d8214ca55cf761063d627aa9239ea5b Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:47:51 -0500 Subject: [PATCH 101/114] digit prepend linux --- .github/workflows/CI Build and release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 7aefcfb1..2257fb8d 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -280,7 +280,7 @@ jobs: - name: 'Set release filename' shell: bash run: | - FILENAME="obs-midi-${{ env.GIT_HASH }}-1_amd64.deb" + FILENAME="obs-midi-0${{ env.GIT_HASH }}-1_amd64.deb" echo "::set-env name=LINUX_FILENAME::$FILENAME" - name: 'Package ${{ env.LINUX_FILENAME }}' if: success() @@ -290,7 +290,7 @@ jobs: VERSION="${{ env.GIT_HASH }}" cd ./build sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=$VERSION \ + --backup=no --deldoc=yes --install=no --pkgname=obs-midi --pkgversion=0$VERSION \ --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ --pkgsource="${{ github.event.repository.html_url }}" \ --requires="obs-studio,libqt5core5a,libqt5widgets5,qt5-image-formats-plugins" \ @@ -449,7 +449,7 @@ jobs: echo "store password" xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" echo "xcnotary precheck" - xcnotary precheck ./release/${{ env.MAC_FILENAME }} + xcnotary precheck ./release/${{ env.MAC_FILENAME }} echo "xcnotary notarize" if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi From f75ae5f5721f9f30e95dab63863137328b9784d5 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 21:54:19 -0500 Subject: [PATCH 102/114] Fix Linux Tar Path --- .github/workflows/CI Build and release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 2257fb8d..006d8106 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -307,7 +307,7 @@ jobs: mkdir -p obs-studio/plugins/64bit/ cp ./obs-midi.so obs-studio/plugins/64bit/ tar -czvf obs-midi-Linux-${{ env.GIT_HASH }}-x64.tar.gz obs-studio - mv obs-midi-*.tar.gz ${{ github.workspace }}/obs-midi/package/ + pwd - name: 'Publish ${{ env.LINUX_FILENAME }}' if: success() @@ -320,7 +320,7 @@ jobs: uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-linux' - path: '${{ github.workspace }}/obs-midi/package/*.tar.gz' + path: '${{ github.workspace }}/obs-midi/build/*.tar.gz' macos64: name: "macOS 64-bit" runs-on: [macos-latest] From e431407fb92255ed3a9d8a0b3d29f494aea7dc43 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 22:00:27 -0500 Subject: [PATCH 103/114] Disable Notarization due to unspecified error --- .github/workflows/CI Build and release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 006d8106..5f3e65ae 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -450,8 +450,8 @@ jobs: xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_IDENT_USER }}" -p "${{ secrets.MACOS_IDENT_PASS }}" echo "xcnotary precheck" xcnotary precheck ./release/${{ env.MAC_FILENAME }} - echo "xcnotary notarize" - if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi + echo "xcnotary notarize Currently Disabled" + #if [ "$?" -eq 0 ]; then xcnotary notarize ./release/${{ env.MAC_FILENAME }} -d "cpyarger@gmail.com" -k "AC_PASSWORD"; fi - name: 'Publish ${{ env.MAC_FILENAME }} artifact' if: success() From 07d400db1b3bf1f09a38f97e6985c56f21f78acd Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 22:09:54 -0500 Subject: [PATCH 104/114] change git tag to git hash in macos --- .github/workflows/CI Build and release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 5f3e65ae..60c1c602 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -407,8 +407,8 @@ jobs: if: success() shell: bash run: | - FILENAME_UNSIGNED="obs-midi-${{ env.GIT_TAG }}-macOS-Unsigned.pkg" - FILENAME="obs-midi-${{ env.GIT_TAG }}-macOS.pkg" + FILENAME_UNSIGNED="obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg" + FILENAME="obs-midi-${{ env.GIT_HASH }}-macOS.pkg" echo "::set-env name=MAC_FILENAME_UNSIGNED::$FILENAME_UNSIGNED" echo "::set-env name=MAC_FILENAME::$FILENAME" - name: 'Fix linked dynamic library paths' From 004bd83e25681e07c40385686b2a85dda335b229 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 22:18:05 -0500 Subject: [PATCH 105/114] git hash macIS --- .github/workflows/CI Build and release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 60c1c602..7750b024 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -457,7 +457,7 @@ jobs: if: success() uses: actions/upload-artifact@v2-preview with: - name: '${{ env.GIT_TAG }}-macOS' + name: '${{ env.GIT_HASH }}-macOS' path: ${{ github.workspace }}/obs-midi/release/*.pkg make-release: From 1b721154b0d98db97efc281616880f4f9305d28e Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 22:25:47 -0500 Subject: [PATCH 106/114] switch mac from unsigned file to signed --- .github/workflows/CI Build and release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 7750b024..779f8396 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -530,7 +530,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ${{ github.workspace }}/${{ env.GIT_HASH }}-macOS/obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg + asset_path: ${{ github.workspace }}/${{ env.GIT_HASH }}-macOS/obs-midi-${{ env.GIT_HASH }}-macOS.pkg asset_name: obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg asset_content_type: application/octet-stream - name: 'Upload Linux artifact to release' From 53036ed107596394aa1db5a1b687810874fa1c81 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Thu, 11 Feb 2021 22:26:14 -0500 Subject: [PATCH 107/114] unsigned again --- .github/workflows/CI Build and release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI Build and release.yml b/.github/workflows/CI Build and release.yml index 779f8396..1a8a03b5 100644 --- a/.github/workflows/CI Build and release.yml +++ b/.github/workflows/CI Build and release.yml @@ -531,7 +531,7 @@ jobs: with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ${{ github.workspace }}/${{ env.GIT_HASH }}-macOS/obs-midi-${{ env.GIT_HASH }}-macOS.pkg - asset_name: obs-midi-${{ env.GIT_HASH }}-macOS-Unsigned.pkg + asset_name: obs-midi-${{ env.GIT_HASH }}-macOS.pkg asset_content_type: application/octet-stream - name: 'Upload Linux artifact to release' uses: actions/upload-release-asset@v1 From 0c4ca331e361f68f1c068140d91987441c785410 Mon Sep 17 00:00:00 2001 From: "Christopher P. Yarger" Date: Thu, 11 Feb 2021 22:46:20 -0500 Subject: [PATCH 108/114] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 912d1f06..a39a687a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Use MIDI devices to trigger events in OBS and visa versa. -# Status -- ![CI Multiplatform Build](https://github.com/cpyarger/obs-midi/workflows/CI%20Multiplatform%20Build/badge.svg) +# Status -- ![CI Multiplatform Build and release](https://github.com/cpyarger/obs-midi/workflows/CI%20Multiplatform%20Build%20and%20release/badge.svg?branch=release) # Installing From 5fb0713cdc1d49c9d55ceec5a3912f906b66174a Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Fri, 12 Feb 2021 00:36:31 -0500 Subject: [PATCH 109/114] commit --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..beb5e236 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/.vs/obs-midi/v16 From e93de0de31cd4d1170538fe03d754c1b2196c8f5 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Fri, 12 Feb 2021 00:36:56 -0500 Subject: [PATCH 110/114] add to gitignore --- .vs/CMake Overview | 0 .vs/ProjectSettings.json | 3 +++ .vs/slnx.sqlite | Bin 0 -> 90112 bytes 3 files changed, 3 insertions(+) create mode 100644 .vs/CMake Overview create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/slnx.sqlite diff --git a/.vs/CMake Overview b/.vs/CMake Overview new file mode 100644 index 00000000..e69de29b diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 00000000..2b7b33d8 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "x64-Debug (default)" +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..55f9577d66fc5c9848044163be757d6ce5c46a4a GIT binary patch literal 90112 zcmeHw3w#?_neWJw^`4n1j-xn^V6LJmtT+DeD-|bd3@)8zH{cx_syI$ad4zqmjZ=KbzZCoqRa}$VqtC$1Q>>K z!oStCD90`D~>$EES67V!c=?&&Yq4XLl7# zQYJr>X_bgiji(1E(}B$BaQc?O(JLxrnso=@=fG%l`su)yqsD5d`<6Ochd%{s?ryE- zs5mdRR*t)ja*dpqQ3(@H2T}({MzF1;2U3F*>AqLo=ymu7!SX7hE@n%Tx#{L>R#9eh zaA+jmqUEf6i;PPXh?)E};5(V#ogNR2jc4``jvoo^OCJdgPE8)jj6$*d)1#B175tkT z8QG?kGFGjeD(0oCKDU}iPJ*2^@j&!+Rte>6UqA{R|zD5@4x2dsV z1Oi}44GyObqT%#Nx*<}PkpUb%G&r8xGdR8_5{va|3Y&0Mv+PE#=sCQ4OGi}U5?bga8?X}ibapMh~TL&g=+G$)qJQZ*&!=A@Zs z)#XuUPUtm`GP8Kua&%+PoCj>Lx%TP4OH*z#;_jIyBhH-5eC;ugII|e)S4W&#q#rX^ zFyfRBZKZRQ(prG;FNaf zQPXIdbmpbXl!n1QM&-yVnq>JnTrjk{J8y&A8BxKU0d09{$nNl;fSK=XW9HM1LZ#~FoVxi>m)xPW zM_B@yvt6dN%e3uz8qwLVUlui0i>S0#*nSy>8#yndTr1%FF72_&lXR*vN$b!u>)CD` zAZD>{h?qrJH&kSu8&-Y=E0JaUpfT5xc?{Q6_;VFYf)_W#XKIMebYLjcybK%>YxM)! znp8a{!Lq0^^D3*wz;Jrk;MB-uAh%d0Bet$i(=f;@R);^_ZCUCi!(>9L*Nf#@GNzUF zw#=~^?Ws8(F(b0vmoqFkX#2+6?EbA=Ek}su)K0=0O`54mCl{qMtlEs1R)gJ`gj>pB z{M#UB-_mZ2!{6O)xhRn`72T9yZH6+ADqNk(DV#r;r5zGWi_niI>zsmTHJ_UWYGacO z|9$=u{=M)A{hp>nUVtk4g+za(5RoF0SUeXI212oDA_hw2S_AP%P>W}7xLL!zMNMu7oJ|6=x3-OSU zj6>h$@`ZdTJ^(F`L?BUKiif2LsGFCBekmdfVmJ!zh(yBKa3TrFORKFmW;;*p41B8? zY)VxY%k}W)HX9>EQ&mZY~h|0e%-{v-T~GDtb&|a_hRKv zP-~^jkg~JQDzr5Um2)$fJQi!WMR^Co=7wxG{vn3{2LCAk5dZXxZX7LuB0v$K2v7tl z0u%v?07ZZzKoOt_Py{Ff6oIQopxe6BvdpU{wodDIOVg_X)>YsnFuxekw!*sEWq1jI zb$*GtV7Z^+f586}|5yAQ`P2Mi{w7}FdG0yxe{o;r{*rqecQ1FCyMgQDIQCcU7uXN5 zuVH7|U2M1aDeuGHKl8rAoA(ZR*L$Ave8uw#&l^1#J;yy0o}{PS!?=Io{zvzR-EVTA zavyQu?B3*dxqj$+%=PE4dtC)r+O@^yc7DY9X6Iebf-~jZ=yW)K;&|Ngh~r(3yB)KR zVaFzi-Tou{*X$45|BLF@7O+LdzbB% zwgua*wv=tN&1?Oc^{dv8Ti;?`vd&reT0>TU+i%*w+4h;X_qN^FcD!v*+m<%3WFRtMpJ@Yv5S1}!o(_UGutGrE1 zjGc*DTz2r|9G7x+#YFem_;eO>d94W zFW8w)AU!!>%omGggKXWMa!wR2R4ZA@AYFT2&WTb`${<^Rhn?99r4pI^;g3NcIA>?J zEAm{ak~=YDE}{3Voe>NvOvP%%@{9BHXAP2d zC*|65P?5L@2pXjR1-U@6R1*z?u8PvKDtwkyMNvU*Sy$O0f=<>%-Se{Y)jEO|P8jla zmrO!^&aM-3p`avu#&5{ib=)A*=UQ7-OatCL5@!jJnl7DlcBaeXwCCYtsA5TDubQ

V`eG!LN{>#YgX8u6(B_6X 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 literal 0 HcmV?d00001 From e53b7705acaf8ac9151a41aaa75f6e24134616aa Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Fri, 12 Feb 2021 00:39:13 -0500 Subject: [PATCH 111/114] cleanup --- .vs/CMake Overview | 0 .vs/ProjectSettings.json | 3 - .vs/slnx.sqlite | Bin 90112 -> 0 bytes azure-pipelines.yml | 169 --------------------------------------- azure-testing.yml | 162 ------------------------------------- azureremoves.txt | 18 ----- 6 files changed, 352 deletions(-) delete mode 100644 .vs/CMake Overview delete mode 100644 .vs/ProjectSettings.json delete mode 100644 .vs/slnx.sqlite delete mode 100644 azure-pipelines.yml delete mode 100644 azure-testing.yml delete mode 100644 azureremoves.txt diff --git a/.vs/CMake Overview b/.vs/CMake Overview deleted file mode 100644 index e69de29b..00000000 diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json deleted file mode 100644 index 2b7b33d8..00000000 --- a/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": "x64-Debug (default)" -} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 55f9577d66fc5c9848044163be757d6ce5c46a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 zcmeHw3w#?_neWJw^`4n1j-xn^V6LJmtT+DeD-|bd3@)8zH{cx_syI$ad4zqmjZ=KbzZCoqRa}$VqtC$1Q>>K z!oStCD90`D~>$EES67V!c=?&&Yq4XLl7# zQYJr>X_bgiji(1E(}B$BaQc?O(JLxrnso=@=fG%l`su)yqsD5d`<6Ochd%{s?ryE- zs5mdRR*t)ja*dpqQ3(@H2T}({MzF1;2U3F*>AqLo=ymu7!SX7hE@n%Tx#{L>R#9eh zaA+jmqUEf6i;PPXh?)E};5(V#ogNR2jc4``jvoo^OCJdgPE8)jj6$*d)1#B175tkT z8QG?kGFGjeD(0oCKDU}iPJ*2^@j&!+Rte>6UqA{R|zD5@4x2dsV z1Oi}44GyObqT%#Nx*<}PkpUb%G&r8xGdR8_5{va|3Y&0Mv+PE#=sCQ4OGi}U5?bga8?X}ibapMh~TL&g=+G$)qJQZ*&!=A@Zs z)#XuUPUtm`GP8Kua&%+PoCj>Lx%TP4OH*z#;_jIyBhH-5eC;ugII|e)S4W&#q#rX^ zFyfRBZKZRQ(prG;FNaf zQPXIdbmpbXl!n1QM&-yVnq>JnTrjk{J8y&A8BxKU0d09{$nNl;fSK=XW9HM1LZ#~FoVxi>m)xPW zM_B@yvt6dN%e3uz8qwLVUlui0i>S0#*nSy>8#yndTr1%FF72_&lXR*vN$b!u>)CD` zAZD>{h?qrJH&kSu8&-Y=E0JaUpfT5xc?{Q6_;VFYf)_W#XKIMebYLjcybK%>YxM)! znp8a{!Lq0^^D3*wz;Jrk;MB-uAh%d0Bet$i(=f;@R);^_ZCUCi!(>9L*Nf#@GNzUF zw#=~^?Ws8(F(b0vmoqFkX#2+6?EbA=Ek}su)K0=0O`54mCl{qMtlEs1R)gJ`gj>pB z{M#UB-_mZ2!{6O)xhRn`72T9yZH6+ADqNk(DV#r;r5zGWi_niI>zsmTHJ_UWYGacO z|9$=u{=M)A{hp>nUVtk4g+za(5RoF0SUeXI212oDA_hw2S_AP%P>W}7xLL!zMNMu7oJ|6=x3-OSU zj6>h$@`ZdTJ^(F`L?BUKiif2LsGFCBekmdfVmJ!zh(yBKa3TrFORKFmW;;*p41B8? zY)VxY%k}W)HX9>EQ&mZY~h|0e%-{v-T~GDtb&|a_hRKv zP-~^jkg~JQDzr5Um2)$fJQi!WMR^Co=7wxG{vn3{2LCAk5dZXxZX7LuB0v$K2v7tl z0u%v?07ZZzKoOt_Py{Ff6oIQopxe6BvdpU{wodDIOVg_X)>YsnFuxekw!*sEWq1jI zb$*GtV7Z^+f586}|5yAQ`P2Mi{w7}FdG0yxe{o;r{*rqecQ1FCyMgQDIQCcU7uXN5 zuVH7|U2M1aDeuGHKl8rAoA(ZR*L$Ave8uw#&l^1#J;yy0o}{PS!?=Io{zvzR-EVTA zavyQu?B3*dxqj$+%=PE4dtC)r+O@^yc7DY9X6Iebf-~jZ=yW)K;&|Ngh~r(3yB)KR zVaFzi-Tou{*X$45|BLF@7O+LdzbB% zwgua*wv=tN&1?Oc^{dv8Ti;?`vd&reT0>TU+i%*w+4h;X_qN^FcD!v*+m<%3WFRtMpJ@Yv5S1}!o(_UGutGrE1 zjGc*DTz2r|9G7x+#YFem_;eO>d94W zFW8w)AU!!>%omGggKXWMa!wR2R4ZA@AYFT2&WTb`${<^Rhn?99r4pI^;g3NcIA>?J zEAm{ak~=YDE}{3Voe>NvOvP%%@{9BHXAP2d zC*|65P?5L@2pXjR1-U@6R1*z?u8PvKDtwkyMNvU*Sy$O0f=<>%-Se{Y)jEO|P8jla zmrO!^&aM-3p`avu#&5{ib=)A*=UQ7-OatCL5@!jJnl7DlcBaeXwCCYtsA5TDubQ

V`eG!LN{>#YgX8u6(B_6X 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 diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 8bf8ddc8..00000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,169 +0,0 @@ -variables: - isReleaseMode: ${{ startsWith(variables['Build.SourceBranch'], 'refs/tags/') }} - - -trigger: - branches: - include: - - master - - UI - - releases - tags: - include: - - '*' - -jobs: -- job: 'GenerateDocs' - condition: | - or( - eq(variables['Build.SourceBranch'], 'refs/heads/4.x-current'), - eq(variables['Build.SourceBranch'], 'refs/heads/master') - ) - pool: - vmImage: 'ubuntu-18.04' - steps: - - checkout: self - submodules: false - - - script: ./CI/generate-docs.sh - displayName: 'Generate docs' - env: - CHECKOUT_REF: $(Build.SourceBranch) - GH_TOKEN: $(GithubToken) - -- job: 'Build_Windows' - pool: - vmImage: 'windows-2019' - variables: - build_config: RelWithDebInfo - DepsBasePath: 'D:\obsdependencies' - DepsPath32: '$(DepsBasePath)\win32' - DepsPath64: '$(DepsBasePath)\win64' - QtBaseDir: 'D:\QtDep' - QTDIR32: '$(QtBaseDir)\5.10.1\msvc2017' - QTDIR64: '$(QtBaseDir)\5.10.1\msvc2017_64' - OBSPath: 'D:\obs-studio' - isAzure: 'true' - steps: - - checkout: self - submodules: true - - script: ./CI/install-qt-win.cmd - displayName: 'Install Qt' - env: - QtBaseDir: $(QtBaseDir) - - task: Cache@2 - displayName: Restore cached OBS Studio dependencies - inputs: - key: 'obsdeps | "$(Agent.OS)"' - restoreKeys: | - obsdeps | "$(Agent.OS)" - path: $(DepsBasePath) - - script: ./CI/download-obs-deps.cmd - displayName: 'Download OBS Studio dependencies' - - task: Cache@2 - displayName: Restore cached OBS Studio builds - inputs: - key: 'obs | "$(Agent.OS)"' - restoreKeys: | - obs | "$(Agent.OS)" - path: $(OBSPath) - - script: ./CI/prepare-obs-windows.cmd - displayName: 'Checkout & CMake OBS Studio' - env: - build_config: $(build_config) - DepsPath32: $(DepsPath32) - DepsPath64: $(DepsPath64) - QTDIR32: $(QTDIR32) - QTDIR64: $(QTDIR64) - OBSPath: $(OBSPath) - isAzure: $(isAzure) - - task: MSBuild@1 - displayName: 'Build OBS Studio 32-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '$(OBSPath)\build32\obs-studio.sln' - - task: MSBuild@1 - displayName: 'Build OBS Studio 64-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '$(OBSPath)\build64\obs-studio.sln' - - script: ./CI/prepare-windows.cmd - displayName: 'CMake obs-midi' - env: - build_config: $(build_config) - QTDIR32: $(QTDIR32) - QTDIR64: $(QTDIR64) - OBSPath: $(OBSPath) - isAzure: $(isAzure) - - task: MSBuild@1 - displayName: 'Build obs-midi 32-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '.\build32\obs-midi.sln' - - task: MSBuild@1 - displayName: 'Build obs-midi 64-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '.\build64\obs-midi.sln' - - - script: ./CI/package-windows.cmd - displayName: 'Package obs-midi' - - task: PublishBuildArtifacts@1 - displayName: 'Upload package artifacts' - inputs: - pathtoPublish: './package' - artifactName: 'windows_build' - -- job: 'Build_Linux' - pool: - vmImage: 'ubuntu-18.04' - variables: - BUILD_REASON: $(Build.Reason) - BRANCH_SHORT_NAME: $(Build.SourceBranchName) - BRANCH_FULL_NAME: $(Build.SourceBranch) - isAzure: true - steps: - - checkout: self - submodules: true - - script: ./CI/install-dependencies-ubuntu.sh - displayName: 'Install dependencies' - - script: ./CI/build-ubuntu.sh - displayName: 'Build obs-midi' - env: - isAzure: $(isAzure) - - script: ./CI/package-ubuntu.sh - displayName: 'Package obs-midi' - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: './package' - artifactName: 'deb_build' - -- job: 'Build_macOS' - pool: - vmImage: 'macos-10.14' - variables: - isAzure: true - steps: - - checkout: self - submodules: true - - - script: ./CI/install-dependencies-macos.sh - displayName: 'Install dependencies' - - - script: ./CI/install-build-obs-macos.sh - displayName: 'Build OBS' - - - script: ./CI/build-macos.sh - displayName: 'Build obs-midi' - env: - isAzure: $(isAzure) - - - script: ./CI/package-macos.sh - displayName: 'Package obs-midi' - env: - RELEASE_MODE: false - - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: './release' - artifactName: 'macos_build' diff --git a/azure-testing.yml b/azure-testing.yml deleted file mode 100644 index a1ba590b..00000000 --- a/azure-testing.yml +++ /dev/null @@ -1,162 +0,0 @@ -variables: - isReleaseMode: ${{ startsWith(variables['Build.SourceBranch'], 'refs/tags/') }} - - -trigger: - branches: - include: - - testing - tags: - include: - - '*' - -jobs: -- job: 'GenerateDocs' - condition: | - or( - eq(variables['Build.SourceBranch'], 'refs/heads/4.x-current'), - eq(variables['Build.SourceBranch'], 'refs/heads/master') - ) - pool: - vmImage: 'ubuntu-18.04' - steps: - - checkout: self - submodules: false - - - script: ./CI/generate-docs.sh - displayName: 'Generate docs' - env: - CHECKOUT_REF: $(Build.SourceBranch) - GH_TOKEN: $(GithubToken) - -- job: 'Build_Windows' - pool: - vmImage: 'windows-2019' - variables: - build_config: RelWithDebInfo - DepsBasePath: 'D:\obsdependencies' - DepsPath32: '$(DepsBasePath)\win32' - DepsPath64: '$(DepsBasePath)\win64' - QtBaseDir: 'D:\QtDep' - QTDIR32: '$(QtBaseDir)\5.10.1\msvc2017' - QTDIR64: '$(QtBaseDir)\5.10.1\msvc2017_64' - OBSPath: 'D:\obs-studio' - isAzure: 'true' - steps: - - checkout: self - submodules: true - - script: ./CI/install-qt-win.cmd - displayName: 'Install Qt' - env: - QtBaseDir: $(QtBaseDir) - - task: Cache@2 - displayName: Restore cached OBS Studio dependencies - inputs: - key: 'obsdeps | "$(Agent.OS)"' - restoreKeys: | - obsdeps | "$(Agent.OS)" - path: $(DepsBasePath) - - script: ./CI/download-obs-deps.cmd - displayName: 'Download OBS Studio dependencies' - - task: Cache@2 - displayName: Restore cached OBS Studio builds - inputs: - key: 'obs | "$(Agent.OS)"' - restoreKeys: | - obs | "$(Agent.OS)" - path: $(OBSPath) - - script: ./CI/prepare-obs-windows.cmd - displayName: 'Checkout & CMake OBS Studio' - env: - build_config: $(build_config) - DepsPath32: $(DepsPath32) - DepsPath64: $(DepsPath64) - QTDIR32: $(QTDIR32) - QTDIR64: $(QTDIR64) - OBSPath: $(OBSPath) - isAzure: $(isAzure) - - task: MSBuild@1 - displayName: 'Build OBS Studio 32-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '$(OBSPath)\build32\obs-studio.sln' - - task: MSBuild@1 - displayName: 'Build OBS Studio 64-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '$(OBSPath)\build64\obs-studio.sln' - - script: ./CI/prepare-windows.cmd - displayName: 'CMake obs-midi' - env: - build_config: $(build_config) - QTDIR32: $(QTDIR32) - QTDIR64: $(QTDIR64) - OBSPath: $(OBSPath) - isAzure: $(isAzure) - - task: MSBuild@1 - displayName: 'Build obs-midi 32-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '.\build32\obs-midi.sln' - - task: MSBuild@1 - displayName: 'Build obs-midi 64-bit' - inputs: - msbuildArguments: '/m /p:Configuration=$(build_config)' - solution: '.\build64\obs-midi.sln' - - - script: ./CI/package-windows.cmd - displayName: 'Package obs-midi' - - task: PublishBuildArtifacts@1 - displayName: 'Upload package artifacts' - inputs: - pathtoPublish: './package' - artifactName: 'windows_build' - -- job: 'Build_Linux' - pool: - vmImage: 'ubuntu-18.04' - variables: - BUILD_REASON: $(Build.Reason) - BRANCH_SHORT_NAME: $(Build.SourceBranchName) - BRANCH_FULL_NAME: $(Build.SourceBranch) - isAzure: true - steps: - - checkout: self - submodules: true - - script: ./CI/install-dependencies-ubuntu.sh - displayName: 'Install dependencies' - - script: ./CI/build-ubuntu.sh - displayName: 'Build obs-midi' - env: - isAzure: $(isAzure) - - script: ./CI/package-ubuntu.sh - displayName: 'Package obs-midi' - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: './package' - artifactName: 'deb_build' - -- job: 'Build_macOS' - pool: - vmImage: 'macos-10.14' - variables: - isAzure: true - steps: - - checkout: self - submodules: true - - script: ./CI/install-dependencies-macos.sh - displayName: 'Install dependencies' - - script: ./CI/install-build-obs-macos.sh - displayName: 'Build OBS' - - script: ./CI/build-macos.sh - displayName: 'Build obs-midi' - env: - isAzure: $(isAzure) - - script: ./CI/package-macos.sh - displayName: 'Package obs-midi' - env: - RELEASE_MODE: false - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: './release' - artifactName: 'macos_build' diff --git a/azureremoves.txt b/azureremoves.txt deleted file mode 100644 index 463ee77d..00000000 --- a/azureremoves.txt +++ /dev/null @@ -1,18 +0,0 @@ - - task: InstallAppleCertificate@1 - displayName: 'Install release signing certificates' - condition: eq(variables['isReleaseMode'], true) - inputs: - certSecureFile: 'Certificates.p12' - certPwd: $(secrets.macOS.certificatesImportPassword) - - - -- script: ./CI/package-macos.sh - displayName: 'Package obs-midi' - env: - RELEASE_MODE: $(isReleaseMode) - CODE_SIGNING_IDENTITY: $(secrets.macOS.codeSigningIdentity) - INSTALLER_SIGNING_IDENTITY: $(secrets.macOS.installerSigningIdentity) - AC_USERNAME: $(secrets.macOS.notarization.username) - AC_PASSWORD: $(secrets.macOS.notarization.password) - AC_PROVIDER_SHORTNAME: $(secrets.macOS.notarization.providerShortName) From 3588ff744795073fe0c2d35008af13bfbb7ee7a9 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Fri, 12 Feb 2021 01:14:03 -0500 Subject: [PATCH 112/114] fixes issue #11 --- src/forms/settings-dialog.cpp | 220 ++++++++++++++++++++-------------- src/forms/settings-dialog.h | 2 +- 2 files changed, 133 insertions(+), 89 deletions(-) diff --git a/src/forms/settings-dialog.cpp b/src/forms/settings-dialog.cpp index 1c3c0628..a3e8cdd8 100644 --- a/src/forms/settings-dialog.cpp +++ b/src/forms/settings-dialog.cpp @@ -31,7 +31,7 @@ with this program. If not, see #include #include "../version.h" -PluginWindow::PluginWindow(QWidget *parent) +PluginWindow::PluginWindow(QWidget* parent) : QDialog(parent, Qt::Dialog), ui(new Ui::PluginWindow) { ui->setupUi(this); @@ -54,9 +54,9 @@ PluginWindow::PluginWindow(QWidget *parent) SLOT(on_check_enabled_state_changed(int))); connect(ui->bidirectional, SIGNAL(stateChanged(int)), this, SLOT(on_bid_enabled_state_changed(int))); - + //Connections for Configure Tab - + connect(ui->cb_obs_output_scene, SIGNAL(currentTextChanged(QString)), this, SLOT(get_sources(QString))); connect(ui->cb_obs_output_action, SIGNAL(currentTextChanged(QString)), @@ -100,7 +100,8 @@ void PluginWindow::ToggleShowHide() setVisible(true); - } else { + } + else { setVisible(false); ui->btn_Listen_many->setChecked(false); ui->btn_Listen_one->setChecked(false); @@ -128,7 +129,8 @@ void PluginWindow::SetAvailableDevices() ui->check_enabled->setEnabled(false); this->ui->outbox->setEnabled(false); ui->tabWidget->setEnabled(false); - } else if (midiDevices.size() > 0) { + } + else if (midiDevices.size() > 0) { for (int i = 0; i < midiDevices.size(); i++) { this->ui->list_midi_dev->addItem(midiDevices.at(i)); } @@ -150,10 +152,10 @@ void PluginWindow::SetAvailableDevices() this->ui->outbox->setCurrentIndex(1); #elif __linux__ this->ui->outbox->setCurrentIndex(0); -// linux + // linux #elif __unix__ // all unices not caught above this->ui->outbox->setCurrentIndex(0); -// Unix + // Unix #endif if (midiDevices.size() != 0) { desconnect = connect( @@ -199,13 +201,14 @@ int PluginWindow::on_check_enabled_state_changed(int state) selectedOutDeviceName.c_str()); if (device == NULL) { GetDeviceManager()->RegisterMidiDevice(devicePort, - deviceOutPort); + deviceOutPort); device = GetDeviceManager()->GetMidiDeviceByName( selectedDeviceName.c_str()); device->open_midi_input_port(devicePort); device->open_midi_output_port(deviceOutPort); - } else { + } + else { device->open_midi_input_port(devicePort); device->open_midi_output_port(deviceOutPort); @@ -215,10 +218,10 @@ int PluginWindow::on_check_enabled_state_changed(int state) ui->bidirectional->setEnabled(true); ui->bidirectional->setChecked(true); ui->outbox->setEnabled(true); - + } //ui->outbox->setCurrentText(QString::fromStdString(device->GetOutName())); - + GetConfig()->Save(); //on_device_select(ui->list_midi_dev->currentItem()->text()); return state; @@ -228,7 +231,7 @@ void PluginWindow::on_device_select(QString curitem) { auto devicemanager = GetDeviceManager(); auto config = GetConfig(); - MidiAgent *MAdevice = devicemanager->GetMidiDeviceByName(curitem); + MidiAgent* MAdevice = devicemanager->GetMidiDeviceByName(curitem); ui->tabWidget->setTabText(1, QString("Configure - ").append(curitem)); // Pull info on if device is enabled, if so set true if not set false @@ -239,7 +242,8 @@ void PluginWindow::on_device_select(QString curitem) ui->bidirectional->setChecked(MAdevice->isBidirectional()); ui->outbox->setCurrentText(MAdevice->get_midi_output_name()); - } else { + } + else { ui->check_enabled->setChecked(false); ui->outbox->setEnabled(false); ui->bidirectional->setEnabled(false); @@ -256,24 +260,25 @@ void PluginWindow::handle_midi_message(MidiMessage mess) { if (ui->tabWidget->currentIndex() == 1) { if (ui->btn_Listen_one->isChecked() || - ui->btn_Listen_many->isChecked()) { + ui->btn_Listen_many->isChecked()) { blog(1, - "got midi message via gui, \n Device = %s \nMType = %s \n NORC : %i \n Channel: %i \n Value: %i", - mess.device_name.toStdString().c_str(), - mess.message_type.toStdString().c_str(), mess.NORC, - mess.channel, mess.value); + "got midi message via gui, \n Device = %s \nMType = %s \n NORC : %i \n Channel: %i \n Value: %i", + mess.device_name.toStdString().c_str(), + mess.message_type.toStdString().c_str(), mess.NORC, + mess.channel, mess.value); ui->mapping_lbl_device_name->setText(mess.device_name); ui->sb_channel->setValue(mess.channel); ui->sb_norc->setValue(mess.NORC); ui->slider_value->setValue(mess.value); ui->cb_mtype->setCurrentText(mess.message_type); ui->btn_Listen_one->setChecked(false); - } else { + } + else { if (map_location(mess) != -1) { ui->table_mapping->selectRow( map_location(mess)); } - + } } } @@ -285,11 +290,12 @@ int PluginWindow::on_bid_enabled_state_changed(int state) device->setBidirectional(state); return 1; - } else { + } + else { device->setBidirectional(state); return 0; } - + } PluginWindow::~PluginWindow() @@ -316,12 +322,12 @@ void PluginWindow::get_scene_names() void PluginWindow::add_midi_device(QString name) { blog(LOG_DEBUG, "Adding Midi Device %s", name.toStdString().c_str()); - QTableWidgetItem *device_name = new QTableWidgetItem(); - QTableWidgetItem *device_enabled = new QTableWidgetItem(); - QTableWidgetItem *device_status = new QTableWidgetItem(); - QTableWidgetItem *feedback_enabled = new QTableWidgetItem(); - QTableWidgetItem *feedback_name = new QTableWidgetItem(); - QTableWidgetItem *feedback_status = new QTableWidgetItem(); + QTableWidgetItem* device_name = new QTableWidgetItem(); + QTableWidgetItem* device_enabled = new QTableWidgetItem(); + QTableWidgetItem* device_status = new QTableWidgetItem(); + QTableWidgetItem* feedback_enabled = new QTableWidgetItem(); + QTableWidgetItem* feedback_name = new QTableWidgetItem(); + QTableWidgetItem* feedback_status = new QTableWidgetItem(); int rowcount = this->ui->table_mapping->rowCount(); this->ui->table_mapping->insertRow(rowcount); device_name->setText(name); @@ -341,9 +347,9 @@ void PluginWindow::add_midi_device(QString name) void PluginWindow::set_headers() { ui->table_mapping->setHorizontalHeaderLabels( - {"Channel", "Message Type", "Note or Control", "Action", + { "Channel", "Message Type", "Note or Control", "Action", "Scene", "Source", "Filter", "Transition", "Item", - "Audio Source", "Media Source"}); + "Audio Source", "Media Source" }); QColor midicolor("#00aaff"); QColor actioncolor("#aa00ff"); @@ -529,15 +535,15 @@ void PluginWindow::ShowOnly(QList shows) for (int i = 0; i < shows.size(); i++) { ui->cb_obs_output_action->addItem( obs_module_text(ActionsClass::action_to_string(shows.at(i)) - .toStdString() - .c_str())); + .toStdString() + .c_str())); } } void PluginWindow::ShowEntry(ActionsClass::Actions Entry) { if (ui->cb_obs_output_action->findText( - ActionsClass::action_to_string(Entry)) == -1) { + ActionsClass::action_to_string(Entry)) == -1) { ui->cb_obs_output_action->addItem(obs_module_text( ActionsClass::action_to_string(Entry).toStdString().c_str())); } @@ -545,7 +551,7 @@ void PluginWindow::ShowEntry(ActionsClass::Actions Entry) void PluginWindow::HideEntry(ActionsClass::Actions Entry) { if (ui->cb_obs_output_action->findText( - ActionsClass::action_to_string(Entry)) > 0) { + ActionsClass::action_to_string(Entry)) > 0) { ui->cb_obs_output_action->removeItem( ui->cb_obs_output_action->findText( ActionsClass::action_to_string(Entry))); @@ -589,7 +595,7 @@ void PluginWindow::get_sources(QString scene) auto arrayref = Utils::GetSceneArray(scene); int size = obs_data_array_count(arrayref); for (int i = 0; i < size; i++) { - obs_data *item = obs_data_array_item(arrayref, i); + obs_data* item = obs_data_array_item(arrayref, i); ui->cb_obs_output_source->addItem( QString(obs_data_get_string(item, "name"))); @@ -600,7 +606,7 @@ void PluginWindow::get_sources(QString scene) void PluginWindow::get_scenes() { ui->cb_obs_output_scene->clear(); - obs_data_array *x = Utils::GetScenes(); + obs_data_array* x = Utils::GetScenes(); int cnt = obs_data_array_count(x); for (int i = 0; i <= cnt; i++) { auto it = obs_data_array_item(x, i); @@ -745,9 +751,9 @@ bool PluginWindow::map_exists() ui->mapping_lbl_device_name->text()); for (int i = 0; i < hooks.size(); i++) { if ((hooks.at(i)->channel == ui->sb_channel->value()) && - (hooks.at(i)->norc == ui->sb_norc->value()) && - (hooks.at(i)->message_type == - ui->cb_mtype->currentText())) { + (hooks.at(i)->norc == ui->sb_norc->value()) && + (hooks.at(i)->message_type == + ui->cb_mtype->currentText())) { return true; } } @@ -760,9 +766,9 @@ int PluginWindow::map_location(MidiMessage message) ui->mapping_lbl_device_name->text()); for (int i = 0; i < hooks.size(); i++) { if ((hooks.at(i)->channel == message.channel) && - (hooks.at(i)->norc == message.NORC) && - (hooks.at(i)->message_type == - message.message_type)) { + (hooks.at(i)->norc == message.NORC) && + (hooks.at(i)->message_type == + message.message_type)) { return i; } } @@ -772,31 +778,31 @@ void PluginWindow::add_new_mapping() { ui->btn_Listen_many->setChecked(false); ui->btn_Listen_one->setChecked(false); - if (!map_exists()) { + if (!map_exists() && verify_mapping()) { int row = ui->table_mapping->rowCount(); ui->table_mapping->insertRow(row); - QTableWidgetItem *channelitem = new QTableWidgetItem( + QTableWidgetItem* channelitem = new QTableWidgetItem( QString::number(ui->sb_channel->value())); - QTableWidgetItem *mtypeitem = + QTableWidgetItem* mtypeitem = new QTableWidgetItem(ui->cb_mtype->currentText()); - QTableWidgetItem *norcitem = new QTableWidgetItem( + QTableWidgetItem* norcitem = new QTableWidgetItem( QString::number(ui->sb_norc->value())); - QTableWidgetItem *actionitem = new QTableWidgetItem( + QTableWidgetItem* actionitem = new QTableWidgetItem( ui->cb_obs_output_action->currentText()); - QTableWidgetItem *sceneitem = new QTableWidgetItem( + QTableWidgetItem* sceneitem = new QTableWidgetItem( ui->cb_obs_output_scene->currentText()); - QTableWidgetItem *sourceitem = new QTableWidgetItem( + QTableWidgetItem* sourceitem = new QTableWidgetItem( ui->cb_obs_output_source->currentText()); - QTableWidgetItem *filteritem = new QTableWidgetItem( + QTableWidgetItem* filteritem = new QTableWidgetItem( ui->cb_obs_output_filter->currentText()); - QTableWidgetItem *transitionitem = new QTableWidgetItem( + QTableWidgetItem* transitionitem = new QTableWidgetItem( ui->cb_obs_output_transition->currentText()); - QTableWidgetItem *itemitem = new QTableWidgetItem( + QTableWidgetItem* itemitem = new QTableWidgetItem( ui->cb_obs_output_item->currentText()); - QTableWidgetItem *audioitem = new QTableWidgetItem( + QTableWidgetItem* audioitem = new QTableWidgetItem( ui->cb_obs_output_audio_source->currentText()); - QTableWidgetItem *mediaitem = new QTableWidgetItem( + QTableWidgetItem* mediaitem = new QTableWidgetItem( ui->cb_obs_output_media_source->currentText()); ui->table_mapping->setItem(row, 0, channelitem); ui->table_mapping->setItem(row, 1, mtypeitem); @@ -809,7 +815,7 @@ void PluginWindow::add_new_mapping() ui->table_mapping->setItem(row, 8, itemitem); ui->table_mapping->setItem(row, 9, audioitem); ui->table_mapping->setItem(row, 10, mediaitem); - MidiHook *newmh = new MidiHook(); + MidiHook* newmh = new MidiHook(); newmh->channel = ui->sb_channel->value(); newmh->message_type = ui->cb_mtype->currentText(); newmh->norc = ui->sb_norc->value(); @@ -829,22 +835,29 @@ void PluginWindow::add_new_mapping() dev->add_MidiHook(newmh); auto conf = GetConfig(); conf->Save(); - } else { - // TODO: Fix this, and create Utils::message_to_user(QString) - QString Mess; - Mess.append("Mapping already Exists for "); - Mess.append(ui->mapping_lbl_device_name->text()); - Mess.append(" , with channel # "); - Mess.append(QString::number(ui->sb_channel->value())); - Mess.append(" norc # "); - Mess.append(QString::number(ui->sb_norc->value())); - Mess.append(" and Message Type "); - Mess.append(ui->cb_mtype->currentText()); - Utils::alert_popup(Mess); + } + else { + if (!verify_mapping()) { + Utils::alert_popup("Mapping Missing required variable"); + } + if(map_exists()){ + // TODO: Fix this, and create Utils::message_to_user(QString) + QString Mess; + + Mess.append("Mapping already Exists for "); + Mess.append(ui->mapping_lbl_device_name->text()); + Mess.append(" , with channel # "); + Mess.append(QString::number(ui->sb_channel->value())); + Mess.append(" norc # "); + Mess.append(QString::number(ui->sb_norc->value())); + Mess.append(" and Message Type "); + Mess.append(ui->cb_mtype->currentText()); + Utils::alert_popup(Mess); + } } } -void PluginWindow::add_row_from_hook(MidiHook *hook) +void PluginWindow::add_row_from_hook(MidiHook* hook) { int row = ui->table_mapping->rowCount(); ui->table_mapping->insertRow(row); @@ -852,21 +865,21 @@ void PluginWindow::add_row_from_hook(MidiHook *hook) midic.setRgb(0, 170, 255); QColor actc; actc.setRgb(170, 0, 255); - QTableWidgetItem *channelitem = + QTableWidgetItem* channelitem = new QTableWidgetItem(QString::number(hook->channel)); - QTableWidgetItem *mtypeitem = new QTableWidgetItem(hook->message_type); - QTableWidgetItem *norcitem = + QTableWidgetItem* mtypeitem = new QTableWidgetItem(hook->message_type); + QTableWidgetItem* norcitem = new QTableWidgetItem(QString::number(hook->norc)); - QTableWidgetItem *actionitem = new QTableWidgetItem(hook->action); - QTableWidgetItem *sceneitem = new QTableWidgetItem(hook->scene); - QTableWidgetItem *sourceitem = new QTableWidgetItem(hook->source); - QTableWidgetItem *filteritem = new QTableWidgetItem(hook->filter); - QTableWidgetItem *transitionitem = + QTableWidgetItem* actionitem = new QTableWidgetItem(hook->action); + QTableWidgetItem* sceneitem = new QTableWidgetItem(hook->scene); + QTableWidgetItem* sourceitem = new QTableWidgetItem(hook->source); + QTableWidgetItem* filteritem = new QTableWidgetItem(hook->filter); + QTableWidgetItem* transitionitem = new QTableWidgetItem(hook->transition); - QTableWidgetItem *itemitem = new QTableWidgetItem(hook->item); - QTableWidgetItem *audioitem = new QTableWidgetItem(hook->audio_source); - QTableWidgetItem *mediaitem = new QTableWidgetItem(hook->media_source); + QTableWidgetItem* itemitem = new QTableWidgetItem(hook->item); + QTableWidgetItem* audioitem = new QTableWidgetItem(hook->audio_source); + QTableWidgetItem* mediaitem = new QTableWidgetItem(hook->media_source); set_cell_colors(midic, channelitem); set_cell_colors(midic, mtypeitem); @@ -892,7 +905,7 @@ void PluginWindow::add_row_from_hook(MidiHook *hook) ui->table_mapping->setItem(row, 9, audioitem); ui->table_mapping->setItem(row, 10, mediaitem); } -void PluginWindow::set_cell_colors(QColor color, QTableWidgetItem *item) +void PluginWindow::set_cell_colors(QColor color, QTableWidgetItem* item) { QColor txcolor; txcolor.black(); @@ -908,7 +921,7 @@ void PluginWindow::tab_changed(int i) set_headers(); ui->table_mapping->setRowCount(0); auto devicemanager = GetDeviceManager(); - + auto hooks = devicemanager->GetMidiHooksByDeviceName( ui->mapping_lbl_device_name->text()); if (hooks.count() > 0) { @@ -916,7 +929,7 @@ void PluginWindow::tab_changed(int i) add_row_from_hook(hooks.at(i)); } } - + } void PluginWindow::delete_mapping() { auto devicemanager = GetDeviceManager(); @@ -926,18 +939,18 @@ void PluginWindow::delete_mapping() { auto conf = GetConfig(); for (int i = 0; i < hooks.size(); i++) { if ((hooks.at(i)->channel == ui->sb_channel->value()) && - (hooks.at(i)->norc == ui->sb_norc->value()) && - (hooks.at(i)->message_type == - ui->cb_mtype->currentText())) { + (hooks.at(i)->norc == ui->sb_norc->value()) && + (hooks.at(i)->message_type == + ui->cb_mtype->currentText())) { dev->remove_MidiHook(hooks.at(i)); conf->Save(); ui->table_mapping->removeRow( ui->table_mapping->selectedItems().at(0)->row()); } } - - - + + + } void PluginWindow::edit_mapping(int row, int col) { @@ -956,3 +969,34 @@ void PluginWindow::edit_mapping(int row, int col) ui->cb_obs_output_audio_source->setCurrentText(sitems.at(9)->text()); ui->cb_obs_output_media_source->setCurrentText(sitems.at(10)->text()); } +bool PluginWindow::verify_mapping() { + int testresults = 0; + if (ui->cb_obs_output_audio_source->isVisible() && ui->cb_obs_output_audio_source->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_scene->isVisible() && ui->cb_obs_output_scene->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_source->isVisible() && ui->cb_obs_output_source->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_filter->isVisible() && ui->cb_obs_output_filter->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_transition->isVisible() && ui->cb_obs_output_transition->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_item->isVisible() && ui->cb_obs_output_item->count() == 0) { + testresults++; + } + if (ui->cb_obs_output_media_source->isVisible() && ui->cb_obs_output_media_source->count() == 0) { + testresults++; + } + + if (testresults > 0) { + return false; + } + else { + return true; + } +} \ No newline at end of file diff --git a/src/forms/settings-dialog.h b/src/forms/settings-dialog.h index cfdb79ef..31f4c81d 100644 --- a/src/forms/settings-dialog.h +++ b/src/forms/settings-dialog.h @@ -78,7 +78,7 @@ public slots: bool first_run; bool map_exists(); int map_location(MidiMessage message); - + bool verify_mapping(); private: QGridLayout *layout; QStringList *items; From a80809bbf11233f0ededb5569da799e132232334 Mon Sep 17 00:00:00 2001 From: Christopher P Yarger Date: Fri, 12 Feb 2021 01:21:48 -0500 Subject: [PATCH 113/114] edit build instructions --- build.md | 10 +++++++++- docs/obs-midi-debug-page.PNG | Bin 0 -> 39271 bytes docs/obs-midi-general-page.PNG | Bin 0 -> 45464 bytes docs/obs-midi-set-as-startup-project.PNG | Bin 0 -> 264740 bytes 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 docs/obs-midi-debug-page.PNG create mode 100644 docs/obs-midi-general-page.PNG create mode 100644 docs/obs-midi-set-as-startup-project.PNG diff --git a/build.md b/build.md index 428858cc..bf73f2db 100644 --- a/build.md +++ b/build.md @@ -6,7 +6,7 @@ You'll need [Qt 5.15.2](https://download.qt.io/official_releases/qt/5.15/), [CMake](https://cmake.org/download/) and a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions) installed on your computer. -For Cleanliness and sanity, Do not mix the obs-studio and obs-midi directories. +For Cleanliness and sanity, Do not mix the obs-studio and obs-midi directories. For Example My Directory structure looks like this @@ -34,6 +34,14 @@ In cmake-gui, you'll have to set the following variables : | **CMAKE_INSTALL_PREFIX** | (path) : Same location as QTDIR | C:/Qt/5.15.2/msvc2019_64| ![My CMake Gui Looks like ](https://github.com/cpyarger/obs-midi/blob/master/docs/obs-midi-cmake.PNG?raw=true) + +In Visual Studio, Set OBS-Midi as the startup project, + +![set obs-midi as startup project ](https://github.com/cpyarger/obs-midi/blob/master/docs/obs-midi-set-as-startup-project.PNG?raw=true) +Change Output Directory to OBS-Studio projects plugin's folder on the general page +![My CMake Gui Looks like ](https://github.com/cpyarger/obs-midi/blob/master/docs/obs-midi-general-page.PNG?raw=true) +Change Debug to obs-studio's exe and exe dir in the debug page +![My CMake Gui Looks like ](https://github.com/cpyarger/obs-midi/blob/master/docs/obs-midi-debug-page.PNG?raw=true) ## Linux On Debian/Ubuntu : diff --git a/docs/obs-midi-debug-page.PNG b/docs/obs-midi-debug-page.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7bb7cacb852f2b9b4643b84761a4f3d95763bacf GIT binary patch literal 39271 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 literal 0 HcmV?d00001 diff --git a/docs/obs-midi-general-page.PNG b/docs/obs-midi-general-page.PNG new file mode 100644 index 0000000000000000000000000000000000000000..41843aebf9337d43571f179b6791b4f46c4eca82 GIT binary patch literal 45464 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

-~54{vytk2^!0ahrY${MvZE1!X-(?T6@T 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 %=(yiPiHXazE3{+J{8`mC`#HNM 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

th?^*4mxY5#L8N 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%0AxqFuUTV`C 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 z zk_urvV3Y645hmKgUzGh?mc@dyXhM^lqf2QU5D;r4QOjw&!f4k1uO&k@xQ|hD4MPYk zMDqV~k^qB&%=nH|hX}_q_2yU#u$IQ<0vX+Th2ah&lppFftz*`fDv}sC$8Zs&uZ4OW zd8EW(-Y;<(7bNLA-$~E7G1Wv9_v`ubJoU>3sy5+lHO+iYJ&91=VUlw&uYjd6Zee3e zb=g?VI67|33xyTFU1becX$SVsk1LG98pn1XUX>qkFlvx>2jA`oXwZ&lm|c z*{N5ZykyhDxI<;w-#}0pbwVP$)}a$Rx}x$Hu$N!Js`wP>Qy65G_tT9f3=MDJgHwW; zh)=?2Sal&iR;{3s?0JOVK@wp67sYV`Py3g&3aRRUV zm)FhM&o(h_{*y5lPo@Lm6Ns+^^Jdz_>)0CyTZIu!_h#ATv9@&IUj}4Ww;yj!hn~LE zlMUb4lb*M7^vSy+Eukn6sZpkhg##kG&>#E#q6`{mYNmxX>Ibc7(~t)ti%Su2IY(DS zHDdT?gs3AAdP_r?l1h+DAmErh6d@X*$w%cqV_eE8*_D8&O*#UAY8-k5yffx-j0rvf zsXQEMfJ*|qs}6WaDmFsdQK9~83=$RyNE_($!{eNjBb>ZfCIg(oB^UT$ z!K9vi9`uw72Zro^$9WB;+1&E!rCvpF4W8X(%@zHD1Iy@HsuBQ6Rl+3&Pz$hUOu0>K zX?w~kc$$&NL=edVTA{eTEuqf9Lq)+A(^*7?SObAms~A4O7@raOINF1ebZcBnOz}|} tX~;+!lTqw@dSDIEZ*#BfPF#~b^5OgKyNS~28-PD&PTQR-IeF>!{{z05#8v Date: Fri, 12 Feb 2021 01:26:59 -0500 Subject: [PATCH 114/114] fix general page --- docs/obs-midi-general-page.PNG | Bin 45464 -> 33670 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/obs-midi-general-page.PNG b/docs/obs-midi-general-page.PNG index 41843aebf9337d43571f179b6791b4f46c4eca82..3cc7c3b54b5f1d0874a9aedc60a05a7c822600a1 100644 GIT binary patch literal 33670 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

-~54{vytk2^!0ahrY${MvZE1!X-(?T6@T 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