mirror of
https://github.com/kiwix/kiwix-js-pwa.git
synced 2025-09-09 04:06:27 -04:00
Enable cloud build of portable Electron app
Former-commit-id: 1c5e898a947e22570cd316f57752572b766d7508 [formerly adc83096414fde0ae7ea6b98e7c1969da334f2dd] [formerly b7c83d0b68641e73d5420f5cff0ad099c11d257a] [formerly ed05c6d523b53343f8ca11ce7a393119516b0d31 [formerly bcf276bb09b80748b9aa7549abb461a6794562ec [formerly 3222ffef425df55b11b2e65dbb8ed52e2ed8afed]]] Former-commit-id: 8dd2062df66de78c92caf8367226d9d4f424b712 [formerly 701fbbc2ffd196622b5990444f6e9ffe871ebf77 [formerly 631300705c1d2cdb26791965eebd88f8d7b1ab84]] Former-commit-id: 1c572683b4f3083d374222e49312e4272b972f94 [formerly 391e9b68962a335f891f2ac0a86ca30e85679167] Former-commit-id: d0839384c27c4b92589f45250748945e956a2254
This commit is contained in:
parent
eb6f437148
commit
f16e89b8dd
9
.github/workflows/build-electron.yml
vendored
9
.github/workflows/build-electron.yml
vendored
@ -59,11 +59,16 @@ jobs:
|
||||
$INPUT_TARGET = $Env:INPUT_TARGET
|
||||
$CRON_LAUNCHED = $Env:CRON_LAUNCHED
|
||||
./scripts/Rewrite-AppVersion.ps1
|
||||
- name: build portable Electron app
|
||||
run: |
|
||||
$INPUT_VERSION_E = $Env:INPUT_VERSION -replace '^([0-9.]+)E?(.*)', '$1-E$2'
|
||||
./scripts/Create-DraftRelease -buildonly -tag_name $INPUT_VERSION_E -portableonly -wingetprompt N
|
||||
- name: publish
|
||||
run: |
|
||||
npm run publish
|
||||
$SSH_KEY = $Env:SSH_KEY
|
||||
echo "$SSH_KEY" > .\scripts\ssh_key
|
||||
$GITHUB_TOKEN = $Env:GITHUB_TOKEN
|
||||
$INPUT_VERSION = $Env:INPUT_VERSION
|
||||
$INPUT_TARGET = $Env:INPUT_TARGET
|
||||
$CRON_LAUNCHED = $Env:CRON_LAUNCHED
|
||||
@ -88,11 +93,13 @@ jobs:
|
||||
$INPUT_TARGET = $Env:INPUT_TARGET
|
||||
$CRON_LAUNCHED = $Env:CRON_LAUNCHED
|
||||
./scripts/Rewrite-AppVersion.ps1
|
||||
- name: build NWJS app
|
||||
run: ./scripts/Build-NWJS.ps1 -only32bit
|
||||
- name: publish
|
||||
run: |
|
||||
./scripts/Build-NWJS.ps1 -only32bit
|
||||
$SSH_KEY = $Env:SSH_KEY
|
||||
echo "$SSH_KEY" > .\scripts\ssh_key
|
||||
$GITHUB_TOKEN = $Env:GITHUB_TOKEN
|
||||
$INPUT_VERSION = $Env:INPUT_VERSION
|
||||
$INPUT_TARGET = $Env:INPUT_TARGET
|
||||
$CRON_LAUNCHED = $Env:CRON_LAUNCHED
|
||||
|
@ -1,10 +1,8 @@
|
||||
# This script is intended to be run by Create-DraftRelease, and must be dot-sourced (run with `. ./Build-Electron.ps1` or `. /path/to/Build-Electron.ps1`)
|
||||
# because it modifies variables needed in Create-DraftRelease
|
||||
$base_dir = "$PSScriptRoot/../bld/electron/"
|
||||
if ($text_tag -match 'WikiMed') {
|
||||
$electronbuild = "local"
|
||||
}
|
||||
if (($electronbuild -eq "")) {
|
||||
"`nSelected base_tag: $base_tag"
|
||||
if ($electronbuild -eq "") {
|
||||
""
|
||||
$electronbuild_check = Read-Host "Do you want to build Electron packages on GitHub instead of locally? [Y/N]"
|
||||
$electronbuild_check = -Not ( $electronbuild_check -imatch 'n' )
|
||||
@ -56,7 +54,7 @@ if ($alt_tag -imatch 'WikiMed|Wikivoyage') {
|
||||
$WinInstaller = $base_dir + "$alt_tag.by.Kiwix.Setup.$numeric_tag-E.exe"
|
||||
}
|
||||
if ($electronbuild -eq "local") {
|
||||
if (-Not (Test-Path $WinInstaller -PathType Leaf)) {
|
||||
if (-Not (Test-Path $WinInstaller -PathType Leaf) -and (-not $portableonly)) {
|
||||
"No package found: building $WinInstaller..."
|
||||
if (-Not $dryrun) {
|
||||
npm run dist-win
|
||||
@ -67,7 +65,7 @@ if ($electronbuild -eq "local") {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
"Package found."
|
||||
"Package found or only building portable package."
|
||||
}
|
||||
}
|
||||
# Portable app isn't built in the cloud, so we always run this
|
||||
@ -117,7 +115,7 @@ if (-Not ($old_windows_support -or (Test-Path $comp_electron_archive -PathType L
|
||||
"Compressing: $AddAppPackage, $compressed_assets_dir to $comp_electron_archive"
|
||||
if (-Not $dryrun) { "$AddAppPackage", "$compressed_assets_dir" | Compress-Archive -DestinationPath $comp_electron_archive -Force }
|
||||
}
|
||||
if ($electronbuild -eq "local") {
|
||||
if ($electronbuild -eq "local" -and (-not $portableonly)) {
|
||||
# Package Electron app for Linux
|
||||
"`nChecking for Electron packages for Linux..."
|
||||
$LinuxBasePackage = $base_dir + "Kiwix JS $alt_tag-$numeric_tag-E"
|
||||
|
@ -7,8 +7,9 @@ param (
|
||||
[switch]$draftonly = $false,
|
||||
[switch]$buildonly = $false,
|
||||
[string]$electronbuild = "", # 'local' or 'cloud'
|
||||
[switch]$portableonly = $false, # If set, only the portable electron build will be built. Implies local electron build.
|
||||
[switch]$updatewinget = $false,
|
||||
[string]$respondtowingetprompt = "" # Provide an override response (Y/N) to the winget prompt at the end of the script - for automation
|
||||
[string]$wingetprompt = "" # Provide an override response (Y/N) to the winget prompt at the end of the script - for automation
|
||||
)
|
||||
# DEV: To build Electron packages for all platforms and NWJS for XP and Vista in a single release, use, e.g., "v1.3.0E+N" (Electron + NWJS)
|
||||
# DEV: To build UWP + Electron in a single release (for WikiMed or Wikivoyage), use "v1.3.0+E" (plus Electron)
|
||||
@ -20,8 +21,11 @@ param (
|
||||
|
||||
# Provide parameters
|
||||
$release_uri = 'https://api.github.com/repos/kiwix/kiwix-js-windows/releases'
|
||||
$github_token = Get-Content -Raw "$PSScriptRoot/github_token"
|
||||
|
||||
if ($GITHUB_TOKEN) {
|
||||
$github_token = $GITHUB_TOKEN
|
||||
} else {
|
||||
$github_token = Get-Content -Raw "$PSScriptRoot/github_token"
|
||||
}
|
||||
$init_params = Get-Content -Raw "$PSScriptRoot\..\www\js\init.js"
|
||||
$serviceworker = Select-String 'appVersion' "$PSScriptRoot\..\service-worker.js" -List
|
||||
|
||||
@ -159,29 +163,26 @@ if ($json_object -imatch '"name":\s"([\w]+-[^"]+)') {
|
||||
"Package name: $package_name"
|
||||
|
||||
# Determine type of Electron build if any
|
||||
$electronbuild = ""
|
||||
if ($text_tag -match 'WikiMed') {
|
||||
$electronbuild = "local"
|
||||
}
|
||||
if (($flavour -match '_E') -or $plus_electron) {
|
||||
if (($electronbuild -eq "")) {
|
||||
if ($portableonly) { $electronbuild = 'local' }
|
||||
if ($electronbuild -eq "") {
|
||||
""
|
||||
$electronbuild_check = Read-Host "Do you want to build Electron packages on GitHub instead of locally? [Y/N]"
|
||||
$electronbuild_check = -Not ( $electronbuild_check -imatch 'n' )
|
||||
if ($electronbuild_check) {
|
||||
"`nSelecting cloud build..."
|
||||
$electronbuild = 'cloud'
|
||||
if (-Not ($release_tag_name -cmatch '-E$')) {
|
||||
$original_release_tag_name = $release_tag_name
|
||||
$release_tag_name = $release_tag_name -creplace '-?E$|-WikiMed|-Wikivoyage', ''
|
||||
$release_tag_name = $release_tag_name + '-E'
|
||||
"Changing release tag name to $release_tag_name"
|
||||
}
|
||||
} else {
|
||||
"`nSelecting local build..."
|
||||
$electronbuild = 'local'
|
||||
}
|
||||
}
|
||||
if (-Not ($release_tag_name -cmatch '-E$') -and ($electronbuild -eq 'cloud')) {
|
||||
$original_release_tag_name = $release_tag_name
|
||||
$release_tag_name = $release_tag_name -creplace '-?E$|-WikiMed|-Wikivoyage', ''
|
||||
$release_tag_name = $release_tag_name + '-E'
|
||||
"Changing release tag name to $release_tag_name"
|
||||
}
|
||||
}
|
||||
|
||||
# Create the Draft Release text
|
||||
@ -214,7 +215,7 @@ $release_params = @{
|
||||
# Post to the release server
|
||||
if (-Not ($dryrun -or $buildonly -or $updatewinget)) {
|
||||
$release = Invoke-RestMethod @release_params
|
||||
} elseif (-Not $updatewinget) {
|
||||
} elseif (-Not ($updatewinget -or $buildonly -or $updatewinget)) {
|
||||
"[DRYRUN] Release Body:`n$release_body"
|
||||
}
|
||||
|
||||
@ -283,7 +284,10 @@ if ($dryrun -or $buildonly -or $release.assets_url -imatch '^https:') {
|
||||
$AppImageArchives = @()
|
||||
if ($flavour -eq '_E') {
|
||||
"Building Electron packages..."
|
||||
$base_tag_origin = $base_tag
|
||||
$base_tag = $base_tag -replace '^([0-9.]+).*', '$1-E'
|
||||
. $PSScriptRoot/Build-Electron.ps1 # Note that we are dot-sourcing this, so that variables will be available in this scope
|
||||
$base_tag = $base_tag_origin
|
||||
} elseif ($flavour -eq '_N') {
|
||||
# Package NWJS app if necessary
|
||||
$base_dir = "$PSScriptRoot/../bld/nwjs"
|
||||
@ -442,7 +446,7 @@ if ($dryrun -or $buildonly -or $release.assets_url -imatch '^https:') {
|
||||
if ($plus_electron) {
|
||||
"Building add-on: Electron packages..."
|
||||
$base_tag_origin = $base_tag
|
||||
$base_tag = $base_tag -replace '^([\d.]+)', '$1-E'
|
||||
$base_tag = $base_tag -replace '^([0-9.]+).*', '$1-E'
|
||||
. $PSScriptRoot/Build-Electron.ps1
|
||||
$base_tag = $base_tag_origin
|
||||
}
|
||||
@ -471,7 +475,7 @@ if ($dryrun -or $buildonly -or $release.assets_url -imatch '^https:') {
|
||||
}
|
||||
if ($plus_electron) {
|
||||
$upload_assets += $AppImageArchives
|
||||
if ($electronbuild -eq 'local') { $upload_assets += $WinInstaller }
|
||||
if ($electronbuild -eq 'local' -and (-not $portableonly)) { $upload_assets += $WinInstaller }
|
||||
if ($old_windows_support) {
|
||||
$upload_assets += $nwjs_archives
|
||||
} else {
|
||||
@ -555,13 +559,13 @@ if ($dryrun -or $buildonly -or $release.assets_url -imatch '^https:') {
|
||||
}
|
||||
# Now update winget manifest if we are not building NWJS or Electron
|
||||
if ($flavour -eq '' -or $flavour -eq '_E') {
|
||||
if ($respondtowingetprompt) {
|
||||
$wingetcreate_check = $respondtowingetprompt
|
||||
if ($wingetprompt) {
|
||||
$wingetcreate_check = $wingetprompt
|
||||
} else {
|
||||
$wingetcreate_check = Read-Host "Would you like to update the WinGet repository with these new builds?`nWARNING: be sure you have published the draft release (if in doubt answer N)! [Y/N]"
|
||||
}
|
||||
$wingetcreate_check = $wingetcreate_check -imatch 'y'
|
||||
if ($original_release_tag_name) {
|
||||
if ($original_release_tag_name -and (-not $wingetprompt)) {
|
||||
$check = Read-Host "Did you change the Release Tag Name? (Y/N)"
|
||||
if ($check -imatch 'N') {
|
||||
"You must change the Tag name!"
|
||||
|
@ -1,9 +1,15 @@
|
||||
# Publish Kiwix Electron packages to Kiwix download server
|
||||
# Publish Kiwix Electron packages to a GitHub draft release and/or to Kiwix download server
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[string]$test = ""
|
||||
[string]$test = "",
|
||||
[switch]$dryrun = $false,
|
||||
[switch]$githubonly = $false,
|
||||
[string]$tag = ""
|
||||
)
|
||||
|
||||
if ($tag) {
|
||||
# If user overrode the INPUT_VERSION, use it
|
||||
$INPUT_VERSION = $tag
|
||||
}
|
||||
$target = "/data/download/release/kiwix-js-electron"
|
||||
$keyfile = "$PSScriptRoot\ssh_key"
|
||||
$keyfile = $keyfile -ireplace '[\\/]', '/'
|
||||
@ -19,8 +25,6 @@ if ($CRON_LAUNCHED) {
|
||||
$target = "/data/download/nightly/$current_date"
|
||||
}
|
||||
|
||||
"`nUploading packages to https://download.kiwix.org$target/ ...`n"
|
||||
& "C:\Program Files\Git\usr\bin\ssh.exe" @('-o', 'StrictHostKeyChecking=no', '-i', "$keyfile", 'ci@download.kiwix.org', "mkdir -p $target")
|
||||
if ((Get-Content ./package.json) -match 'nwVersion') {
|
||||
$Packages = $(ls bld/NWJS/*.*)
|
||||
} else {
|
||||
@ -29,7 +33,93 @@ if ((Get-Content ./package.json) -match 'nwVersion') {
|
||||
if ($test) {
|
||||
$Packages = @($test)
|
||||
}
|
||||
$Packages | % {
|
||||
|
||||
if (-not $CRON_LAUNCHED) {
|
||||
"`nChecking for a draft publishing target on GitHub..."
|
||||
if (-not $GITHUB_TOKEN) {
|
||||
$GITHUB_TOKEN = Get-Content -Raw "$PSScriptRoot/github_token"
|
||||
}
|
||||
$draft_release_params = @{
|
||||
Uri = "https://api.github.com/repos/kiwix/kiwix-js-windows/releases"
|
||||
Method = 'GET'
|
||||
Headers = @{
|
||||
'Authorization' = "token $GITHUB_TOKEN"
|
||||
'Accept' = 'application/vnd.github.v3+json'
|
||||
}
|
||||
ContentType = "application/json"
|
||||
}
|
||||
$releases = Invoke-RestMethod @draft_release_params
|
||||
$release_found = $false
|
||||
$release = $null
|
||||
$releases| Where-Object { $release_found -eq $False } | % {
|
||||
$release = $_
|
||||
if (($release.draft -eq $true) -and ($release.tag_name -eq $INPUT_VERSION) ) {
|
||||
$release_found = $true
|
||||
}
|
||||
}
|
||||
if ($release_found) {
|
||||
if ($dryrun) {
|
||||
$release_json = $release | ConvertTo-Json
|
||||
"[DRYRUN:] Draft release found: `n$release_json"
|
||||
}
|
||||
$upload_uri = $release.upload_url -ireplace '\{[^{}]+}', ''
|
||||
"`nUploading assets to: $upload_uri..."
|
||||
ForEach($asset in $packages) {
|
||||
if (-Not $asset) { Continue }
|
||||
if (-Not ($file -match '\.(exe|zip|msix)$')) { Continue }
|
||||
# Replace backslash with forward slash
|
||||
$asset_name = $asset -replace '^.*[\\/]([^\\/]+)$', '$1'
|
||||
# Replace spaces with hyphens
|
||||
$asset_name = $asset_name -replace '\s', '-';
|
||||
# Establish upload params
|
||||
$upload_params = @{
|
||||
Uri = $upload_uri + "?name=$asset_name"
|
||||
Method = 'POST'
|
||||
Headers = @{
|
||||
'Authorization' = "token $GITHUB_TOKEN"
|
||||
'Accept' = 'application/vnd.github.v3+json'
|
||||
}
|
||||
# Body = [System.IO.File]::ReadAllBytes($upload_file)
|
||||
InFile = $asset
|
||||
ContentType = 'application/octet-stream'
|
||||
}
|
||||
"`n*** Uploading $asset..."
|
||||
# Upload asset to the release server
|
||||
# $upload = [System.IO.File]::ReadAllBytes($upload_file) | Invoke-RestMethod @upload_params
|
||||
if (-Not $dryrun) {
|
||||
# Disable progress because it causes high CPU usage on large files, and slows down upload
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$upload = Invoke-RestMethod @upload_params
|
||||
}
|
||||
if ($dryrun -or $upload.name -eq ($asset_name -replace '\s', '.')) {
|
||||
if (-Not $dryrun) {
|
||||
"Upload successfully posted as " + $upload.url
|
||||
"Full details:"
|
||||
echo $upload
|
||||
} else {
|
||||
echo "DRYRUN with these upload parameters:`n" + @upload_params
|
||||
}
|
||||
} else {
|
||||
"`nI'm sorry, this upload appears to have failed! Please upload manually or try again..."
|
||||
if ($upload) {
|
||||
"`nThe server returned:"
|
||||
echo $upload
|
||||
} else {
|
||||
"The server did not respond."
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
"No draft release matching the tag $INPUT_VERSION was found."
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (-not $githubonly) {
|
||||
"`nUploading packages to https://download.kiwix.org$target/ ...`n"
|
||||
& "C:\Program Files\Git\usr\bin\ssh.exe" @('-o', 'StrictHostKeyChecking=no', '-i', "$keyfile", 'ci@download.kiwix.org', "mkdir -p $target")
|
||||
|
||||
$Packages | % {
|
||||
$file = $_
|
||||
if ($file -match '\.(exe|zip|msix)$') {
|
||||
$directory = $file -replace '^(.+[\\/])[^\\/]+$', '$1'
|
||||
@ -70,5 +160,6 @@ $Packages | % {
|
||||
& "C:\Program Files\Git\usr\bin\scp.exe" @('-o', 'StrictHostKeyChecking=no', '-i', "$keyfile", "$renamed_file", "ci@download.kiwix.org:$target")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
""
|
||||
|
Loading…
x
Reference in New Issue
Block a user