Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 58c2862

Browse files
committed
Makefile add build-installer
1 parent aa3162a commit 58c2862

File tree

11 files changed

+319
-29
lines changed

11 files changed

+319
-29
lines changed

.github/workflows/cortex-nightly.yml renamed to .github/workflows/nightly-build.yml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,34 @@ jobs:
8686
with:
8787
submodules: recursive
8888

89+
- name: Get Cer for code signing
90+
if: runner.os == 'macOS'
91+
run: base64 -d <<< "$NOTARIZE_P8_BASE64" > /tmp/notary-key.p8
92+
shell: bash
93+
env:
94+
NOTARIZE_P8_BASE64: ${{ secrets.NOTARIZE_P8_BASE64 }}
95+
96+
- name: Install gettext-bast linux
97+
if: runner.os == 'Linux'
98+
run: apt update && apt install gettext-base -y
99+
100+
- uses: apple-actions/import-codesign-certs@v2
101+
continue-on-error: true
102+
if: runner.os == 'macOS'
103+
with:
104+
p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }}
105+
p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }}
106+
107+
- uses: actions/setup-dotnet@v3
108+
if: runner.os == 'Windows'
109+
with:
110+
dotnet-version: "8.0.x"
111+
89112
- name: Install choco on Windows
90113
if: runner.os == 'Windows'
91114
run: |
92115
choco install make pkgconfiglite ccache awscli 7zip ninja -y
116+
dotnet tool install --global AzureSignTool
93117
94118
- name: Download ccache from s3
95119
if: runner.os == 'Windows'
@@ -117,7 +141,54 @@ jobs:
117141
run: |
118142
cd engine
119143
make pre-package
144+
145+
- name: Code Signing binaries
146+
run: |
147+
cd engine
148+
make codesign-binary CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}"
149+
150+
- name: Notary macOS Binary
151+
if: runner.os == 'macOS'
152+
run: |
153+
curl -sSfL https://raw.githubusercontent.com/anchore/quill/main/install.sh | sh -s -- -b /usr/local/bin
154+
cd engine/cortex
155+
# Notarize the binary
156+
quill notarize ./cortex
157+
env:
158+
QUILL_NOTARY_KEY_ID: ${{ secrets.NOTARY_KEY_ID }}
159+
QUILL_NOTARY_ISSUER: ${{ secrets.NOTARY_ISSUER }}
160+
QUILL_NOTARY_KEY: "/tmp/notary-key.p8"
161+
162+
- name: Build Installers
163+
shell: bash
164+
run: |
165+
cd engine
166+
make build-installer PACKAGE_NAME=cortexcpp-nightly VERSION=${{ needs.get-update-version.outputs.new_version }} SOURCE_BINARY_PATH="../../cortex/cortex" DESTINATION_BINARY_NAME="cortex-nightly" DATA_FOLDER_NAME=".cortex-nightly" CONFIGURATION_FILE_NAME=".cortexrc-nightly" UNINSTALLER_FILE_NAME="cortex-nightly-uninstall.sh"
167+
168+
- name: Codesign and notary for macos installer
169+
if: runner.os == 'macOS'
170+
run: |
171+
cd engine
172+
productsign --sign "Developer ID Installer: ${{ secrets.DEVELOPER_ID }}" cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}.pkg cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}-signed.pkg
173+
rm cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}.pkg
174+
mv cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}-signed.pkg cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}.pkg
175+
xcrun notarytool submit cortexcpp-nightly-${{ needs.get-update-version.outputs.new_version }}.pkg --apple-id ${{ secrets.APPLE_ID }} --password ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} --team-id ${{ secrets.APPLE_TEAM_ID }} --wait
176+
177+
- name: Compile .ISS to .EXE Installer
178+
uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
179+
if: runner.os == 'Windows'
180+
with:
181+
path: engine/templates/windows/installer-nightly.iss
182+
options: /O+
183+
184+
- name: Codesign for windows installer
185+
if: runner.os == 'Windows'
186+
run: |
187+
cd engine
120188
189+
set PATH=%PATH%;%USERPROFILE%\.dotnet\tools
190+
azuresigntool.exe sign -kvu ${{ secrets.AZURE_KEY_VAULT_URI }} -kvi ${{ secrets.AZURE_CLIENT_ID }} -kvt ${{ secrets.AZURE_TENANT_ID }} -kvs ${{ secrets.AZURE_CLIENT_SECRET }} -kvc ${{ secrets.AZURE_CERT_NAME }} -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\templates\windows\setup.exe";'
191+
121192
- name: Package
122193
run: |
123194
cd engine
@@ -129,6 +200,27 @@ jobs:
129200
name: cortex-${{ matrix.os }}-${{ matrix.name }}
130201
path: ./engine/cortex
131202

203+
- name: Upload windwos installer
204+
if: runner.os == 'Windows'
205+
uses: actions/upload-artifact@v2
206+
with:
207+
name: cortex-${{ matrix.os }}-installer-${{ matrix.name }}
208+
path: ./engine/templates/windows/setup.exe
209+
210+
- name: Upload macos installer
211+
if: runner.os == 'macOS'
212+
uses: actions/upload-artifact@v2
213+
with:
214+
name: cortex-${{ matrix.os }}-installer-${{ matrix.name }}
215+
path: ./engine/cortexcpp-nightly.pkg
216+
217+
- name: Upload linux installer
218+
if: runner.os == 'Linux'
219+
uses: actions/upload-artifact@v2
220+
with:
221+
name: cortex-${{ matrix.os }}-installer-${{ matrix.name }}
222+
path: ./engine/cortexcpp-nightly.deb
223+
132224
- name: Upload ccache to s3
133225
continue-on-error: true
134226
if: always() && runner.os == 'Windows'

engine/Makefile

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ AZURE_CLIENT_SECRET ?= xxxx
1414
AZURE_CERT_NAME ?= xxxx
1515
DEVELOPER_ID ?= xxxx
1616

17+
# Arguments for build installer
18+
PACKAGE_NAME ?= cortexcpp
19+
VERSION ?= 0.1.1
20+
SOURCE_BINARY_PATH ?= ../../cortex/cortex
21+
DESTINATION_BINARY_NAME ?= cortex
22+
DATA_FOLDER_NAME ?= .cortex
23+
CONFIGURATION_FILE_NAME ?= .cortexrc
24+
UNINSTALLER_FILE_NAME ?= cortex-uninstall.sh
25+
1726
# Default target, does nothing
1827
all:
1928
@echo "Specify a target to run"
@@ -59,7 +68,7 @@ else
5968
cp build/cortex cortex/;
6069
endif
6170

62-
codesign:
71+
codesign-binary:
6372
ifeq ($(CODE_SIGN),false)
6473
@echo "Skipping Code Sign"
6574
@exit 0
@@ -68,12 +77,11 @@ endif
6877
ifeq ($(OS),Windows_NT)
6978
@powershell -Command "dotnet tool install --global AzureSignTool;"
7079
@powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex\cortex.exe";'
71-
@powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex\engines\cortex.llamacpp\engine.dll";'
7280
else ifeq ($(shell uname -s),Linux)
7381
@echo "Skipping Code Sign for linux"
7482
@exit 0
7583
else
76-
find "cortex" -type f -exec codesign --force -s "$(DEVELOPER_ID)" --options=runtime {} \;
84+
codesign --force -s "$(DEVELOPER_ID)" --options=runtime --entitlements="./templates/macos/entitlements.plist" ./cortex/cortex;
7785
endif
7886

7987
package:
@@ -85,6 +93,25 @@ else
8593
tar -czvf cortex.tar.gz cortex;
8694
endif
8795

96+
build-installer:
97+
ifeq ($(OS),Windows_NT)
98+
@echo "Building installer for linux"; \
99+
cp cortex/* templates/windows/; \
100+
mv templates/windows/cortex.exe templates/windows/$(DESTINATION_BINARY_NAME).exe;
101+
else ifeq ($(shell uname -s),Linux)
102+
@echo "Building installer for linux"; \
103+
cd templates/linux; \
104+
chmod +x create_deb.sh; \
105+
./create_deb.sh $(PACKAGE_NAME) $(VERSION) $(SOURCE_BINARY_PATH) $(DESTINATION_BINARY_NAME) $(DATA_FOLDER_NAME) $(CONFIGURATION_FILE_NAME);
106+
cp $(PACKAGE_NAME).deb ../../
107+
else
108+
@echo "Building installer for linux"; \
109+
cd templates/macos; \
110+
chmod +x create_pkg.sh; \
111+
./create_pkg.sh $(PACKAGE_NAME) $(VERSION) $(SOURCE_BINARY_PATH) $(DESTINATION_BINARY_NAME) $(DATA_FOLDER_NAME) $(CONFIGURATION_FILE_NAME) $(UNINSTALLER_FILE_NAME);
112+
cp $(PACKAGE_NAME).pkg ../../
113+
endif
114+
88115
clean:
89116
ifeq ($(OS),Windows_NT)
90117
@powershell -Command "rm -rf build; rm -rf build-deps; rm -rf cortex; rm -rf cortex.tar.gz;"

engine/templates/linux/create_deb.sh

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,27 @@ PACKAGE_NAME=$1
22
VERSION=$2
33
SOURCE_BINARY_PATH=$3
44
DESTINATION_BINARY_NAME=$4
5+
DATA_FOLDER_NAME=$5
6+
CONFIGURATION_FILE_NAME=$6
57

68
mkdir -p $PACKAGE_NAME/DEBIAN
79

810
mkdir -p $PACKAGE_NAME/usr/bin
911
cp $SOURCE_BINARY_PATH $PACKAGE_NAME/usr/bin/$DESTINATION_BINARY_NAME
1012

13+
export DESTINATION_BINARY_NAME
14+
1115
cp postinst $PACKAGE_NAME/DEBIAN/postinst
12-
cp postrm $PACKAGE_NAME/DEBIAN/postrm
16+
sed -i '2s/.*/DESTINATION_BINARY_NAME=\$DESTINATION_BINARY_NAME/' $PACKAGE_NAME/DEBIAN/postinst
17+
1318
cp prerm $PACKAGE_NAME/DEBIAN/prerm
19+
sed -i '3s/.*/DESTINATION_BINARY_NAME=\$DESTINATION_BINARY_NAME/' $PACKAGE_NAME/DEBIAN/prerm
20+
21+
export DATA_FOLDER_NAME CONFIGURATION_FILE_NAME
22+
23+
cp postrm $PACKAGE_NAME/DEBIAN/postrm
24+
sed -i '3s/.*/DATA_FOLDER_NAME=\$DATA_FOLDER_NAME/' $PACKAGE_NAME/DEBIAN/postrm
25+
sed -i '4s/.*/CONFIGURATION_FILE_NAME=\$CONFIGURATION_FILE_NAME/' $PACKAGE_NAME/DEBIAN/postrm
1426

1527
chmod 755 $PACKAGE_NAME/DEBIAN/postinst
1628
chmod 755 $PACKAGE_NAME/DEBIAN/postrm
@@ -20,4 +32,4 @@ export PACKAGE_NAME VERSION
2032

2133
envsubst < control > $PACKAGE_NAME/DEBIAN/control
2234

23-
dpkg-deb --build $PACKAGE_NAME $PACKAGE_NAME_$VERSION.deb
35+
dpkg-deb --build $PACKAGE_NAME $PACKAGE_NAME.deb

engine/templates/linux/postinst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
#!/bin/sh
2-
echo "Running post-install script..."
2+
DESTINATION_BINARY_NAME=cortex
3+
echo "Download cortex.llamacpp engines by default"
4+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
5+
sudo -u "$USER_TO_RUN_AS" /usr/bin/$DESTINATION_BINARY_NAME engines cortex.llamacpp install

engine/templates/linux/postrm

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
#!/bin/sh
22
set +e
3+
DATA_FOLDER_NAME=.cortex
4+
CONFIGURATION_FILE_NAME=.cortexrc
35

4-
echo "Do you want to delete the 'cortex' data folder for all users? (yes/no)"
6+
echo "Do you want to delete the '~/${DATA_FOLDER_NAME}' data folder and file '~/${CONFIGURATION_FILE_NAME}'? (yes/no)"
57
read -r answer
68

9+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
10+
711
case "$answer" in
812
[yY][eE][sS]|[yY])
9-
echo "Deleting 'cortex' data folders..."
10-
for userdir in /home/*; do
11-
if [ -d "$userdir/cortex" ]; then
12-
echo "Removing $userdir/cortex"
13-
rm -rf "$userdir/cortex" > /dev/null 2>&1
14-
fi
15-
done
13+
echo "Deleting cortex data folders..."
14+
if [ -d "/home/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}" ]; then
15+
echo "Removing /home/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}"
16+
rm -rf "/home/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}" > /dev/null 2>&1
17+
fi
18+
if [ -f "/home/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}" ]; then
19+
echo "Removing /home/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}"
20+
rm -f "/home/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}" > /dev/null 2>&1
21+
fi
1622
;;
1723
[nN][oO]|[nN])
1824
echo "Keeping the 'cortex' data folders."
@@ -21,5 +27,4 @@ case "$answer" in
2127
echo "Invalid response. Please type 'yes' or 'no'."
2228
;;
2329
esac
24-
2530
exit 0

engine/templates/linux/prerm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22
set +e
3-
4-
/usr/bin/cortex stop > /dev/null 2>&1
5-
3+
DESTINATION_BINARY_NAME=cortex
4+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
5+
sudo -u "$USER_TO_RUN_AS" /usr/bin/$DESTINATION_BINARY_NAME stop > /dev/null 2>&1
66
exit 0
Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
#!/bin/bash
2+
DESTINATION_BINARY_NAME=cortex
3+
DATA_FOLDER_NAME=.cortex
4+
CONFIGURATION_FILE_NAME=.cortexrc
5+
UNINSTALLER_FILE_NAME=cortex-uninstall.sh
26

37
# required root privileges
48
if [ "$EUID" -ne 0 ]
59
then echo "Please run as root with sudo"
610
exit
711
fi
812

9-
rm /usr/local/bin/cortex
13+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
1014

11-
echo "Do you want to delete the 'cortex' data folder for all users? (yes/no)"
15+
rm /usr/local/bin/$DESTINATION_BINARY_NAME
16+
17+
echo "Do you want to delete the '~/${DATA_FOLDER_NAME}' data folder and file '~/${CONFIGURATION_FILE_NAME}'? (yes/no)"
1218
read -r answer
1319

1420
case "$answer" in
1521
[yY][eE][sS]|[yY])
16-
echo "Deleting 'cortex' data folders..."
17-
for userdir in /Users/*; do
18-
if [ -d "$userdir/cortex" ]; then
19-
echo "Removing $userdir/cortex"
20-
rm -rf "$userdir/cortex" > /dev/null 2>&1
21-
fi
22-
done
22+
echo "Deleting cortex data folders..."
23+
if [ -d "/Users/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}" ]; then
24+
echo "Removing /Users/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}"
25+
rm -rf "/Users/${USER_TO_RUN_AS}/${DATA_FOLDER_NAME}" > /dev/null 2>&1
26+
fi
27+
if [ -f "/Users/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}" ]; then
28+
echo "Removing /Users/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}"
29+
rm -f "/Users/${USER_TO_RUN_AS}/${CONFIGURATION_FILE_NAME}" > /dev/null 2>&1
30+
fi
2331
;;
2432
[nN][oO]|[nN])
2533
echo "Keeping the 'cortex' data folders."
@@ -29,4 +37,4 @@ case "$answer" in
2937
;;
3038
esac
3139

32-
rm /usr/local/bin/cortex-uninstall.sh
40+
rm /usr/local/bin/$UNINSTALLER_FILE_NAME
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
PACKAGE_NAME=$1
2+
VERSION=$2
3+
SOURCE_BINARY_PATH=$3
4+
DESTINATION_BINARY_NAME=$4
5+
DATA_FOLDER_NAME=$5
6+
CONFIGURATION_FILE_NAME=$6
7+
UNINSTALLER_FILE_NAME=$7
8+
9+
mkdir installer
10+
mkdir scripts
11+
12+
cp $SOURCE_BINARY_PATH installer/$DESTINATION_BINARY_NAME
13+
14+
export DESTINATION_BINARY_NAME
15+
cp post-installer.sh scripts/post-installer.sh
16+
sed -i '2s/.*/DESTINATION_BINARY_NAME=\$DESTINATION_BINARY_NAME/' $PACKAGE_NAME/DEBIAN/postinst
17+
18+
export DATA_FOLDER_NAME CONFIGURATION_FILE_NAME UNINSTALLER_FILE_NAME
19+
cp cortex-uninstall.sh scripts/$UNINSTALLER_FILE_NAME
20+
sed -i '2s/.*/DESTINATION_BINARY_NAME=\$DESTINATION_BINARY_NAME/' scripts/$UNINSTALLER_FILE_NAME
21+
sed -i '3s/.*/DATA_FOLDER_NAME=\$DATA_FOLDER_NAME/' scripts/$UNINSTALLER_FILE_NAME
22+
sed -i '4s/.*/CONFIGURATION_FILE_NAME=\$CONFIGURATION_FILE_NAME/' scripts/$UNINSTALLER_FILE_NAME
23+
sed -i '5s/.*/UNINSTALLER_FILE_NAME=\$UNINSTALLER_FILE_NAME/' scripts/$UNINSTALLER_FILE_NAME
24+
25+
pkgbuild --identifier ai.cortexcpp.pkg --version $VERSION --scripts scripts --install-location /usr/local/bin --root ./installer ${PACKAGE_NAME}.pkg
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
DESTINATION_BINARY_NAME=cortex
3+
echo "Download cortex.llamacpp engines by default"
4+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
5+
sudo -u "$USER_TO_RUN_AS" /usr/local/bin/$DESTINATION_BINARY_NAME engines cortex.llamacpp install

0 commit comments

Comments
 (0)