Skip to content

오픈 소스 Tauri 애플리케이션 GitHub Actions 자동화 배포 및 업그레이드 가이드

1. 소개

이 문서에서는 GitHub Actions를 사용하여 Tauri 애플리케이션의 자동화 빌드, 출시 및 UpgradeLink를 통해 자동 애플리케이션 업데이트 기능을 구현하는 방법을 자세히 설명합니다. 이 가이드를 통해 코드 제출에서 애플리케이션 업데이트까지의 전체 자동화 프로세스를 완료하기 위해 GitHub Actions 워크플로를 구성하는 방법을 배울 수 있습니다.

2. 핵심 도구 소개

1. 공식 Tauri GitHub Action

Tauri에서 제공하는 공식 GitHub Action 플러그인은 개발자가 GitHub Actions 환경에서 Tauri 애플리케이션을 자동으로 빌드, 패키징 및 GitHub Releases에 출시하는 데 도움을 줍니다.

UpgradeLink에서 제공하는 Action 플러그인은 Tauri 애플리케이션에서 생성된 업데이트 파일(latest.json)을 UpgradeLink 서버에 업로드하는 데 사용됩니다. UpgradeLink는 json 파일에서 애플리케이션 파일 주소를 읽어 파일을 저장하고 자동으로 애플리케이션 버전 파일 및 해당 업그레이드 전략을 생성합니다.

3. 완전한 워크플로를 갖춘 예제 프로젝트

완전한 워크플로를 갖춘 예제 프로젝트:

3. 워크플로 설명

워크플로는 두 가지 주요 작업으로 구성됩니다:

  1. publish-tauri: Tauri 애플리케이션을 빌드하여 GitHub Releases에 출시합니다.

    • 크로스 플랫폼 빌드: macOS, Linux 및 Windows를 동시에 지원합니다.
    • 버전 번호 추출: Tauri 빌드 출력에서 애플리케이션 버전 번호를 추출합니다.
    • 릴리스 관리: 자동으로 GitHub Release를 생성하고 애플리케이션 설치 패키지를 업로드합니다.
  2. upgradeLink-upload: 업데이트 정보를 UpgradeLink에 동기화합니다.

    • 종속성: publish-tauri 작업이 완료될 때까지 기다립니다.
    • 버전 인식: 출력 매개변수를 통해 애플리케이션 버전 번호를 얻습니다.
    • API 호출: UpgradeLink Action을 사용하여 latest.json을 업그레이드 서버에 업로드합니다.

4. 통합 단계 자세한 설명

1. 준비

먼저 다음을 확인하세요:

  • GitHub 리포지토리가 생성되었고 Tauri 애플리케이션 코드가 업로드되었습니다.
  • UpgradeLink 플랫폼 계정이 있으며 다음 자격 증명을 얻었습니다:
  • UpgradeLink 플랫폼의 tauri 애플리케이션 구성에 GitHub 리포지토리 주소를 구성했습니다.

2. GitHub Secrets 구성

GitHub 리포지토리 Settings > Security > Secrets and variables > Actions에서 다음 암호화된 환경 변수를 추가하세요:

Secret NameDescription
UPGRADE_LINK_ACCESS_KEYAPI 호출 인증을 위해 UpgradeLink 플랫폼에서 제공하는 액세스 키
UPGRADE_LINK_ACCESS_SECRETAPI 호출 인증을 위해 UpgradeLink 플랫폼에서 제공하는 액세스 시크릿
UPGRADE_LINK_TAURI_KEYUpgradeLink 플랫폼에서 귀하의 Tauri 애플리케이션에 할당된 고유 식별자
TAURI_SIGNING_PRIVATE_KEYTauri 애플리케이션 서명 개인 키 (코드 서명이 필요한 경우)
TAURI_SIGNING_PRIVATE_KEY_PASSWORD서명 개인 키 비밀번호 (설정된 경우)

3. 먼저 Tauri에서 제공하는 공식 tauri-action을 사용하여 테스트하는 것이 좋습니다. 이를 통해 Releases 버전의 정상적인 빌드 및 출시를 확인할 수 있습니다.

tauri-action 워크플로를 사용하면 다양한 권한 문제에 직면할 수 있으므로 사전에 프로세스를 실행해야 합니다.

4. 공식에서 제공하는 기본 구성 정보를 수정합니다.

공식 예제 워크플로

공식 예제를 기반으로 다음과 같이 수정합니다:

name: 'publish'

on:
  push:
    branches:
      - main

jobs:
  publish-tauri:
    permissions:
      contents: write
    outputs:
      appVersion: ${{ steps.set-job-output.outputs.appVersion }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - platform: 'macos-latest' # Arm 기반 맥(M1 이상)용
            args: '--target aarch64-apple-darwin'
          - platform: 'macos-latest' # Intel 기반 맥용
            args: '--target x86_64-apple-darwin'
          - platform: 'ubuntu-22.04'
            args: ''
          - platform: 'ubuntu-22.04-arm' # 공개 리포지토리에서만 사용 가능
            args: ''
          - platform: 'windows-latest'
            args: ''

    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4

      - name: install dependencies (ubuntu only)
        if: startsWith(matrix.platform, 'ubuntu-') # 위에서 정의한 platform 값과 일치해야 합니다.
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils

      - name: setup node
        uses: actions/setup-node@v4
        with:
          node-version: lts/*
          cache: 'yarn' # 이를 npm, yarn 또는 pnpm으로 설정하세요.

      - name: install Rust stable
        uses: dtolnay/rust-toolchain@stable # 이를 dtolnay/rust-toolchain@nightly로 설정하세요
        with:
          # 이러한 타겟은 맥os 러너에서만 사용되므로 윈도우 및 리눅스 빌드를 약간 가속화하기 위해 `if`에 있습니다.
          targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

      - name: Rust cache
        uses: swatinem/rust-cache@v2
        with:
          workspaces: './src-tauri -> target'

      - name: install frontend dependencies
        # `beforeBuildCommand`를 구성하지 않은 경우 여기에서 프론트엔드도 빌드해야 할 수 있습니다.
        run: yarn install # 사용 중인 도구에 따라 이를 npm 또는 pnpm으로 변경하세요.

      - uses: tauri-apps/tauri-action@v0
        id: tauri-action  # 나중에 참조하기 위해 id 추가
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
        with:
          tagName: tauri-demo-v__VERSION__
          releaseName: 'tauri-demo v__VERSION__'
          releaseBody: 'See the assets to download this version and install.'
          releaseDraft: false # 드래프트 버전 생성하지 않기
          prerelease: false # 프리릴리스 버전으로 지정하지 않기
          args: ${{ matrix.args }}

      - name: Set job output
        id: set-job-output
        if: matrix.platform == 'ubuntu-22.04'
        run: |
          echo "appVersion=${{ steps.tauri-action.outputs.appVersion }}" >> $GITHUB_OUTPUT
          

  upgradeLink-upload:
      needs:  publish-tauri  # publish-tauri 작업 완료에 의존
      permissions:
        contents: write
      runs-on: ubuntu-latest
      steps:
        - name: Send a request to UpgradeLink
          uses: toolsetlink/upgradelink-action@3.0.2
          with:
            access_key: ${{ secrets.UPGRADE_LINK_ACCESS_KEY }}
            access_secret: ${{ secrets.UPGRADE_LINK_ACCESS_SECRET }}
            config: |
              {
                "app_type": "tauri",
                "request": {
                  "app_key": "${{ secrets.UPGRADE_LINK_TAURI_KEY }}",
                  "latest_json_url": "https://github.com/toolsetlink/tauri-demo/releases/download/tauri-demo-v${{ needs.publish-tauri.outputs.appVersion }}/latest.json"
                }
              }

5. 일반적인 문제 및 해결 방법

1. GitHub Actions 권한 문제

권한이 충분하지 않은 오류가 발생하는 경우 다음을 확인하세요:

  • 워크플로 파일에 permissions: contents: write가 구성되어 있는지 확인하세요
  • 리포지토리 설정에서 Actions 권한이 올바르게 구성되어 있는지 확인하세요

2. 빌드 실패 문제 해결

  • GitHub Actions 로그에서 특정 오류 정보를 확인하세요
  • 모든 종속성이 올바르게 설치되었는지 확인하세요, 특히 Linux 플랫폼의 시스템 종속성
  • Rust 및 Node.js 버전 호환성을 확인하세요
  • UpgradeLink 콘솔의 애플리케이션 식별자가 구성과 일치하는지 확인하세요
  • GitHub Releases에 올바른 latest.json 파일이 생성되었는지 확인하세요

6. 요약

위의 구성을 통해 Tauri 애플리케이션 빌드, 출시 및 업데이트 프로세스의 전체 자동화를 실현할 수 있습니다. 코드가 지정된 브랜치에 푸시될 때마다 GitHub Actions는 자동으로 다음 작업을 완료합니다:

  1. 코드 변경 감지
  2. 다중 플랫폼 환경에서 Tauri 애플리케이션 빌드
  3. GitHub Release 생성 및 설치 패키지 업로드
  4. 애플리케이션 버전 번호 추출
  5. 업데이트 정보를 UpgradeLink 플랫폼에 동기화
  6. 최종 사용자는 UpgradeLink를 통해 애플리케이션 업데이트 알림을 받게 됩니다

이 자동화된 프로세스는 개발 효율성을 크게 향상시키고 수동 작업 오류를 줄이며 개발자가 애플리케이션 기능 개발에 더 집중할 수 있도록 합니다.

toolsetlink@163.com