-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Rajiv Shah <rajivshah1@icloud.com> Co-authored-by: Lucas Nogueira <lucas@tauri.studio> Co-authored-by: nothingismagick <denjell@mailscript.com> Co-authored-by: Laegel <valentin.chouaf@laposte.net>
- Loading branch information
1 parent
2ea56cf
commit 6d70c8e
Showing
94 changed files
with
7,572 additions
and
697 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
--- | ||
"tauri-updater": minor | ||
"tauri-cli": minor | ||
"tauri-bundler": minor | ||
"tauri": minor | ||
--- | ||
|
||
Alpha version of tauri-updater. Please refer to the `README` for more details. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
name: updater test artifacts | ||
on: | ||
pull_request: | ||
paths: | ||
- '.github/workflows/artifacts-updater.yml' | ||
- 'tauri/**' | ||
- 'tauri-updater/**' | ||
- 'cli/core/**' | ||
- 'cli/tauri-bundler/**' | ||
- 'examples/updater/**' | ||
|
||
jobs: | ||
build-artifacs: | ||
runs-on: ${{ matrix.platform }} | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
platform: [ubuntu-latest, macos-latest, windows-latest] | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: install stable | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: stable | ||
- name: install webkit2gtk (ubuntu only) | ||
if: matrix.platform == 'ubuntu-latest' | ||
run: | | ||
sudo apt-get update | ||
sudo apt-get install -y webkit2gtk-4.0 | ||
- run: cargo install --path ./cli/core --force | ||
- name: install cli deps via yarn | ||
working-directory: ./cli/tauri.js | ||
run: yarn | ||
- name: build cli | ||
working-directory: ./cli/tauri.js | ||
run: yarn build | ||
- name: build sample artifacts (updater) | ||
working-directory: ./examples/updater | ||
run: | | ||
yarn install | ||
node ../../cli/tauri.js/bin/tauri build | ||
env: | ||
TAURI_PRIVATE_KEY: dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5YTBGV3JiTy9lRDZVd3NkL0RoQ1htZmExNDd3RmJaNmRMT1ZGVjczWTBKZ0FBQkFBQUFBQUFBQUFBQUlBQUFBQWdMekUzVkE4K0tWQ1hjeGt1Vkx2QnRUR3pzQjVuV0ZpM2czWXNkRm9hVUxrVnB6TUN3K1NheHJMREhQbUVWVFZRK3NIL1VsMDBHNW5ET1EzQno0UStSb21nRW4vZlpTaXIwZFh5ZmRlL1lSN0dKcHdyOUVPclVvdzFhVkxDVnZrbHM2T1o4Tk1NWEU9Cg== | ||
- uses: actions/upload-artifact@v2 | ||
if: matrix.platform == 'ubuntu-latest' | ||
with: | ||
name: linux-updater-artifacts | ||
path: ./target/release/bundle/appimage/updater-example_*.AppImage.* | ||
|
||
- uses: actions/upload-artifact@v2 | ||
if: matrix.platform == 'windows-latest' | ||
with: | ||
name: windows-updater-artifacts | ||
path: ./target/release/bundle/msi/* | ||
|
||
- uses: actions/upload-artifact@v2 | ||
if: matrix.platform == 'macos-latest' | ||
with: | ||
name: macos-updater-artifacts | ||
path: ./target/release/bundle/macos/updater-example_*.app.tar.* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
import { once, listen, emit, UnlistenFn } from './helpers/event' | ||
|
||
export type UpdateStatus = 'PENDING' | 'ERROR' | 'DONE' | 'UPTODATE' | ||
|
||
export interface UpdateStatusResult { | ||
error?: string | ||
status: UpdateStatus | ||
} | ||
|
||
export interface UpdateManifest { | ||
version: string | ||
date: string | ||
body: string | ||
} | ||
|
||
export interface UpdateResult { | ||
manifest?: UpdateManifest | ||
shouldUpdate: boolean | ||
} | ||
|
||
export async function installUpdate(): Promise<void> { | ||
let unlistenerFn: UnlistenFn | undefined | ||
|
||
function cleanListener(): void { | ||
if (unlistenerFn) { | ||
unlistenerFn() | ||
} | ||
unlistenerFn = undefined | ||
} | ||
|
||
return new Promise((resolve, reject) => { | ||
function onStatusChange(statusResult: UpdateStatusResult): void { | ||
if (statusResult.error) { | ||
cleanListener() | ||
return reject(statusResult.error) | ||
} | ||
|
||
// install complete | ||
if (statusResult.status === 'DONE') { | ||
cleanListener() | ||
return resolve() | ||
} | ||
} | ||
|
||
// listen status change | ||
listen('tauri://update-status', (data: { payload: any }) => { | ||
onStatusChange(data?.payload as UpdateStatusResult) | ||
}) | ||
.then((fn) => { | ||
unlistenerFn = fn | ||
}) | ||
.catch((e) => { | ||
cleanListener() | ||
// dispatch the error to our checkUpdate | ||
throw e | ||
}) | ||
|
||
// start the process we dont require much security as it's | ||
// handled by rust | ||
emit('tauri://update-install').catch((e) => { | ||
cleanListener() | ||
// dispatch the error to our checkUpdate | ||
throw e | ||
}) | ||
}) | ||
} | ||
|
||
export async function checkUpdate(): Promise<UpdateResult> { | ||
let unlistenerFn: UnlistenFn | undefined | ||
|
||
function cleanListener(): void { | ||
if (unlistenerFn) { | ||
unlistenerFn() | ||
} | ||
unlistenerFn = undefined | ||
} | ||
|
||
return new Promise((resolve, reject) => { | ||
function onUpdateAvailable(manifest: UpdateManifest): void { | ||
cleanListener() | ||
return resolve({ | ||
manifest, | ||
shouldUpdate: true | ||
}) | ||
} | ||
|
||
function onStatusChange(statusResult: UpdateStatusResult): void { | ||
if (statusResult.error) { | ||
cleanListener() | ||
return reject(statusResult.error) | ||
} | ||
|
||
if (statusResult.status === 'UPTODATE') { | ||
cleanListener() | ||
return resolve({ | ||
shouldUpdate: false | ||
}) | ||
} | ||
} | ||
|
||
// wait to receive the latest update | ||
once('tauri://update-available', (data: { payload: any }) => { | ||
onUpdateAvailable(data?.payload as UpdateManifest) | ||
}).catch((e) => { | ||
cleanListener() | ||
// dispatch the error to our checkUpdate | ||
throw e | ||
}) | ||
|
||
// listen status change | ||
listen('tauri://update-status', (data: { payload: any }) => { | ||
onStatusChange(data?.payload as UpdateStatusResult) | ||
}) | ||
.then((fn) => { | ||
unlistenerFn = fn | ||
}) | ||
.catch((e) => { | ||
cleanListener() | ||
// dispatch the error to our checkUpdate | ||
throw e | ||
}) | ||
|
||
// start the process | ||
emit('tauri://update').catch((e) => { | ||
cleanListener() | ||
// dispatch the error to our checkUpdate | ||
throw e | ||
}) | ||
}) | ||
} |
Oops, something went wrong.