Skip to content

Build and Create Pre-Release #199

Build and Create Pre-Release

Build and Create Pre-Release #199

name: Build and Create Pre-Release
on:
workflow_dispatch:
inputs:
addCommit:
description: 'Dev build?'
required: false
type: boolean
deletePrevBuild:
description: 'Delete existing pre-releases?'
required: false
type: boolean
sendSlackMessage:
description: 'Send Slack Message?'
required: false
type: boolean
message:
description: "What changed (for slack message)"
required: true
jobs:
build-and-release:
runs-on: macos-13
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Install Homebrew"
run: /bin/bash -c "NONINTERACTIVE=1 $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- name: "Install Dependencies"
run: |
/usr/local/bin/brew install --overwrite python@3.11 || echo "I1.1"
/usr/local/bin/brew link --overwrite python@3.11 || echo "I1.2"
/usr/local/bin/brew install --overwrite dpkg zip make wget jq rpm || echo "I2"
/usr/local/bin/brew link --overwrite python@3.11 || echo "I1.3"
/usr/local/bin/brew install python-gdbm@3.11 || echo "I1.4"
/usr/local/bin/brew install python-tk@3.11 || echo "I1.5"
pushd ~/work/aerolab/aerolab/brew
/usr/local/bin/brew install ./upx.rb
popd
for i in dpkg upx zip make wget jq rpm python3.11; do command -v $i || exit 1; done
echo "Dependencies checked"
- name: "Install golang"
run: |
wget https://go.dev/dl/go1.22.6.darwin-amd64.pkg
sudo installer -store -pkg go1.22.6.darwin-amd64.pkg -target /
- name: "Install Packages.pkg for making macos PKG files"
run: |
wget http://s.sudre.free.fr/Software/files/Packages.dmg
hdiutil attach -mountpoint /Volumes/Packages Packages.dmg
cd /Volumes/Packages
sudo installer -pkg Install\ Packages.pkg -target /
- name: "Compile"
env:
ADDCOMMIT: ${{ inputs.addCommit }}
run: |
buildcmd="build-prerelease"
[ "${ADDCOMMIT}" = "false" ] && buildcmd="build-official"
export PATH=$PATH:/usr/local/bin:/usr/local/go/bin
cd ~/work/aerolab/aerolab/src && make cleanall && make ${buildcmd}
- name: "Create linux packages"
env:
ADDCOMMIT: ${{ inputs.addCommit }}
run: |
buildcmd="build-prerelease"
[ "${ADDCOMMIT}" = "false" ] && buildcmd="build-official"
export PATH=$PATH:/usr/local/bin:/usr/local/go/bin
cd ~/work/aerolab/aerolab/src && make pkg-linux
- name: "Create windows zips"
env:
ADDCOMMIT: ${{ inputs.addCommit }}
run: |
buildcmd="build-prerelease"
[ "${ADDCOMMIT}" = "false" ] && buildcmd="build-official"
export PATH=$PATH:/usr/local/bin:/usr/local/go/bin
cd ~/work/aerolab/aerolab/src && make pkg-windows-zip
- name: "Print aerolab version"
run: cd ~/work/aerolab/aerolab/src && ../bin/aerolab-macos-amd64 version
- name: "Prepare keychain for signing MacOS"
env:
keypw: ${{ secrets.APPLEPW }}
INSTALLERP12: ${{ secrets.INSTALLERP12 }}
APPLICATIONP12: ${{ secrets.APPLICATIONP12 }}
run: |
set -e
security create-keychain -p mysecretpassword build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p mysecretpassword build.keychain
security set-keychain-settings build.keychain
security unlock-keychain -p mysecretpassword build.keychain
echo "$APPLICATIONP12" | base64 -d > app.p12
echo "$INSTALLERP12" | base64 -d > install.p12
security import app.p12 -k build.keychain -P $keypw -A
security import install.p12 -k build.keychain -P $keypw -A
security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword build.keychain
- name: "Sign and build MacOS"
env:
xaerolab_appleid: ${{ secrets.APPLEUSER }}
xaerolab_applepw: ${{ secrets.APPLEPW }}
xaerolab_signer: ${{ secrets.APPLESIGNER }}
xaerolab_installsigner: ${{ secrets.APPLEINSTALLSIGNER }}
xaerolab_teamid: ${{ secrets.APPLETEAMID }}
run: |
set -e
export aerolab_appleid="${xaerolab_appleid}"
export aerolab_applepw="${xaerolab_applepw}"
export aerolab_signer="${xaerolab_signer}"
export aerolab_installsigner="${xaerolab_installsigner}"
export aerolab_teamid="${xaerolab_teamid}"
export PATH=$PATH:/usr/local/bin:/usr/local/go/bin && cd ~/work/aerolab/aerolab/src && make macos-build-all && make macos-notarize-all
- name: "Create a new pre-release"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ADDCOMMIT: ${{ inputs.addCommit }}
run: |
set -e
echo "${ADDCOMMIT}"
cd ~/work/aerolab/aerolab/bin/packages
COMMIT=$(git rev-parse --short HEAD)
VER=$(cat ../../VERSION.md)
BRANCH=$(git rev-parse --abbrev-ref HEAD)
TAG=${VER}-${COMMIT}
[ "${ADDCOMMIT}" = "false" ] && TAG=${VER}
FULLCOMMIT=$(git rev-parse HEAD)
gh release create -R github.com/aerospike/aerolab --notes-file ../../RELEASE.md --prerelease --target ${FULLCOMMIT} --title "AeroLab - v${TAG}" ${TAG} aerolab-linux-amd64-${VER}.deb aerolab-linux-amd64-${VER}.rpm aerolab-linux-amd64-${VER}.zip aerolab-linux-arm64-${VER}.deb aerolab-linux-arm64-${VER}.rpm aerolab-linux-arm64-${VER}.zip aerolab-macos-${VER}.pkg aerolab-macos-amd64-${VER}.zip aerolab-macos-arm64-${VER}.zip aerolab-windows-amd64-${VER}.zip aerolab-windows-arm64-${VER}.zip
- name: "Delete previous pre-release"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DELPREV: ${{ inputs.deletePrevBuild }}
ADDCOMMIT: ${{ inputs.addCommit }}
run: |
if [ "${DELPREV}" = "true" ]
then
set -e
cd ~/work/aerolab/aerolab/bin/packages
echo "${ADDCOMMIT}"
COMMIT=$(git rev-parse --short HEAD)
VER=$(cat ../../VERSION.md)
TAG=${VER}-${COMMIT}
[ "${ADDCOMMIT}" = "false" ] && TAG=${VER}
echo "Protected tag: ${TAG}"
gh release list -R github.com/aerospike/aerolab -L 100 |grep Pre-release |awk -F'\t' '{print $3}' |while read line
do
if [ "$line" != "${TAG}" ]
then
if [[ $line =~ ^${VER}- ]]
then
echo "Removing $line"
gh release delete $line -R github.com/aerospike/aerolab --yes --cleanup-tag
fi
fi
done
fi
- name: "Send slack notification"
env:
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }}
SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }}
ADDCOMMIT: ${{ inputs.addCommit }}
MESSAGE: ${{ inputs.message }}
SENDSLACK: ${{ inputs.sendSlackMessage }}
run: |
if [ "${SENDSLACK}" = "true" ]
then
echo "${ADDCOMMIT}"
cd ~/work/aerolab/aerolab
COMMIT=$(git rev-parse --short HEAD)
VER=$(cat VERSION.md)
if [ "${ADDCOMMIT}" = "true" ]
then
TAG=${VER}-${COMMIT}
curl -d "text=A new dev build is available at https://github.com/aerospike/aerolab/releases/tag/${TAG} Changes: ${MESSAGE}" -d "channel=${SLACK_CHANNEL}" -H "Authorization: Bearer ${SLACK_TOKEN}" -X POST https://slack.com/api/chat.postMessage || exit 0
else
TAG=${VER}
curl -d "text=A new pre-release is available at https://github.com/aerospike/aerolab/releases/tag/${TAG} Changes: ${MESSAGE}" -d "channel=${SLACK_CHANNEL}" -H "Authorization: Bearer ${SLACK_TOKEN}" -X POST https://slack.com/api/chat.postMessage || exit 0
fi
fi