249 lines
7.6 KiB
YAML
249 lines
7.6 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
env:
|
|
IS_STABLE: ${{ !contains(github.ref, '-') }}
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- platform: android
|
|
os: ubuntu-latest
|
|
- platform: windows
|
|
os: Windows-2022
|
|
arch: amd64
|
|
- platform: linux
|
|
os: ubuntu-22.04
|
|
arch: amd64
|
|
- platform: macos
|
|
os: macos-15-intel
|
|
arch: amd64
|
|
- platform: macos
|
|
os: macos-latest
|
|
arch: arm64
|
|
# - platform: windows
|
|
# os: windows-11-arm
|
|
# arch: arm64
|
|
- platform: linux
|
|
os: ubuntu-24.04-arm
|
|
arch: arm64
|
|
|
|
steps:
|
|
- name: Setup rust
|
|
if: startsWith(matrix.os, 'windows-11-arm')
|
|
run: |
|
|
Invoke-WebRequest -Uri "https://win.rustup.rs/aarch64" -OutFile rustup-init.exe
|
|
.\rustup-init.exe -y --default-toolchain stable
|
|
$cargoPath = "$env:USERPROFILE\.cargo\bin"
|
|
Add-Content $env:GITHUB_PATH $cargoPath
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup Android Signing
|
|
if: startsWith(matrix.platform,'android')
|
|
run: |
|
|
echo "${{ secrets.KEYSTORE }}" | base64 --decode > android/app/keystore.jks
|
|
echo "${{ secrets.SERVICE_JSON }}" | base64 --decode > android/app/google-services.json
|
|
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/local.properties
|
|
echo "storePassword=${{ secrets.STORE_PASSWORD }}" >> android/local.properties
|
|
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/local.properties
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.24.0'
|
|
cache-dependency-path: |
|
|
core/go.sum
|
|
|
|
- name: Setup Flutter
|
|
if: ${{ !(startsWith(matrix.os, 'windows-11-arm') || startsWith(matrix.os, 'ubuntu-24.04-arm')) }}
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: stable
|
|
flutter-version: 3.35.7
|
|
cache: true
|
|
- name: Setup Flutter With Other
|
|
if: startsWith(matrix.os, 'windows-11-arm') || startsWith(matrix.os, 'ubuntu-24.04-arm')
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: master
|
|
flutter-version: 3.35.7
|
|
cache: true
|
|
|
|
- name: Get Flutter Dependency
|
|
run: |
|
|
flutter --version
|
|
flutter pub get
|
|
|
|
- name: Setup
|
|
run: dart setup.dart ${{ matrix.platform }} ${{ matrix.arch && format('--arch {0}', matrix.arch) }} ${{ env.IS_STABLE == 'true' && '--env stable' || '' }}
|
|
|
|
- name: Upload
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: artifact-${{ matrix.platform }}${{ matrix.arch && format('-{0}', matrix.arch) }}
|
|
path: ./dist
|
|
overwrite: true
|
|
|
|
changelog:
|
|
runs-on: ubuntu-latest
|
|
needs: [ build ]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
with:
|
|
fetch-depth: 0
|
|
ref: refs/heads/main
|
|
- name: Generate
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
run: |
|
|
last_ver=$(grep -m1 '^## ' CHANGELOG.md 2>/dev/null | sed 's/^## //')
|
|
|
|
tags=($(git tag --merged HEAD --sort=-creatordate))
|
|
|
|
temp="NEW_CHANGELOG.md" > "$temp"
|
|
|
|
for i in "${!tags[@]}"; do
|
|
curr="${tags[i]}"
|
|
[[ "$curr" == "$last_ver" ]] && break
|
|
|
|
prev="${tags[i+1]}"
|
|
range="${prev:+$prev..}$curr"
|
|
|
|
echo -e "## $curr\n" >> "$temp"
|
|
git log --no-merges --pretty=format:"%B" "$range" | \
|
|
awk '!/Update changelog/ && NF {print "- " $0 "\n"}' >> "$temp"
|
|
done
|
|
[ -f CHANGELOG.md ] && cat CHANGELOG.md >> "$temp"
|
|
|
|
mv "$temp" CHANGELOG.md
|
|
|
|
- name: Commit
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
run: |
|
|
git add CHANGELOG.md
|
|
if ! git diff --cached --quiet; then
|
|
echo "Commit pushing"
|
|
git config --local user.email "chen08209@gmail.com"
|
|
git config --local user.name "chen08209"
|
|
git commit -m "Update changelog"
|
|
git push
|
|
if [ $? -eq 0 ]; then
|
|
echo "Push succeeded"
|
|
else
|
|
echo "Push failed"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
upload:
|
|
permissions: write-all
|
|
needs: [ build ]
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
telegram-bot-api:
|
|
image: aiogram/telegram-bot-api:latest
|
|
env:
|
|
TELEGRAM_API_ID: ${{ secrets.TELEGRAM_API_ID }}
|
|
TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_API_HASH }}
|
|
ports:
|
|
- 8081:8081
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./dist/
|
|
pattern: artifact-*
|
|
merge-multiple: true
|
|
|
|
- name: Generate release.md
|
|
run: |
|
|
tags=($(git tag --merged HEAD --sort=-creatordate))
|
|
preTag=$(curl -s "https://api.github.com/repos/chen08209/FlClash/releases/latest" | \
|
|
sed -nE 's/.*"tag_name": "([^"]+)".*/\1/p')
|
|
|
|
[ -z "$preTag" ] && preTag=""
|
|
|
|
out="release.md" > "$out"
|
|
|
|
for i in "${!tags[@]}"; do
|
|
curr="${tags[i]}"
|
|
[[ "$curr" == "$preTag" ]] && break
|
|
|
|
prev="${tags[i+1]}"
|
|
range="${prev:+$prev..}$curr"
|
|
|
|
git log --no-merges --pretty=format:"%B" "$range" | \
|
|
awk '!/Update changelog/ && NF {print "- " $0 "\n"}' >> "$out"
|
|
done
|
|
- name: Push to telegram
|
|
env:
|
|
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
|
TAG: ${{ github.ref_name }}
|
|
RUN_ID: ${{ github.run_id }}
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install requests
|
|
python release_telegram.py
|
|
|
|
- name: Patch release.md
|
|
run: |
|
|
version=$(echo "${{ github.ref_name }}" | sed 's/^v//')
|
|
sed "s|VERSION|$version|g" ./.github/release_template.md >> release.md
|
|
|
|
- name: Generate sha256
|
|
if: env.IS_STABLE == 'true'
|
|
run: |
|
|
cd ./dist
|
|
for file in $(find . -type f -not -name "*.sha256"); do
|
|
sha256sum "$file" > "${file}.sha256"
|
|
done
|
|
|
|
- name: Release
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: ./dist/*
|
|
body_path: './release.md'
|
|
|
|
- name: Create Fdroid Source Dir
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
run: |
|
|
mkdir -p ./tmp
|
|
cp ./dist/*android-arm64-v8a* ./tmp/ || true
|
|
echo "Files copied successfully"
|
|
|
|
- name: Push to fdroid repo
|
|
if: ${{ env.IS_STABLE == 'true' }}
|
|
uses: cpina/github-action-push-to-another-repository@v1.7.2
|
|
env:
|
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
|
with:
|
|
source-directory: ./tmp/
|
|
destination-github-username: chen08209
|
|
destination-repository-name: FlClash-fdroid-repo
|
|
user-name: 'github-actions[bot]'
|
|
user-email: 'github-actions[bot]@users.noreply.github.com'
|
|
target-branch: main
|
|
commit-message: Update from ${{ github.ref_name }}
|
|
target-directory: /tmp/
|
|
|