## New
- Option to blacklist libraries from Latest/Popular Feeds & Suggestions - Option to customize Chapter Titles & Scanlator fields - Option to show the release date instead of added date for chapters/volumes (close #37) - Added `formats` for GroupTags - Action to create releases ## Fixes/Enhancements - Pagination bug (closes #33, thanks to @Freezy) - Optimized API calls - Better cache and cleanup - Better cleaned chapter/volumes titles - Fixed Chapter Parsing Logic - Refactored duplicated codes into multiple helpers - Fixed action to update version badge - More feedbacks on errors & graceful degradation for partial failures - Include Suwayomi install & screenshots in README (closes #41)
This commit is contained in:
148
.github/workflows/create_release.yml
vendored
Normal file
148
.github/workflows/create_release.yml
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
name: Create Release on Merge
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: read
|
||||
|
||||
steps:
|
||||
- name: Checkout repo branch
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: repo
|
||||
fetch-depth: 0
|
||||
|
||||
# Get the merged PR info (only if not triggered manually)
|
||||
- name: Get PR information
|
||||
id: pr_info
|
||||
if: github.event_name == 'push'
|
||||
run: |
|
||||
# Check out the master branch to get the PR info
|
||||
git fetch origin master:master
|
||||
git checkout master
|
||||
|
||||
# Find the merge commit that triggered this workflow
|
||||
MERGE_COMMIT=$(git rev-parse HEAD)
|
||||
|
||||
# Check if this is a merge commit
|
||||
if git show --summary $MERGE_COMMIT | grep -q "Merge pull request"; then
|
||||
# Extract PR number from merge commit message
|
||||
PR_NUMBER=$(git log -1 --pretty=%B | grep -oP 'Merge pull request #\K\d+')
|
||||
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
|
||||
|
||||
# Get PR details
|
||||
PR_JSON=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
https://api.github.com/repos/${{ github.repository }}/pulls/$PR_NUMBER)
|
||||
|
||||
PR_TITLE=$(echo "$PR_JSON" | jq -r .title)
|
||||
echo "pr_title=$PR_TITLE" >> $GITHUB_OUTPUT
|
||||
|
||||
PR_AUTHOR=$(echo "$PR_JSON" | jq -r .user.login)
|
||||
echo "pr_author=$PR_AUTHOR" >> $GITHUB_OUTPUT
|
||||
|
||||
# Check if first-time contributor
|
||||
CONTRIBUTOR_JSON=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
https://api.github.com/repos/${{ github.repository }}/contributors/$PR_AUTHOR)
|
||||
CONTRIBUTIONS=$(echo "$CONTRIBUTOR_JSON" | jq -r .contributions)
|
||||
|
||||
if [ "$CONTRIBUTIONS" = "1" ]; then
|
||||
echo "is_first_contributor=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
# Get PR body
|
||||
PR_BODY=$(echo "$PR_JSON" | jq -r .body)
|
||||
echo "pr_body=$PR_BODY" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find the Kavita APK and extract version
|
||||
- name: Find APK and extract version
|
||||
id: apk_info
|
||||
run: |
|
||||
# Find the Kavita APK in the apk folder
|
||||
APK_PATH=$(find ./apk -name "tachiyomi-all.kavita-*.apk" -type f | head -n 1)
|
||||
|
||||
if [ -z "$APK_PATH" ]; then
|
||||
echo "No Kavita APK found in ./apk folder!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "apk_path=$APK_PATH" >> $GITHUB_OUTPUT
|
||||
|
||||
# Extract version from filename (tachiyomi-all.kavita-v1.4.21.apk -> v1.4.21)
|
||||
APK_FILENAME=$(basename "$APK_PATH")
|
||||
VERSION=$(echo "$APK_FILENAME" | grep -oP 'v\d+\.\d+\.\d+')
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "Could not extract version from filename: $APK_FILENAME"
|
||||
VERSION="v$(date +%Y%m%d-%H%M%S)"
|
||||
fi
|
||||
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "apk_name=$APK_FILENAME" >> $GITHUB_OUTPUT
|
||||
|
||||
echo "Found APK: $APK_PATH"
|
||||
echo "Extracted version: $VERSION"
|
||||
|
||||
# Get commit messages since last tag
|
||||
- name: Get changelog
|
||||
id: changelog
|
||||
run: |
|
||||
# Switch to master branch to get git history
|
||||
git checkout master
|
||||
|
||||
# Get the last tag
|
||||
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
||||
|
||||
if [ -n "$LAST_TAG" ]; then
|
||||
COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"- %s (%h)")
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s (%h)" -n 20)
|
||||
fi
|
||||
|
||||
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
# Create the release (on the repo branch)
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
name: Release ${{ steps.apk_info.outputs.version }}
|
||||
tag_name: ${{ steps.apk_info.outputs.version }}
|
||||
target_commitish: repo
|
||||
body: |
|
||||
## 🚀 Release ${{ steps.apk_info.outputs.version }}
|
||||
|
||||
### 📝 Pull Request
|
||||
${{ steps.pr_info.outputs.pr_number && format('- Pull Request #%s by @%s', steps.pr_info.outputs.pr_number, steps.pr_info.outputs.pr_author) || 'Manual release' }}
|
||||
${{ steps.pr_info.outputs.pr_title && format('- Title: %s', steps.pr_info.outputs.pr_title) || '' }}
|
||||
${{ steps.pr_info.outputs.is_first_contributor == 'true' && format('### 🎉 Welcome @%s on their first contribution!', steps.pr_info.outputs.pr_author) || '' }}
|
||||
|
||||
${{ steps.pr_info.outputs.pr_body && format('### 📋 Description:\n%s', steps.pr_info.outputs.pr_body) || '' }}
|
||||
|
||||
### 📦 Changes since last release:
|
||||
${{ steps.changelog.outputs.changelog }}
|
||||
|
||||
---
|
||||
🤖 *This release was automatically created*
|
||||
files: ${{ steps.apk_info.outputs.apk_path }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Notify on failure
|
||||
if: failure()
|
||||
run: |
|
||||
echo "Release creation failed. Check the logs for details."
|
||||
Reference in New Issue
Block a user