Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat: 配置github action实现多平台自动打包发布 #52

Merged
merged 1 commit into from
Dec 12, 2024
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
223 changes: 223 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
name: "publish"

on:
push:
tags:
- "v*"

env:
REPO_NAME: bilibili-manga-watermark-remover

jobs:
get-version:
runs-on: ubuntu-latest
outputs:
VERSION: ${{ steps.get_version.outputs.VERSION }}
steps:
- uses: actions/checkout@v4

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

windows-build:
needs: get-version
env:
VERSION: ${{ needs.get-version.outputs.VERSION }}
outputs:
VERSION: ${{ env.VERSION }}
runs-on: windows-latest
steps:
- uses: actions/checkout@v4

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: lts/*

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

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Install frontend dependencies
run: pnpm install

- name: Build tauri app
uses: tauri-apps/tauri-action@v0

- name: Create artifacts directory
run: mkdir -p artifacts

- name: Copy nsis to release assets
run: cp src-tauri/target/release/bundle/nsis/${{ env.REPO_NAME }}_${{ env.VERSION }}_x64-setup.exe artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_windows_x64.exe

- name: Zip portable to release assets
run: |
cd src-tauri/target/release
7z a -tzip ../../../artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_windows_x64_portable.zip ${{ env.REPO_NAME }}.exe

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: windows-assets
path: artifacts/*

linux-build:
needs: get-version
env:
VERSION: ${{ needs.get-version.outputs.VERSION }}
outputs:
VERSION: ${{ env.VERSION }}
runs-on: ubuntu-24.04
steps:
- name: install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- uses: actions/checkout@v4

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: lts/*

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

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Install frontend dependencies
run: pnpm install

- name: Build tauri app
uses: tauri-apps/tauri-action@v0

- name: Create artifacts directory
run: mkdir -p artifacts

- name: Copy deb to release assets
run: cp src-tauri/target/release/bundle/deb/${{ env.REPO_NAME }}_${{ env.VERSION }}_amd64.deb artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_linux_amd64.deb

- name: Copy rpm to release assets
run: cp src-tauri/target/release/bundle/rpm/${{ env.REPO_NAME }}-${{ env.VERSION }}-1.x86_64.rpm artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_linux_amd64.rpm

- name: Zip portable to release assets
run: |
cd src-tauri/target/release
tar -czf ../../../artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_linux_amd64_portable.tar.gz ${{ env.REPO_NAME }}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: linux-assets
path: artifacts/*

macos-build:
needs: get-version
env:
VERSION: ${{ needs.get-version.outputs.VERSION }}
outputs:
VERSION: ${{ env.VERSION }}
strategy:
fail-fast: false
matrix:
arch: [ aarch64, x86_64 ]
runs-on: macos-latest
steps:
- uses: actions/checkout@v4

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: lts/*

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.arch }}-apple-darwin

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Install frontend dependencies
run: pnpm install

- name: Build tauri app
uses: tauri-apps/tauri-action@v0
with:
args: --target ${{ matrix.arch }}-apple-darwin

- name: Create artifacts directory
run: mkdir -p artifacts

- name: Copy dmg to release assets
env:
ARCH_ALIAS: ${{ matrix.arch == 'x86_64' && 'x64' || matrix.arch }}
run: cp src-tauri/target/${{ matrix.arch }}-apple-darwin/release/bundle/dmg/${{ env.REPO_NAME }}_${{ env.VERSION }}_${{ env.ARCH_ALIAS }}.dmg artifacts/${{ env.REPO_NAME }}_${{ env.VERSION }}_macos_${{ matrix.arch }}.dmg

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: macos-assets-${{ matrix.arch }}
path: artifacts/*

create-release:
needs: [ windows-build, linux-build, macos-build ]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download Windows assets
uses: actions/download-artifact@v4
with:
name: windows-assets
path: artifacts/windows

- name: Download Linux assets
uses: actions/download-artifact@v4
with:
name: linux-assets
path: artifacts/linux

- name: Download macOS aarch64 assets
uses: actions/download-artifact@v4
with:
name: macos-assets-aarch64
path: artifacts/macos-aarch64

- name: Download macOS x86_64 assets
uses: actions/download-artifact@v4
with:
name: macos-assets-x86_64
path: artifacts/macos-x86_64

- name: List files in artifacts directory
run: ls -R artifacts

- name: Create GitHub Release
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
name: Desktop App v${{ needs.windows-build.outputs.VERSION }}
body: |
Take a look at the assets to download and install this app.
files: |
artifacts/windows/*
artifacts/linux/*
artifacts/macos-aarch64/*
artifacts/macos-x86_64/*
draft: true
prerelease: false