/
build_commandpost_release.sh
executable file
·171 lines (126 loc) · 6.52 KB
/
build_commandpost_release.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/bash
#
# COMMANDPOST BUILD RELEASE SCRIPT:
#
set -eu
set -o pipefail
#
# Define Variables:
#
export SENTRY_ORG=commandpost
export SENTRY_PROJECT=commandpost
export SENTRY_LOG_LEVEL=debug
export SCRIPT_HOME ; SCRIPT_HOME="$(dirname "$(greadlink -f "$0")")"
export COMMANDPOST_HOME ; COMMANDPOST_HOME="$(greadlink -f "${SCRIPT_HOME}/../")"
export VERSION ; VERSION=$(cd "${COMMANDPOST_HOME}/../CommandPost-App/" || fail "Unable to enter ${COMMANDPOST_HOME}/../CommandPost-App/" ; git describe --abbrev=0)
#
# Build Uninstall Script:
#
function build_uninstall() {
rm -rf "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.app"
osacompile -x -o "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.app" "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.scpt"
cp "${COMMANDPOST_HOME}/scripts/inc/uninstall/applet.icns" "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.app/Contents/Resources/applet.icns"
xattr -cr "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.app"
codesign --verbose --force --deep --options=runtime --timestamp --entitlements "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.entitlements" --sign "Developer ID Application: LateNite Films Pty Ltd" "${COMMANDPOST_HOME}/scripts/inc/uninstall/Uninstall CommandPost.app"
codesign -dv --verbose=4 "${COMMANDPOST_HOME}/../CommandPost/scripts/inc/uninstall/Uninstall CommandPost.app"
}
#
# Build DMG using DMG Canvas:
#
function build_dmgcanvas() {
echo " * Removing Old DMG..."
rm -f "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg"
echo " * Building New DMG..."
mkdir -p "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}"
/Applications/DMG\ Canvas.app/Contents/Resources/dmgcanvas "${COMMANDPOST_HOME}/../CommandPost/scripts/inc/dmgcanvas/CommandPost.dmgCanvas" "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg" -setFilePath CommandPost.app "${COMMANDPOST_HOME}/../CommandPost-App/build/CommandPost.app" -setFilePath "Uninstall CommandPost.app" "${COMMANDPOST_HOME}/../CommandPost/scripts/inc/uninstall/Uninstall CommandPost.app" -setFilePath "Applications" "/Applications/"
if [ ! -f "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg" ]; then
fail " * DMG Creation Failed!"
else
echo " * DMG Creation Successful!"
fi
}
#
# Generate Appcast:
#
function generate_appcast() {
echo " * Remove Old AppCast..."
rm -f "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.txt"
echo " * Generating New AppCast..."
#
# Generate DSA Signature (legacy for Sparkle 1.0):
#
export SPARKLE_DSA_SIGNATURE
SPARKLE_DSA_SIGNATURE="$(${COMMANDPOST_HOME}/../CommandPost/scripts/inc/sparkle1/sign_update "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg" "${COMMANDPOST_HOME}/../dsa_priv.pem")"
#
# Generate EdDSA Signature (for Sparkle 2.0):
#
export SPARKLE_ED_SIGNATURE
SPARKLE_ED_SIGNATURE="$(${COMMANDPOST_HOME}/../CommandPost/scripts/inc/sparkle2/sign_update "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg")"
#
# Get Build Number from plist:
#
local BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${COMMANDPOST_HOME}/../CommandPost-App/build/CommandPost.app/Contents/Info.plist")
touch "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.txt"
echo "
<item>
<title>Version ${VERSION}</title>
<sparkle:releaseNotesLink>https://commandpost.github.io/CommandPost/releasenotes.html</sparkle:releaseNotesLink>
<pubDate>$(date +"%a, %e %b %Y %H:%M:%S %z")</pubDate>
<enclosure url=\"https://github.com/CommandPost/CommandPost/releases/download/${VERSION}/CommandPost_${VERSION}.dmg\"
sparkle:version=\"${BUILD_NUMBER}\"
sparkle:shortVersionString=\"${VERSION}\"
sparkle:dsaSignature=\"${SPARKLE_DSA_SIGNATURE}\"
${SPARKLE_ED_SIGNATURE}
type=\"application/octet-stream\"
/>
<sparkle:minimumSystemVersion>10.15</sparkle:minimumSystemVersion>
</item>" >> "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.txt"
}
#
# Finalise Sentry:
#
function finalise_sentry() {
echo " * Updating Sentry release..."
export TOKENPATH ; TOKENPATH="$(greadlink -f "${COMMANDPOST_HOME}/..")"
export SENTRY_TOKEN_AUTH_FILE="${TOKENPATH}/token-sentry-auth"
echo " * Importing Sentry token from: ${TOKENPATH}/token-sentry-auth"
# shellcheck disable=SC1090
source "${SENTRY_TOKEN_AUTH_FILE}"
export SENTRY_AUTH_TOKEN
"${COMMANDPOST_HOME}/../CommandPost-App/scripts/sentry-cli" releases set-commits --auto "${VERSION}" 2>&1 | tee "${COMMANDPOST_HOME}/../CommandPost-App/build/sentry-release.log"
"${COMMANDPOST_HOME}/../CommandPost-App/scripts/sentry-cli" releases finalize "${VERSION}" 2>&1 | tee -a "${COMMANDPOST_HOME}/../CommandPost-App/build/sentry-release.log"
}
#
# Build CommandPost-App:
#
echo " * Quitting any active CommandPost instances..."
killall CommandPost || true
echo " * Removing old release..."
rm -rf "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}"
echo " * Removing old archive..."
rm -rf "${COMMANDPOST_HOME}/../archive/${VERSION}"
echo " * Moving to CommandPost-App Directory..."
cd "${COMMANDPOST_HOME}/../CommandPost-App/"
echo " * Cleaning up prior to build..."
./scripts/build.sh clean
echo " * Building CommandPost-App Docs..."
./scripts/build.sh docs
echo " * Signing csv2notion..."
xattr -cr "${COMMANDPOST_HOME}/src/plugins/finalcutpro/toolbox/shotdata/csv2notion/csv2notion"
codesign --verbose --force --deep --options=runtime --timestamp --entitlements "${COMMANDPOST_HOME}/src/plugins/finalcutpro/toolbox/shotdata/csv2notion/entitlements.plist" --sign "Developer ID Application: LateNite Films Pty Ltd" "${COMMANDPOST_HOME}/src/plugins/finalcutpro/toolbox/shotdata/csv2notion/csv2notion"
codesign -dv --verbose=4 "${COMMANDPOST_HOME}/src/plugins/finalcutpro/toolbox/shotdata/csv2notion/csv2notion"
echo " * Building CommandPost-App..."
./scripts/build.sh build -s Release -c Release -d -u
echo " * Validating CommandPost-App..."
./scripts/build.sh validate
echo " * Building Uninstall App..."
build_uninstall
echo " * Building DMG for distribution..."
build_dmgcanvas
echo " * Notorizing DMG..."
./scripts/build.sh notarize -z "${COMMANDPOST_HOME}/../CommandPost-Releases/${VERSION}/CommandPost_${VERSION}.dmg"
echo " * Generating new AppCast..."
generate_appcast
echo " * Finalise Sentry..."
finalise_sentry
echo " * CommandPost has been successfully built!"