|
@@ -1,297 +0,0 @@
|
|
|
-name: Build Project
|
|
|
-on:
|
|
|
- workflow_call:
|
|
|
- outputs:
|
|
|
- pluginName:
|
|
|
- description: Project name detected by parsing build spec file
|
|
|
- value: ${{ jobs.check-event.outputs.pluginName }}
|
|
|
-jobs:
|
|
|
- check-event:
|
|
|
- name: Check GitHub Event Data 🔎
|
|
|
- runs-on: ubuntu-24.04
|
|
|
- defaults:
|
|
|
- run:
|
|
|
- shell: bash
|
|
|
- outputs:
|
|
|
- package: ${{ steps.setup.outputs.package }}
|
|
|
- codesign: ${{ steps.setup.outputs.codesign }}
|
|
|
- notarize: ${{ steps.setup.outputs.notarize }}
|
|
|
- config: ${{ steps.setup.outputs.config }}
|
|
|
- commitHash: ${{ steps.setup.outputs.commitHash }}
|
|
|
- pluginName: ${{ steps.setup.outputs.pluginName }}
|
|
|
- steps:
|
|
|
- - uses: actions/checkout@v4
|
|
|
- with:
|
|
|
- fetch-depth: 0
|
|
|
- - name: Check Event Data ☑️
|
|
|
- id: setup
|
|
|
- env:
|
|
|
- GH_TOKEN: ${{ github.token }}
|
|
|
- run: |
|
|
|
- : Check Event Data ☑️
|
|
|
- if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
|
-
|
|
|
- case "${GITHUB_EVENT_NAME}" in
|
|
|
- pull_request)
|
|
|
- config_data=('codesign:false' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
|
|
|
- if gh pr view ${{ github.event.number }} --json labels \
|
|
|
- | jq -e -r '.labels[] | select(.name == "Seeking Testers")' > /dev/null; then
|
|
|
- config_data[0]='codesign:true'
|
|
|
- config_data[2]='package:true'
|
|
|
- fi
|
|
|
- ;;
|
|
|
- push)
|
|
|
- config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
|
- if [[ ${GITHUB_REF_NAME} =~ [0-9]+.[0-9]+.[0-9]+(-(rc|beta).+)? ]]; then
|
|
|
- config_data[1]='notarize:true'
|
|
|
- config_data[3]='config:Release'
|
|
|
- fi
|
|
|
- ;;
|
|
|
- workflow_dispatch)
|
|
|
- config_data=('codesign:true' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
|
|
|
- ;;
|
|
|
- schedule)
|
|
|
- config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
|
- ;;
|
|
|
- *) ;;
|
|
|
- esac
|
|
|
-
|
|
|
- for config in "${config_data[@]}"; do
|
|
|
- IFS=':' read -r key value <<< "${config}"
|
|
|
- echo "${key}=${value}" >> $GITHUB_OUTPUT
|
|
|
- done
|
|
|
- echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
|
|
|
-
|
|
|
- plugin_name="$(grep 'name' buildspec.json | sed -E -e 's/^.+"name":[^"]+"(.+)",?$/\1/g')"
|
|
|
- plugin_display_name="$(grep 'displayName' buildspec.json | sed -E -e 's/^.+"displayName":[^"]+"(.+)",?$/\1/g' || echo "")"
|
|
|
-
|
|
|
- if [[ "${plugin_display_name}" ]]; then
|
|
|
- echo "pluginName=${plugin_display_name}" >> $GITHUB_OUTPUT
|
|
|
- else
|
|
|
- echo "pluginName=${plugin_name}" >> $GITHUB_OUTPUT
|
|
|
- fi
|
|
|
-
|
|
|
- macos-build:
|
|
|
- name: Build for macOS 🍏
|
|
|
- runs-on: macos-15
|
|
|
- needs: check-event
|
|
|
- defaults:
|
|
|
- run:
|
|
|
- shell: zsh --no-rcs --errexit --pipefail {0}
|
|
|
- steps:
|
|
|
- - uses: actions/checkout@v4
|
|
|
- with:
|
|
|
- submodules: recursive
|
|
|
- fetch-depth: 0
|
|
|
-
|
|
|
- - name: Set Up Environment 🔧
|
|
|
- id: setup
|
|
|
- run: |
|
|
|
- : Set Up Environment 🔧
|
|
|
- if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
|
-
|
|
|
- print '::group::Enable Xcode 16.1'
|
|
|
- sudo xcode-select --switch /Applications/Xcode_16.1.0.app/Contents/Developer
|
|
|
- print '::endgroup::'
|
|
|
-
|
|
|
- print '::group::Clean Homebrew Environment'
|
|
|
- local -a unwanted_formulas=()
|
|
|
- local -a remove_formulas=()
|
|
|
- for formula (${unwanted_formulas}) {
|
|
|
- if [[ -d ${HOMEBREW_PREFIX}/Cellar/${formula} ]] remove_formulas+=(${formula})
|
|
|
- }
|
|
|
-
|
|
|
- if (( #remove_formulas )) brew uninstall --ignore-dependencies ${remove_formulas}
|
|
|
- print '::endgroup::'
|
|
|
-
|
|
|
- local product_name
|
|
|
- local product_version
|
|
|
- read -r product_name product_version <<< \
|
|
|
- "$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
|
-
|
|
|
- print "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
|
- print "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
|
|
|
-
|
|
|
- - uses: actions/cache/restore@v4
|
|
|
- id: ccache-cache
|
|
|
- with:
|
|
|
- path: ${{ github.workspace }}/.ccache
|
|
|
- key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}
|
|
|
- restore-keys: |
|
|
|
- ${{ runner.os }}-ccache-
|
|
|
-
|
|
|
- - name: Set Up Codesigning 🔑
|
|
|
- uses: ./.github/actions/setup-macos-codesigning
|
|
|
- if: fromJSON(needs.check-event.outputs.codesign)
|
|
|
- id: codesign
|
|
|
- with:
|
|
|
- codesignIdentity: ${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}
|
|
|
- installerIdentity: ${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}
|
|
|
- codesignCertificate: ${{ secrets.MACOS_SIGNING_CERT }}
|
|
|
- certificatePassword: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
|
|
|
- keychainPassword: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
|
|
- provisioningProfile: ${{ secrets.MACOS_SIGNING_PROVISIONING_PROFILE }}
|
|
|
- notarizationUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
|
- notarizationPassword: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
|
-
|
|
|
- - name: Build Plugin 🧱
|
|
|
- uses: ./.github/actions/build-plugin
|
|
|
- with:
|
|
|
- target: macos-universal
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
- codesign: ${{ fromJSON(needs.check-event.outputs.codesign) }}
|
|
|
- codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
|
-
|
|
|
- - name: Package Plugin 📀
|
|
|
- uses: ./.github/actions/package-plugin
|
|
|
- with:
|
|
|
- target: macos-universal
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
- package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
|
- codesign: ${{ fromJSON(needs.check-event.outputs.codesign) && fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
|
|
|
- codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
|
- installerIdent: ${{ steps.codesign.outputs.installerIdent }}
|
|
|
- codesignTeam: ${{ steps.codesign.outputs.codesignTeam }}
|
|
|
- notarize: ${{ fromJSON(needs.check-event.outputs.notarize) && fromJSON(steps.codesign.outputs.haveNotarizationUser) }}
|
|
|
- codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
|
- codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
|
-
|
|
|
- - name: Upload Artifacts 📡
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal.*
|
|
|
-
|
|
|
- - name: Upload Debug Symbol Artifacts 🪲
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- if: ${{ needs.check-event.outputs.config == 'Release' }}
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}-dSYMs
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-dSYMs.*
|
|
|
-
|
|
|
- - uses: actions/cache/save@v4
|
|
|
- if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true'
|
|
|
- with:
|
|
|
- path: ${{ github.workspace }}/.ccache
|
|
|
- key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}
|
|
|
-
|
|
|
- ubuntu-build:
|
|
|
- name: Build for Ubuntu 🐧
|
|
|
- strategy:
|
|
|
- matrix:
|
|
|
- os: [ubuntu-24.04]
|
|
|
- runs-on: ${{ matrix.os }}
|
|
|
- needs: check-event
|
|
|
- defaults:
|
|
|
- run:
|
|
|
- shell: bash
|
|
|
- steps:
|
|
|
- - uses: actions/checkout@v4
|
|
|
- with:
|
|
|
- submodules: recursive
|
|
|
- fetch-depth: 0
|
|
|
-
|
|
|
- - name: Set Up Environment 🔧
|
|
|
- id: setup
|
|
|
- run: |
|
|
|
- : Set Up Environment 🔧
|
|
|
- if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
|
-
|
|
|
- read -r product_name product_version <<< \
|
|
|
- "$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
|
-
|
|
|
- echo "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
|
- echo "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
|
|
|
-
|
|
|
- - uses: actions/cache/restore@v4
|
|
|
- id: ccache-cache
|
|
|
- with:
|
|
|
- path: ${{ github.workspace }}/.ccache
|
|
|
- key: ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
|
|
|
- restore-keys: |
|
|
|
- ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-
|
|
|
-
|
|
|
- - name: Build Plugin 🧱
|
|
|
- uses: ./.github/actions/build-plugin
|
|
|
- with:
|
|
|
- target: x86_64
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
-
|
|
|
- - name: Package Plugin 📀
|
|
|
- uses: ./.github/actions/package-plugin
|
|
|
- with:
|
|
|
- target: x86_64
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
- package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
|
-
|
|
|
- - name: Upload Source Tarball 🗜️
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-sources-${{ needs.check-event.outputs.commitHash }}
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-source.*
|
|
|
-
|
|
|
- - name: Upload Artifacts 📡
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }}
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*.*
|
|
|
-
|
|
|
- - name: Upload debug symbol artifacts 🪲
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- if: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*-dbgsym.ddeb
|
|
|
-
|
|
|
- - uses: actions/cache/save@v4
|
|
|
- if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true'
|
|
|
- with:
|
|
|
- path: ${{ github.workspace }}/.ccache
|
|
|
- key: ${{ runner.os }}-${{ matrix.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
|
|
|
-
|
|
|
- windows-build:
|
|
|
- name: Build for Windows 🪟
|
|
|
- runs-on: windows-2022
|
|
|
- needs: check-event
|
|
|
- defaults:
|
|
|
- run:
|
|
|
- shell: pwsh
|
|
|
- steps:
|
|
|
- - uses: actions/checkout@v4
|
|
|
- with:
|
|
|
- submodules: recursive
|
|
|
- fetch-depth: 0
|
|
|
-
|
|
|
- - name: Set Up Environment 🔧
|
|
|
- id: setup
|
|
|
- run: |
|
|
|
- # Set Up Environment 🔧
|
|
|
- if ( $Env:RUNNER_DEBUG -ne $null ) {
|
|
|
- Set-PSDebug -Trace 1
|
|
|
- }
|
|
|
-
|
|
|
- $BuildSpec = Get-Content -Path buildspec.json -Raw | ConvertFrom-Json
|
|
|
- $ProductName = $BuildSpec.name
|
|
|
- $ProductVersion = $BuildSpec.version
|
|
|
-
|
|
|
- "pluginName=${ProductName}" >> $env:GITHUB_OUTPUT
|
|
|
- "pluginVersion=${ProductVersion}" >> $env:GITHUB_OUTPUT
|
|
|
-
|
|
|
- - name: Build Plugin 🧱
|
|
|
- uses: ./.github/actions/build-plugin
|
|
|
- with:
|
|
|
- target: x64
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
-
|
|
|
- - name: Package Plugin 📀
|
|
|
- uses: ./.github/actions/package-plugin
|
|
|
- with:
|
|
|
- target: x64
|
|
|
- config: ${{ needs.check-event.outputs.config }}
|
|
|
- package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
|
-
|
|
|
- - name: Upload Artifacts 📡
|
|
|
- uses: actions/upload-artifact@v4
|
|
|
- with:
|
|
|
- name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64-${{ needs.check-event.outputs.commitHash }}
|
|
|
- path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64*.*
|