interface github {
    /// A GitHub release.
    record github-release {
        /// The version of the release.
        version: string,
        /// The list of assets attached to the release.
        assets: list<github-release-asset>,
    }

    /// An asset from a GitHub release.
    record github-release-asset {
        /// The name of the asset.
        name: string,
        /// The download URL for the asset.
        download-url: string,
    }

    /// The options used to filter down GitHub releases.
    record github-release-options {
        /// Whether releases without assets should be included.
        require-assets: bool,
        /// Whether pre-releases should be included.
        pre-release: bool,
    }

    /// Returns the latest release for the given GitHub repository.
    latest-github-release: func(repo: string, options: github-release-options) -> result<github-release, string>;
}
