✨ support multiple-instances #152
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Quality & Testing | |
on: | |
push: | |
branches: [main, dev] | |
pull_request: | |
branches: [main, dev] | |
workflow_dispatch: | |
env: | |
NODE_VERSION: "22" | |
PNPM_VERSION: "10.15.0" | |
permissions: | |
actions: write | |
contents: read | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
auto-format: | |
name: Auto-fix Formatting | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Setup Development Environment | |
uses: ./.github/actions/setup-env | |
with: | |
mode: node | |
- name: Auto-fix Prettier formatting | |
run: npx prettier --write . --ignore-unknown | |
- name: Auto-fix Rust formatting | |
run: cargo fmt --all --manifest-path src-tauri/Cargo.toml | |
- name: Commit formatting fixes | |
run: | | |
git config --local user.email "[email protected]" | |
git config --local user.name "GitHub Action" | |
git add . | |
if ! git diff --staged --quiet; then | |
git commit -m "Auto-fix formatting issues" | |
git push | |
else | |
echo "No formatting changes to commit" | |
fi | |
rust-quality: | |
name: Rust Code Quality | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
fail-fast: false | |
defaults: | |
run: | |
shell: bash | |
working-directory: src-tauri | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rust Environment | |
uses: ./.github/actions/setup-env | |
with: | |
mode: build | |
- name: Install Rust components | |
shell: bash | |
run: rustup component add rustfmt clippy | |
- uses: rui314/setup-mold@v1 | |
if: matrix.os == 'ubuntu-latest' | |
- name: Install cargo-hack | |
run: cargo install cargo-hack --force | |
- name: Check Rust formatting | |
run: cargo fmt --all -- --color=always --check | |
- name: Run Clippy lints | |
run: cargo hack --feature-powerset --exclude-features cli-build --no-dev-deps clippy # cspell:disable-line | |
cli-tests: | |
name: CLI Tests (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
fail-fast: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Build Environment | |
uses: ./.github/actions/setup-env | |
with: | |
mode: build | |
- name: Build CLI | |
run: pnpm run cli:build | |
- name: Run CLI Test Suite | |
run: pnpm test | |
env: | |
CI: true | |
NODE_ENV: test | |
- name: Test CLI Integration | |
shell: bash | |
run: | | |
echo "Testing CLI integration with weekly.tw93.fun..." | |
if [[ "$RUNNER_OS" == "Windows" ]]; then | |
timeout 120s node dist/cli.js https://weekly.tw93.fun --name "CITestWeekly" --debug || true | |
else | |
timeout 30s node dist/cli.js https://weekly.tw93.fun --name "CITestWeekly" --debug || true | |
fi | |
echo "Integration test completed (expected to timeout)" | |
release-build-test: | |
name: Release Build Test (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
fail-fast: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Build Environment | |
uses: ./.github/actions/setup-env | |
with: | |
mode: build | |
- name: Build CLI | |
run: pnpm run cli:build | |
- name: Run Release Build Test | |
run: ./tests/release.js | |
timeout-minutes: 30 | |
env: | |
CI: true | |
NODE_ENV: test | |
- name: List generated files | |
shell: bash | |
run: | | |
echo "Generated files in project root:" | |
if [[ "$RUNNER_OS" == "Windows" ]]; then | |
ls -la *.{dmg,app,msi,deb,AppImage} 2>/dev/null || echo "No direct output files found" | |
else | |
find . -maxdepth 1 \( -name "*.dmg" -o -name "*.app" -o -name "*.msi" -o -name "*.deb" -o -name "*.AppImage" \) || echo "No direct output files found" | |
fi | |
echo "" | |
echo "Generated files in target directories:" | |
if [[ "$RUNNER_OS" == "Windows" ]]; then | |
find src-tauri/target -type f \( -name "*.dmg" -o -name "*.app" -o -name "*.msi" -o -name "*.deb" -o -name "*.AppImage" \) 2>/dev/null || echo "No target output files found" | |
else | |
find src-tauri/target -name "*.dmg" -o -name "*.app" -o -name "*.msi" -o -name "*.deb" -o -name "*.AppImage" 2>/dev/null || echo "No target output files found" | |
fi | |
summary: | |
name: Quality Summary | |
runs-on: ubuntu-latest | |
needs: [auto-format, rust-quality, cli-tests, release-build-test] | |
if: always() | |
steps: | |
- name: Generate Summary | |
run: | | |
{ | |
echo "# Quality & Testing Summary" | |
echo "" | |
echo "| Check | Status |" | |
echo "|-------|--------|" | |
echo "| Auto Formatting | ${{ needs.auto-format.result == 'success' && 'PASSED' || 'FAILED' }} |" | |
echo "| Rust Quality | ${{ needs.rust-quality.result == 'success' && 'PASSED' || 'FAILED' }} |" | |
echo "| CLI Tests | ${{ needs.cli-tests.result == 'success' && 'PASSED' || 'FAILED' }} |" | |
echo "| Release Build | ${{ needs.release-build-test.result == 'success' && 'PASSED' || 'FAILED' }} |" | |
} >> $GITHUB_STEP_SUMMARY |