Skip to content

Commit 7f2145c

Browse files
committed
add maintainer docs
includes detailed instructions on how to build code signed macOS apps with notarized installer and Windows app build + Inno Setup installer gen
1 parent 6962045 commit 7f2145c

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

docs/MAINTAINER.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Maintainer Documentation
2+
3+
## Create Draft GitHub Release
4+
5+
The GitHub release is automatically generated by GitHub Actions when a version formatted git tag is pushed to the remote. This is configured to push a release in draft format so that installers can be uploaded and the release text can be updated with SHA hashes, VirusTotal scan links.
6+
7+
## Release Process
8+
9+
### macOS Release
10+
11+
#### References
12+
13+
- https://developer.apple.com/developer-id/
14+
- https://help.apple.com/xcode/mac/current/#/dev033e997ca
15+
- https://stackoverflow.com/a/53121755/2848172
16+
- https://successfulsoftware.net/2018/11/16/how-to-notarize-your-software-on-macos/
17+
- https://help.apple.com/xcode/mac/current/#/dev1cc22a95c
18+
19+
#### macOS Release Prep Process
20+
21+
In Python venv with project dev-requirements.txt dependencies installed:
22+
23+
##### Build the code signed app bundle and installer
24+
25+
```sh
26+
make build-macos
27+
make codesign-macos
28+
make verify-codesign-macos
29+
make build-macos-installer
30+
make codesign-macos-installer
31+
```
32+
33+
##### Push the installer to Apple for notarization
34+
35+
```sh
36+
xcrun altool --notarize-app --type osx --primary-bundle-id "org.sourcefoundry.slice" --username [USERNAME] --password [APP-SPECIFIC PASSWORD] --file dist/*.dmg
37+
```
38+
39+
##### Check the status of the notarization
40+
41+
```sh
42+
xcrun altool --notarization-info [NOTARIZATION UUID] --username [USERNAME] --password [APP-SPECIFIC PASSWORD]
43+
```
44+
45+
##### Staple the installer after notarization passes
46+
47+
After the notarization passes, enter:
48+
49+
```sh
50+
xcrun stapler staple -v dist/*.dmg
51+
```
52+
53+
Note that this does not require entry of data from the previous steps. The notary data stapling is automated when you run this command after the notarization step passes.
54+
55+
The installer file is located on the path `dist/Slice[VERSION].dmg`. This must be the dmg installer file that is released. If any edits are made, start back at step 1 of the code signing and notarization process and begin again...
56+
57+
##### Push to VirusTotal
58+
59+
Upload installer to [VirusTotal](https://www.virustotal.com/gui/)
60+
61+
Copy VirusTotal URL and installer SHA256 hash to the GitHub release.
62+
63+
##### Upload installer to the GitHub release
64+
65+
Upload installer to the release.
66+
67+
##### Update the source-foundry/taproom Homebrew tap
68+
69+
Update the source-foundry/homebrew-taproom `Casks/sourcefoundry-slice` cask version number and SHA256 hash. Commit and push to the repository to trigger user updates when they run `brew update && brew upgrade`.
70+
71+
### Windows Release
72+
73+
Powershell 7 on Win 10
74+
75+
In a Python venv with project dev-requirements.txt dependencies installed:
76+
77+
Activate venv on Windows:
78+
79+
```sh
80+
.\venv\Scripts\activate
81+
```
82+
83+
PyInstaller build of the application binary:
84+
85+
```sh
86+
pyinstaller --noconfirm .\target\PyInstaller-Windows\Slice-Windows.spec
87+
```
88+
89+
Generate the Windows Inno Setup installer:
90+
91+
- Launch Inno Setup
92+
- Open the `target\InnoSetup-Windows` ISS configuration file in the application
93+
- Edit the Slice version string
94+
- Build the installer
95+
96+
The installer file is located on the path `dist\Windows-Installer\Slice-[VERSION]-Installer.exe`.
97+
98+
Upload installer to [VirusTotal](https://www.virustotal.com/gui/).
99+
100+
Copy VirusTotal URL and installer SHA256 hash to the GitHub release.
101+
102+
Upload installer to the GitHub release.

0 commit comments

Comments
 (0)