Skip to content

Build, Sign and Upload MiddleClick #14

Build, Sign and Upload MiddleClick

Build, Sign and Upload MiddleClick #14

name: Build, Sign and Upload MiddleClick
on:
workflow_dispatch:
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install the Apple certificate
# https://docs.github.com/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development#add-a-step-to-your-workflow
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
- name: Use Latest Available Xcode
run: sudo xcode-select -s "$(ls -d /Applications/Xcode*.app | sort -V | tail -n 1)/Contents/Developer"
# use /Applications/Xcode_16.2.app instead if problems occur
- name: Build MiddleClick (Using Makefile)
run: make all
- name: Configure GH CLI
run: |
gh repo set-default ${GITHUB_REPOSITORY}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Locate latest draft release
id: get_release
run: |
LATEST_DRAFT=$(gh release list --limit 1 --json tagName,isDraft -q '.[] | select(.isDraft) | .tagName')
echo "RELEASE_TAG=$LATEST_DRAFT" >> "$GITHUB_ENV"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Remove old asset (if exists)
run: |
ASSET_NAME="MiddleClick.zip"
RELEASE_ID=$(gh release view "$RELEASE_TAG" --json databaseId -q '.databaseId')
ASSET_ID=$(gh api repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets --jq '.[] | select(.name=="'"$ASSET_NAME"'") | .id')
if [ -n "$ASSET_ID" ]; then
gh api --method DELETE repos/${GITHUB_REPOSITORY}/releases/assets/$ASSET_ID
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload new asset
run: |
gh release upload "$RELEASE_TAG" ./build/MiddleClick.zip --clobber
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}