mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-22 16:07:49 +08:00
293 lines
7.8 KiB
YAML
293 lines
7.8 KiB
YAML
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- dev
|
|
- release-*
|
|
push:
|
|
branches:
|
|
- main
|
|
- dev
|
|
- release-*
|
|
|
|
# the name of our workflow
|
|
name: CI
|
|
|
|
jobs:
|
|
lint:
|
|
name: Lint
|
|
strategy:
|
|
matrix:
|
|
targets:
|
|
- os: ubuntu-latest
|
|
- os: macos-latest
|
|
- os: windows-latest
|
|
runs-on: ${{ matrix.targets.os }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Rust
|
|
run: |
|
|
rustup toolchain install nightly --profile minimal --no-self-update
|
|
rustup default nightly
|
|
rustup component add clippy rustfmt
|
|
rustc --version
|
|
cargo --version
|
|
rustup show
|
|
|
|
- name: Tauri dependencies
|
|
if: startsWith(matrix.targets.os, 'ubuntu-')
|
|
run: >-
|
|
sudo apt-get update &&
|
|
sudo apt-get install -y
|
|
libgtk-3-dev
|
|
libayatana-appindicator3-dev
|
|
libwebkit2gtk-4.1-dev
|
|
librsvg2-dev
|
|
libxdo-dev
|
|
webkit2gtk-driver
|
|
xvfb
|
|
|
|
- uses: maxim-lobanov/setup-xcode@v1
|
|
if: startsWith(matrix.targets.os, 'macos-')
|
|
with:
|
|
xcode-version: 'latest-stable'
|
|
|
|
- name: Install Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
name: Cache Rust dependencies
|
|
with:
|
|
workspaces: 'backend'
|
|
save-if: ${{ github.event_name == 'push' }}
|
|
|
|
- uses: pnpm/action-setup@v5
|
|
name: Install pnpm
|
|
with:
|
|
run_install: false
|
|
|
|
- uses: denoland/setup-deno@v2
|
|
with:
|
|
deno-version: v2.x
|
|
|
|
- name: Get pnpm store directory
|
|
shell: bash
|
|
run: |
|
|
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
|
|
|
- uses: actions/cache@v5
|
|
name: Setup pnpm cache
|
|
with:
|
|
path: ${{ env.STORE_PATH }}
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
save-always: ${{ github.event_name == 'push' }}
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --no-frozen-lockfile
|
|
|
|
- name: Prepare fronend
|
|
run: pnpm -r build # Build frontend
|
|
env:
|
|
NODE_OPTIONS: '--max_old_space_size=4096'
|
|
- name: Prepare sidecar and resources
|
|
run: pnpm prepare:check
|
|
- name: Lint
|
|
if: startsWith(matrix.targets.os, 'ubuntu-')
|
|
run: pnpm lint # Lint
|
|
- name: Lint
|
|
if: startsWith(matrix.targets.os, 'ubuntu-') == false
|
|
run: pnpm run-p lint:clippy lint:rustfmt # Lint
|
|
env:
|
|
NODE_OPTIONS: '--max_old_space_size=4096'
|
|
|
|
# TODO: support test cross-platform
|
|
build:
|
|
name: Build Tauri
|
|
strategy:
|
|
matrix:
|
|
targets:
|
|
- os: ubuntu-latest
|
|
- os: macos-latest
|
|
- os: windows-latest
|
|
fail-fast: false
|
|
if: >
|
|
github.event_name != 'pull_request' ||
|
|
contains(github.event.pull_request.title, 'crate') ||
|
|
github.event.pull_request.user.login != 'renovate[bot]'
|
|
runs-on: ${{ matrix.targets.os }}
|
|
needs: lint
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Tauri dependencies
|
|
if: startsWith(matrix.targets.os, 'ubuntu-')
|
|
run: >-
|
|
sudo apt-get update &&
|
|
sudo apt-get install -y
|
|
libgtk-3-dev
|
|
libayatana-appindicator3-dev
|
|
libwebkit2gtk-4.1-dev
|
|
librsvg2-dev
|
|
libxdo-dev
|
|
webkit2gtk-driver
|
|
xvfb
|
|
- uses: maxim-lobanov/setup-xcode@v1
|
|
if: startsWith(matrix.targets.os, 'macos-')
|
|
with:
|
|
xcode-version: 'latest-stable'
|
|
|
|
- name: Install Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
|
|
- name: Install Deno
|
|
uses: denoland/setup-deno@v2
|
|
with:
|
|
deno-version: v2.x
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
name: Cache Rust dependencies
|
|
with:
|
|
workspaces: 'backend'
|
|
save-if: ${{ github.event_name == 'push' }}
|
|
|
|
- uses: pnpm/action-setup@v5
|
|
name: Install pnpm
|
|
with:
|
|
run_install: false
|
|
|
|
- name: Get pnpm store directory
|
|
shell: bash
|
|
run: |
|
|
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
|
|
|
- uses: actions/cache@v5
|
|
name: Setup pnpm cache
|
|
with:
|
|
path: ${{ env.STORE_PATH }}
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
save-always: ${{ github.event_name == 'push' }}
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --no-frozen-lockfile
|
|
|
|
- name: Prepare sidecar and resources
|
|
run: pnpm prepare:check
|
|
|
|
- name: Prepare frontend
|
|
run: pnpm -r build
|
|
env:
|
|
NODE_OPTIONS: '--max_old_space_size=4096'
|
|
|
|
- name: Build Backend
|
|
run: cargo build --release --manifest-path backend/Cargo.toml
|
|
|
|
test_unit:
|
|
name: Unit Test
|
|
needs: lint
|
|
if: >
|
|
github.event_name != 'pull_request' ||
|
|
contains(github.event.pull_request.title, 'crate') ||
|
|
github.event.pull_request.user.login != 'renovate[bot]'
|
|
|
|
# we want to run on the latest linux environment
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
- windows-latest
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
# the steps our job runs **in order**
|
|
steps:
|
|
# checkout the code on the workflow runner
|
|
- uses: actions/checkout@v6
|
|
|
|
# install system dependencies that Tauri needs to compile on Linux.
|
|
# note the extra dependencies for `tauri-driver` to run which are: `webkit2gtk-driver` and `xvfb`
|
|
- name: Tauri dependencies
|
|
if: startsWith(matrix.os, 'ubuntu-')
|
|
run: >-
|
|
sudo apt-get update &&
|
|
sudo apt-get install -y
|
|
libgtk-3-dev
|
|
libayatana-appindicator3-dev
|
|
libwebkit2gtk-4.1-dev
|
|
librsvg2-dev
|
|
libxdo-dev
|
|
webkit2gtk-driver
|
|
xvfb
|
|
|
|
- uses: maxim-lobanov/setup-xcode@v1
|
|
if: startsWith(matrix.os, 'macos-')
|
|
with:
|
|
xcode-version: 'latest-stable'
|
|
|
|
- name: Install Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
|
|
- name: Install Deno
|
|
uses: denoland/setup-deno@v2
|
|
with:
|
|
deno-version: v2.x
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
name: Cache Rust dependencies
|
|
with:
|
|
workspaces: 'backend'
|
|
save-if: ${{ github.event_name == 'push' }}
|
|
|
|
- uses: pnpm/action-setup@v5
|
|
name: Install pnpm
|
|
with:
|
|
run_install: false
|
|
|
|
- name: Get pnpm store directory
|
|
shell: bash
|
|
run: |
|
|
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
|
|
|
- uses: actions/cache@v5
|
|
name: Setup pnpm cache
|
|
with:
|
|
path: ${{ env.STORE_PATH }}
|
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pnpm-store-
|
|
save-always: ${{ github.event_name == 'push' }}
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --no-frozen-lockfile
|
|
|
|
- name: Prepare sidecar and resources
|
|
run: pnpm prepare:check
|
|
|
|
- name: Prepare frontend
|
|
run: pnpm -r build
|
|
env:
|
|
NODE_OPTIONS: '--max_old_space_size=4096'
|
|
|
|
- name: Free up disk space
|
|
if: startsWith(matrix.os, 'ubuntu-')
|
|
run: |
|
|
df -h
|
|
sudo rm -rf /usr/share/dotnet
|
|
sudo rm -rf /usr/local/lib/android
|
|
sudo rm -rf /opt/ghc
|
|
sudo rm -rf /opt/hostedtoolcache/CodeQL
|
|
sudo docker image prune --all --force
|
|
df -h
|
|
|
|
- name: Test
|
|
run: pnpm test
|