99permissions :
1010 contents : write
1111
12+ concurrency :
13+ group : burette-release
14+ cancel-in-progress : false
15+
1216jobs :
1317 release :
1418 name : Build and Publish Release
6064 echo "::warning::HOMEBREW_TAP_TOKEN is not set; skipping the Homebrew cask update. The app release is still built and published."
6165 fi
6266
67+ - name : Validate Sparkle credentials
68+ env :
69+ BURETTE_SPARKLE_PUBLIC_KEY : ${{ vars.BURETTE_SPARKLE_PUBLIC_KEY }}
70+ BURETTE_SPARKLE_PRIVATE_KEY : ${{ secrets.BURETTE_SPARKLE_PRIVATE_KEY }}
71+ run : |
72+ if [[ -z "$BURETTE_SPARKLE_PUBLIC_KEY" || -z "$BURETTE_SPARKLE_PRIVATE_KEY" ]]; then
73+ echo '::error::Native updates require BURETTE_SPARKLE_PUBLIC_KEY (variable) and BURETTE_SPARKLE_PRIVATE_KEY (secret).'
74+ exit 1
75+ fi
76+
6377 - name : Resolve release capabilities
6478 id : capabilities
6579 env :
@@ -110,6 +124,7 @@ jobs:
110124 - name : Build app
111125 env :
112126 BURETTE_BUILD_MODE : release
127+ BURETTE_SPARKLE_PUBLIC_KEY : ${{ vars.BURETTE_SPARKLE_PUBLIC_KEY }}
113128 BURETTE_RELEASE_ALLOW_ADHOC : ${{ steps.capabilities.outputs.allow_adhoc == 'true' && '1' || '0' }}
114129 BURETTE_CODESIGN_IDENTITY : ${{ secrets.BURETTE_CODESIGN_IDENTITY }}
115130 BURETTE_DEVELOPMENT_TEAM : ${{ secrets.APPLE_TEAM_ID }}
@@ -139,6 +154,7 @@ jobs:
139154
140155 - name : Package app
141156 env :
157+ BURETTE_SPARKLE_PRIVATE_KEY : ${{ secrets.BURETTE_SPARKLE_PRIVATE_KEY }}
142158 BURETTE_UPDATE_MANIFEST_PRIVATE_KEY_PEM : ${{ secrets.BURETTE_UPDATE_MANIFEST_PRIVATE_KEY_PEM }}
143159 BURETTE_UPDATE_MANIFEST_PUBLIC_KEY_HEX : ${{ secrets.BURETTE_UPDATE_MANIFEST_PUBLIC_KEY_HEX }}
144160 run : |
@@ -152,6 +168,9 @@ jobs:
152168 if [[ -n "${BURETTE_UPDATE_MANIFEST_PRIVATE_KEY_PEM:-}" && -n "${BURETTE_UPDATE_MANIFEST_PUBLIC_KEY_HEX:-}" ]]; then
153169 bun scripts/sign-update-manifest.mjs "Burette-${{ steps.version.outputs.version }}.zip" .
154170 fi
171+ if [[ -n "${BURETTE_SPARKLE_PRIVATE_KEY:-}" ]]; then
172+ python3 scripts/sparkle-appcast.py "Burette-${{ steps.version.outputs.version }}.zip" build/Burette.app build/sparkle/release-appcast.xml
173+ fi
155174
156175 - name : Create GitHub release
157176 env :
@@ -184,6 +203,13 @@ jobs:
184203 --title "Burette ${{ steps.version.outputs.version }}" \
185204 --generate-notes
186205
206+ - name : Publish Sparkle feed
207+ if : vars.BURETTE_SPARKLE_PUBLIC_KEY != ''
208+ env :
209+ GH_TOKEN : ${{ github.token }}
210+ BURETTE_SPARKLE_PRIVATE_KEY : ${{ secrets.BURETTE_SPARKLE_PRIVATE_KEY }}
211+ run : ./scripts/publish-sparkle-feed.sh '${{ steps.version.outputs.version }}'
212+
187213 - name : Checkout Homebrew tap
188214 if : steps.version.outputs.prerelease != 'true' && steps.capabilities.outputs.homebrew == 'true'
189215 uses : actions/checkout@v7
@@ -212,6 +238,7 @@ jobs:
212238 exit 1
213239 fi
214240 ruby -0pi -e "gsub(/version \"[^\"]+\"/, \"version \\\"${version}\\\"\"); gsub(/sha256 \"[a-f0-9]{64}\"/, \"sha256 \\\"${sha256}\\\"\"); gsub(/depends_on macos: \">= :monterey\"/, \"depends_on macos: :monterey\")" "$cask"
241+ ruby -0pi -e 'sub(/^ auto_updates .*\n/, ""); sub(/^ depends_on arch: .*\n/, ""); sub(/^ depends_on macos:/, " auto_updates true\n depends_on arch: :arm64\n depends_on macos:")' "$cask"
215242 git diff -- "$cask"
216243 git diff --quiet -- "$cask" && {
217244 echo "Homebrew cask already points to ${version}."
0 commit comments