Workflow file for this run
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
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-22.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-13 | |
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::Clean Homebrew Environment' | |
local -a to_remove=() | |
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove} | |
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@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.* | |
ubuntu-build: | |
name: Build for Ubuntu π§ | |
runs-on: ubuntu-22.04 | |
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@v4 | |
id: ccache-cache | |
with: | |
path: ${{ github.workspace }}/.ccache | |
key: ${{ runner.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }} | |
restore-keys: | | |
${{ runner.os }}-ccache-x86_64- | |
- name: Set up Homebrew πΊ | |
uses: Homebrew/actions/setup-homebrew@master | |
- 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: | |
package: ${{ fromJSON(needs.check-event.outputs.package) }} | |
target: x86_64 | |
config: ${{ needs.check-event.outputs.config }} | |
- name: Upload Source Tarball ποΈ | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-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 }}-ubuntu-22.04-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 }}-ubuntu-22.04-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym | |
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*-dbgsym.ddeb | |
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-artifact4 | |
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*.* |