Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Release

on:
push:
branches: [main]

concurrency:
group: release
cancel-in-progress: true

jobs:
build-and-release:
name: Build and Release
runs-on: macos-latest
environment: main
permissions:
contents: write
steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
src-tauri/target
key: ${{ runner.os }}-cargo-release-${{ hashFiles('src-tauri/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-release-

- name: Install dependencies
run: npm ci

- name: Build Tauri app
run: npm run tauri build

- name: Get version
id: version
run: echo "version=$(jq -r .version src-tauri/tauri.conf.json)" >> "$GITHUB_OUTPUT"

- name: Check if release already exists
id: check
run: |
if gh release view "v${{ steps.version.outputs.version }}" > /dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
env:
GH_TOKEN: ${{ github.token }}

- name: Get DMG path
if: steps.check.outputs.exists == 'false'
id: dmg
run: |
DMG_PATH=$(find src-tauri/target/release/bundle/dmg -name "*.dmg" | head -1)
DMG_NAME=$(basename "$DMG_PATH")
echo "path=$DMG_PATH" >> "$GITHUB_OUTPUT"
echo "name=$DMG_NAME" >> "$GITHUB_OUTPUT"

- name: Create GitHub Release
if: steps.check.outputs.exists == 'false'
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.version }}
name: v${{ steps.version.outputs.version }}
files: ${{ steps.dmg.outputs.path }}
generate_release_notes: true
make_latest: true

- name: Update Homebrew Tap
if: steps.check.outputs.exists == 'false'
env:
HOMEBREW_TAP_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
run: |
VERSION="${{ steps.version.outputs.version }}"
DMG_NAME="${{ steps.dmg.outputs.name }}"
DMG_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/${DMG_NAME}"
SHA256=$(shasum -a 256 "${{ steps.dmg.outputs.path }}" | awk '{print $1}')

git clone "https://x-access-token:${HOMEBREW_TAP_TOKEN}@github.com/ryunosuke121/homebrew-tap.git" tap
cd tap

mkdir -p Casks
cat > Casks/hyut.rb <<FORMULA
cask "hyut" do
version "${VERSION}"
sha256 "${SHA256}"

url "${DMG_URL}"
name "hyut"
desc "Quick memo app for macOS"
homepage "https://github.com/ryunosuke121/hyut"

app "hyut.app"
end
FORMULA

# Remove leading whitespace from heredoc
sed -i '' 's/^ //' Casks/hyut.rb

git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Casks/hyut.rb
git commit -m "Update hyut to v${VERSION}"
git push