tauri使用github进行打包和自动更新教程

之前的几篇文章介绍了tauri的基本安装,本地打包等方法。本文将接着就前几篇文章进行继续阐述,着重介绍tauri介绍tauri以github为后台服务进行打包、更新,以及tauri配置启动图。

一、tauri使用github进行打包

1、首先在项目的根目录下创建生成.github>workflows>release.yml文件:

release.yml文件内容:

name: Release

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    strategy:
      fail-fast: false
      matrix:
        platform: [macos-latest, ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Install Node
        uses: actions/setup-node@v1
        with:
          node-version: 16

      - name: Install Rust stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: Install Dependencies (ubuntu only)
        if: matrix.platform == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf

      - run: yarn

      - name: Build Tauri
        uses: tauri-apps/tauri-action@v0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
          TAURI_KEY_PASSWORD: ''  TAURI_KEY_PASSWORD: "" # 密钥的加密文本,与seecrts时输入的密码一致即可。如果未输入密码,则此处留空,如果输入了密码,则也需要添加到 secrets 中,然后使用 ${{ secrets.TAURI_PRIVATE_KEY_PASSWORD }} 这种形式
        with:
          tagName: v__VERSION__
          releaseName: v__VERSION__
  update:
    needs: release
    runs-on: macos-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Install Node
        uses: actions/setup-node@v1
        with:
          node-version: 16

      - run: yarn

      - name: Create Update
        run: yarn update
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

2、生成tauri公、私钥

全局安装tauri


yarn global add  @tauri-apps/cli

or 

cnpm install  @tauri-apps/cli -g

生成公私钥命令:

tauri signer generate -w ~/.tauri/myapp.key

 注释 :如果设置密码的话,需要记住密码。

如果生成了公私钥就要可以进行签名打包,并进行更新。但是需要进行配置以后才能使用。

在项目当中的tauri.conf.json当中配置公钥和更新路径

 然后在github项目环境中配置私钥:

 在本地项目当中创建文件scripts>update.mjs,文件内容:

// @ts-nocheck
import fetch from 'node-fetch';
import { getOctokit, context } from '@actions/github';

const UPDATE_TAG_NAME = 'updater';
const UPDATE_FILE_NAME = 'update.json';

const getSignature = async (url) => {
  const response = await fetch(url, {
    method: 'GET',
    headers: { 'Content-Type': 'application/octet-stream' }
  });
  return response.text();
};

const updateData = {
  name: '',
  pub_date: new Date().toISOString(),
  platforms: {
    win64: { signature: '', url: '' },
    linux: { signature: '', url: '' },
    darwin: { signature: '', url: '' },
    'linux-x86_64': { signature: '', url: '' },
    'windows-x86_64': { signature: '', url: '' }
  }
};

const octokit = getOctokit(process.env.GITHUB_TOKEN);
const options = { owner: context.repo.owner, repo: context.repo.repo };

const { data: release } = await octokit.rest.repos.getLatestRelease(options);
updateData.name = release.tag_name;
// eslint-disable-next-line camelcase
for (const { name, browser_download_url } of release.assets) {
  if (name.endsWith('.msi.zip')) {
    // eslint-disable-next-line camelcase
    updateData.platforms.win64.url = browser_download_url;
    // eslint-disable-next-line camelcase
    updateData.platforms['windows-x86_64'].url = browser_download_url;
  } else if (name.endsWith('.msi.zip.sig')) {
    // eslint-disable-next-line no-await-in-loop
    const signature = await getSignature(browser_download_url);
    updateData.platforms.win64.signature = signature;
    updateData.platforms['windows-x86_64'].signature = signature;
  } else if (name.endsWith('.app.tar.gz')) {
    // eslint-disable-next-line camelcase
    updateData.platforms.darwin.url = browser_download_url;
  } else if (name.endsWith('.app.tar.gz.sig')) {
    // eslint-disable-next-line no-await-in-loop
    const signature = await getSignature(browser_download_url);
    updateData.platforms.darwin.signature = signature;
  } else if (name.endsWith('.AppImage.tar.gz')) {
    // eslint-disable-next-line camelcase
    updateData.platforms.linux.url = browser_download_url;
    // eslint-disable-next-line camelcase
    updateData.platforms['linux-x86_64'].url = browser_download_url;
  } else if (name.endsWith('.AppImage.tar.gz.sig')) {
    // eslint-disable-next-line no-await-in-loop
    const signature = await getSignature(browser_download_url);
    updateData.platforms.linux.signature = signature;
    updateData.platforms['linux-x86_64'].signature = signature;
  }
}

const { data: updater } = await octokit.rest.repos.getReleaseByTag({
  ...options,
  tag: UPDATE_TAG_NAME
});

for (const { id, name } of updater.assets) {
  if (name === UPDATE_FILE_NAME) {
    // eslint-disable-next-line no-await-in-loop
    await octokit.rest.repos.deleteReleaseAsset({ ...options, asset_id: id });
    break;
  }
}

await octokit.rest.repos.uploadReleaseAsset({
  ...options,
  release_id: updater.id,
  name: UPDATE_FILE_NAME,
  data: JSON.stringify(updateData)
});

配置完成后,提交代码到github代码仓库。

二、为github项目打tag

在update.mjs文件中,有两个常量:

const UPDATE_TAG_NAME = 'updater';
const UPDATE_FILE_NAME = 'update.json';

这是为了拼接更新路径而设置,因此需要在github项目下生成一个update.json.这就需要在项目下首先打上一个updater的tag。

git tag updater

git push --tags

 然后release这个updater tag:

 然后再提交版本tag进行打包:

git tag v1.0.0

git push tags

然后github的action就进入打包状态,完成后的结果

最终生成的安装包就是:

 

 这个时候在访问tauri.conf.mjs文件当中的endpoints字段的链接,就会出现下载update.json的情况。至此,github的打包更新就会完成。

### 使用 NSIS 打包 Tauri 应用程序 #### 准备工作 为了确保 NSIS 能够正常用于打包 Tauri 应用程序,需先确认已成功安装并配置好 NSIS 开发环境。如果遇到下载失败的情况,建议手动获取 `nsis-3.zip` 文件,并按照官方指南解压缩至指定路径[^1]。 #### 配置 tauri.conf.json 在项目的根目录找到或创建名为 `tauri.conf.json` 的配置文件,在其中定义与 NSIS 相关的部分设置: ```json { "build": { "distDir": "../dist", "devPath": "http://localhost:4000" }, "windows": [ { "title": "MyApp", "filename": "${name}-${version}-setup.exe", "icon": ["icons/app.ico"], "installer": { "type": "nsis", "config": "./src-tauri/nsis-script.nsi" } } ] } ``` 此段 JSON 片段指定了使用 NSIS 创建安装器以及自定义脚本的位置。 #### 编写 NSIS 脚本 接着编写位于上述路径下的 `.nsis` 文件来描述具体的安装逻辑。下面给出一个简单的例子作为起点: ```nsis ; src-tauri/nsis-script.nsi !include MUI2.nsh ; Modern User Interface library version 2 Name MyAppInstaller OutFile setup.exe Section SetOutPath "$INSTDIR" File /r ${TAURI_DIST_DIR}\* CreateDirectory "$SMPROGRAMS\My App" CreateShortCut "$SMPROGRAMS\My App\Uninstall.lnk" \ '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \ "DisplayName" "My Application (remove only)" WriteUninstaller uninstall.exe SectionEnd Function .onInstSuccess MessageBox MB_OK "Installation completed successfully!" FunctionEnd ``` 这段代码实现了基本的应用部署流程,包括复制资源文件、建立快捷方式注册表项等操作。 #### 构建过程中的注意事项 当一切准备就绪之后就可以执行构建命令了。需要注意的是,有时由于网络原因或其他因素可能导致依赖库无法自动拉取下来;此时可参照之前提到的手动处理办法解决此类问题。 一旦完成以上步骤,则可以通过运行如下命令启动整个编译链路: ```bash npm run build && npm run package ``` 这会触发 Tauri CLI 自动读取配置并将应用封装成独立的 Windows 可执行文件及其配套组件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

住在河边的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值