release.yml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. name: Build installers and draft release
  2. on: [workflow_dispatch]
  3. env:
  4. JAVA_VERSION: 16
  5. defaults:
  6. run:
  7. shell: bash
  8. jobs:
  9. #
  10. # Buildkit
  11. #
  12. buildkit:
  13. name: Build ${{ matrix.profile }}-buildkit
  14. needs: test
  15. runs-on: ${{ matrix.os }}
  16. strategy:
  17. fail-fast: true
  18. matrix:
  19. include:
  20. - os: ubuntu-latest
  21. profile: linux
  22. - os: windows-latest
  23. profile: win
  24. - os: macos-latest
  25. profile: mac
  26. steps:
  27. - uses: actions/checkout@v2
  28. - uses: actions/setup-java@v1
  29. with:
  30. java-version: ${{ env.JAVA_VERSION }}
  31. - uses: actions/cache@v2
  32. with:
  33. path: ~/.m2/repository
  34. key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
  35. restore-keys: |
  36. ${{ runner.os }}-maven-
  37. - name: Ensure to use tagged version
  38. run: mvn versions:set -DnewVersion=${GITHUB_REF##*/} # use shell parameter expansion to strip of 'refs/tags'
  39. if: startsWith(github.ref, 'refs/tags/')
  40. - name: Build and Test
  41. run: mvn -B clean install jacoco:report -Pdependency-check,${{ matrix.profile }}
  42. - name: Patch buildkit
  43. run: |
  44. cp LICENSE.txt target
  45. cp dist/${{ matrix.profile }}/launcher* target
  46. cp target/cryptomator-*.jar target/mods
  47. - name: Upload ${{ matrix.profile }}-buildkit
  48. uses: actions/upload-artifact@v2
  49. with:
  50. name: ${{ matrix.profile }}-buildkit
  51. path: |
  52. target/libs
  53. target/mods
  54. target/LICENSE.txt
  55. target/${{ matrix.launcher }}
  56. if-no-files-found: error
  57. #
  58. # Release Metadata
  59. #
  60. metadata:
  61. name: Determine Version Metadata
  62. runs-on: ubuntu-latest
  63. needs: test
  64. outputs:
  65. versionStr: ${{ steps.versions.outputs.versionStr }}
  66. versionNum: ${{ steps.versions.outputs.versionNum }}
  67. revNum: ${{ steps.versions.outputs.revNum }}
  68. steps:
  69. - uses: actions/checkout@v2
  70. with:
  71. fetch-depth: 0
  72. - id: versions
  73. run: |
  74. if [[ $GITHUB_REF == refs/tags/* ]]; then
  75. echo "::set-output name=versionStr::${GITHUB_REF##*/}"
  76. echo "::set-output name=versionNum::${GITHUB_REF##*/}"
  77. else
  78. echo "::set-output name=versionStr::SNAPSHOT"
  79. echo "::set-output name=versionNum::99.0.0"
  80. fi
  81. echo "::set-output name=revNum::`git rev-list --count HEAD`"
  82. #
  83. # Application Directory
  84. #
  85. appdir:
  86. name: Create ${{ matrix.profile }}-appdir
  87. needs: [buildkit, metadata]
  88. runs-on: ${{ matrix.os }}
  89. strategy:
  90. fail-fast: true
  91. matrix:
  92. include:
  93. - os: ubuntu-latest
  94. profile: linux
  95. jpackageoptions: >
  96. --app-version "${{ needs.metadata.outputs.versionNum }}.${{ needs.metadata.outputs.revNum }}"
  97. --java-options "-Dfile.encoding=\"utf-8\""
  98. --java-options "-Dcryptomator.logDir=\"~/.local/share/Cryptomator/logs\""
  99. --java-options "-Dcryptomator.settingsPath=\"~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json\""
  100. --java-options "-Dcryptomator.ipcSocketPath=\"~/.config/Cryptomator/ipc.socket\""
  101. --java-options "-Dcryptomator.mountPointsDir=\"~/.local/share/Cryptomator/mnt\""
  102. --java-options "-Dcryptomator.showTrayIcon=false"
  103. --java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.metadata.outputs.revNum }}\""
  104. --resource-dir dist/linux/resources
  105. - os: windows-latest
  106. profile: win
  107. jpackageoptions: >
  108. --app-version "${{ needs.metadata.outputs.versionNum }}.${{ needs.metadata.outputs.revNum }}"
  109. --java-options "-Dfile.encoding=\"utf-8\""
  110. --java-options "-Dcryptomator.logDir=\"~/AppData/Roaming/Cryptomator\""
  111. --java-options "-Dcryptomator.settingsPath=\"~/AppData/Roaming/Cryptomator/settings.json\""
  112. --java-options "-Dcryptomator.ipcSocketPath=\"~/AppData/Roaming/Cryptomator/ipc.socket\""
  113. --java-options "-Dcryptomator.keychainPath=\"~/AppData/Roaming/Cryptomator/keychain.json\""
  114. --java-options "-Dcryptomator.mountPointsDir=\"~/Cryptomator\""
  115. --java-options "-Dcryptomator.showTrayIcon=true"
  116. --java-options "-Dcryptomator.buildNumber=\"msi-${{ needs.metadata.outputs.revNum }}\""
  117. --resource-dir dist/win/resources
  118. --icon dist/win/resources/Cryptomator.ico
  119. - os: macos-latest
  120. profile: mac
  121. jpackageoptions: >
  122. --app-version "${{ needs.metadata.outputs.versionNum }}"
  123. --java-options "-Dfile.encoding=\"utf-8\""
  124. --java-options "-Dcryptomator.logDir=\"~/Library/Logs/Cryptomator\""
  125. --java-options "-Dcryptomator.settingsPath=\"~/Library/Application Support/Cryptomator/settings.json\""
  126. --java-options "-Dcryptomator.ipcSocketPath=\"~/Library/Application Support/Cryptomator/ipc.socket\""
  127. --java-options "-Dcryptomator.showTrayIcon=true"
  128. --java-options "-Dcryptomator.buildNumber=\"dmg-${{ needs.metadata.outputs.revNum }}\""
  129. --mac-package-identifier org.cryptomator
  130. --resource-dir dist/mac/resources
  131. steps:
  132. - uses: actions/checkout@v2
  133. - uses: actions/setup-java@v1
  134. with:
  135. java-version: ${{ env.JAVA_VERSION }}
  136. - name: Download ${{ matrix.profile }}-buildkit
  137. uses: actions/download-artifact@v2
  138. with:
  139. name: ${{ matrix.profile }}-buildkit
  140. path: buildkit
  141. - name: Create Runtime Image
  142. run: >
  143. ${JAVA_HOME}/bin/jlink
  144. --verbose
  145. --output runtime
  146. --module-path "${JAVA_HOME}/jmods"
  147. --add-modules java.base,java.desktop,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility
  148. --no-header-files
  149. --no-man-pages
  150. --strip-debug
  151. --compress=1
  152. - name: Create App Directory
  153. run: >
  154. ${JAVA_HOME}/bin/jpackage
  155. --verbose
  156. --type app-image
  157. --runtime-image runtime
  158. --input buildkit/libs
  159. --module-path buildkit/mods
  160. --module org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator
  161. --dest appdir
  162. --name Cryptomator
  163. --vendor "Skymatic GmbH"
  164. --copyright "(C) 2016 - 2021 Skymatic GmbH"
  165. --java-options "-Xss5m"
  166. --java-options "-Xmx256m"
  167. ${{ matrix.jpackageoptions }}
  168. - name: Create appdir.tar
  169. run: tar -cvf appdir.tar appdir
  170. - name: Upload ${{ matrix.profile }}-appdir
  171. uses: actions/upload-artifact@v2
  172. with:
  173. name: ${{ matrix.profile }}-appdir
  174. path: appdir.tar
  175. if-no-files-found: error
  176. #
  177. # Linux Cryptomator.AppImage
  178. #
  179. linux-appimage:
  180. name: Build Cryptomator.AppImage
  181. runs-on: ubuntu-latest
  182. needs: [appdir, metadata]
  183. steps:
  184. - uses: actions/checkout@v2
  185. - name: Download linux-appdir
  186. uses: actions/download-artifact@v2
  187. with:
  188. name: linux-appdir
  189. - name: Untar appdir.tar
  190. run: |
  191. tar -xvf appdir.tar
  192. - name: Patch Cryptomator.AppDir
  193. run: |
  194. mv appdir/Cryptomator Cryptomator.AppDir
  195. cp -r dist/linux/appimage/resources/AppDir/* Cryptomator.AppDir/
  196. envsubst '${REVISION_NO}' < dist/linux/appimage/resources/AppDir/bin/cryptomator.sh > Cryptomator.AppDir/bin/cryptomator.sh
  197. ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg
  198. ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg
  199. ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon
  200. ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/Cryptomator.desktop
  201. ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
  202. env:
  203. REVISION_NO: ${{ needs.metadata.outputs.revNum }}
  204. - name: Extract libjffi.so # workaround for https://github.com/cryptomator/cryptomator-linux/issues/27
  205. run: |
  206. JFFI_NATIVE_JAR=`ls lib/app/ | grep -e 'jffi-[1-9]\.[0-9]\{1,2\}.[0-9]\{1,2\}-native.jar'`
  207. ${JAVA_HOME}/bin/jar -xf lib/app/${JFFI_NATIVE_JAR} /jni/x86_64-Linux/
  208. mv jni/x86_64-Linux/* lib/app/libjffi.so
  209. working-directory: Cryptomator.AppDir
  210. - name: Download AppImageKit
  211. run: |
  212. curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage -o appimagetool.AppImage
  213. chmod +x appimagetool.AppImage
  214. ./appimagetool.AppImage --appimage-extract
  215. - name: Prepare GPG-Agent for signing with key 615D449FE6E6A235
  216. run: |
  217. echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
  218. echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign Cryptomator.AppDir/AppRun
  219. env:
  220. GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
  221. GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
  222. - name: Build AppImage
  223. run: >
  224. ./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage
  225. -u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-x86_64.AppImage.zsync'
  226. --sign --sign-key=615D449FE6E6A235 --sign-args="--batch --pinentry-mode loopback"
  227. - name: Create Detached GPG Signature
  228. run: |
  229. gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage
  230. gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage.zsync
  231. - name: Upload AppImage
  232. uses: actions/upload-artifact@v2
  233. with:
  234. name: linux-appimage
  235. path: |
  236. cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage
  237. cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage.asc
  238. cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage.zsync
  239. cryptomator-${{ needs.metadata.outputs.versionStr }}-x86_64.AppImage.zsync.asc
  240. if-no-files-found: error
  241. #
  242. # macOS Cryptomator.app
  243. #
  244. mac-app:
  245. name: Build Cryptomator.app
  246. runs-on: macos-latest
  247. needs: [appdir, metadata]
  248. steps:
  249. - uses: actions/checkout@v2
  250. - name: Download mac-appdir
  251. uses: actions/download-artifact@v2
  252. with:
  253. name: mac-appdir
  254. - name: Untar appdir.tar
  255. run: tar -xvf appdir.tar
  256. - name: Patch Cryptomator.app
  257. run: |
  258. mv appdir/Cryptomator.app Cryptomator.app
  259. sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" Cryptomator.app/Contents/Info.plist
  260. sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" Cryptomator.app/Contents/Info.plist
  261. env:
  262. VERSION_NO: ${{ needs.metadata.outputs.versionNum }}
  263. REVISION_NO: ${{ needs.metadata.outputs.revNum }}
  264. - name: Install codesign certificate
  265. env:
  266. CODESIGN_P12_BASE64: ${{ secrets.MACOS_CODESIGN_P12_BASE64 }}
  267. CODESIGN_P12_PW: ${{ secrets.MACOS_CODESIGN_P12_PW }}
  268. CODESIGN_TMP_KEYCHAIN_PW: ${{ secrets.MACOS_CODESIGN_TMP_KEYCHAIN_PW }}
  269. run: |
  270. # create variables
  271. CERTIFICATE_PATH=$RUNNER_TEMP/codesign.p12
  272. KEYCHAIN_PATH=$RUNNER_TEMP/codesign.keychain-db
  273. # import certificate and provisioning profile from secrets
  274. echo -n "$CODESIGN_P12_BASE64" | base64 --decode --output $CERTIFICATE_PATH
  275. # create temporary keychain
  276. security create-keychain -p "$CODESIGN_TMP_KEYCHAIN_PW" $KEYCHAIN_PATH
  277. security set-keychain-settings -lut 900 $KEYCHAIN_PATH
  278. security unlock-keychain -p "$CODESIGN_TMP_KEYCHAIN_PW" $KEYCHAIN_PATH
  279. # import certificate to keychain
  280. security import $CERTIFICATE_PATH -P "$CODESIGN_P12_PW" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
  281. security list-keychain -d user -s $KEYCHAIN_PATH
  282. - name: Codesign
  283. env:
  284. CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
  285. run: |
  286. find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
  287. for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
  288. if [[ `unzip -l ${JAR_PATH} | grep '.dylib\|.jnilib'` ]]; then
  289. JAR_FILENAME=$(basename ${JAR_PATH})
  290. OUTPUT_PATH=${JAR_PATH%.*}
  291. echo "Codesigning libs in ${JAR_FILENAME}..."
  292. unzip -q ${JAR_PATH} -d ${OUTPUT_PATH}
  293. find ${OUTPUT_PATH} -name '*.dylib' -exec codesign -s ${CODESIGN_IDENTITY} {} \;
  294. find ${OUTPUT_PATH} -name '*.jnilib' -exec codesign -s ${CODESIGN_IDENTITY} {} \;
  295. rm ${JAR_PATH}
  296. pushd ${OUTPUT_PATH} > /dev/null
  297. zip -qr ../${JAR_FILENAME} *
  298. popd > /dev/null
  299. rm -r ${OUTPUT_PATH}
  300. fi
  301. done
  302. echo "Codesigning Cryptomator.app..."
  303. codesign --force --deep --entitlements dist/mac/Cryptomator.entitlements -o runtime -s ${CODESIGN_IDENTITY} Cryptomator.app
  304. - name: Clean up codesign certificate
  305. if: ${{ always() }}
  306. run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db
  307. - name: Create app.tar
  308. run: tar -cvf app.tar Cryptomator.app
  309. - name: Upload mac-app
  310. uses: actions/upload-artifact@v2
  311. with:
  312. name: mac-app
  313. path: app.tar
  314. if-no-files-found: error
  315. #
  316. # macOS Cryptomator.dmg
  317. #
  318. mac-dmg:
  319. name: Build Cryptomator.dmg
  320. runs-on: macos-11
  321. needs: [mac-app, metadata]
  322. steps:
  323. - uses: actions/checkout@v2
  324. - name: Download mac-appdir
  325. uses: actions/download-artifact@v2
  326. with:
  327. name: mac-app
  328. - name: Untar app.tar
  329. run: tar -xvf app.tar
  330. - name: Prepare .dmg contents
  331. run: |
  332. mkdir dmg
  333. mv Cryptomator.app dmg
  334. cp dist/mac/dmg/resources/macFUSE.webloc dmg
  335. ls -l dmg
  336. - name: Install create-dmg
  337. run: |
  338. brew install create-dmg
  339. create-dmg --help
  340. - name: Create .dmg
  341. run: >
  342. create-dmg
  343. --volname Cryptomator
  344. --volicon "dist/mac/dmg/resources/Cryptomator-Volume.icns"
  345. --background "dist/mac/dmg/resources/Cryptomator-background.tiff"
  346. --window-pos 400 100
  347. --window-size 640 694
  348. --icon-size 128
  349. --icon "Cryptomator.app" 128 245
  350. --hide-extension "Cryptomator.app"
  351. --icon "macFUSE.webloc" 320 501
  352. --hide-extension "macFUSE.webloc"
  353. --app-drop-link 512 245
  354. --eula "dist/mac/dmg/resources/license.rtf"
  355. --icon ".background" 128 758
  356. --icon ".fseventsd" 320 758
  357. --icon ".VolumeIcon.icns" 512 758
  358. Cryptomator-${VERSION_NO}.dmg dmg
  359. env:
  360. VERSION_NO: ${{ needs.metadata.outputs.versionNum }}
  361. - name: Install notarization credentials
  362. env:
  363. NOTARIZATION_KEYCHAIN_PROFILE: ${{ secrets.MACOS_NOTARIZATION_KEYCHAIN_PROFILE }}
  364. NOTARIZATION_APPLE_ID: ${{ secrets.MACOS_NOTARIZATION_APPLE_ID }}
  365. NOTARIZATION_PW: ${{ secrets.MACOS_NOTARIZATION_PW }}
  366. NOTARIZATION_TEAM_ID: ${{ secrets.MACOS_NOTARIZATION_TEAM_ID }}
  367. NOTARIZATION_TMP_KEYCHAIN_PW: ${{ secrets.MACOS_NOTARIZATION_TMP_KEYCHAIN_PW }}
  368. run: |
  369. # create temporary keychain
  370. KEYCHAIN_PATH=$RUNNER_TEMP/notarization.keychain-db
  371. security create-keychain -p "${NOTARIZATION_TMP_KEYCHAIN_PW}" ${KEYCHAIN_PATH}
  372. security set-keychain-settings -lut 900 ${KEYCHAIN_PATH}
  373. security unlock-keychain -p "${NOTARIZATION_TMP_KEYCHAIN_PW}" ${KEYCHAIN_PATH}
  374. # import credentials from secrets
  375. sudo xcode-select -s /Applications/Xcode_13.0.app
  376. xcrun notarytool store-credentials "${NOTARIZATION_KEYCHAIN_PROFILE}" --apple-id "${NOTARIZATION_APPLE_ID}" --password "${NOTARIZATION_PW}" --team-id "${NOTARIZATION_TEAM_ID}" --keychain "${KEYCHAIN_PATH}"
  377. - name: Notarize .dmg
  378. env:
  379. NOTARIZATION_KEYCHAIN_PROFILE: ${{ secrets.MACOS_NOTARIZATION_KEYCHAIN_PROFILE }}
  380. run: |
  381. KEYCHAIN_PATH=$RUNNER_TEMP/notarization.keychain-db
  382. sudo xcode-select -s /Applications/Xcode_13.0.app
  383. xcrun notarytool submit Cryptomator-*.dmg --keychain-profile "${NOTARIZATION_KEYCHAIN_PROFILE}" --keychain "${KEYCHAIN_PATH}" --wait
  384. xcrun stapler staple Cryptomator-*.dmg
  385. - name: Clean up notarization credentials
  386. if: ${{ always() }}
  387. run: security delete-keychain $RUNNER_TEMP/notarization.keychain-db
  388. - name: Upload mac-dmg
  389. uses: actions/upload-artifact@v2
  390. with:
  391. name: mac-dmg
  392. path: Cryptomator-*.dmg
  393. if-no-files-found: error
  394. #
  395. # MSI package
  396. #
  397. win-msi:
  398. name: Build Cryptomator.msi
  399. runs-on: windows-latest
  400. needs: [appdir, metadata]
  401. steps:
  402. - uses: actions/checkout@v2
  403. - name: Download win-appdir
  404. uses: actions/download-artifact@v2
  405. with:
  406. name: win-appdir
  407. - name: Untar appdir.tar
  408. run: tar -xvf appdir.tar
  409. - uses: actions/setup-java@v1
  410. with:
  411. java-version: ${{ env.JAVA_VERSION }}
  412. - name: Patch Application Directory
  413. run: |
  414. cp dist/win/contrib/* appdir/Cryptomator
  415. - name: Fix permissions
  416. run: attrib -r appdir/Cryptomator/Cryptomator.exe
  417. shell: pwsh
  418. - name: Codesign
  419. uses: skymatic/code-sign-action@v1
  420. with:
  421. certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
  422. password: ${{ secrets.WIN_CODESIGN_P12_PW }}
  423. certificatesha1: FF52240075AD7D14AF25629FDF69635357C7D14B
  424. description: Cryptomator
  425. timestampUrl: 'http://timestamp.digicert.com'
  426. folder: appdir/Cryptomator
  427. recursive: true
  428. - name: Create MSI
  429. run: >
  430. ${JAVA_HOME}/bin/jpackage
  431. --verbose
  432. --type msi
  433. --win-upgrade-uuid bda45523-42b1-4cae-9354-a45475ed4775
  434. --app-image appdir/Cryptomator
  435. --dest installer
  436. --name Cryptomator
  437. --vendor "Skymatic GmbH"
  438. --copyright "(C) 2016 - 2021 Skymatic GmbH"
  439. --app-version "${{ needs.metadata.outputs.versionNum }}"
  440. --win-menu
  441. --win-dir-chooser
  442. --resource-dir dist/win/resources
  443. --license-file dist/win/resources/license.rtf
  444. env:
  445. JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources # requires abs path, used in resources/main.wxs
  446. - name: Codesign MSI
  447. uses: skymatic/code-sign-action@v1
  448. with:
  449. certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
  450. password: ${{ secrets.WIN_CODESIGN_P12_PW }}
  451. certificatesha1: FF52240075AD7D14AF25629FDF69635357C7D14B
  452. description: Cryptomator Installer
  453. timestampUrl: 'http://timestamp.digicert.com'
  454. folder: installer
  455. - name: Upload win-msi
  456. uses: actions/upload-artifact@v2
  457. with:
  458. name: win-msi
  459. path: installer/*.msi
  460. if-no-files-found: error
  461. release:
  462. name: Draft a release on Github
  463. runs-on: ubuntu-latest
  464. needs: [linux-appimage,mac-dmg,win-msi]
  465. if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cryptomator/cryptomator'
  466. steps:
  467. - uses: actions/checkout@v2
  468. - name: Create tarball
  469. run: git archive --prefix="cryptomator-${{ github.ref }}/" -o "cryptomator-${{ github.ref }}.tar.gz" ${{ github.ref }}
  470. - name: Sign tarball with key 615D449FE6E6A235
  471. run: |
  472. echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
  473. echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a "cryptomator-${{ github.ref }}.tar.gz"
  474. env:
  475. GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
  476. GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
  477. - name: Download linux appimage
  478. uses: actions/download-artifact@v2
  479. with:
  480. name: linux-appimage
  481. - name: Download macOS dmg
  482. uses: actions/download-artifact@v2
  483. with:
  484. name: mac-dmg
  485. - name: Download Windows msi
  486. uses: actions/download-artifact@v2
  487. with:
  488. name: win-msi
  489. - name: Create release draft
  490. uses: softprops/action-gh-release@v1
  491. with:
  492. draft: true
  493. fail_on_unmatched_files: true
  494. files: |
  495. *.appimage
  496. *.zsync
  497. *.asc
  498. *.dmg
  499. *.msi
  500. body: |
  501. :construction: Work in Progress
  502. ## What's new
  503. ## Bugfixes
  504. ## Misc
  505. ---
  506. :scroll: A complete list of closed issues is available [here](LINK)