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…...
认识数组指针
文章目录 数组指针的定义数组指针的应用 数组指针的定义 类比 整形数组——存放整形的数组 指针数组——存放指针的数组 整形指针——存放整形地址的指针 数组指针——存放数组地址的指针 深度理解 在之前我们知道:数组名表示首元素地址,但是有…...
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…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
