Scoop icon indicating copy to clipboard operation
Scoop copied to clipboard

Print changelog when updating

Open alejandro5042 opened this issue 7 years ago • 14 comments

Would be great to print changelog notes for the apps you're updating! Perhaps as a --changelog, -c option. Many projects publish a changelog.txt or GitHub release notes or similar.

alejandro5042 avatar Feb 28 '18 23:02 alejandro5042

Maybe there could be a manifest option for a CHANGELOG url?

dsbert avatar Mar 01 '18 16:03 dsbert

@alejandro5042 Do you mean the changelog of a program or a changelog of updated manifest files? Scoop is updating itself, so the only way to show a changelog for manifest files is by passing the output of git pull to the console. Showing the changelog of a program is out of scope, I think. Adding a property to the manifest with a link to the programs changelog would be okay I guess.

r15ch13 avatar Mar 01 '18 17:03 r15ch13

I did mean the changelog of the programs being updated.

Adding a property to the manifest with a link to the programs changelog would be okay I guess.

I can imagine parsing changelogs is out of scope. How about a --changelog option that opens a browser to the changelog URL if the program updated? That way you can scan what's new very easily.

This is what I'm doing, but by hand, today.

alejandro5042 avatar Mar 01 '18 23:03 alejandro5042

It would be nice to see the shortened version of the changelog of each item (or a link to the changelog) in the output of scoop status command. This is the command I use to see what has updates pending, so it would make it easier to decide whether I should update or skip the currently version of each program.

harvastum avatar Apr 05 '22 09:04 harvastum

The changelog for applications is usually a single HTML page or a file, I'm not sure how you would extract the changes for the most recent release, for each different app.

rashil2000 avatar Apr 05 '22 10:04 rashil2000

I think the changelog/release notes link is a great start.

Projects like https://github.com/renovatebot/renovate/ do changelog parsing, but I'm guessing there's a whole set of tools built up around changelog parsing for them.

dsbert avatar Apr 05 '22 13:04 dsbert

A link to the changelog would indeed make things much more smooth. Also, maybe it's an opportunity to encourage developers to start using some standardized form of changelogs? A quick google search yields this: https://keepachangelog.com/en/1.0.0/

harvastum avatar Apr 05 '22 13:04 harvastum

Adding a "changelog": "https://link/to/changelog" property in the manifest seems like a doable idea

rashil2000 avatar Apr 05 '22 13:04 rashil2000

I second this feature -> Adding a "changelog": "https://link/to/changelog" property in the manifest seems like a doable idea Also, printing out a line with the link to the conole-log during scoop-install/update is also a good idea. For the interested user, it saves time/effort involved with google search and a few clicks. Scoop doesn't have to webcrawl/extract/store any changelog info itself.

Example:

Updating 'ventoy' (1.0.76 -> 1.0.77)
Downloading new version
ventoy-1.0.77-windows.zip (15.2 MB) [=========================================================================] 100%
Checking hash of ventoy-1.0.77-windows.zip ... ok.
Uninstalling 'ventoy' (1.0.76)
Unlinking C:\vol\scoop_01\SCOOPG\apps\ventoy\current
Installing 'ventoy' (1.0.77) [64bit]
Loading ventoy-1.0.77-windows.zip from cache
Extracting ventoy-1.0.77-windows.zip ... done.
Running pre_install script...
Linking C:\vol\scoop_01\SCOOPG\apps\ventoy\current => C:\vol\scoop_01\SCOOPG\apps\ventoy\1.0.77
Creating shortcut for Ventoy2Disk (Ventoy2Disk_X64.exe)
Creating shortcut for VentoyPlugson (VentoyPlugson.exe)
Creating shortcut for VentoyVlnk (VentoyVlnk.exe)
Persisting log.txt
Persisting Ventoy2Disk.ini
See changelog at https://github.com/ventoy/Ventoy/releases/
ventoy' (1.0.77) was installed successfully!

There doesn't always have to be a changelog file, a link that opens in a browser that is close-enough for a user to click/scroll and find whatever info a user wants. For those softwares that don't have a CHANGELOG file or release-changes page, the next nearest thing like an official-webpage describing version updates would do.

hgkamath avatar Jun 20 '22 14:06 hgkamath

A message displaying "See what's new in this update: https://link/to/changelog" when the update happens seems to be a nice idea.

Would you like to work on this feature? It will mostly require a change in the JSON schema.

rashil2000 avatar Jun 20 '22 15:06 rashil2000

I like the idea, but sometimes I want to know what I'm getting before I actually perform an update. Please also consider adding the ability to view the changelog links without updating. For example, to scoop status, possibly behind a flag if you don't want to change the default output.

Thanks

dsbert avatar Jun 20 '22 16:06 dsbert

I'd like to work on this, but I can't guarantee the quality of the code, so anyone else who wants to work on this can do it in sync.

cesaryuan avatar Jan 07 '23 09:01 cesaryuan

I write a simple script to Get-Changelog by leveraging gh and glow. It does not solve this issue, but can be used as a workaround.

https://gist.github.com/YDX-2147483647/f8c11c3355f0e9d2aaa8c63926edde08

<#
.SYNOPSIS
    Get changelog of an app in scoop
.NOTES
    Prerequisites:
    - [scoop](https://scoop.sh).
    - [gh](https://cli.github.com) to interact with GitHub API.
    - [glow](https://github.com/charmbracelet/glow) to render markdown.
.EXAMPLE
    Get-Changelog gh

    Get changelog of gh.
.EXAMPLE
    Get-Changelog gh -Verbose

    Get changelog of gh and show the specific source.
.EXAMPLE
    Get-Changelog just -From File

    Get changelog of just from the `CHANGELOG.md` file in its repo.
.EXAMPLE
    Get-Changelog main/glow

    Get changelog of glow in the main bucket.
.LINK
    https://github.com/ScoopInstaller/Scoop/issues/2067
.LINK
    https://gist.github.com/YDX-2147483647/f8c11c3355f0e9d2aaa8c63926edde08
#>
function Get-Changelog {
    param (
        # An app in scoop. It will be passed to `scoop cat` directly.
        [Parameter(Mandatory = $true)]
        [string] $App,
        # Where to fetch the changelog.
        # - Release: From the GitHub release. (default)
        # - File: From the `CHANGELOG.md` in its repo.
        [ValidateSet("Release", "File")]
        [string] $From = "Release"
    )

    $manifest = scoop cat $App | ConvertFrom-Json

    $github_url = if ($manifest.checkver -eq 'github') {
        [string]$manifest.homepage
    }
    elseif ($null -ne $manifest.checkver.github) {
        [string]$manifest.checkver.github
    }
    else {
        throw "Cannot find GitHub URL for `“$App`”. You can ``scoop home $App`` to open its homepage for changelog, or ``scoop cat $App`` to debug."
    }

    switch ($From) {
        "Release" {
            Write-Verbose "Fetching changelog of $App v$($manifest.version) from the release of ${github_url}."
            gh release view --repo $github_url
        }
        "File" {
            Write-Verbose "Fetching changelog of $App v$($manifest.version) from CHANGELOG.md in ${github_url}."

            $owner_repo = $github_url.Replace('https://github.com/', '')

            $changelog = gh api -H "Accept: application/vnd.github.raw" -H "X-GitHub-Api-Version: 2022-11-28" /repos/${owner_repo}/contents/CHANGELOG.md
            $changelog | glow -
        }
        Default {
            throw "Fetching changelog from `“$From`” is not supported."
        }
    }
}

YDX-2147483647 avatar Dec 24 '23 09:12 YDX-2147483647

just a scoop user here.
YDX-2147483647, thanks for the script, will note it and it will be useful someday.

Just fyi, the git log of the scoop manifest file for a given software, may contain info on what changed in the manifest file itself like file-name, file-version, file-download-location, etc, provided the scoop package manifest maintainer considers it not trivial enough to note. It may not necessarily contain information of what software features have changed/improved in the installed software itself, unless the scoop package manifest maintainer went out of the way to include the software-changes changelog as part of the commit log for the manifest update. The changelog info-link, desire for which is expressed in issuecomment-1160539800, refers to the URL location/webpage that has the changelog information that is maintained and announced by the developers of the software itself.

[EDIT] I was re-reading your script, and I came to understand that your script fetches the CHANGELOG.md file from the software's actual git repo itself or its associated github-release page. That's good. However, it still does require the software developers to use a publicly available git repo and also, within the repo have and maintain a CHANGELOG.md file. Not all do.
Some just maintain the changelog externally :
in a webpage. ex: https://bugs.kde.org/show_bug.cgi?id=471162
in the github release description. ex: https://github.com/Zettlr/Zettlr/releases (for which you have a option)
Some use different changelog filename: CHANGELOG.txt vs CHANGELOG.md
May use a different git repo provider like gitlab, cgit, launchpad etc

nevertheless, thankyou for your contribution.

hgkamath avatar Dec 25 '23 04:12 hgkamath