From 3452f9c05737e54b5a811178b57bde53ed5d4ecb Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Wed, 26 Oct 2022 13:29:41 +0300 Subject: [PATCH 1/4] Create submit-windows-packages.yml Added `winget` update action on release --- .github/workflows/submit-windows-packages.yml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/submit-windows-packages.yml diff --git a/.github/workflows/submit-windows-packages.yml b/.github/workflows/submit-windows-packages.yml new file mode 100644 index 0000000000000..b7f39942e59af --- /dev/null +++ b/.github/workflows/submit-windows-packages.yml @@ -0,0 +1,23 @@ +name: Submit Windows packages +on: + release: + types: [published] + +env: + VERSION: "$(./scripts/version.sh)" + PACKAGE_FILE_NAME: coder_${env:VERSION}_windows_amd64_installer.exe + PACKAGE_ID: Coder.Coder # Most probably the id of coder package + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + + winget: + name: Publish winget package + runs-on: windows-latest + steps: + - name: Submit package to Windows Package Manager Community Repository + run: | + iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + $github = Get-Content '${{ github.event_path }}' | ConvertFrom-Json + $installerUrl = ${{ github.release.assets }} | Where-Object -Property name -match ${{ env:PACKAGE_FILE_NAME }} | Select -ExpandProperty browser_download_url -First 1 + .\wingetcreate.exe update ${{ env:PACKAGE_ID }} -s -v ${{ env.VERSION }} -u $installerUrl -t ${{ env.GITHUB_TOKEN }} From 461ffa0ae007a843d529bc5b6340dc0d98f71b94 Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Wed, 26 Oct 2022 13:42:34 +0300 Subject: [PATCH 2/4] Rename submit-windows-packages.yml to submit-windows-packages.yaml --- .../{submit-windows-packages.yml => submit-windows-packages.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{submit-windows-packages.yml => submit-windows-packages.yaml} (100%) diff --git a/.github/workflows/submit-windows-packages.yml b/.github/workflows/submit-windows-packages.yaml similarity index 100% rename from .github/workflows/submit-windows-packages.yml rename to .github/workflows/submit-windows-packages.yaml From 4e31f516f176c54174b8506754bc59b5c4137dab Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Thu, 27 Oct 2022 12:51:00 +0300 Subject: [PATCH 3/4] Added GITHUB_PAT Token A GitHub Personal Access token is required to submit packages to winget community repo. https://github.com/microsoft/winget-create/blob/main/doc/token.md Please create a token as shown here and store it as a secret in `GITHUB_PAT` --- .github/workflows/submit-windows-packages.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/submit-windows-packages.yaml b/.github/workflows/submit-windows-packages.yaml index b7f39942e59af..26418e61b460b 100644 --- a/.github/workflows/submit-windows-packages.yaml +++ b/.github/workflows/submit-windows-packages.yaml @@ -7,7 +7,7 @@ env: VERSION: "$(./scripts/version.sh)" PACKAGE_FILE_NAME: coder_${env:VERSION}_windows_amd64_installer.exe PACKAGE_ID: Coder.Coder # Most probably the id of coder package - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PAT: ${{ secrets.GITHUB_PAT }} jobs: @@ -20,4 +20,4 @@ jobs: iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe $github = Get-Content '${{ github.event_path }}' | ConvertFrom-Json $installerUrl = ${{ github.release.assets }} | Where-Object -Property name -match ${{ env:PACKAGE_FILE_NAME }} | Select -ExpandProperty browser_download_url -First 1 - .\wingetcreate.exe update ${{ env:PACKAGE_ID }} -s -v ${{ env.VERSION }} -u $installerUrl -t ${{ env.GITHUB_TOKEN }} + .\wingetcreate.exe update ${{ env:PACKAGE_ID }} -s -v ${{ env.VERSION }} -u $installerUrl -t ${{ env.GITHUB_PAT }} From 3fe4f5e4c0d4201329125fe95fd13bc224f6b450 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Tue, 1 Nov 2022 10:46:09 +0000 Subject: [PATCH 4/4] chore: use gh cli in winget automation, comment on PR --- .github/workflows/packages.yaml | 51 +++++++++++++++++++ .../workflows/submit-windows-packages.yaml | 23 --------- scripts/build_windows_installer.sh | 4 +- scripts/win-installer/installer.nsi | 3 ++ 4 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/packages.yaml delete mode 100644 .github/workflows/submit-windows-packages.yaml diff --git a/.github/workflows/packages.yaml b/.github/workflows/packages.yaml new file mode 100644 index 0000000000000..d5e86fea37d2d --- /dev/null +++ b/.github/workflows/packages.yaml @@ -0,0 +1,51 @@ +name: Submit Packages +on: + release: + types: [published] + +env: + CODER_VERSION: "${{ github.event.release.tag_name }}" + +jobs: + winget: + runs-on: windows-latest + steps: + - name: Install wingetcreate + run: | + Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + + # the package version is the same as the release tag without the leading + # "v", and with a trailing ".0" (e.g. "v1.2.3" -> "1.2.3.0") + - name: Calculate package version + id: version + run: | + $version = $env:CODER_VERSION -replace "^v", "" + $version += ".0" + echo "::set-output name=version::$version" + + - name: Submit updated manifest to winget-pkgs + run: | + $release_assets = gh release view --repo coder/coder "$env:CODER_VERSION" --json assets | ` + ConvertFrom-Json + + $installer_url = $release_assets.assets | ` + Where-Object name -Match ".*_windows_amd64_installer.exe$" | ` + Select -ExpandProperty url + + echo "Installer URL: $installer_url" + + # version should be extracted from the installer + wingetcreate update Coder.Coder ` + --submit ` + --version "${{ steps.version.outputs.version }}" ` + --urls "$installer_url" ` + --token "${{ secrets.CDRCI_GITHUB_TOKEN }}" + + - name: Comment on PR + run: | + # find the PR that wingetcreate just made + $pr_list = gh pr list --repo microsoft/winget-pkgs --search "author:cdrci Coder.Coder version ${{ steps.version.outputs.version }}" --limit 1 --json number | ` + ConvertFrom-Json` + $pr_number = $pr_list[0].number + + gh pr comment --repo microsoft/winget-pkgs "$pr_number" --body "🤖 cc: @deansheather" diff --git a/.github/workflows/submit-windows-packages.yaml b/.github/workflows/submit-windows-packages.yaml deleted file mode 100644 index 26418e61b460b..0000000000000 --- a/.github/workflows/submit-windows-packages.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: Submit Windows packages -on: - release: - types: [published] - -env: - VERSION: "$(./scripts/version.sh)" - PACKAGE_FILE_NAME: coder_${env:VERSION}_windows_amd64_installer.exe - PACKAGE_ID: Coder.Coder # Most probably the id of coder package - GITHUB_PAT: ${{ secrets.GITHUB_PAT }} - -jobs: - - winget: - name: Publish winget package - runs-on: windows-latest - steps: - - name: Submit package to Windows Package Manager Community Repository - run: | - iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe - $github = Get-Content '${{ github.event_path }}' | ConvertFrom-Json - $installerUrl = ${{ github.release.assets }} | Where-Object -Property name -match ${{ env:PACKAGE_FILE_NAME }} | Select -ExpandProperty browser_download_url -First 1 - .\wingetcreate.exe update ${{ env:PACKAGE_ID }} -s -v ${{ env.VERSION }} -u $installerUrl -t ${{ env.GITHUB_PAT }} diff --git a/scripts/build_windows_installer.sh b/scripts/build_windows_installer.sh index f7ddbd4b3653e..3b4d15a3cee9c 100755 --- a/scripts/build_windows_installer.sh +++ b/scripts/build_windows_installer.sh @@ -67,7 +67,9 @@ fi # Remove the "v" prefix and ensure the version is in the format X.X.X.X for # makensis. nsis_version="${version//-*/}" -nsis_version+=".$(date -u +%Y%m%d%H%M)" +# Each component of a version must be a 16 bit integer, so we can't store any +# useful information like build date or commit SHA in the 4th component. +nsis_version+=".0" # Check dependencies dependencies makensis diff --git a/scripts/win-installer/installer.nsi b/scripts/win-installer/installer.nsi index ae9c5593f2b8b..6a14f7f04ecaa 100644 --- a/scripts/win-installer/installer.nsi +++ b/scripts/win-installer/installer.nsi @@ -2,6 +2,9 @@ # adapted to Coder's needs: # https://www.conjur.org/blog/building-a-windows-installer-from-a-linux-ci-pipeline/ +# Since we only build an AMD64 installer for now, ensure that the generated +# installer matches so wingetcreate can sniff the architecture properly. +CPU amd64 Unicode true !define APP_NAME "Coder"