mirror of
https://github.com/armbian/imager.git
synced 2026-01-06 12:31:28 -08:00
Add GitHub issue templates, labels, and PR check workflow
- Bug report and feature request issue templates - Comprehensive label definitions for issue management - PR check workflow with multi-platform build verification (Linux x64/ARM64, Windows, macOS Intel/ARM) - Frontend linting and Rust clippy checks - Security audits for npm and cargo dependencies - Caching optimization for faster CI runs
This commit is contained in:
139
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
139
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
name: Bug Report
|
||||
description: Report a bug or unexpected behavior in Armbian Imager
|
||||
title: "[Bug]: "
|
||||
labels: ["bug", "triage"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to report a bug! Please fill out the form below to help us investigate and fix the issue.
|
||||
|
||||
- type: checkboxes
|
||||
id: existing-issue
|
||||
attributes:
|
||||
label: Prerequisites
|
||||
description: Please confirm the following before submitting
|
||||
options:
|
||||
- label: I have searched the existing issues and this bug has not been reported before
|
||||
required: true
|
||||
- label: I am using the latest version of Armbian Imager
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: Which operating system are you using?
|
||||
options:
|
||||
- Windows 10
|
||||
- Windows 11
|
||||
- macOS (Intel)
|
||||
- macOS (Apple Silicon)
|
||||
- Linux (Ubuntu)
|
||||
- Linux (Debian)
|
||||
- Linux (Linux Mint)
|
||||
- Linux (Other Debian-based)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: OS Version
|
||||
description: Specific version of your operating system
|
||||
placeholder: "e.g., Windows 11 23H2, macOS 14.2, Ubuntu 24.04"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: app-version
|
||||
attributes:
|
||||
label: Armbian Imager Version
|
||||
description: Version of Armbian Imager (displayed at the bottom right corner of the home screen)
|
||||
placeholder: "e.g., 1.0.0"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: operation
|
||||
attributes:
|
||||
label: Operation Type
|
||||
description: What were you trying to do when the bug occurred?
|
||||
options:
|
||||
- Downloading an image
|
||||
- Flashing to SD card
|
||||
- Flashing to USB drive
|
||||
- Verifying a flash
|
||||
- Selecting a board/image
|
||||
- Using a custom image
|
||||
- Device detection
|
||||
- Application startup
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: target-device
|
||||
attributes:
|
||||
label: Target Device (if applicable)
|
||||
description: The SD card or USB drive model/brand you were flashing to
|
||||
placeholder: "e.g., SanDisk Ultra 32GB, Samsung EVO 64GB"
|
||||
|
||||
- type: input
|
||||
id: target-board
|
||||
attributes:
|
||||
label: Target Board (if applicable)
|
||||
description: The Armbian board you were trying to flash an image for
|
||||
placeholder: "e.g., Orange Pi 5, Raspberry Pi 4, Khadas VIM3"
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Bug Description
|
||||
description: A clear and concise description of what the bug is
|
||||
placeholder: Describe what happened...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: What did you expect to happen?
|
||||
placeholder: Describe what should have happened...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: Steps to reproduce the behavior
|
||||
placeholder: |
|
||||
1. Open Armbian Imager
|
||||
2. Select board '...'
|
||||
3. Click on '...'
|
||||
4. See error
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Error Messages / Logs
|
||||
description: |
|
||||
If applicable, paste any error messages or logs here.
|
||||
You can use the "Upload Logs" feature in Armbian Imager to get a paste.armbian.com link.
|
||||
render: shell
|
||||
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, add screenshots to help explain your problem
|
||||
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Add any other context about the problem here
|
||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Armbian Forums
|
||||
url: https://forum.armbian.com/
|
||||
about: For general questions and community support, please visit the Armbian Forums
|
||||
- name: Documentation
|
||||
url: https://docs.armbian.com/
|
||||
about: Check the official Armbian documentation for guides and FAQs
|
||||
94
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
94
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
name: Feature Request
|
||||
description: Suggest a new feature or enhancement for Armbian Imager
|
||||
title: "[Feature]: "
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for suggesting a new feature! Please describe your idea in detail so we can evaluate and potentially implement it.
|
||||
|
||||
- type: checkboxes
|
||||
id: existing-request
|
||||
attributes:
|
||||
label: Prerequisites
|
||||
description: Please confirm the following before submitting
|
||||
options:
|
||||
- label: I have searched the existing issues and this feature has not been requested before
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: feature-area
|
||||
attributes:
|
||||
label: Feature Area
|
||||
description: Which area of the application does this feature relate to?
|
||||
options:
|
||||
- User Interface / UX
|
||||
- Download functionality
|
||||
- Flash/Write functionality
|
||||
- Device detection
|
||||
- Image selection / Board support
|
||||
- Custom image handling
|
||||
- Verification / Validation
|
||||
- Platform support (Windows/macOS/Linux)
|
||||
- Localization / Translations
|
||||
- Performance
|
||||
- Accessibility
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: problem
|
||||
attributes:
|
||||
label: Problem Statement
|
||||
description: Is your feature request related to a problem? Please describe the problem you're trying to solve.
|
||||
placeholder: "I'm always frustrated when... / Currently there's no way to..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Proposed Solution
|
||||
description: Describe the solution you'd like to see implemented
|
||||
placeholder: "I would like to be able to..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Alternatives Considered
|
||||
description: Describe any alternative solutions or workarounds you've considered
|
||||
placeholder: "I've tried... but it doesn't work because..."
|
||||
|
||||
- type: dropdown
|
||||
id: priority
|
||||
attributes:
|
||||
label: How important is this feature to you?
|
||||
options:
|
||||
- Nice to have
|
||||
- Would significantly improve my workflow
|
||||
- Critical for my use case
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: use-case
|
||||
attributes:
|
||||
label: Use Case
|
||||
description: Describe a specific scenario where this feature would be useful
|
||||
placeholder: "When I'm flashing multiple boards, I need to..."
|
||||
|
||||
- type: textarea
|
||||
id: mockups
|
||||
attributes:
|
||||
label: Mockups / Examples
|
||||
description: If applicable, add mockups, sketches, or examples from other applications
|
||||
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Add any other context about the feature request here
|
||||
378
.github/labels.yml
vendored
Normal file
378
.github/labels.yml
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
# ===========================================
|
||||
# BUG AND ISSUE MANAGEMENT
|
||||
# ===========================================
|
||||
- name: bug
|
||||
color: "d73a4a"
|
||||
description: Something isn't working
|
||||
|
||||
- name: triage
|
||||
color: "fbca04"
|
||||
description: Needs initial review and categorization
|
||||
|
||||
- name: confirmed
|
||||
color: "0e8a16"
|
||||
description: Bug has been confirmed and reproduced
|
||||
|
||||
- name: wontfix
|
||||
color: "ffffff"
|
||||
description: This will not be worked on
|
||||
|
||||
- name: duplicate
|
||||
color: "cfd3d7"
|
||||
description: This issue or pull request already exists
|
||||
|
||||
- name: invalid
|
||||
color: "e4e669"
|
||||
description: This doesn't seem right
|
||||
|
||||
- name: regression
|
||||
color: "b60205"
|
||||
description: Something that worked before is now broken
|
||||
|
||||
# ===========================================
|
||||
# FEATURE AND ENHANCEMENT
|
||||
# ===========================================
|
||||
- name: enhancement
|
||||
color: "a2eeef"
|
||||
description: New feature or request
|
||||
|
||||
- name: good first issue
|
||||
color: "7057ff"
|
||||
description: Good for newcomers
|
||||
|
||||
- name: help wanted
|
||||
color: "008672"
|
||||
description: Extra attention is needed
|
||||
|
||||
- name: feature-request
|
||||
color: "c2e0c6"
|
||||
description: Request for a new feature
|
||||
|
||||
# ===========================================
|
||||
# PRIORITY
|
||||
# ===========================================
|
||||
- name: "priority: critical"
|
||||
color: "b60205"
|
||||
description: Must be fixed immediately
|
||||
|
||||
- name: "priority: high"
|
||||
color: "d93f0b"
|
||||
description: Should be addressed soon
|
||||
|
||||
- name: "priority: medium"
|
||||
color: "fbca04"
|
||||
description: Normal priority
|
||||
|
||||
- name: "priority: low"
|
||||
color: "0e8a16"
|
||||
description: Can be addressed later
|
||||
|
||||
# ===========================================
|
||||
# PLATFORM
|
||||
# ===========================================
|
||||
- name: "platform: windows"
|
||||
color: "0078d4"
|
||||
description: Windows-specific issue
|
||||
|
||||
- name: "platform: macos"
|
||||
color: "a3aaae"
|
||||
description: macOS-specific issue
|
||||
|
||||
- name: "platform: macos-intel"
|
||||
color: "a3aaae"
|
||||
description: macOS Intel-specific issue
|
||||
|
||||
- name: "platform: macos-arm"
|
||||
color: "a3aaae"
|
||||
description: macOS Apple Silicon-specific issue
|
||||
|
||||
- name: "platform: linux"
|
||||
color: "e95420"
|
||||
description: Linux-specific issue
|
||||
|
||||
- name: "platform: linux-x64"
|
||||
color: "e95420"
|
||||
description: Linux x64 architecture issue
|
||||
|
||||
- name: "platform: linux-arm64"
|
||||
color: "e95420"
|
||||
description: Linux ARM64 architecture issue
|
||||
|
||||
# ===========================================
|
||||
# UI COMPONENTS
|
||||
# ===========================================
|
||||
- name: "component: ui"
|
||||
color: "c5def5"
|
||||
description: User interface related
|
||||
|
||||
- name: "component: modal-manufacturer"
|
||||
color: "c5def5"
|
||||
description: Manufacturer selection modal
|
||||
|
||||
- name: "component: modal-board"
|
||||
color: "c5def5"
|
||||
description: Board selection modal
|
||||
|
||||
- name: "component: modal-image"
|
||||
color: "c5def5"
|
||||
description: Image selection modal
|
||||
|
||||
- name: "component: modal-device"
|
||||
color: "c5def5"
|
||||
description: Device selection modal
|
||||
|
||||
- name: "component: flash-progress"
|
||||
color: "c5def5"
|
||||
description: Flash progress UI
|
||||
|
||||
- name: "component: settings"
|
||||
color: "c5def5"
|
||||
description: Settings and preferences
|
||||
|
||||
- name: "component: theme"
|
||||
color: "c5def5"
|
||||
description: Light/dark theme issues
|
||||
|
||||
# ===========================================
|
||||
# BACKEND COMPONENTS
|
||||
# ===========================================
|
||||
- name: "component: backend"
|
||||
color: "fef2c0"
|
||||
description: Rust backend related
|
||||
|
||||
- name: "component: flash"
|
||||
color: "f9d0c4"
|
||||
description: Flash/write operations
|
||||
|
||||
- name: "component: download"
|
||||
color: "bfdadc"
|
||||
description: Download functionality
|
||||
|
||||
- name: "component: device-detection"
|
||||
color: "d4c5f9"
|
||||
description: Device detection issues
|
||||
|
||||
- name: "component: decompression"
|
||||
color: "e6ccb3"
|
||||
description: Image decompression (XZ, GZ, ZSTD, BZIP2)
|
||||
|
||||
- name: "component: verification"
|
||||
color: "c2e0c6"
|
||||
description: SHA256 verification and validation
|
||||
|
||||
- name: "component: custom-image"
|
||||
color: "f9c513"
|
||||
description: Custom image file handling
|
||||
|
||||
- name: "component: api"
|
||||
color: "bfd4f2"
|
||||
description: Armbian API integration
|
||||
|
||||
- name: "component: tauri-ipc"
|
||||
color: "d4c5f9"
|
||||
description: Tauri IPC communication
|
||||
|
||||
- name: "component: updater"
|
||||
color: "fbca04"
|
||||
description: Auto-updater functionality
|
||||
|
||||
- name: "component: logs"
|
||||
color: "c5def5"
|
||||
description: Logging and log upload
|
||||
|
||||
# ===========================================
|
||||
# OPERATIONS
|
||||
# ===========================================
|
||||
- name: "operation: download"
|
||||
color: "1d76db"
|
||||
description: Image download operation
|
||||
|
||||
- name: "operation: flash"
|
||||
color: "ff6b6b"
|
||||
description: Flash to device operation
|
||||
|
||||
- name: "operation: verify"
|
||||
color: "0e8a16"
|
||||
description: Verification operation
|
||||
|
||||
- name: "operation: decompress"
|
||||
color: "e6ccb3"
|
||||
description: Decompression operation
|
||||
|
||||
# ===========================================
|
||||
# TARGET DEVICE TYPE
|
||||
# ===========================================
|
||||
- name: "device: sd-card"
|
||||
color: "5319e7"
|
||||
description: SD card related
|
||||
|
||||
- name: "device: usb"
|
||||
color: "5319e7"
|
||||
description: USB drive related
|
||||
|
||||
- name: "device: emmc"
|
||||
color: "5319e7"
|
||||
description: eMMC module related
|
||||
|
||||
- name: "device: nvme"
|
||||
color: "5319e7"
|
||||
description: NVMe drive related
|
||||
|
||||
# ===========================================
|
||||
# IMAGE FORMATS
|
||||
# ===========================================
|
||||
- name: "format: xz"
|
||||
color: "006b75"
|
||||
description: XZ compressed images
|
||||
|
||||
- name: "format: gz"
|
||||
color: "006b75"
|
||||
description: GZ compressed images
|
||||
|
||||
- name: "format: zstd"
|
||||
color: "006b75"
|
||||
description: ZSTD compressed images
|
||||
|
||||
- name: "format: bzip2"
|
||||
color: "006b75"
|
||||
description: BZIP2 compressed images
|
||||
|
||||
- name: "format: raw"
|
||||
color: "006b75"
|
||||
description: Raw/uncompressed images
|
||||
|
||||
- name: "format: img"
|
||||
color: "006b75"
|
||||
description: IMG file format
|
||||
|
||||
# ===========================================
|
||||
# STATUS
|
||||
# ===========================================
|
||||
- name: "status: in progress"
|
||||
color: "1d76db"
|
||||
description: Currently being worked on
|
||||
|
||||
- name: "status: blocked"
|
||||
color: "b60205"
|
||||
description: Blocked by another issue or external factor
|
||||
|
||||
- name: "status: needs info"
|
||||
color: "d876e3"
|
||||
description: Waiting for more information from reporter
|
||||
|
||||
- name: "status: ready for review"
|
||||
color: "0e8a16"
|
||||
description: Ready to be reviewed
|
||||
|
||||
- name: "status: on hold"
|
||||
color: "c5def5"
|
||||
description: Temporarily paused
|
||||
|
||||
- name: "status: needs testing"
|
||||
color: "fbca04"
|
||||
description: Needs testing before closing
|
||||
|
||||
# ===========================================
|
||||
# TYPE
|
||||
# ===========================================
|
||||
- name: documentation
|
||||
color: "0075ca"
|
||||
description: Improvements or additions to documentation
|
||||
|
||||
- name: refactor
|
||||
color: "d4c5f9"
|
||||
description: Code refactoring without functional changes
|
||||
|
||||
- name: performance
|
||||
color: "ff7619"
|
||||
description: Performance improvements
|
||||
|
||||
- name: security
|
||||
color: "ee0701"
|
||||
description: Security related issues
|
||||
|
||||
- name: i18n
|
||||
color: "5319e7"
|
||||
description: Internationalization and translations
|
||||
|
||||
- name: accessibility
|
||||
color: "1d76db"
|
||||
description: Accessibility improvements
|
||||
|
||||
- name: testing
|
||||
color: "bfd4f2"
|
||||
description: Testing related
|
||||
|
||||
- name: ci-cd
|
||||
color: "6f42c1"
|
||||
description: CI/CD and build pipeline
|
||||
|
||||
- name: dependencies
|
||||
color: "0366d6"
|
||||
description: Dependency updates
|
||||
|
||||
# ===========================================
|
||||
# ERRORS
|
||||
# ===========================================
|
||||
- name: "error: access-denied"
|
||||
color: "b60205"
|
||||
description: Permission/access denied errors
|
||||
|
||||
- name: "error: network"
|
||||
color: "d93f0b"
|
||||
description: Network connectivity errors
|
||||
|
||||
- name: "error: timeout"
|
||||
color: "d93f0b"
|
||||
description: Timeout errors
|
||||
|
||||
- name: "error: checksum"
|
||||
color: "b60205"
|
||||
description: Checksum/hash verification failures
|
||||
|
||||
- name: "error: write-failed"
|
||||
color: "b60205"
|
||||
description: Write operation failures
|
||||
|
||||
- name: "error: device-busy"
|
||||
color: "d93f0b"
|
||||
description: Device busy/locked errors
|
||||
|
||||
- name: "error: device-not-found"
|
||||
color: "d93f0b"
|
||||
description: Device not detected
|
||||
|
||||
- name: "error: corrupt-image"
|
||||
color: "b60205"
|
||||
description: Corrupted or invalid image file
|
||||
|
||||
- name: "error: insufficient-space"
|
||||
color: "d93f0b"
|
||||
description: Not enough space on device
|
||||
|
||||
- name: "error: crash"
|
||||
color: "b60205"
|
||||
description: Application crash
|
||||
|
||||
# ===========================================
|
||||
# SPECIAL
|
||||
# ===========================================
|
||||
- name: upstream
|
||||
color: "ededed"
|
||||
description: Issue from upstream dependency
|
||||
|
||||
- name: breaking-change
|
||||
color: "b60205"
|
||||
description: Breaking change requiring migration
|
||||
|
||||
- name: needs-design
|
||||
color: "f9d0c4"
|
||||
description: Requires UI/UX design work
|
||||
|
||||
- name: hacktoberfest
|
||||
color: "ff7619"
|
||||
description: Hacktoberfest contribution
|
||||
|
||||
- name: sponsored
|
||||
color: "ea4aaa"
|
||||
description: Sponsored feature or fix
|
||||
271
.github/workflows/pr-check.yml
vendored
Normal file
271
.github/workflows/pr-check.yml
vendored
Normal file
@@ -0,0 +1,271 @@
|
||||
name: PR Check
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
# Cancel in-progress runs for the same PR
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
jobs:
|
||||
# ===========================================
|
||||
# Frontend Checks (runs once, platform-independent)
|
||||
# ===========================================
|
||||
frontend:
|
||||
name: Frontend Checks
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: "npm"
|
||||
|
||||
- name: Cache node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run ESLint
|
||||
run: npm run lint
|
||||
|
||||
- name: TypeScript type check
|
||||
run: npx tsc --noEmit
|
||||
|
||||
# ===========================================
|
||||
# Rust Checks (runs once, platform-independent)
|
||||
# ===========================================
|
||||
rust-lint:
|
||||
name: Rust Lint & Format
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libssl-dev \
|
||||
libgtk-3-dev
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: clippy, rustfmt
|
||||
|
||||
- name: Cache Cargo
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src-tauri -> target"
|
||||
cache-on-failure: true
|
||||
|
||||
- name: Check formatting
|
||||
working-directory: src-tauri
|
||||
run: cargo fmt --check
|
||||
|
||||
- name: Run Clippy
|
||||
working-directory: src-tauri
|
||||
run: cargo clippy --all-targets --all-features -- -D warnings
|
||||
|
||||
# ===========================================
|
||||
# Build Test - All Platforms
|
||||
# ===========================================
|
||||
build:
|
||||
name: Build (${{ matrix.platform }})
|
||||
needs: [frontend, rust-lint]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
# Linux x64
|
||||
- platform: linux-x64
|
||||
os: ubuntu-latest
|
||||
|
||||
# Linux ARM64 (native runner)
|
||||
- platform: linux-arm64
|
||||
os: ubuntu-24.04-arm
|
||||
|
||||
# Windows x64
|
||||
- platform: windows-x64
|
||||
os: windows-latest
|
||||
|
||||
# macOS Intel
|
||||
- platform: macos-intel
|
||||
os: macos-13
|
||||
|
||||
# macOS Apple Silicon
|
||||
- platform: macos-arm
|
||||
os: macos-latest
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Linux dependencies
|
||||
- name: Install Linux dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libssl-dev \
|
||||
libgtk-3-dev
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: "npm"
|
||||
|
||||
- name: Cache node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-${{ runner.arch }}-node-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ runner.arch }}-node-
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache Cargo
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src-tauri -> target"
|
||||
cache-on-failure: true
|
||||
shared-key: ${{ matrix.platform }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Cargo check
|
||||
working-directory: src-tauri
|
||||
run: cargo check --all-targets
|
||||
|
||||
# ===========================================
|
||||
# Full Build Test (Linux only, to verify complete build)
|
||||
# ===========================================
|
||||
build-full:
|
||||
name: Full Build Test
|
||||
needs: [frontend, rust-lint]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libssl-dev \
|
||||
libgtk-3-dev
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: "npm"
|
||||
|
||||
- name: Cache node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache Cargo
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "src-tauri -> target"
|
||||
cache-on-failure: true
|
||||
shared-key: build-full
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build application
|
||||
run: npm run tauri:build:dev
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
|
||||
# ===========================================
|
||||
# Security Audit
|
||||
# ===========================================
|
||||
security:
|
||||
name: Security Audit
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: "npm"
|
||||
|
||||
- name: Cache node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run npm audit
|
||||
run: npm audit --audit-level=high
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache cargo-audit
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cargo/bin/cargo-audit
|
||||
key: cargo-audit-${{ runner.os }}
|
||||
|
||||
- name: Install cargo-audit
|
||||
run: cargo install cargo-audit --locked || true
|
||||
|
||||
- name: Run cargo audit
|
||||
working-directory: src-tauri
|
||||
run: cargo audit
|
||||
continue-on-error: true
|
||||
Reference in New Issue
Block a user