aaronparker / evergreen

Create evergreen Windows image build pipelines with the latest version numbers and download URLs for common applications
http://stealthpuppy.com/evergreen/
MIT License
369 stars 63 forks source link

[New app]: OpenSSL #626

Open AScott-WWF opened 6 months ago

AScott-WWF commented 6 months ago

What is the new application?

OpenSSL is a widely used SSL security component in a number of products The purpose of adding this App to Evergreen is primarily for reporting purposes (although the download for the latest version could be useful for developers "openssl-*.tar.gz") OpenSSL publish all the latest releases on both their downloads page (https://www.openssl.org/source/) and on GitHub (https://api.github.com/repos/openssl/openssl/releases) As (currently) OpenSSL keep 3 different versions of their products available (v3.0.x, v3.1.x and v3.2.x) it would not (IMHO) be possible to use the 'latest' version via the Github API (https://api.github.com/repos/openssl/openssl/releases/latest) as this would only show the latest v3.2.x version I'm wondering if it is possible to get all the OpenSSL releases from the API (https://api.github.com/repos/openssl/openssl/releases), then sort by version number and filter the top version of each?

I did attempt to create a Get-OpenSSL.ps1 (App) and OpenSSL.json (Manifest) but found I got no results. Get-OpenSSL.ps1:

Function Get-OpenSSL {
    <#
        .SYNOPSIS
            Returns the latest OpenSSL version numbers and downloads.

        .NOTES
            Author: Adrian Scott
    #>
    [OutputType([System.Management.Automation.PSObject])]
    [CmdletBinding(SupportsShouldProcess = $False)]
    param (
        [Parameter(Mandatory = $False, Position = 0)]
        [ValidateNotNull()]
        [System.Management.Automation.PSObject]
        $res = (Get-FunctionResource -AppName ("$($MyInvocation.MyCommand)".Split("-"))[1])
    )

    # Pass the repo releases API URL and return a formatted object
    $params = @{
        Uri          = $res.Get.Uri
        MatchVersion = $res.Get.MatchVersion
        Filter       = $res.Get.MatchFileTypes
    }
    $object = Get-GitHubRepoRelease @params
    Write-Output -InputObject $object
}

OpenSSL.json:

{
    "Name": "OpenSSL",
    "Source": "https://www.openssl.org/source/",
    "Get": {
        "Uri": "https://api.github.com/repos/openssl/openssl/releases/latest",
        "MatchVersion": "openssl-(\\d+(\\.\\d+){1,4}).*",
        "MatchFileTypes": "\\.tar\\.gz$"
    },
    "Install": {
        "Setup": "openssl-*.tar.gz",
        "Preinstall": "",
        "Physical": {
            "Arguments": "/S",
            "PostInstall": []
        },
        "Virtual": {
            "Arguments": "/S",
            "PostInstall": []
        }
    }
}

Vendor site

https://www,openssl.org

Does the vendor require a sign-in to download the app?

No

Does the application include an updater?

No

Have you reviewed the list of supported applications?

DanGough commented 6 months ago

BTW ShiningLight make EXE/MSI builds for this rather than relying on just the zips:

https://slproweb.com/products/Win32OpenSSL.html

Also they have a JSON file with download links and hashes:

https://raw.githubusercontent.com/slproweb/opensslhashes/master/win32_openssl_hashes.json

aaronparker commented 6 months ago

@AScott-WWF no releases are returned because the .tar.gz file is not included in the releases. These files are just a rollup of the entire repo.

aaronparker commented 6 months ago

-ReturnVersionOnly could be used to return the version number from the OpenSSL repo, and then hardcode URLs with text replacement in the JSON.

Otherwise, go with the Shining Light version because the OpenSSL version requires compiling anyway, so not usable for most administrators.