209 lines
6.1 KiB
YAML
209 lines
6.1 KiB
YAML
name: Pilipala Beta
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
push:
|
||
branches:
|
||
- "never"
|
||
paths-ignore:
|
||
- "**.md"
|
||
- "**.txt"
|
||
- ".github/**"
|
||
- ".idea/**"
|
||
- "!.github/workflows/**"
|
||
|
||
jobs:
|
||
update_version:
|
||
name: Read and update version
|
||
runs-on: ubuntu-latest
|
||
|
||
outputs:
|
||
# 定义输出变量 version,以便在其他job中引用
|
||
new_version: ${{ steps.version.outputs.new_version }}
|
||
last_commit: ${{ steps.get-last-commit.outputs.last_commit }}
|
||
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: ${{ github.ref_name }}
|
||
fetch-depth: 0
|
||
|
||
- name: 获取first parent commit次数
|
||
id: get-first-parent-commit-count
|
||
run: |
|
||
version=$(yq e .version pubspec.yaml | cut -d "+" -f 1)
|
||
recent_release_tag=$(git tag -l | grep $version | egrep -v "[-|+]" || true)
|
||
if [[ "x$recent_release_tag" == "x" ]]; then
|
||
echo "当前版本tag不存在,请手动生成tag."
|
||
exit 1
|
||
fi
|
||
git log --oneline --first-parent $recent_release_tag..HEAD
|
||
first_parent_commit_count=$(git rev-list --first-parent --count $recent_release_tag..HEAD)
|
||
echo "count=$first_parent_commit_count" >> $GITHUB_OUTPUT
|
||
|
||
- name: 获取最后一次提交
|
||
id: get-last-commit
|
||
run: |
|
||
last_commit=$(git log -1 --pretty="%h %s" --first-parent)
|
||
echo "last_commit=$last_commit" >> $GITHUB_OUTPUT
|
||
|
||
- name: 更新版本号
|
||
id: version
|
||
run: |
|
||
# 读取版本号
|
||
VERSION=$(yq e .version pubspec.yaml | cut -d "+" -f 1)
|
||
|
||
# 获取GitHub Actions的run_number
|
||
#RUN_NUMBER=${{ github.run_number }}
|
||
|
||
# 构建新版本号
|
||
NEW_VERSION=$VERSION-beta.${{ steps.get-first-parent-commit-count.outputs.count }}
|
||
|
||
# 输出新版本号
|
||
echo "New version: $NEW_VERSION"
|
||
|
||
# 设置新版本号为输出变量
|
||
echo "new_version=$NEW_VERSION" >>$GITHUB_OUTPUT
|
||
|
||
android:
|
||
name: Build CI (Android)
|
||
needs: update_version
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: ${{ github.ref_name }}
|
||
|
||
- name: 构建Java环境
|
||
uses: actions/setup-java@v3
|
||
with:
|
||
distribution: "zulu"
|
||
java-version: "17"
|
||
token: ${{secrets.GIT_TOKEN}}
|
||
|
||
- name: 检查缓存
|
||
uses: actions/cache@v2
|
||
id: cache-flutter
|
||
with:
|
||
path: /root/flutter-sdk
|
||
key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
|
||
|
||
- name: 安装Flutter
|
||
if: steps.cache-flutter.outputs.cache-hit != 'true'
|
||
uses: subosito/flutter-action@v2
|
||
with:
|
||
flutter-version: 3.19.6
|
||
channel: any
|
||
|
||
- name: 下载项目依赖
|
||
run: flutter pub get
|
||
|
||
- name: 解码生成 jks
|
||
run: echo $KEYSTORE_BASE64 | base64 -di > android/app/vvex.jks
|
||
env:
|
||
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
|
||
|
||
- name: 更新版本号
|
||
id: version
|
||
run: |
|
||
# 更新pubspec.yaml文件中的版本号
|
||
sed -i "s/version: .*+/version: ${{ needs.update_version.outputs.new_version }}+/g" pubspec.yaml
|
||
|
||
- name: flutter build apk
|
||
run: flutter build apk --release --split-per-abi
|
||
env:
|
||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD}}
|
||
|
||
- name: 重命名应用
|
||
run: |
|
||
for file in build/app/outputs/flutter-apk/app-*.apk; do
|
||
if [[ $file =~ app-(.?*)release.apk ]]; then
|
||
new_file_name="build/app/outputs/flutter-apk/Pili-${BASH_REMATCH[1]}v${{ needs.update_version.outputs.new_version }}.apk"
|
||
mv "$file" "$new_file_name"
|
||
fi
|
||
done
|
||
|
||
- name: 上传
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
name: Pilipala-Beta
|
||
path: |
|
||
build/app/outputs/flutter-apk/Pili-*.apk
|
||
|
||
iOS:
|
||
name: Build CI (iOS)
|
||
needs: update_version
|
||
runs-on: macos-latest
|
||
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: ${{ github.ref_name }}
|
||
|
||
- name: 安装Flutter
|
||
if: steps.cache-flutter.outputs.cache-hit != 'true'
|
||
uses: subosito/flutter-action@v2.10.0
|
||
with:
|
||
cache: true
|
||
flutter-version: 3.16.5
|
||
|
||
- name: 更新版本号
|
||
id: version
|
||
run: |
|
||
# 更新pubspec.yaml文件中的版本号
|
||
sed -i "" "s/version: .*+/version: ${{ needs.update_version.outputs.new_version }}+/g" pubspec.yaml
|
||
|
||
- name: flutter build ipa
|
||
run: |
|
||
flutter build ios --release --no-codesign
|
||
ln -sf ./build/ios/iphoneos Payload
|
||
zip -r9 app.ipa Payload/runner.app
|
||
|
||
- name: 重命名应用
|
||
run: |
|
||
DATE=${{ steps.date.outputs.date }}
|
||
for file in app.ipa; do
|
||
new_file_name="build/Pili-v${{ needs.update_version.outputs.new_version }}.ipa"
|
||
mv "$file" "$new_file_name"
|
||
done
|
||
|
||
- name: 上传
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
if-no-files-found: error
|
||
name: Pilipala-Beta
|
||
path: |
|
||
build/Pili-*.ipa
|
||
|
||
upload:
|
||
runs-on: ubuntu-latest
|
||
|
||
needs:
|
||
- update_version
|
||
- android
|
||
- iOS
|
||
steps:
|
||
- uses: actions/download-artifact@v3
|
||
with:
|
||
name: Pilipala-Beta
|
||
path: ./Pilipala-Beta
|
||
|
||
- name: 发送到Telegram频道
|
||
uses: xireiki/channel-post@v1.0.7
|
||
with:
|
||
bot_token: ${{ secrets.BOT_TOKEN }}
|
||
chat_id: ${{ secrets.CHAT_ID }}
|
||
large_file: true
|
||
api_id: ${{ secrets.TELEGRAM_API_ID }}
|
||
api_hash: ${{ secrets.TELEGRAM_API_HASH }}
|
||
method: sendFile
|
||
path: Pilipala-Beta/*
|
||
parse_mode: Markdown
|
||
context: "*Beta版本: v${{ needs.update_version.outputs.new_version }}*\n更新内容: [${{ needs.update_version.outputs.last_commit }}]"
|