How to download the latest QDT’s version¶
QDT comes with an upgrade command that check if a new version has been released in comparison with the used on, read the changelog and download the newest version: see command-line usage.
Sometimes a system script fits better to usage, use-case or IT policy. We give below an example in PowerShell for Windows.
<#
.Synopsis
Download the latest version of QDT executable from GitHub Releases.
.DESCRIPTION
This script will:
1. retrieve latest version of QDT from GitHub Releases API
2. identify the asset to download (*.exe)
3. download it as ~/qdt.exe
4. launch it with --help args to check it runs well
.LICENSE
SPDX-License-Identifier: Apache-2.0
#>
# -- VARIABLES
# source repository
$repository = "qgis-deployment/qgis-deployment-toolbelt-cli"
# GitHub API URL for the latest release
$apiUrl = "https://api.github.com/repos/$repository/releases/latest"
# API request headers
$apiHeaders = @{"User-Agent" = "QDT upgrader from $env:computername" }
# destination path
$destinationFile = "$env:USERPROFILE/qdt.exe"
# -- MAIN
try {
# Retrieve the latest release data
Write-Host "Retrieving latest QDT release from $apiUrl..."
$releaseData = Invoke-RestMethod -Uri $apiUrl -Headers $apiHeaders
# Extract the latest tag and the asset download URL
$latestTag = $releaseData.tag_name
$asset = $releaseData.assets | Where-Object { $_.name -like "*.exe" }
if (-not $asset) {
Write-Error "No executable asset found in the latest release: &apiUrl"
exit 1
}
Write-Host "Downloading QDT version $latestTag from $downloadUrl to $destinationFile"
$downloadUrl = $asset.browser_download_url
# Download the asset
$webClient = New-Object System.Net.WebClient
$webClient.Proxy = [System.Net.WebRequest]::DefaultWebProxy
$webClient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$webClient.DownloadFile($downloadUrl, $destinationFile)
# log it
Write-Host "Download successful! File saved as $destinationFile" -ForegroundColor Green
}
catch {
# If there's an error, output details
if ($null -ne $_.Exception.Response) {
$statusCode = $_.Exception.Response.StatusCode
$statusDescription = $_.Exception.Response.StatusDescription
Write-Error "API request failed with status code ${statusCode}: ${statusDescription}"
}
else {
Write-Error "An error occurred: $_"
}
}
# Run the downloaded executable with --help
Write-Host "Running qdt.exe with --help..."
#Start-Process -FilePath $destinationFile -ArgumentList "--help" -NoNewWindow -Wait
#Start-Process -FilePath $destinationFile -ArgumentList "--help" -Wait -WindowStyle Hidden
Start-Process -FilePath $destinationFile -ArgumentList "--help" -NoNewWindow -Wait