Skip to content

Release

Release #4

Workflow file for this run

name: Release
on:
workflow_dispatch:
jobs:
release:
runs-on: macos-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Cache Rust
uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri
- name: Install dependencies
run: npm install
- name: Read version
id: version
run: |
VERSION=$(grep '"version"' src-tauri/tauri.conf.json | head -1 | sed 's/.*"version": "\(.*\)".*/\1/')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Check release doesn't already exist
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh release view "v${{ steps.version.outputs.version }}" &>/dev/null; then
echo "::error::Release v${{ steps.version.outputs.version }} already exists"
exit 1
fi
- name: Generate changelog
id: changelog
run: |
LAST_VERSION_COMMIT=$(git log --oneline --grep="bump version to" | head -2 | tail -1 | cut -d' ' -f1)
CHANGELOG=""
if [ -n "$LAST_VERSION_COMMIT" ]; then
while IFS= read -r line; do
MSG=$(echo "$line" | cut -d' ' -f2-)
if [[ "$MSG" == feat:* ]]; then
CHANGELOG="${CHANGELOG}- ${MSG#feat: }"$'\n'
elif [[ "$MSG" == fix:* ]]; then
CHANGELOG="${CHANGELOG}- ${MSG#fix: }"$'\n'
elif [[ "$MSG" != docs:* ]] && [[ "$MSG" != chore:* ]]; then
CHANGELOG="${CHANGELOG}- ${MSG}"$'\n'
fi
done < <(git log ${LAST_VERSION_COMMIT}..HEAD --oneline --no-merges | grep -v "chore: bump version")
fi
[ -z "$CHANGELOG" ] && CHANGELOG="- Initial release"
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "body<<$EOF" >> "$GITHUB_OUTPUT"
echo "## What's Changed" >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "$CHANGELOG" >> "$GITHUB_OUTPUT"
echo "### Download" >> "$GITHUB_OUTPUT"
echo "- **macOS (Apple Silicon)**: Download the \`.dmg\` file below" >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "Signed and notarized for macOS." >> "$GITHUB_OUTPUT"
echo "$EOF" >> "$GITHUB_OUTPUT"
- name: Build, sign, notarize & release
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
tagName: v${{ steps.version.outputs.version }}
releaseName: aTerm v${{ steps.version.outputs.version }}
releaseBody: ${{ steps.changelog.outputs.body }}
args: --target aarch64-apple-darwin