123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- 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*.*
|