diff --git a/.gitea/workflows/darwin.yaml b/.gitea/workflows/darwin.yaml index 9261fe1..9c067f7 100644 --- a/.gitea/workflows/darwin.yaml +++ b/.gitea/workflows/darwin.yaml @@ -13,6 +13,10 @@ on: jobs: build: runs-on: macos + strategy: + fail-fast: false + matrix: + arch: [x64, arm64] steps: - name: Checkout code uses: actions/checkout@v6 @@ -31,6 +35,7 @@ jobs: restore-keys: | ${{ runner.os }}-npm- if-no-files-found: ignore + # Кэш для electron-builder - name: Cache electron-builder uses: actions/cache@v5 @@ -42,32 +47,35 @@ jobs: restore-keys: | ${{ runner.os }}-electron-builder- if-no-files-found: ignore + - name: NPM offline setup shell: bash run: | npm config set cache "$HOME/.npm-cache" --global npm config set prefer-offline true --global + - name: Install npm dependencies run: npm install --prefer-offline --no-audit --no-fund - - name: Build the application - run: npm run kernel:mac - #Загружаем на удаленный сервер по SSH используя scp и пароль из секретов - #Загружаем из двух папок dist/builds/darwin/x64 и dist/builds/darwin/arm64, так как electron-builder может создавать разные файлы для разных архитектур - #Вызываем файл sshupload.sh и передаем ему параметры из секретов, чтобы не хранить пароль в открытом виде в workflow - - name: Upload to SSH using scp - shell: bash + + - name: Build the application (${{ matrix.arch }}) run: | - chmod +x "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" - sh "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" \ - -l "$GITHUB_WORKSPACE/dist/builds/darwin/x64/Rosetta-*.pkg" \ - -r "${{ secrets.SDU_SSH_KERNEL }}/darwin/x64" \ - -s "${{ secrets.SDU_SSH_HOST }}" \ - -u "${{ secrets.SDU_SSH_USERNAME }}" \ - -p '${{ secrets.SDU_SSH_PASSWORD }}' - sh "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" \ - -l "$GITHUB_WORKSPACE/dist/builds/darwin/arm64/Rosetta-*.pkg" \ - -r "${{ secrets.SDU_SSH_KERNEL }}/darwin/arm64" \ - -s "${{ secrets.SDU_SSH_HOST }}" \ - -u "${{ secrets.SDU_SSH_USERNAME }}" \ - -p '${{ secrets.SDU_SSH_PASSWORD }}' - \ No newline at end of file + npx electron-vite build + npx electron-builder --mac --${{ matrix.arch }} + + - name: Check if files exist (${{ matrix.arch }}) + run: | + echo "=== Checking dist structure ===" + find dist/builds/darwin/${{ matrix.arch }} -type f -name "*.pkg" 2>/dev/null || echo "No PKG files found" + ls -la dist/builds/darwin/${{ matrix.arch }}/ 2>/dev/null || echo "arch folder not found" + + - name: Upload ${{ matrix.arch }} to SSH using SCP + uses: appleboy/scp-action@master + with: + host: ${{ secrets.SDU_SSH_HOST }} + username: ${{ secrets.SDU_SSH_USERNAME }} + password: ${{ secrets.SDU_SSH_PASSWORD }} + port: 22 + source: "dist/builds/darwin/${{ matrix.arch }}/Rosetta-*.pkg" + target: "${{ secrets.SDU_SSH_KERNEL }}/darwin/${{ matrix.arch }}" + strip_components: 4 + rm: true \ No newline at end of file diff --git a/.gitea/workflows/linux.yaml b/.gitea/workflows/linux.yaml index 57b2ee5..9c4abdd 100644 --- a/.gitea/workflows/linux.yaml +++ b/.gitea/workflows/linux.yaml @@ -12,7 +12,11 @@ on: jobs: build: - runs-on: linux + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: [x64, arm64] steps: - name: Checkout code uses: actions/checkout@v6 @@ -49,38 +53,28 @@ jobs: - name: Install npm dependencies run: npm install --no-audit --no-fund - - name: Build the application - run: npm run kernel:linux + - name: Build the application (${{ matrix.arch }}) + run: | + npx electron-vite build + npx electron-builder --linux --${{ matrix.arch }} - - name: Check if files exist + - name: Check if files exist (${{ matrix.arch }}) run: | echo "=== Checking dist structure ===" - find dist/builds -type f -name "*.AppImage" 2>/dev/null || echo "No AppImage files found" - ls -la dist/builds/linux/ 2>/dev/null || echo "linux folder not found" + find dist/builds/linux/${{ matrix.arch }} -type f -name "*.AppImage" 2>/dev/null || echo "No AppImage files found" + ls -la dist/builds/linux/${{ matrix.arch }}/ 2>/dev/null || echo "arch folder not found" - name: Install SCP in Docker container run: apt-get install -y openssh-client - - name: Upload x64 to SSH using SCP + - name: Upload ${{ matrix.arch }} to SSH using SCP uses: appleboy/scp-action@master with: host: ${{ secrets.SDU_SSH_HOST }} username: ${{ secrets.SDU_SSH_USERNAME }} password: ${{ secrets.SDU_SSH_PASSWORD }} port: 22 - source: "dist/builds/linux/x64/Rosetta-*.AppImage" - target: "${{ secrets.SDU_SSH_KERNEL }}/linux/x64" + source: "dist/builds/linux/${{ matrix.arch }}/Rosetta-*.AppImage" + target: "${{ secrets.SDU_SSH_KERNEL }}/linux/${{ matrix.arch }}" strip_components: 4 - rm: true - - - name: Upload arm64 to SSH using SCP - uses: appleboy/scp-action@master - with: - host: ${{ secrets.SDU_SSH_HOST }} - username: ${{ secrets.SDU_SSH_USERNAME }} - password: ${{ secrets.SDU_SSH_PASSWORD }} - port: 22 - source: "dist/builds/linux/arm64/Rosetta-*.AppImage" - target: "${{ secrets.SDU_SSH_KERNEL }}/linux/arm64" - strip_components: 4 - rm: true \ No newline at end of file + rm: true \ No newline at end of file diff --git a/.gitea/workflows/service-packs.yaml b/.gitea/workflows/service-packs.yaml index b0e3864..fd1b0d7 100644 --- a/.gitea/workflows/service-packs.yaml +++ b/.gitea/workflows/service-packs.yaml @@ -11,7 +11,7 @@ on: jobs: build: - runs-on: macos + runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 @@ -29,13 +29,13 @@ jobs: restore-keys: | ${{ runner.os }}-npm- if-no-files-found: ignore - # Кэш для electron-builder (macOS) - - name: Cache electron-builder (macOS) + # Кэш для electron-builder (Linux) + - name: Cache electron-builder (Linux) uses: actions/cache@v5 with: path: | - ${{ env.HOME }}/Library/Caches/electron-builder - ${{ env.HOME }}/Library/Caches/electron + ${{ env.HOME }}/.cache/electron-builder + ${{ env.HOME }}/.cache/electron key: ${{ runner.os }}-electron-builder-${{ hashFiles('**/electron-builder.yml') }} restore-keys: | ${{ runner.os }}-electron-builder- @@ -54,6 +54,11 @@ jobs: - name: Build the application run: npm run kernel:linux + - name: Install ZIP in Docker container + run: | + apt-get update + apt-get install -y zip + #Собираем сервисные пакеты для всех платформ - name: Build SP shell: bash @@ -62,13 +67,28 @@ jobs: sh "$GITHUB_WORKSPACE/build-packs.sh" #Загружаем на удаленный сервер по SSH используя scp и пароль из секретов #Загружаем из двух папок dist/builds/darwin/x64 и dist/builds/darwin/arm64, так как electron-builder может создавать разные файлы для разных архитектур - - name: Upload to SSH - shell: bash - run: | - chmod +x "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" - sh "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" \ - -l "$GITHUB_WORKSPACE/packs/*" \ - -r "${{ secrets.SDU_SSH_PACKS }}" \ - -s "${{ secrets.SDU_SSH_HOST }}" \ - -u "${{ secrets.SDU_SSH_USERNAME }}" \ - -p '${{ secrets.SDU_SSH_PASSWORD }}' \ No newline at end of file + # - name: Upload to SSH + # shell: bash + # run: | + # chmod +x "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" + # sh "$GITHUB_WORKSPACE/.gitea/workflows/sshupload.sh" \ + # -l "$GITHUB_WORKSPACE/packs/*" \ + # -r "${{ secrets.SDU_SSH_PACKS }}" \ + # -s "${{ secrets.SDU_SSH_HOST }}" \ + # -u "${{ secrets.SDU_SSH_USERNAME }}" \ + # -p '${{ secrets.SDU_SSH_PASSWORD }}' + + - name: Install SCP in Docker container + run: apt-get install -y openssh-client + + - name: Upload ${{ matrix.arch }} to SSH using SCP + uses: appleboy/scp-action@master + with: + host: ${{ secrets.SDU_SSH_HOST }} + username: ${{ secrets.SDU_SSH_USERNAME }} + password: ${{ secrets.SDU_SSH_PASSWORD }} + port: 22 + source: "$GITHUB_WORKSPACE/packs/*" + target: "${{ secrets.SDU_SSH_PACKS }}" + strip_components: 1 + rm: true \ No newline at end of file diff --git a/.gitea/workflows/sshupload.sh b/.gitea/workflows/sshupload.sh deleted file mode 100644 index 9ecf450..0000000 --- a/.gitea/workflows/sshupload.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -usage() { - cat <<'EOF' -Usage: sshupload.sh -l -r -s -u -p -EOF -} - -local_glob="" -remote_dir="" -server="" -user="" -password="" - -while [[ $# -gt 0 ]]; do - case "$1" in - -l|--local) local_glob="$2"; shift 2;; - -r|--remote) remote_dir="$2"; shift 2;; - -s|--server) server="$2"; shift 2;; - -u|--user) user="$2"; shift 2;; - -p|--password) password="$2"; shift 2;; - -h|--help) usage; exit 0;; - *) echo "Unknown arg: $1" >&2; usage; exit 1;; - esac -done - -if [[ -z "$local_glob" || -z "$remote_dir" || -z "$server" || -z "$user" || -z "$password" ]]; then - echo "Missing required params" >&2 - usage - exit 1 -fi - -# Ensure sshpass installed -if ! command -v sshpass >/dev/null 2>&1; then - if command -v brew >/dev/null 2>&1; then - brew update - brew install hudochenkov/sshpass/sshpass - elif command -v apt-get >/dev/null 2>&1; then - sudo apt-get update - sudo apt-get install -y sshpass - else - echo "sshpass not found and no supported package manager" >&2 - exit 1 - fi -fi - -user_host="${user}@${server}" - -# Ensure remote dir exists and clear it -sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$user_host" "mkdir -p '$remote_dir' && rm -f '$remote_dir'/*" - -# Expand glob (supports ~ and patterns) and upload each file (compatible with macOS bash 3.x) -shopt -s nullglob -eval "files=( ${local_glob} )" -shopt -u nullglob - -if [[ ${#files[@]} -eq 0 ]]; then - echo "No files matched: $local_glob" >&2 - exit 1 -fi - -for f in "${files[@]}"; do - sshpass -p "$password" scp -o StrictHostKeyChecking=no "$f" "$user_host:$remote_dir/" -done - -echo "Upload completed"