forked from qn7o/jinja2-live-parser
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.sh
executable file
·147 lines (119 loc) · 4.99 KB
/
build.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
#!/usr/bin/env bash
set -euo pipefail
BUILD_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
notarization_status() {
xcrun altool --notarization-info "$1" --username "$apple_id_username" --password "$apple_id_app_password" 2>&1 | awk -F ': ' '/Status:/ { print $2; }'
}
get_apple_id() {
op item get --account "$op_account" --fields "username" "$one_password_item_id"
}
get_apple_password() {
op item get --account "$op_account" --fields "App-specific Password" "$one_password_item_id"
}
get_cert_id() {
op item get --account "$op_account" --fields "Certificate Id" "$one_password_item_id"
}
download_dependencies() {
local ace_version="1.15.0"
local ace_cdn_url="https://cdnjs.cloudflare.com/ajax/libs/ace"
local ace_theme_dependencies=( "chrome" )
local ace_worker_dependencies=( "css" "json" "html" "javascript" "php" "xml" "yaml" )
local ace_mode_dependencies=( "plain_text" "css" "dockerfile" "gitignore" "golang" "groovy" "html" "ini" "java" "javascript" "json" "makefile" "markdown" "mysql" "nginx" "php" "properties" "python" "r" "ruby" "sh" "toml" "typescript" "xml" "yaml" )
echo "Downloading ace"
wget -q -O "$BUILD_DIR/static/js/ace.js" "$ace_cdn_url/$ace_version/ace.min.js"
for theme in "${ace_theme_dependencies[@]}"; do
echo "Downloading ace theme: $theme"
wget -q -O "$BUILD_DIR/static/js/theme-$theme.js" "$ace_cdn_url/$ace_version/theme-$theme.min.js"
done
for worker in "${ace_worker_dependencies[@]}"; do
echo "Downloading ace worker: $worker"
wget -q -O "$BUILD_DIR/static/js/worker-$worker.js" "$ace_cdn_url/$ace_version/worker-$worker.min.js"
done
for mode in "${ace_mode_dependencies[@]}"; do
echo "Downloading ace mode: $mode"
wget -q -O "$BUILD_DIR/static/js/mode-$mode.js" "$ace_cdn_url/$ace_version/mode-$mode.min.js"
done
echo "Downloading jquery"
wget -q -O "$BUILD_DIR/static/js/jquery.min.js" "https://code.jquery.com/jquery-3.6.3.min.js"
echo "Downloading bootstrap"
wget -q -O "$BUILD_DIR/static/js/bootstrap.bundle.min.js" "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
echo "Downloading bootstrap css"
wget -q -O "$BUILD_DIR/static/css/bootstrap.min.css" "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
echo "Downloading fontawesome"
local fontawesome_version="5.15.4"
local fontawesome_name="fontawesome-free-$fontawesome_version-web"
local tmp_dir="$(mktemp -d)"
trap "rm -rf $tmp_dir" EXIT
wget -q -e robots=off -O "$tmp_dir/$fontawesome_name.zip" "https://github.com/FortAwesome/Font-Awesome/releases/download/$fontawesome_version/$fontawesome_name.zip"
unzip -q -d "$tmp_dir" "$tmp_dir/$fontawesome_name.zip"
cp -R -f $tmp_dir/$fontawesome_name"/webfonts/"* "$BUILD_DIR/static/webfonts"
mv -f "$tmp_dir/$fontawesome_name/css/all.css" "$BUILD_DIR/static/css/all.css"
}
function run() {
local op_account="${1:?1Password account must be provided}"
local one_password_item_id="${2:?1Password item id must be provided}"
export BUNDLE_ID="org.kadaan.ansibleJinja2Tester"
local apple_id_username="$(get_apple_id)"
local apple_id_app_password="$(get_apple_password)"
local cert_id="$(get_cert_id)"
local venv_dir="$BUILD_DIR/.venv"
local app_path="$BUILD_DIR/dist/Ansible Jinja2 Tester.app"
local dmg_path="$BUILD_DIR/dist/Ansible Jinja2 Tester.dmg"
echo ""
echo "==> Cleaning up previous runs"
rm -rf "$BUILD_DIR/build"
rm -rf "$BUILD_DIR/dist"
echo ""
echo "==> Download dependencies"
download_dependencies
echo ""
echo "==> Setting up Python"
local python_version="$(cat "$BUILD_DIR/.python-version")"
pyenv install "$python_version" --skip-existing
pyenv sh-shell "$python_version"
if ! pyenv exec virtualenv --version; then
echo ""
echo "==> Installing virtualenv"
pyenv exec pip3 install virtualenv
fi
if [ ! -d "$venv_dir" ]; then
echo ""
echo "==> Creating virtualenv"
pyenv exec virtualenv "$venv_dir"
fi
echo ""
echo "==> Activating virtualenv"
source .venv/bin/activate
echo ""
echo "==> Installing requirements"
pip install -r requirements.txt
echo ""
echo "==> Building app"
export CODESIGN_IDENTITY="$cert_id"
pyinstaller main.spec --log-level=DEBUG --noconfirm
echo ""
echo "==> Creating dmg"
hdiutil create -srcfolder "$app_path" "$dmg_path"
echo ""
echo "==> Signing dmg"
codesign --timestamp --sign "$cert_id" "$dmg_path"
echo ""
echo -n "==> Notarizing dmg"
local request_uuid=$(xcrun altool --notarize-app --primary-bundle-id "$BUNDLE_ID" --username "$apple_id_username" --password "$apple_id_app_password" --file "$dmg_path" 2>&1 | awk '/RequestUUID/ { print $NF; }')
while [[ "$(notarization_status "$request_uuid")" == "in progress" ]] ; do
echo -n "."
sleep 10
done
echo ""
status="$(notarization_status "$request_uuid")"
if [[ "$status" != "success" ]] ; then
exit 1
fi
echo ""
echo "==> Stapling dmg"
xcrun stapler staple -q "$dmg_path"
echo ""
echo "==> Checksum"
shasum -a 256 "$dmg_path"
}
run "$@"