From 0146fdb434f64572bdabbd15926ef7eb869c5713 Mon Sep 17 00:00:00 2001 From: Alphrag <34252790+Alphrag@users.noreply.github.com> Date: Sun, 17 Jul 2022 04:56:16 +0530 Subject: Create winget updater GH workflow (#484) --- .github/workflows/winget-bucket-update.yml | 135 +++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 .github/workflows/winget-bucket-update.yml (limited to '.github') diff --git a/.github/workflows/winget-bucket-update.yml b/.github/workflows/winget-bucket-update.yml new file mode 100644 index 000000000..88314fb43 --- /dev/null +++ b/.github/workflows/winget-bucket-update.yml @@ -0,0 +1,135 @@ +name: Update Ferdium package on winget + +on: + workflow_dispatch: + inputs: + message: + description: "Channel to update" + required: false + release: + types: [published] + +env: + REPO_URL: https://api.github.com/repos/ferdium/ferdium-app/releases + +jobs: + manual_winget_update: + runs-on: windows-latest + name: "Manual winget update: ${{ github.event.inputs.message }}" + if: ${{ github.event_name == 'workflow_dispatch' }} + steps: + - name: "Install winget" + # cf https://github.com/actions/virtual-environments/issues/910#issuecomment-1009640391 + # TODO: update urls to get more updated version + run: | + $ErrorActionPreference = 'Stop' + + iwr $(iwr 'https://store.rg-adguard.net/api/GetFiles' -Method 'POST' -ContentType 'application/x-www-form-urlencoded' -Body 'type=PackageFamilyName&url=Microsoft.VCLibs.140.00_8wekyb3d8bbwe&ring=RP&lang=en-US' -UseBasicParsing | Foreach-Object Links | Where-Object outerHTML -match 'Microsoft.VCLibs.140.00_.+_x64__8wekyb3d8bbwe.appx' | Foreach-Object href) -OutFile $env:TEMP\vclibs.appx + iwr $(iwr 'https://store.rg-adguard.net/api/GetFiles' -Method 'POST' -ContentType 'application/x-www-form-urlencoded' -Body 'type=PackageFamilyName&url=Microsoft.VCLibs.140.00.UWPDesktop_8wekyb3d8bbwe&ring=RP&lang=en-US' -UseBasicParsing | Foreach-Object Links | Where-Object outerHTML -match 'Microsoft.VCLibs.140.00.UWPDesktop_.+_x64__8wekyb3d8bbwe.appx' | Foreach-Object href) -OutFile $env:TEMP\vclibsuwp.appx + iwr 'https://github.com/microsoft/winget-cli/releases/download/v1.1.12653/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' -OutFile $env:TEMP\winget.msixbundle + iwr 'https://github.com/microsoft/winget-cli/releases/download/v1.1.12653/9c0fe2ce7f8e410eb4a8f417de74517e_License1.xml' -Outfile $env:TEMP\winget.license + + Add-AppxProvisionedPackage -Online -PackagePath $env:TEMP\winget.msixbundle -LicensePath $env:TEMP\winget.license -DependencyPackagePath @("$env:TEMP\vclibs.appx", "$env:TEMP\vclibsuwp.appx") + - name: "Verify winget" + run: | + winget --info + - name: "Get release tag" + run: | + if ("${{ contains(github.event.inputs.message, '[nightly]') }}" -eq $True) { + $preRel = $True + $tagInc = "nightly" + $package = "Ferdium.Ferdium.Nightly" + } + elseif ("${{ contains(github.event.inputs.message, '[beta]') }}" -eq $True) { + $preRel = $True + $tagInc = "beta" + $package = "Ferdium.Ferdium.Beta" + } + else + { + $preRel = $False + $tagInc = "" + $package = "Ferdium.Ferdium" + } + $release=Invoke-RestMethod -Uri '${{ env.REPO_URL }}' + $lastCorrectTag = $release | Where-Object -Property prerelease -eq $preRel | Where-Object -Property tag_name -match $tagInc | Select -First 1 | Select -ExpandProperty tag_name + $lastVersion = $($lastCorrectTag.Trim('v')) + + echo "last_tag=$lastCorrectTag" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + echo "last_version=$lastVersion" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + echo "PACKAGE_NAME=$package" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + + - name: "Verify if version already exist on winget" + run: | + $lastVersion = '${{ env.last_version }}' + $versions = winget show --id '${{ env.PACKAGE_NAME }}' --versions --accept-source-agreements + if ( $versions.Contains('${{ env.last_version }}') ) { + echo "version_exists='true'" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + } + + - name: "Publish update" + if: ${{ env.version_exists != 'true' }} + run: | + $release=Invoke-RestMethod -Uri '${{ env.REPO_URL }}' + $assets = $release | Where-Object -Property tag_name -match '${{ env.last_tag }}' | Select -First 1 | Select -ExpandProperty assets + + $urlSetup64 = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-x64.exe' | Select -ExpandProperty browser_download_url + $urlSetup86 = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-ia32.exe' | Select -ExpandProperty browser_download_url + $urlSetupArm = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-arm64.exe' | Select -ExpandProperty browser_download_url + + $installerUrls = "'$urlSetup64|x64' '$urlSetup86|x86' '$urlSetupArm|arm64'" + Write-Host "urls to use: $installerUrls" + + $package = '${{ env.PACKAGE_NAME }}' + $ghToken = '${{ secrets.FERDIUM_WINGET_PAT }}' + + iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + + # TODO: remove -o and add -s + $command = ".\wingetcreate.exe update $package -v '${{ env.last_version }}' -u $installerUrls -t $ghToken -o .\" + Write-Host $command + Invoke-Expression $command + + + winget_release: + name: "Update winget after publish: ${{ github.event.inputs.message }}" + if: ${{ github.event_name == 'release' }} + runs-on: windows-latest + steps: + - name: Check release type + run: | + PRERELEASE_VERSION="${{ github.event.release.prerelease == 'true' }}" + + if [[ $PRERELEASE_VERSION == "true" && ${{ contains(github.event.release.tag_name, 'nightly') }} ]]; then + # use the nightly version + PACKAGE_NAME="Ferdium.Ferdium.Nightly" + elif [[ $PRERELEASE_VERSION == "true" && ${{ contains(github.event.release.tag_name, 'beta') }} ]]; then + PACKAGE_NAME="Ferdium.Ferdium.Beta" + else + PACKAGE_NAME="Ferdium.Ferdium" + fi + echo "Using package $PACKAGE_NAME with pre-release $PRERELEASE_VERSION" + echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV + shell: bash + - name: Send update to winget + run: | + iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + + $ghobject = Get-Content '${{ github.event_path }}' | ConvertFrom-Json + $assets = $ghobject.release.assets + + $urlSetup64 = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-x64.exe' | Select -ExpandProperty browser_download_url + $urlSetup86 = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-ia32.exe' | Select -ExpandProperty browser_download_url + $urlSetupArm = $assets | Where-Object -Property name -CLike '*-win-AutoSetup*-arm64.exe' | Select -ExpandProperty browser_download_url + + $installerUrls = "'$urlSetup64|x64' '$urlSetup86|x86' '$urlSetupArm|arm64'" + Write-Host "urls to use: $installerUrls" + + $version = $ghobject.release.tag_name + $package = '${{ env.PACKAGE_NAME }}' + $ghToken = '${{ secrets.FERDIUM_WINGET_PAT }}' + + # TODO: remove -o and add -s + $command = ".\wingetcreate.exe update $package -v $($version.Trim('v')) -u $installerUrls -t $ghToken -o .\" + Write-Host $command + Invoke-Command $command -- cgit v1.2.3-54-g00ecf