refactor: Update vcpkg installation step in build-project.yaml #4
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-14 | ||
needs: check-event | ||
strategy: | ||
matrix: | ||
architecture: [x86_64, arm64] | ||
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 15.2' | ||
sudo xcode-select --switch /Applications/Xcode_15.2.app/Contents/Developer | ||
print '::endgroup::' | ||
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-${{ matrix.architecture }} | ||
config: ${{ needs.check-event.outputs.config }} | ||
codesign: ${{ fromJSON(needs.check-event.outputs.codesign) }} | ||
codesignIdent: ${{ steps.codesign.outputs.codesignIdent }} | ||
env: | ||
MACOS_ARCH: ${{ matrix.architecture }} | ||
- name: Package Plugin 📀 | ||
uses: ./.github/actions/package-plugin | ||
with: | ||
target: macos-${{ matrix.architecture }} | ||
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 }} | ||
env: | ||
MACOS_ARCH: ${{ matrix.architecture }} | ||
- name: Upload Artifacts 📡 | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }} | ||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}.* | ||
- 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-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }}-dSYMs | ||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-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 | ||
strategy: | ||
matrix: | ||
cublas: [cpu, clblast, 12.2.0, 11.8.0] | ||
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: Install vcpkg | ||
run: | | ||
git clone https://github.com/microsoft/vcpkg.git | ||
# cd vcpkg | ||
# # run bootstrap-vcpkg.bat | ||
# .\bootstrap-vcpkg.bat | ||
# # Configure the VCPKG_ROOT and PATH environment variables | ||
# Add-Content $env:GITHUB_ENV "VCPKG_ROOT=${{ github.workspace }}/vcpkg" | ||
# Add-Content $env:GITHUB_PATH "${{ github.workspace }}/vcpkg" | ||
# # Install the necessary packages | ||
# cd .. | ||
# vcpkg install | ||
- name: Build Plugin 🧱 | ||
uses: ./.github/actions/build-plugin | ||
with: | ||
target: x64 | ||
config: ${{ needs.check-event.outputs.config }} | ||
cublas: ${{ matrix.cublas }} | ||
- name: Package Plugin 📀 | ||
uses: ./.github/actions/package-plugin | ||
with: | ||
target: x64 | ||
config: ${{ needs.check-event.outputs.config }} | ||
package: ${{ fromJSON(needs.check-event.outputs.package) }} | ||
cublas: ${{ matrix.cublas }} | ||
- name: Upload Artifacts 📡 | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64-${{ matrix.cublas }}-${{ needs.check-event.outputs.commitHash }} | ||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64*.* |