当前位置: 首页 > news >正文

tauri在github上进行自动更新打包并发版过程,实战操作避坑

从网上找了很多很多的文章,结果还是入坑了,一个问题找了一天才解决:

Error A public key has been found, but no private key. Make sure to set `TAURI_PRIVATE_KEY` environment variable.

596 ELIFECYCLE  Command failed with exit code 1.

597Error: Process completed with exit code 1.

想要让tauri应用自动升级,就要配置公私钥设置,官方文档:Updater | Tauri Apps

本地生成公私钥

mac和linux生成公私钥

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

windows生成公私钥

pnpm tauri signer generate -w $HOME/.tauri/myapp.key

 

给tauri配置公私钥

在tauri.conf.json文件中开启自动升级,并将公钥添加到里面,设置你的升级信息json文件获取的url路径

 json文件内容格式:

{"version": "v1.0.0","notes": "Test version","pub_date": "2020-06-22T19:25:57Z","platforms": {"darwin-x86_64": {"signature": "Content of app.tar.gz.sig","url": "https://github.com/username/reponame/releases/download/v1.0.0/app-x86_64.app.tar.gz"},"darwin-aarch64": {"signature": "Content of app.tar.gz.sig","url": "https://github.com/username/reponame/releases/download/v1.0.0/app-aarch64.app.tar.gz"},"linux-x86_64": {"signature": "Content of app.AppImage.tar.gz.sig","url": "https://github.com/username/reponame/releases/download/v1.0.0/app-amd64.AppImage.tar.gz"},"windows-x86_64": {"signature": "Content of app.msi.sig","url": "https://github.com/username/reponame/releases/download/v1.0.0/app-x64.msi.zip"}}
}

设置环境变量

将TAURI_PRIVATE_KEY和TAURI_KEY_PASSWORD设置为环境变量

mac和linux:

export TAURI_PRIVATE_KEY="content of the generated key"
export TAURI_KEY_PASSWORD="password"

windows:

set TAURI_PRIVATE_KEY="content of the generated key"
set TAURI_KEY_PASSWORD="password"

powershell:

$env:TAURI_PRIVATE_KEY="content of the generated key"
$env:TAURI_KEY_PASSWORD="password"

编写github action yml文件

我这里用的pnpm作为包管理工具的,你也可以使用yarn或者npm,但是我推荐使用pnpm

name: Release CIon:push:# Sequence of patterns matched against refs/tagstags:- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10workflow_dispatch:jobs:release:permissions:contents: writestrategy:fail-fast: falsematrix:# 选择编译平台platform: [macos-latest, ubuntu-20.04, windows-latest]runs-on: ${{ matrix.platform }}steps:- name: Checkout repositoryuses: actions/checkout@v3- name: Install dependencies (ubuntu only)if: matrix.platform == 'ubuntu-20.04'# You can remove libayatana-appindicator3-dev if you don't use the system tray feature.run: |sudo apt-get updatesudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev- name: Rust setupuses: dtolnay/rust-toolchain@stable- name: Rust cacheuses: swatinem/rust-cache@v2with:workspaces: './src-tauri -> target'- name: Sync node version and insatll nodejsuses: actions/setup-node@v3with:node-version: 16# 使用 pnpm 作为包管理器- name: Install pnpmuses: pnpm/action-setup@v2id: pnpm-installwith:version: 8run_install: false- name: Get pnpm store directoryid: pnpm-cacheshell: bashrun: |echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT- uses: actions/cache@v3name: Setup pnpm cachewith:path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}restore-keys: |${{ runner.os }}-pnpm-store-- name: Install app dependencies and build itrun: pnpm i && pnpm bundleenv:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}- name: Tauri Actionuses: tauri-apps/tauri-action@v0.3env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}with:tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.releaseName: 'App Name v__VERSION__' # 自定义 release 名称,__VERSION__ 将自动填写为版本信息releaseBody: 'See the assets to download and install this version.'releaseDraft: trueprerelease: false

在github上配置私钥

因为你的打包工作最后要放到github上,所以要在工作流中配置TAURI_PRIVATE_KEY和TAURI_KEY_PASSWORD设置为环境变量才可以,不然无法进行打包,会报错说找不到TAURI_PRIVATE_KEY

 按照提示,将环境变量添加好就可以了

打tag发版 

然后打一个tag进行发版操作

git tag v0.0.1git push --tag

 到github action里面就可以看到工作流就已经开始运行了

当然我这里是已经运行成功了的,等你的工作流运行成功后,就可以到release页面找到打的包了

 最后将打包后的文件下载链接和签名配置到那个更新文件里面就可以实现自动更新了:

 有问题可以看我开发的filehub文件存储仓库代码:GitHub - Sjj1024/s-hub: 一个使用github作为资源存储的软件

相关文章:

tauri在github上进行自动更新打包并发版过程,实战操作避坑

从网上找了很多很多的文章,结果还是入坑了,一个问题找了一天才解决: Error A public key has been found, but no private key. Make sure to set TAURI_PRIVATE_KEY environment variable. 596 ELIFECYCLE  Command failed with exit code…...

css中flex后文本溢出的问题

原因: 为了给flex item提供一个合理的默认最小尺寸,flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为: min-width: auto 水平flex布局 min-height:auto 垂直flex布局 解决办法&…...

restful接口设计规范[仅供参考]

1. 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。 https://www.example.org/api/2. 版本(Versioning) 应该将API的版本号放入URL。 http://…...

Metabase 远程代码执行(CVE-2023-38646)

漏洞描述 Metabase是一款开源数据分析及可视化工具。它可允许用户连接至各种不同类型数据源,未经身份认证的攻击者可利用本漏洞在服务器上以运行 Metabase服务器的权限进行任意命令执行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩…...

【TiDB理论知识 07】SQL执行流程

一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL,通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查,生成执行计划 发送给Executor,从TIKV获…...

微服务——服务异步通讯RabbitMQ

前置文章 消息队列——RabbitMQ基本概念容器化部署和简单工作模式程序_北岭山脚鼠鼠的博客-CSDN博客 消息队列——rabbitmq的不同工作模式_北岭山脚鼠鼠的博客-CSDN博客 消息队列——spring和springboot整合rabbitmq_北岭山脚鼠鼠的博客-CSDN博客 目录 Work queues 工作队列…...

事件冒泡、事件捕获和事件委托

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 什么是事件冒泡、事件捕获和事件委托? 事件冒泡(Event Bubbling)、事件捕获(Event Capturing)和事件委托(Event Delegation&…...

WEB 典型安全功能说明

WEB 典型安全功能 认证Authentication 认证是指通过验证用户的身份来确认用户是否有权访问某个系统或资源。在Web安全中,认证是非常重要的一环,它可以防止未经授权的访问,保护用户的数据和系统的安全。 登录 登录是用户认证的常见方式之一…...

SQL编译优化原理

最近在团队的OLAP引擎上做了一些SQL编译优化的工作,整理到了语雀上,也顺便发在博客上了。SQL编译优化理论并不复杂,只需要掌握一些关系代数的基础就比较好理解;比较困难的在于reorder算法部分。 文章目录 基础概念关系代数等价 j…...

qt signal slots lambda

这里用到了qt的版本检测 连接 Combox的currentIndexChanged事件 emit来触发处理的事件 ,进行业务或逻辑处理 这样的写法是lambda表达式的写法,和c#中的 (obj)>{ //todo } 类同 [](int indx){ //todo } #if QT_VERSION > QT_VERSION_CHECK(5,7,0)c…...

Spring【声明式事务】

事务简介 把一组业务当成一个业务来做;要么都成功,要么都失败!事务在项目开发中,十分重要,涉及到数据一致性的问题,需要十分注意!确保完整性和一致性! 事务的ACID原则:…...

【雕爷学编程】MicroPython动手做(17)——掌控板之触摸引脚2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

pytorch 中 view 和reshape的区别

在 PyTorch(一个流行的深度学习框架)中, reshape 和 view 都是用于改变张量(tensor)形状的方法,但它们在实现方式和使用上有一些区别。下面是它们之间的主要区别: 实现方式: reshap…...

认识数组指针

文章目录 数组指针的定义数组指针的应用 数组指针的定义 类比 整形数组——存放整形的数组 指针数组——存放指针的数组 整形指针——存放整形地址的指针 数组指针——存放数组地址的指针 深度理解 在之前我们知道:数组名表示首元素地址,但是有&#xf…...

SSM面试题-Spring容器的启动流程

解答: 1. BeanDefinitionReader读取配置文件(xml yml properties),创建BeanDefinition(存储bean的定义信息) 2. 配置文件读取成功后,将相应的配置转换成 BeanDefinition 的对象实例保存在DefaultListableBeanFactory#beanDefinitionMap 中 3. 根据配置的 BeanFacto…...

Vue 3:玩一下web前端技术(八)

前言 本章内容为VUE基础与相关技术讨论。 上一篇文章地址: Vue 3:玩一下web前端技术(七)_Lion King的博客-CSDN博客 下一篇文章地址: (暂无) 一、基础 官方文档:创建一个 Vue…...

AI绘画Stable Diffusion原理之Autoencoder-Latent

前言 传送门: stable diffusion:Git|论文 stable-diffusion-webui:Git Google Colab Notebook:Git kaggle Notebook:Git 今年AIGC实在是太火了,让人大呼许多职业即将消失,比如既能帮…...

C++核心知识点总结

学习一门新的程序设计语言得到最好方法就是练习编写程序! C基础 变量和基本类型 基本内置类型 定义解释 算术类型 整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long、 浮点型:…...

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码: options {tooltip: {trigger: axis, //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。…...

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接,需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序,Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...