-
Notifications
You must be signed in to change notification settings - Fork 100
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
55 changed files
with
1,293 additions
and
992 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,273 @@ | ||
name: 'CI Multiplatform Build' | ||
|
||
on: | ||
push: | ||
paths-ignore: | ||
- '**.md' | ||
branches: [ "staging" ] | ||
tags: | ||
- '*' | ||
pull_request: | ||
paths-ignore: | ||
- '**.md' | ||
branches: [ "staging" ] | ||
|
||
env: | ||
InstallPath: "obs-studio-node" | ||
SLBUILDDIRECTORY: "streamlabs-build.app" # The .app extension is required to run macOS tests correctly. | ||
RELEASE_BUCKET: "obsstudionodes3.streamlabs.com" | ||
RuntimeURL: https://artifacts.electronjs.org/headers/dist | ||
RuntimeName: iojs | ||
ElectronVersion: 22.3.3 | ||
SLGenerator: Visual Studio 17 2022 | ||
SLDistributeDirectory: distribute | ||
SLFullDistributePath: "streamlabs-build.app/distribute" # The .app extension is required to run macOS tests correctly. | ||
LibOBSVersion: 28.2.67 | ||
PACKAGE_NAME: osn | ||
|
||
jobs: | ||
macos64: | ||
name: 'macOS' | ||
runs-on: [macos-latest] | ||
strategy: | ||
matrix: | ||
BuildReleases: [Release-x86_64, Debug-x86_64, Release-arm64, Debug-arm64] | ||
include: | ||
- BuildReleases: Release-x86_64 | ||
BuildConfig: RelWithDebInfo | ||
ReleaseName: release | ||
Architecture: x86_64 | ||
- BuildReleases: Debug-x86_64 | ||
BuildConfig: Debug | ||
ReleaseName: debug | ||
Architecture: x86_64 | ||
- BuildReleases: Release-arm64 | ||
BuildConfig: RelWithDebInfo | ||
ReleaseName: release | ||
Architecture: arm64 | ||
- BuildReleases: Debug-arm64 | ||
BuildConfig: Debug | ||
ReleaseName: debug | ||
Architecture: arm64 | ||
env: | ||
OS_TAG: "osx" | ||
steps: | ||
- name: 'Checkout' | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'recursive' | ||
- name: Get the version | ||
id: get_version | ||
run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT | ||
shell: bash | ||
- name: Install Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: '18.x' | ||
- name: Install dependencies | ||
shell: bash | ||
run: './ci/install-dependencies-osx.sh' | ||
- name: 'Configure obs-studio-node' | ||
shell: bash | ||
run: './ci/configure-osn-osx.sh' | ||
env: | ||
BUILD_CONFIG: ${{matrix.BuildConfig}} | ||
RELEASE_NAME: ${{matrix.ReleaseName}} | ||
ARCHITECTURE: ${{matrix.Architecture}} | ||
tagartifact: ${{ steps.get_version.outputs.VERSION }} | ||
- name: 'Build obs-studio-node' | ||
run: ./ci/build-osn-osx.sh | ||
shell: bash | ||
env: | ||
BUILD_CONFIG: ${{matrix.BuildConfig}} | ||
SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} | ||
- name: Put version into package.json | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: node ci/bump-version.js "${{ steps.get_version.outputs.VERSION }}" "${{env.PACKAGE_PATH}}" | ||
env: | ||
PACKAGE_PATH: "${{env.SLFullDistributePath}}/${{env.InstallPath}}" | ||
- name: 'Run tests' | ||
if: matrix.Architecture != 'arm64' | ||
continue-on-error: true | ||
run: 'yarn run test' | ||
env: | ||
SLOBS_BE_STREAMKEY: ${{secrets.testsStreamKey}} | ||
SLOBS_TEST_USER_POOL_TOKEN: ${{secrets.testsUserPoolToken}} | ||
|
||
OSN_ACCESS_KEY_ID: ${{secrets.AWS_RELEASE_ACCESS_KEY_ID}} | ||
OSN_SECRET_ACCESS_KEY: ${{secrets.AWS_RELEASE_SECRET_ACCESS_KEY}} | ||
RELEASE_NAME: ${{matrix.ReleaseName}} | ||
|
||
- name: Tar artifact for deployment | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: tar -cvzf ${{env.TARGET_ARTIFACT}}.tar.gz -C ${{env.SLFullDistributePath}} ${{env.InstallPath}} | ||
env: | ||
TARGET_ARTIFACT: ${{env.PACKAGE_NAME}}-${{ steps.get_version.outputs.VERSION }}-${{matrix.ReleaseName}}-${{env.OS_TAG}}-${{matrix.Architecture}} | ||
- name: Configure AWS credentials | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: aws-actions/configure-aws-credentials@v1 | ||
with: | ||
aws-access-key-id: ${{secrets.AWS_RELEASE_ACCESS_KEY_ID}} | ||
aws-secret-access-key: ${{secrets.AWS_RELEASE_SECRET_ACCESS_KEY}} | ||
aws-region: us-west-2 | ||
- name: Deploy | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: aws s3 cp ${{env.TARGET_ARTIFACT}}.tar.gz s3://${{env.RELEASE_BUCKET}} --acl public-read | ||
env: | ||
TARGET_ARTIFACT: ${{env.PACKAGE_NAME}}-${{ steps.get_version.outputs.VERSION }}-${{matrix.ReleaseName}}-${{env.OS_TAG}}-${{matrix.Architecture}} | ||
- name: 'Upload debug files to Sentry' | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: 'python ./ci/sentry-osx.py' | ||
env: | ||
SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} | ||
BUILDCONFIG: ${{matrix.BuildConfig}} | ||
|
||
win64: | ||
name: 'Windows 64-bit' | ||
runs-on: windows-latest | ||
strategy: | ||
matrix: | ||
ReleaseName: [release, debug] | ||
include: | ||
- ReleaseName: release | ||
ReleaseConfig: RelWithDebInfo | ||
- ReleaseName: debug | ||
ReleaseConfig: Debug | ||
env: | ||
OS_TAG: "win64" | ||
steps: | ||
- name: 'Add msbuild to PATH' | ||
uses: microsoft/setup-msbuild@v1 | ||
- name: 'Checkout' | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'recursive' | ||
- name: Get the version | ||
id: get_version | ||
run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT | ||
shell: bash | ||
- name: Install dependencies | ||
run: | | ||
yarn install --immutable --immutable-cache --check-cache | ||
yarn add electron@${{env.ElectronVersion}} -D | ||
- name: Configure obs-studio-node | ||
run: ./ci/configure-osn.cmd | ||
env: | ||
ReleaseName: ${{matrix.ReleaseName}} | ||
tagartifact: ${{ steps.get_version.outputs.VERSION }} | ||
- name: Build obs-studio-node | ||
run: cmake --build ${{env.SLBUILDDIRECTORY}} --target install --config ${{matrix.ReleaseConfig}} | ||
- name: Put version into package.json | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: node ci/bump-version.js "${{ steps.get_version.outputs.VERSION }}" "${{env.PACKAGE_PATH}}" | ||
env: | ||
PACKAGE_PATH: "${{env.SLFullDistributePath}}/${{env.InstallPath}}" | ||
|
||
- name: Cache build | ||
uses: actions/cache@v3 | ||
with: | ||
path: | | ||
${{env.SLBUILDDIRECTORY}} | ||
tests/ | ||
key: ${{ runner.os }}-build-${{ matrix.ReleaseName }}-${{ github.sha }} | ||
|
||
win64_tests: | ||
name: 'Windows 64-bit tests' | ||
runs-on: windows-latest | ||
needs: [win64] | ||
strategy: | ||
matrix: | ||
ReleaseName: [release, debug] | ||
include: | ||
- ReleaseName: release | ||
ReleaseConfig: RelWithDebInfo | ||
- ReleaseName: debug | ||
ReleaseConfig: Debug | ||
env: | ||
OS_TAG: "win64" | ||
steps: | ||
- name: 'Add msbuild to PATH' | ||
uses: microsoft/setup-msbuild@v1 | ||
- name: Get the version of aws cli | ||
run: aws --version | ||
shell: powershell | ||
- name: Install specific version of AWS CLI | ||
run: | | ||
$version = "2.12.5" | ||
$zipfile = "AWSCLIV2.zip" | ||
Invoke-WebRequest -OutFile $zipfile "https://awscli.amazonaws.com/AWSCLIV2-$version.msi" | ||
Start-Process msiexec.exe -Wait -ArgumentList "/i $zipfile /qn" | ||
rm $zipfile | ||
shell: pwsh | ||
- name: Get the version of aws cli after install | ||
run: aws --version | ||
shell: powershell | ||
- name: 'Checkout' | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'recursive' | ||
- name: Get the version | ||
id: get_version | ||
run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT | ||
shell: bash | ||
- name: Install dependencies | ||
run: | | ||
yarn install --immutable --immutable-cache --check-cache | ||
yarn add electron@${{env.ElectronVersion}} -D | ||
- name: Get build from cache | ||
uses: actions/cache@v3 | ||
with: | ||
path: | | ||
${{env.SLBUILDDIRECTORY}} | ||
tests/ | ||
key: ${{ runner.os }}-build-${{ matrix.ReleaseName }}-${{ github.sha }} | ||
|
||
- name: 'Run tests' | ||
continue-on-error: true | ||
run: 'yarn run test' | ||
env: | ||
SLOBS_BE_STREAMKEY: ${{secrets.testsStreamKey}} | ||
SLOBS_TEST_USER_POOL_TOKEN: ${{secrets.testsUserPoolToken}} | ||
|
||
OSN_ACCESS_KEY_ID: ${{secrets.AWS_RELEASE_ACCESS_KEY_ID}} | ||
OSN_SECRET_ACCESS_KEY: ${{secrets.AWS_RELEASE_SECRET_ACCESS_KEY}} | ||
RELEASE_NAME: ${{matrix.ReleaseName}} | ||
- name: Fetch symsrv-scripts | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 2 | ||
repository: stream-labs/symsrv-scripts | ||
path: symsrv-scripts | ||
- name: Run symbol server scripts | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: ./symsrv-scripts/main.bat "${{ github.workspace }}/symsrv-scripts" ".\main.ps1 -pdbPaths '${{ github.workspace }}\${{env.SLBUILDDIRECTORY}}\lib-streamlabs-ipc,${{ github.workspace }}\${{env.SLBUILDDIRECTORY}}\obs-studio-client,${{ github.workspace }}\${{env.SLBUILDDIRECTORY}}\obs-studio-server' -localSourceDir '${{ github.workspace }}' -repo_userId 'stream-labs' -repo_name 'obs-studio-node' -repo_branch '${{ github.sha }}' -subModules 'lib-streamlabs-ipc,stream-labs,lib-streamlabs-ipc,streamlabs'" | ||
env: | ||
AWS_SYMB_ACCESS_KEY_ID: ${{secrets.AWS_SYMB_ACCESS_KEY_ID}} | ||
AWS_SYMB_SECRET_ACCESS_KEY: ${{secrets.AWS_SYMB_SECRET_ACCESS_KEY}} | ||
shell: powershell | ||
|
||
- name: 'Copy necessary dll files' | ||
run: ./ci/copy-files.cmd | ||
- name: 'Prepare tag artifact' | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: ./ci/prepare-artifact.cmd | ||
|
||
- name: Tar artifact for deployment | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: tar -cvzf ${{env.TARGET_ARTIFACT}}.tar.gz -C ${{env.SLFullDistributePath}} ${{env.InstallPath}} | ||
env: | ||
TARGET_ARTIFACT: ${{env.PACKAGE_NAME}}-${{ steps.get_version.outputs.VERSION }}-${{matrix.ReleaseName}}-${{env.OS_TAG}} | ||
- name: Configure AWS credentials | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: aws-actions/configure-aws-credentials@v1 | ||
with: | ||
aws-access-key-id: ${{secrets.AWS_RELEASE_ACCESS_KEY_ID}} | ||
aws-secret-access-key: ${{secrets.AWS_RELEASE_SECRET_ACCESS_KEY}} | ||
aws-region: us-west-2 | ||
- name: Deploy | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: aws s3 cp ${{env.TARGET_ARTIFACT}}.tar.gz s3://${{env.RELEASE_BUCKET}} --acl public-read | ||
env: | ||
TARGET_ARTIFACT: ${{env.PACKAGE_NAME}}-${{ steps.get_version.outputs.VERSION }}-${{matrix.ReleaseName}}-${{env.OS_TAG}} |
Oops, something went wrong.